A family of IoT products
based on the i.MX6 processor

The uniform family of products (repeaters, converters, etc) was developed as the basis for many different solutions. By planning for universality from the very beginning of hardware design and ensuring flexibility in the process of configuring the system kernel, we can implement many new tasks with minimal further work.

Many projects are based on the assumption of optimization for one, specifically defined task. One-track solutions are selected to eliminate costs, unfortunately at the cost of difficult development and lack of flexibility. Sometimes you need a completely different approach and versatility, which may be the key to taking the development process to a completely new level.
IDO Electronics can focus on the universality of the fundamental stages of manufactured devices. The main assumption is to develop a uniform system for implementing subsequent tools that constitute the basis for many different solutions. Following this proven methodology will dramatically increase the pace of implementation and ensure the stability of a project in any phase of development.


We prepare the database of the entire family of electronic devices for interchangeable assembly of individual components. Instead of one physical implementation of the interface, another one can be installed, depending on emerging needs. Just make a simple change to the production documentation (BOM) and produce the selected hardware variant.

The common part representing our product line is the NXP i.MX6 processor based on the Arm Cortex®-A7 core. This is an integrated circuit ideal for implementing multimedia projects with wide functionality. Thanks to integrated support for many different interfaces, it allows you to build a family of devices without the need to redesign them from scratch. Depending on the application, we can choose a processor variant that performs a specific set of tasks from several available options.

  • Memory: LP DDR2, DDR3, DDR3L, NAND flash, NOR flash, eMMC.
  • Peripheral interfaces: SPI, Quad SPI, I2C, PWM, ADC/DAC, CAN, USB OTG, UART, indirect RS232/485.
  • Network interfaces: Ethernet, WLAN, Bluetooth™, GPS.
  • Integrated support:  displays, sensors, image converters.


U-Boot stands for Universal Boot Loader. The name of this software itself indicates its flexibility. It allows you to load the system kernel from commonly used data media, e.g. SATA, flash, USB pendrive or SD card. It is adapted to support various file systems. Additionally, our bootloader has been enriched with the ability to upload a system image in OTA network mode – TFTP/NFS. In the same way, we perform automatic U-Boot updates for devices with Internet access.

Holding the button on the board or pressing any key while starting the device interrupts the automatic boot process. Communication with the bootloader is output to the serial port, enabling its further operation. Basic data exchange takes place using the default configuration, which means a throughput of 115200 bit/s, 8 data bits, no flow control, and no parity bit. U-boot supports input devices connected to the USB port and has implemented support for displays and monitors, so there is no need to place ready-made execution scripts on the image media or connect an additional computer to enable communication.
Importantly, the bootloader works regardless of the hardware version it supports. Additionally, it performs the function of recognizing the hardware configuration of a given product variant. The processor communicates with individual chips, thereby creating a compatibility reference point for the system image to be loaded.


The system kernel requires appropriate configuration for a specific hardware solution. To achieve this, we create a Device Tree structure, i.e. a summary of data used to describe the hardware configuration. By defining the peripherals needed for the proper operation of the system in its own resources, we ensure the universality of the low-level bootloader software.
The further Kernel configuration process involves adding hardware drivers, most often compiled as kernel modules. Many processes are also optimized for the resources of a specific computing unit. We configure the network, ports, peripherals and file system that controls the flow and structure of data. The kernel is the main part of the operating system responsible for providing resources to all higher processes. Due to its purpose, it contains the most important instructions requiring access to all memory areas and commands. Appropriate configuration ensures the stability of the entire device.

In the process of building the system environment, we use and develop flexible tools that create our toolchain. Depending on the project needs, we modify the libraries, cross-compiler or debugger separately, and sometimes we decide on ready-made comprehensive solutions such as Buildroot/Yocto. A carefully organized Kernel configuration procedure allows us to very efficiently implement subsequent projects from the same family of devices.


By planning for universality from the very beginning of hardware design and ensuring flexibility in the process of configuring the system kernel, we can implement many new tasks with minimal further work. Depending on the final purpose of the system, we select the appropriate system distribution or, if necessary, we build our own, tailored to specific tasks. For this purpose, we most often use the available resources of the Yocto project, which provides a set of tools for creating custom versions of the operating system. The flexibility of the remaining design steps allows you to ensure compatibility with a wide set of distributions.
Separation of kernel areas and user space ensures security and improves stability. Application processes are mainly performed in the user space area. This eliminates the direct impact of program errors and defects on the operation of the operating system. Also at this stage of the entire project, we ensure the universality of our tools. The applications and high-level drivers we create are independent of the target distribution and work correctly on many different platforms.

This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.