CC Blog Design Solutions

Evaluating EDATEC’s Line of Industrial Modules

FIGURE 1 This is a front view of the unit showing all of the terminal blocks, which are used to connect the various I/O devices. There is a power LED and an activity LED, as well as a recessed Reset switch.
Written by Brian Millier

Based On the Raspberry Pi Compute Module 4

After a few years during which all Raspberry Pi boards were unavailable to me, I was interested in getting my hands on a line of modules made by EDATEC that are based on the Raspberry Pi CM4 module. Here’s the review.

  • What are the features of EDATEC’s CM4 Industrial module?
  • What are possible drawbacks of EDATEC’s CM4 Industrial module?
  • How can I use the CM4 Industrial?

EDATEC is a Raspberry Pi partner that manufactures a broad line of industrial and Internet-of-Things (IoT) units that are all based on the Raspberry Pi Compute Module 4 (CM4). This module contains a Broadcom BCM2711 quad-core Cortex-A72 (ARM v8) 64-bit CPU plus supporting circuitry. Using the CM4 System-on-Module (SoM) as the CPU/memory is a good choice. Since there is a huge base of Raspberry Pi users, there’s an abundance of Linux applications, drivers, and technical assistance available for this platform.

When I was approached by EDATEC to evaluate one or more of their CM4-based products, my ears perked up immediately. I had worked with the original Raspberry Pi board introduced in 2012, all the way up to the Raspberry Pi 4. But, for the last few years, neither the Raspberry Pi 4 nor the CM4 module were available to individual users like me, due to manufacturing supply chain issues. I understand that the supply bottleneck is easing up this summer, and CM4 modules must be getting out to the manufacturers of industrial/commercial products. Therefore, I was interested in trying out the CM4 modules that had been unavailable to me until now.

In this column, I’ll specifically look at EDATEC’s CM4 Industrial Module. However, there are a number of similar units available that are variations on the Industrial unit, which contain different peripherals to better suit different applications (Sensing, ED-IPC2200, and so on).

Figure 1 is a photo of the front panel of the CM4 Industrial module. In the foreground, you can see that it is fitted with a DIN rail mount which is detachable. All of the input/output connections are made using detachable terminal blocks with 2.5mm pin spacing. Two antennas are shown here: one is for Wi-Fi/Bluetooth, and the other is for a cellular modem. Both Wi-Fi/Bluetooth and cellular are optional. A recessed Reset switch is present, as are two LEDs to indicate power and program memory access.

This is a front view of the unit showing all of the terminal blocks, which are used to connect the various I/O devices. There is a power LED and an activity LED, as well as a recessed Reset switch.
This is a front view of the unit showing all of the terminal blocks, which are used to connect the various I/O devices. There is a power LED and an activity LED, as well as a recessed Reset switch.

Figure 2 shows the rear panel of the unit. Power (nominally 12V) is supplied through the barrel socket. Two ethernet ports are standard: one is 1000Mb/s and the other is 10/100Mb/s. The 1000Mb/s port is handled by the CM4 module directly. The 10/100 Mb/s connection is supplied by the LAN9500A USB2 to 10/100 Ethernet controller, fed by an LD36500A USB hub chip. This hub chip also handles the two USB2 sockets shown in Figure 2.

This is the rear view of the unit. This contains two USB, two Ethernet, and an HDMI port that are normally used to connect to a keyboard, monitor, and network connections.
This is the rear view of the unit. This contains two USB, two Ethernet, and an HDMI port that are normally used to connect to a keyboard, monitor, and network connections.

The Industrial contains a single HDMI video port. It’s rated for 4K operation and, while it’s unlikely to be used this way in an industrial setting, I tried it out on my 4K computer monitor and it worked properly. For industrial purposes, it’s more likely that a smaller TFT panel would be needed. This module contains the standard DSI connector found on the Raspberry Pi boards, and which is compatible with the official Raspberry Pi TFT touchscreen display. It also contains a separate FPC HDMI connector which supports a second HDMI screen plus a USB-based touch controller. These two connectors would only be readily accessible if you purchased the CM4 Industrial without an enclosure and custom-housed it yourself.

There are slots available on the back panel to accommodate a µSD card as well as a SIM card. While the slots/sockets will be present on all models, they are only operational in the following scenarios:

  • The µSD socket can only be used when eMMC memory is not mounted as the system Flash memory. You can’t use both.
  • The SIM card is only active if you have installed a 4G/LTE modem module.

