The board was originally meant for CM3/CM3+ but should work also with previous version(s) as they are pin compatible. When using a module with EMMC flash on board, the microSD card slot must remain unused (it is not connected on the CM).

Since both hardware I2C interfaces are used for the cameras (and they have to be), there is a software I2C interface enabled on GPIO32-33. This interface is used for communication with on-board chips such as battery ADC and GPIO+PWM expander. SDA and SCL signals are also available on the 12-pin goldpin connector next to the SD card. Software I2C driver is available on Raspbian.

The second SD card is connected to the SD1 interface on the CM via 4-bit SDIO bus yielding in 6-pin connection. Those pins are exposed on the 12-pin goldpin connector and can be used as regular GPIOs when the SD1 interface is disabled.

Since the Broadcom chip on the CM has only one USB interface, all downstream ports are served by the 4-port hub chip USB2514B. There are 3x USB A connectors with independent current draw monitoring controlled by the hub. The 4-th USB port is available on the 16-pin goldpin connector.

The micro USB connector allows to flash the CM when using one with EMMC on-board. This feature works identically as in the official compute module carrier board. When a micro USB host is plugged in then the USB hub chip serving all USB devices is disconnected from the CM. Unfortunately I haven’t tested this feature since I only have the CM3+ lite module without EMMC.

There is no Ethernet interface. If one is needed an external USB to Ethernet converter must be used (actually this is how the Ethernet is implemented on RaspberryPi).

The battery is managed by the BQ24170 chip. It provides charging control and battery temperature monitoring. It can also limit the charge current if total current draw from the DC supply exceeds a given threshold. The charge current is set to 2A while the maximum current draw from the DC supply is set to 4A. The whole system works like in a laptop computer, the power supply can be seamlessly connected/disconnected.

The battery voltage is measured by the MCP3421A0T ADC chip. This is the only means for monitoring battery charge state. There is also a GPIO+PWM expander (PCA9531). One input of the expander is used to monitor whether there is external DC power present. There is no means for checking whether the battery is actually being charged or not. Both chips communicate with the CM though the software I2C bus. Linux driver for the MCP3421A0T is available in Raspbian while driver for the PCA9531 (as GPIO+PWM) is my work in progress.

The power button function is implemented using STM6601 chip. Short press of the power button when the power is off enables DC-DC converters which generate +5V for the CM and peripherals. Short press when the power is on generates a negative pulse on GPIO41 which tells the CM to start graceful shutdown. Once the graceful shutdown is complete the CM sets GPIO40 high which tells the STM6601 to disable DC-DC converters. Linux drivers that allow to implement this functionality are already available in Raspbian. A long press (>5sec) of the power button forces the power off.

The 40-pin connector provides identical pinout as on RaspberryPi boards.

WHAT HAVEN'T BEEN TESTED:

- USB Device function / flashing the CM module

WHAT DOES NOT WORK:

- The RTC chip since there is I2C address conflict with ADC used for battery voltage measurement.

Assembly details:

The PCB has 4-layers. Width and spacing of HDMI, CSI and DSI tracks was designed (mostly) for the following stackup: