Input and Output Interfaces

The Intel® Joule™ module offers a multitude of I/O communication protocols to control signal flow and port out those signals to the macro world. Digital I/O can be directly controlled from the kernel and more easily controlled by the MRAA library. The following communication protocols are available.

Serial Peripheral Interface (SPI)

SPI is a full-duplex, low-power, four-wire serial communication interface that operates at speeds up to 10Mbps. SPI uses a master-slave synchronized technique to ensure there is only one device that drives the communication between devices, whether the master is sending or receiving data to/from its target. SPI enables multiple slaves if needed by using the slave select (SS) signal to deem which slave is communicating with the master.

Inter-Integrated Circuit (I2C)

I2C is a synchronous protocol requiring only two wires for data transmission: SCL (clock) and SDA (data). Therefore, master and slave use the same signals to communicate, requiring acknowledgement (ACK) from the receiver, per byte received, to progress the data flow. I2C requires addressing the intended slave over the SDA bus to indicate which slave to communicate with.

To alleviate contention from the bi-directionality of I2C, the bus is wired-OR’d; hence, the bus is always pulled-up via two resistors. The possibility of contention is removed as devices only send logic low values on the bus. Therefore, if one device must send a ‘1’ on the bus it simply releases the bus and allows the line to be pulled-up to the reference voltage.


Four types of general purpose buffers exist, each driving a medium voltage level of 1.8V on 248 pins: Low Speed (FMAX ~25MHz), Medium Speed (FMAX ~60MHz), High Speed (FMAX ~208MHz), and High Speed RCOMP (FMAX ~25 MHz).  

Each of the following types are used in the following blocks:

  • LS – Panel Power, MIPI-DSI, MIPI-CSI Camera Control, SDIO Port Power Down, SD Card Control, PMC Control, USB 2.0, LPE, HSUART, and ISH
  • MS – I2C Clock/Data for HDMI, I2C, and PMC I2C
  • HS – eMMC*, SDIO, SD Card, and SPI

General GPIO interfaces are available for the following blocks:

  • SVID
  • JTAG (Debug)
  • LPC

GPIO with Pulse Width Modulation (PWM)

Four GPIOs with built in PWMs are available via the Intel® Joule™ module. The PWM GPIOs are level-shifted from 1.8V to 3.3V and are routed from the SoC on connector J6, through the module, to the expansion board via breakout connector J12. The four dedicated GPIO PWMs are located at:

J6 Pin J6 Signal Name J12 Pin J12 Signal Name Usage Description
1 PWM_0 26 PWM_0_LS Output Programmable PWM Port 0
3 PWM_1 28 PWM_1_LS Output Programmable PWM Port 1
22 PWM_2 30 PWM_2_LS Output Programmable PWM Port 2
24 PWM_3 32 PWM_3_LS Output Programmable PWM Port 3

You can program these GPIOs with PWM in C++ or Python.

PCIe m.2 NVMe

All non-volatile memory for embedded systems requires a special carrier board for module attachment. 

Inter-Integrated Sound Bus (I2S)

I2S is an electrical serial bus used to connect digital audio devices together in a system. I2S communicates pulse-code modulated (PCM) audio data between ICs using separate clock and data lines. By breaking apart the clock and data, I2S signals result in lower jitter than typical communication protocols that embed the clock in the data stream.

Note: I2S is not related to I2C nor is it bi-directional.

This interface has been tested using the Wm8998 codec with up to three digital microphone ICs (DMICs) using pulse density modulation (PDM).

I2S supports high fidelity (Hi-Fi) stereo connecting to speakers and/or headphones/earphones. Audio with speakers operates between 16 to 192 kHz at 16/24b stereo playback with DSP protection using I2S. Audio playback with headphones/earphones operates between 8 to 48 kHz at 16/24b stereo on wired or BT headphones/earphones using I2S/pulse-code modulation (PCM).

High-Speed Universal Asynchronous Receiver Transmitter (HSUART)

Four four-wire HSUART serial buses using RTS/CTS control are available to the developer. With a maximum bus rate of 3.6864 Mbps, HSUART data transfer rates are comparable with I2C but are accomplished using asynchronous events.

With a wide range of communication bus options, the developer has much flexibility to customize their design for any given environment.

On the Intel® Joule™ module expansion board, the High-Speed UART has been drawn to USB 2.0 and configured as console.

For more complete information about compiler optimizations, see our Optimization Notice.