I like the fact that the CM4 Industrial can be purchased with 8, 16, or 32GB of eMMC flash (as well as an option with no eMMC, but using a µSD card for program memory). Early adopters of the Raspberry Pi sometimes experienced SD card corruption when power was removed unexpectedly from the Raspberry Pi. While the Raspberry Pi OS has improved somewhat in this regard, the problem still exists that µSD cards, even when labeled with reputable brand names, can be poor-quality clones. The eMMC memory is more reliable.

The CM4 Industrial can be ordered with 1, 2, 4, or 8GB of RAM memory. Actually, Flash size, RAM size, and Wi-Fi/Bluetooth functionality are all dependent upon which CM4 module is mounted in the unit. As the CM4 is a socketed device and is available from Raspberry Pi distributors/retailers, it would certainly be possible to upgrade a CM4 Industrial module post-purchase, if needed.

The CM4 Industrial comes in a steel enclosure with a reasonable amount of cooling vents. The CPU and other heat-producing chips contained on the CM4 SoM are coupled to this steel enclosure via thermal pads. There is no fan included with this unit, although there is an adjustable speed fan control circuit on the PCB and a 3-pin socket for a tachometer fan. The CM4 Industrial is available without an enclosure and presumably that is when the fan and controller might be utilized. I was only able to test the unit in my office, which has seen ambient temperatures in the high 20s Celsius due to our hot summer weather. The steel enclosure did not seem to get much hotter than the ambient room temperature under normal operating conditions, and the CPU temperature widget on my toolbar showed CPU temperatures in the high 40s Celsius. In contrast, the EDATEC CM4 Media module, which is enclosed in a small CNC-machined aluminum case, gets pretty warm to the touch. However, its CPU temperatures are comparable to what I see on the CM4 Industrial.

At the other temperature extreme, there are two different CM4 Industrial model variations: one for 0°C → 50°C and another for –25°C → 50°C.

Earlier, I mentioned that the CM4 Industrial module is powered by 12V via a barrel socket. I used the ED-PSU1202 DC adapter module that was sent along with the CM4 Industrial. This supplies 12V at 2A. Earlier versions of the CM4 Industrial (V1.1 to V1.3) were rated for an input range of 9V-18V. However, 24V is commonly used in industry, so the newer versions (V1.4 onward) are now rated for 9V-36V. The unit I received came in a box showing exactly what options were present (memory, Wi-Fi, cellular), but neither the box nor the unit’s enclosure contained either a serial number or the hardware version number. However, the revision level is clearly shown on the PCB itself. Figure 3 is a photo of the top of the CM4 Industrial’s PCB; the revision number is located to the right of the A26 socket. The purpose of each of the Axx legends is described in section 1.4 of the user manual [1]. The CM4 Industrial module’s power supply is capable of providing a 5V at 1A output on the 2-pin header labeled A24.

This is the top side of the PCB. The “Axx” labels are described in section 1.4 of the User Manual.
This is the top side of the PCB. The “Axx” labels are described in section 1.4 of the User Manual.

When I checked, all of EDATEC’s CM4 modules contained a Mini PCIe socket. This can be used to add a cellular modem or SSD. I was in an unusual position because I received both a CM4 Industrial and a CM4 Media unit, and it’s unlikely any one customer would order both. While reading the Media’s documents, I noticed that it could handle an SSD with a Mini PCIe interface. After ordering such an SSD, I discovered that the CM4 Industrial unit can handle a cellular modem in this Mini PCIe socket, but not an SSD. This seemed unusual to me, but the CM4 Media block diagram shows the Mini PCIe socket connected to the BCM2711’s PCIe bus via a USB3 hub with an mSATA port. In the case of the Industrial, the PCIe socket connects to the BCM2711’s PCIe port directly. In any case, the new SSD I purchased works fine in the CM4 Media.


The CM4 Industrial module comes with the following standard I/O ports:

  • Two channels of Digital Input (optically isolated)
  • One Digital Output (DPDT relay 125V, 1.5A contacts)
  • RS-232 Serial port (±5V signal levels)
  • Two RS-485 ports (half-duplex)
  • One ADC (TI ADS1015 with three of four channels available)
  • Two CSI Camera ports (supports official Raspberry Pi 5/8/12 Megapixel cameras)
  • One HDMI port (4K-capable)
  • HDMI port via an FPC socket with I2C port for touchscreen controller
  • One DSI display port
  • Two externally-accessible USB 2.0 type A ports
  • Raspberry Pi standard 40-pin GPIO connector (on the internal PCB)

There is an additional Micro USB socket, accessible only with the enclosure removed. This is used solely to program the eMMC flash (assuming the CM4 module contains eMMC). This should be hidden, as you don’t want a port that can reprogram Flash to be readily observable or accessible.

Having a few more USB ports might be useful—there are two header footprints on the PCB: USB6 on A12 and USB5 on A13 (Figure 3). I wired up header pins and a cable to these footprints, and these extra USB ports worked fine.

Let’s take a closer look at the I/O targeted for Industrial purposes. The system diagram in the user manual gives a block diagram of all of the circuitry in the CM4 Industrial. I wasn’t supplied with a schematic diagram, but a close inspection of the board allowed me to draw Figure 4, which shows what ICs are used for these I/O ports, as well as which BCM2711 port drives them.

This is a block diagram of the CM4 Industrial’s input/output ports showing what chips are used for each function. I don’t show the ports used to connect up to USB devices or an HDMI monitor.
This is a block diagram of the CM4 Industrial’s input/output ports showing what chips are used for each function. I don’t show the ports used to connect up to USB devices or an HDMI monitor.

The CM4 Industrial datasheet lists part numbers 2EDGR-2.5-XP/15EDGRC-2.5-XXP – 14-00AH for the various input/output removable terminal blocks on the front panel (where X or XX are the number of terminals). The unit comes complete with these pluggable terminal blocks. The sockets and pluggable terminal blocks are made by Degson and have a spacing of 2.5mm between pins. The supplied terminal blocks have pushbuttons that, when pressed, allow the wire to be fully inserted and locked in. I believe that the part number quoted above is a combination of both the socket and pluggable terminal block, but I couldn’t find that exact number for the terminal blocks on Degson’s site. However, Degson does carry 15EDGK-2.5-XXP-10020000066 parts that are identical to the terminal blocks supplied with the CM4 Industrial (again, the XX is the number of wire terminals contained in the block).

Digital Inputs: Each of the two digital inputs consists of a TLP185 optocoupler connected to a specific BCM2711 GPIO pin. The Digital Input connector contains six pins, two of which are +12V and Ground. You can use this 12V supply, along with switches and so on, to drive the TLP185 opto-coupler. While EDATEC shows a resistor divider network, as shown in Figure 4, they didn’t provide any resistance values. They did state that a voltage of 3V or greater across the DI+, DI- terminals will activate the optocoupler, but not much else. I wanted to know more, so I performed some actual measurements and determined that the equivalent internal resistance in series with the TLP was about 470Ω. I also found that 4V (not 3V as stated) was needed across DI+/DI- to activate the TLP185 in my unit. Given the TLP185 datasheet and the approximate 470Ω internal current-limit resistors, you can calculate what size external current-limiting resistor would be needed if you’re dealing with higher input voltages. These inputs can be tested using the following commands from the CLI (that is, a terminal window):

raspi-gpio get 11 (DIN1)

raspi-gpio get 26 (DIN2)

When 4V or more are applied to either digital input, the level value that is returned will be 0—otherwise it’s a 1 (in other words, negative-logic).

Digital Output: The digital output consists of a single DPDT relay that is activated by GPIO22. This is not a particularly heavy-duty relay: the contacts are rated at 2A at 30VDC or 1.5A at 125VAC. The labeling on the front panel uses “O” for the N.O. contacts, “C” for the N.C. contacts, and “W” for the moveable contacts. The relay output can be easily tested using the following commands from the CLI:

sudo raspi-gpio set 22 op dh (opens the relay)

sudo raspi-gpio set 22 op dl (closes the relay)

Here again, this uses the negative-logic convention.

RS-232: The front panel RS-232 connector is driven by a Sipex SP3232 RS-232 interface chip. This device contains its own charge pumps to provide the ±5V RS-232 signal levels. As far as I can tell, there are no hardware handshake lines available for this port. UART5 on the BCM2711 drives this port. I tested it with the Minicom Serial terminal program—the RS-232 port is device /dev/ttyAMA3 in the Linux OS.

RS-485: The RS-485 was a bit more difficult for me to test since I don’t have modules with an RS-485 interface on hand. The RS-485 standard is a two-line, differential signal. In the CM4 Industrial, there are two half-duplex RS-485 ports using UART3 and UART4. To test the RS-485, I placed a 120Ω termination resistor across the port’s A and B terminals. I then placed a ‘scope probe on each of the A,B terminals. I hooked up the probe’s ground lead to the RS-485 “G” terminal. While the EDATEC user manual recommends using the Picocom application, I used Minicom since I was able to configure it to:

  • Send an ASCII file, without the use of a file-transfer program that requires a handshake routine with the destination device in order to proceed.
  • Allow the chosen UART port (UART3 or UART4) to control the data direction line on the SP3485 RS-485 Interface chips.

When you have Minicom running, if you hit Control-Z followed by A, you get the Menu screen. You then get into the configuration menu by typing O. There you pick the Serial Port Setup and type H for RS-485 enable. For the serial port device, you use either /dev/ttyAMA1 or /dev/ttyAMA2, depending upon which RS-485 port you are testing.

Back at the Minicom main screen, you then start your file transfer by typing Control-Z and O. You choose ASCII for the file protocol and then pick a file to send.

Figure 5 shows a scope capture of the RS-485 output during the transmission of a 5.1KB file. The signal amplitude is 1.22V for each line. You can see that they are differential signals, so the total signal amplitude is 2.44V, which is the RS-485 specification. From Figure 6, you can see the total transfer time was 4500ms—this is the correct timing for a 5.1KB file sent out at the 115,200 baud rate that I had chosen.

This is a scope capture of one of the RS-485 ports that was outputting data at 115,200 baud. The differential voltage output (2.44V) is the standard RS-485 specification.
This is a scope capture of one of the RS-485 ports that was outputting data at 115,200 baud. The differential voltage output (2.44V) is the standard RS-485 specification.
This is a scope capture of a 5.1KB file being transmitted via RS-485. The 450ms time that it took for the transfer matches the 115,200 baud rate that I was using.
This is a scope capture of a 5.1KB file being transmitted via RS-485. The 450ms time that it took for the transfer matches the 115,200 baud rate that I was using.

While I did have a Maxim MAX3485 RS-485 driver chip on hand, due to time constraints, I did not wire it up to a PCB and test out the CM4 Industrial’s RS-485 receive function.

Note that the RS-485 wiring diagram in Section 3.1.5 of the user manual is incomplete. The GND terminal of the CM4 Industrial should be connected to the ground terminals on any connected RS-485 peripheral devices. It’s unlikely any user of RS-485 devices would neglect to connect these up.

The RS-485 ports have an input protection circuit as shown in Figure 7. This consists of SMBJ12-CA-13-F TVS devices connected across the A-B terminals and between each of A and B to ground.

This is a snippet of the protection circuitry present on the RS-485 ports.
This is a snippet of the protection circuitry present on the RS-485 ports.

Miscellaneous I/O Devices: There are two miscellaneous I/O devices: a piezo buzzer which can be used for an alarm, and a user switch on the front panel. The Piezo buzzer is driven by GPIO25 and can be turned on/off as follows:

ON: sudo raspi-gpio set 25 op dh

OFF: sudo raspi-gpio set 25 op dl

The user button is connected to GPIO6 and can be detected as follows:

raspi-gpio get 6

which returns: GPIO 6: level=X fsel=0 func=INPUT pull=UP

where X=1 if the switch is NOT pressed, X=0 if it is (negative-logic used)

The CM4 Industrial’s PCB contains a few header pin footprints that are not mentioned in EDATEC’s documentation. There is a 4-pin footprint with labels for 3.3V, GND, AN0, and AN1. I am not sure what they are for.

There are also pinouts for SYNC IN and SYNC Out. While these are not mentioned anywhere in the documents, I know from the Raspberry Pi CM4 technical reference that they are 1.8V signals to support IEEE 1588-2008 [2]. This is a feature that allows for a high-precision clock synchronization protocol derived from the Ethernet signal itself.

Analog Input: The CM4 Industrial contains three channels of analog input. This is handled by a Texas Instruments ADS1015 which contains the following features:


Advertise Here

  • 12-bit sigma-delta ADC
  • A built-in PGA amplifier with full-scale ranges between ±256mV and ±6.144V
  • An 8-way input multiplexor that can select each of the four inputs in single-ended mode or four differential modes using combinations of the four input pins
  • Sample rates between 128SPS to 3300SPS
  • A programmable comparator that can trigger an interrupt when the input voltage crosses a threshold (a window mode is also available)
  • A wide supply range of 2.0V to 5.5V
  • I2C interface (up to 400kHz in standard mode, up to 1MHz in high-speed mode)

I’ve used this particular ADC many times in the past and find it to be accurate and versatile. In the CM4 Industrial, only AIN1 through AIN3 are brought out to the Analog terminal block. For some reason, AIN0 is not available. This reduces the single-ended input choices to three and the differential input choices to two.

The ADS1015 is a single-supply ADC. I don’t see any sign of logic-level translators near this chip, so I assume it’s powered by 3.3V, as that is the logic level expected by the BCM2711. That means that the ADS1015’s analog input signals must remain between ground potential and 3.3V. For the single-ended input mode, this means that only positive voltages in this range can be measured. If you configure the ADS1015 for differential input measurement, then bipolar signals can be measured, but only if they ride on a common-mode voltage that keeps the signal peaks within the 0V to 3.3V range. Given this limitation, the ±6.144VFS scale can be used but you will never see any readings beyond about half-scale.

I asked EDATEC whether there was any protection circuitry present for the ADS1015 inputs A1-A3. They replied that the ADS1015 itself has ESD ratings of ±2000V HBM model and ±500V CDM model. These figures are from TI’s datasheet. No additional circuitry is present. However, you cannot apply any sustained voltage to any of the ADS1015’s analog inputs outside of the GND-0.3V to VCC+0.3V range, so I would be careful to allow for this in any external circuits that might be connected up.

I am accustomed to using the ADS1015 in “C” or Python programs. In these cases, you interact with the ADS1015 via a driver library that is written in “C.” With the Linux operating system present on the CM4 Industrial, controlling and reading the ADS1015 is done much differently. Texas Instruments provides a Linux driver for the ADS1015 using the device tree. However, there was not enough information on TI’s website for me to determine if that is what is used on this module. However, if you navigate to the following folder:


you will see a whole series of files. To read the voltage present on a specific ADC channel, you just perform a file read on the file “in_voltageX_raw” where “X” is the channel number (other files are present for the differential readings as well). Note that these files are labeled in the same way that the ADS1015 datasheet uses. That is, they range from channel 0 through channel 3. So, for example, you can read the ADC channel labeled AIN1 on the front panel by issuing the following command from the CLI:

cat in_voltage1_ raw

As mentioned earlier, the ADS1015 CH0 is not brought out to the Analog terminal block. Also present in this folder is a series of files, one for each ADC multiplexor channel (single-ended and differential) that end in the word “scale.” If you examine any of those files, you’ll see that they contain the single number 3.00000. This corresponds to the number of millivolts per LSB, expressed in millivolts. In this case, 3mV corresponds to a full scale of 0.003 x 4096 = 12.288V. However, since the ADS1015 provides bipolar readings, this corresponds to a VFS of ±6.144V. For other full-scale ranges, you can change this entry, as shown in Table 1. When I tested the ADS1015 in the CM4 Industrial module, even on the most sensitive (±0.256 V) scale, I only observed one LSB variation in the results, with the input voltage held constant. From experience, I also know that each of the available PGA gains are exactly a factor of 2.00 apart, so you can do things like auto-scaling easily without any per-range calibration factors needed.

LSB sizes corresponding to full scale readings
LSB sizes corresponding to full scale readings

Similarly, there are a series of files ending in “sampling_frequency.” The number contained in these files can be read and/or changed to the following sample rates: 128, 250, 490, 920, 1600 (default), 2400, and 3300 samples per second. I doubt that the Linux driver can handle the higher rates, however. The ADS1015 is capable of responding to I2C addresses of 0x48, 0x49, 0x4A, and 0x4B, depending upon how its Address pin is strapped. In the CM4 Industrial, it responds to the default I2C address of 0x48.

I have not found any evidence that the supplied ADS1015 Linux driver can handle the comparator function that I mentioned earlier, but I could be mistaken about this.

Raspberry Pi 40-Pin GPIO header: This unit contains a footprint for the standard 40-pin GPIO header found on all recent Raspberry Pi modules. You should note, however, that a number of these GPIO pins are already allocated to internal functions: GPIO 6, 26, and 11 are some examples.

RTC: The unit comes with a PCF8563 real-time clock chip installed. There is an accompanying CR1202 socket, but the unit does not ship with a battery (at least outside of China). The OS board support package integrates this RTC with the OS system time, so the unit will maintain the correct time even if power is removed and an internet connection is not immediately available to load the system clock using an NTP server. This device is connected to the I2C-1 bus. The datasheet gives its 7-bit I2C address as 0x51, which I confirmed with the i2cdetect utility. I tested it, and it was working fine, as described in section 4.6 of the user manual.

SPI NOR Flash: The CM4 Industrial comes with a 25Q32SCSIG 32Mb SPI NOR Flash device. This could be used to hold any parameters that seldom change but need to survive a power-down, power-up cycle. Things like encryption and authentication strings come to mind. Section 4.10 of the user manual covers this topic but is quite vague. While I was able to follow the instructions there and erase the SPI Flash, I was not able to mount it to the OS filesystem using the command that they suggest:

sudo mount -t jffs2 /dev/mtd0 /mnt

I would need some help from EDATEC’s technical support to figure out how to use this Flash memory in Linux.

However, the datasheet gives the pin allocations for this device in section 4.1. Personally, it would likely be easier for me to utilize this Flash chip using Python and an appropriate library, given that the SPI port pins and CS line are known.

4G Modem: The CM4 Industrial’s Mini PCIe socket is meant to accept an optional 4G modem. This would be a Quectel modem: there are four different versions of this modem depending upon what part of the world you are operating in. The custom Debian Buster OS that I downloaded from EDATEC came with the Network Manager Tool installed (in place of the standard dhcpcd network utility normally found on the Raspberry Pi OS). Section 4.5.11 of the user manual explains how to set up this modem.

EDATEC sent me the CM4 Sensing module with a Quectel EC25-AFX modem (North America) installed. It would be easy for me to transfer this over to the CM4 Industrial. I have worked with cellular Particle IoT modules, but don’t have any prior experience using a cellular modem with a Raspberry Pi. Also, I didn’t have a usable SIM card on hand. So, I have not tried out this function yet.


When I received these modules from EDATEC, I assumed that they came directly from the factory in China, and that the pre-loaded OS image would be the latest version. I also assumed that each of the units would perform as was described in the respective user manual. However, the ones I received were sent by EDATEC’s USA sales representative and came with an older OS image installed and without the board support package (BSP) installed. Later, I noticed that the CM4 Industrial’s version number (internally labeled on the PCB) was V1.3, not the latest V1.4.

Note that, at startup, a new Raspberry Pi will prompt you to do an update. While this is somewhat of a lengthy process (depending on your Internet connection speed), it’s not updating the installed Linux kernel to the newest version—it’s just doing a lot of other useful updates.

When I contacted tech support at EDATEC, the presence of the older firmware was confirmed. So I started from scratch and downloaded the latest OS image from their website.


Advertise Here

Loading a new OS image to the EDATEC CM4 modules is straightforward. You basically take the proper ZIP file obtained from EDATEC, extract it, and use either the Raspberry Pi Imager program or balenaEtcher, both of which are user-friendly. This is the procedure to use if your EDATEC CM4 module has its OS located on a µSD card—which is how the CM4 Media unit that I received was configured.

However, it’s more likely that a CM4 Industrial module will be ordered with eMMC flash memory instead of a µSD card. In this case, it’s a bit more involved.

The CM4 Industrial (and other similar modules with eMMC Flash) contains an internal Micro USB socket (labeled as A9 in Figure 3). This is a USB OTG port that is connected to the BCM2711 MCU (via a USB switch device). This USB port is configured to look like a USB Flash drive when it is plugged into a PC. So, when you do the flash operation from either the Raspberry Pi Imager or balenaEtcher, you select this USB Flash drive as the destination.

There is one important thing to note. If you plug the CM4 Industrial into your Windows PC (using a USB cable connected to this Micro USB socket), and power up the Industrial, you will hear the standard tones that indicate a USB device has been detected. However, the Windows File Explorer will not pop up to show you an attached USB Flash drive. This is unlike many 32-bit ARM MCUs that run CircuitPython (as well as some other ARM MCUs) which immediately show up as an attached USB Flash drive.

Instead, before you plug in the CM4 Industrial, you have to load a custom Windows driver that is designed to recognize a Raspberry Pi CM4 module. This driver is loaded by a program called “rpiboot setup.exe”—the URL for which can be found in section 5.2 of the CM4 Industrial user manual. When this file is run for the first time, a Windows PC will drop into the command line mode and install this driver. You will see a message to indicate that this was successful. After this is done, when you subsequently plug in the CM4 Industrial, it will show up as a USB Flash drive. At this point, you can use either the Raspberry Pi Imager or balenaEtcher to download the new OS image. Figure 8 shows the hook-up of the USB cable. This is a right-angle, surface mount socket, so insert the USB cable gently.

This shows the internal USB connection that I made when re-flashing the eMMC memory with the newest OS firmware.
This shows the internal USB connection that I made when re-flashing the eMMC memory with the newest OS firmware.

EDATEC provides both 32 and 64-bit Raspberry Pi OS images in two versions: full (with desktop), and Lite. All four versions are supposed to contain the BSP for the CM4 Industrial. I only tried the OS with the desktop 64-bit version and confirmed that the BSP had been included.

While the image file that I loaded came with the BSP, there was one small detail that was not already done and had to be performed manually. The Raspberry Pi CM4 module contains its own trace antenna for Wi-Fi/Bluetooth. The CM4 Industrial has a steel case, so this internal antenna won’t work well enough to be useful. You will either not detect your Wi-Fi router at all, or you may connect to it and then have a poor, slow connection. To switch to the CM4 Industrial’s external whip antenna, you must add the following line to the /boot/config.txt file:


When I questioned EDATEC about why this wasn’t done as part of their custom OS images, they replied that the CM4 Industrial is available as a bare board without a case, so they left the choice up to the end user. It’s somewhat confusing to a new end user, however.

The EDATEC custom 64-bit desktop version of the OS (Buster release), that I loaded takes up about 5.9GB. This is a significant proportion of the 8GB eMMC Flash that came with the CM4 Industrial that I received. This might be enough free storage space to run most industrial applications. Foolishly, I thought I’d try loading the Arduino IDE plus the board support package for the ESP32 MCU that I commonly work with. This completely filled up the eMMC flash space before the installation was even completed. I had to manually remove all of the files to regain that space. I’ll try this again on the CM4 Media module, which now contains a 32GB µSD card as well as a 250GB SSD which I installed myself.


Once I realized that the unit came with old OS firmware and was missing the board support package, I was able to update it quickly enough. After that, all of the tests which I performed (described earlier) worked well.

EDATEC’s website is informative. My initial firmware problems were exacerbated because the link to the CM4 Industrial’s user manual was broken. I spun my wheels over the first weekend until I was able to contact EDATEC and get a PDF copy of it. That link is now fixed.

EDATEC’s website does not include any pricing, but you can go to DigiKey’s website and get pricing there.

I’d like to acknowledge the software technical assistance I received promptly from Ray Xie at EDATEC. 


Advertise Here

[1] EDATEC CM4 Industrial User Manual:
[2] Raspberry Pi CM4 Technical Reference Manual:

Texas Instruments |

Code and Supporting Files


Keep up-to-date with our FREE Weekly Newsletter!

Don't miss out on upcoming issues of Circuit Cellar.

Note: We’ve made the Dec 2022 issue of Circuit Cellar available as a free sample issue. In it, you’ll find a rich variety of the kinds of articles and information that exemplify a typical issue of the current magazine.

Would you like to write for Circuit Cellar? We are always accepting articles/posts from the technical community. Get in touch with us and let's discuss your ideas.

Sponsor this Article
+ posts

Brian Millier runs Computer Interface Consultants. He was an instrumentation engineer in the Department of Chemistry at Dalhousie University (Halifax, NS, Canada) for 29 years.

Supporting Companies

Upcoming Events

Copyright © KCK Media Corp.
All Rights Reserved

Copyright © 2024 KCK Media Corp.

Evaluating EDATEC’s Line of Industrial Modules

by Brian Millier time to read: 22 min