-
Notifications
You must be signed in to change notification settings - Fork 0
Edge EInk Board
Board Type: imx93-jaguar-eink
Platform: NXP i.MX93
Description: Low-power e-ink display controller with advanced power management
The Edge EInk board is designed for ultra-low power e-ink display applications. It features advanced suspend/resume functionality, selective wake-on-LAN capabilities, and optimized power management for battery-powered deployments.
- NXP i.MX93 dual-core Arm Cortex-A55 + Cortex-M33
- Low power design optimized for always-on applications
- Hardware security with built-in cryptographic acceleration
- WiFi 6 + Bluetooth 5.4 + 802.15.4 via ublox MAYA W2 module (NXP IW612 chipset)
- Selective wake-on-LAN with magic packet filtering
- Bluetooth Low Energy for device pairing and control
- LTE cellular modem support via USB interface
- Advanced suspend/resume with sub-second wake times
- Magic packet wake for remote system management
- GPIO-based wake sources for external triggers
- Dynamic power scaling based on workload
- MCXC143VFM power controller for external radio power management
| Function | i.MX93 Pin | GPIO | Signal |
|---|---|---|---|
| SDIO Clock | MX93_PAD_SD2_CLK | - | SD2_CLK |
| SDIO Command | MX93_PAD_SD2_CMD | - | SD2_CMD |
| SDIO Data[0-3] | MX93_PAD_SD2_DATA[0-3] | - | SD2_DATA[0-3] |
| SDIO Interrupt | MX93_PAD_ENET2_RD1 | GPIO4_IO25 | SD2_INT |
| WLAN Reset | MX93_PAD_ENET2_RD2 | GPIO4_IO26 | WLAN_RST (Active-Low) |
| Function | i.MX93 Pin | Maya W2 Function | Signal | Notes |
|---|---|---|---|---|
| BT UART RX | MX93_PAD_DAP_TDO_TRACESWO | Bluetooth UART Rx | LPUART5_TX | Output from i.MX93 |
| BT UART TX | MX93_PAD_DAP_TDI | Bluetooth UART Tx | LPUART5_RX | Input to i.MX93 |
| BT UART CTS | MX93_PAD_DAP_TCLK_SWCLK | Bluetooth UART CTS | LPUART5_CTS_B | Output from i.MX93 |
| BT UART RTS | MX93_PAD_DAP_TMS_SWDIO | Bluetooth UART RTS | LPUART5_RTS_B | Input to i.MX93 |
| BT Reset | MX93_PAD_ENET2_RD0 | Software Reset | GPIO4_IO24 | BT_RST (Active-Low, MCXC143VFM) |
Configuration Notes:
-
Hardware Flow Control: RTS/CTS enabled (
fsl,uart-has-rtscts) -
Baud Rate: 3MHz initialization (
fw-init-baudrate = <3000000>) - Power Management: Reset controlled by MCXC143VFM power controller
- Wake Pins: BT_WAKE_HOST not connected, BT_WAKE_DEV not assigned
Recent Fixes:
- Fixed incorrect
&lpuart4→&lpuart5UART assignment (commit fdbb5b2) - Hardware RTS/CTS pinout issue resolved in hardware revision
- Device tree pinout verified 100% correct against hardware specification
| Function | i.MX93 Pin | Signal | Notes |
|---|---|---|---|
| SPI Chip Select | MX93_PAD_GPIO_IO08 | LPSPI3_PCS0 | SPI3_SS0 |
| SPI Clock | MX93_PAD_GPIO_IO11 | LPSPI3_SCK | SPI3_SCLK |
| SPI MISO | MX93_PAD_GPIO_IO10 | LPSPI3_SOUT | SPI3_MISO |
| SPI MOSI | MX93_PAD_GPIO_IO09 | LPSPI3_SIN | SPI3_MOSI |
| ZigBee Interrupt | MX93_PAD_ENET2_RD3 | GPIO4_IO27 | ZB_INT |
Note: ZigBee/802.15.4 functionality has been removed from the production boards to simplify the design and reduce power consumption.
The board provides two SPI interface options for the E-Ink display - QSPI (preferred) and standard SPI (backup). Both interfaces use level shifters to convert 1.8V i.MX93 signals to 3.3V for the display.
| Function | i.MX93 Pin | Signal | Notes |
|---|---|---|---|
| QSPI Clock | MX93_PAD_SD3_CLK__FLEXSPI1_A_SCLK | QSPI_CLK | Up to 80 MHz |
| QSPI Chip Select | MX93_PAD_SD3_CMD__FLEXSPI1_A_SS0_B | QSPI_CS | Active-Low |
| QSPI Data 0 | MX93_PAD_SD3_DATA0__FLEXSPI1_A_DATA00 | QSPI_D0 | Quad mode |
| QSPI Data 1 | MX93_PAD_SD3_DATA1__FLEXSPI1_A_DATA01 | QSPI_D1 | Quad mode |
| QSPI Data 2 | MX93_PAD_SD3_DATA2__FLEXSPI1_A_DATA02 | QSPI_D2 | Quad mode |
| QSPI Data 3 | MX93_PAD_SD3_DATA3__FLEXSPI1_A_DATA03 | QSPI_D3 | Quad mode |
| Function | i.MX93 Pin | Signal | Notes |
|---|---|---|---|
| SPI Clock | MX93_PAD_SAI1_TXD0__LPSPI1_SCK | SPI1_CLK | Up to 10 MHz |
| SPI Chip Select | MX93_PAD_SAI1_TXFS__LPSPI1_PCS0 | SPI1_CS | Active-Low |
| SPI MOSI | MX93_PAD_SAI1_RXD0__LPSPI1_SOUT | SPI1_MOSI | Master Out |
| SPI MISO | MX93_PAD_SAI1_TXC__LPSPI1_SIN | SPI1_MISO | Master In |
| Function | i.MX93 Pin | GPIO | Signal | Notes |
|---|---|---|---|---|
| Reset | MX93_PAD_GPIO_IO14 | GPIO2_IO14 | RES_DIS# | Active-Low reset |
| Data/Command | MX93_PAD_GPIO_IO15 | GPIO2_IO15 | D/C#_DIS | LO=Command, HI=Data |
| Left/Right Select | MX93_PAD_GPIO_IO16 | GPIO2_IO16 | L#R_SEL_DIS | LO=Left, HI=Right |
| Busy Status | MX93_PAD_GPIO_IO17 | GPIO2_IO17 | BUSY_DIS# | LO=Busy (Input) |
| Power Enable | MX93_PAD_GPIO_IO11 | GPIO2_IO11 | POWER_EN | Display power control |
The board provides hardware switches to configure the SPI interface and level shifter buffer modes:
| Mode | Switch 4 | Switch 3 | Switch 2 | Switch 1 | BS1 | BS0 | Notes |
|---|---|---|---|---|---|---|---|
| QSPI - Autosensing | X | ON | ON | OFF | OFF | OFF | Preferred - allows register reads |
| QSPI - Fixed Direction | X | ON | OFF | ON | OFF | OFF | Simpler, no register reads |
| SPI - Standard | X | OFF | ON | ON | OFF | ON | Backup option |
Level Shifter Notes:
- 1.8V → 3.3V: All i.MX93 signals are level-shifted for display compatibility
- Autosensing Buffers: Can be temperamental, affected by attached devices
- Fixed Direction: More reliable but prevents display register reading
Board SPI Mode Switches:
- QSPI Mode: Switch 4=X, 3=ON, 2=ON, 1=OFF
- SPI Mode: Switch 4=X, 3=OFF, 2=ON, 1=ON
Display Mode Switches (BS1/BS0):
- QSPI - Autosensing Direction (Preferred): BS1=OFF, BS0=OFF
- QSPI - Fixed Direction: BS1=OFF, BS0=OFF
- SPI: BS1=OFF, BS0=ON
The display interface uses level shifters to convert between 1.8V (i.MX93) and 3.3V (display):
- Autosensing Direction Buffers: Required for reading display registers, can be temperamental
- Fixed Direction Buffers: More reliable but write-only operation
- QSPI Autosensing (Preferred): Best performance with register read capability
- QSPI Fixed Direction: Reliable fallback if autosensing issues occur
Both interfaces are enabled by default in the device tree:
-
QSPI:
/dev/spidev0.0- 80 MHz, quad mode -
SPI:
/dev/spidev1.0- 10 MHz, standard mode
Applications can choose the appropriate interface based on requirements.
The i.MX93 includes a Cortex-M33 co-processor that can be used for real-time tasks, power management, or dedicated peripheral control.
| Region | Address | Size | Purpose |
|---|---|---|---|
| TCM | 0x201E0000 | 128KB | Fast execution memory |
| Resource Table | 0x1FFF8000 | 4KB | Remoteproc metadata |
| VRing Buffers | 0xAFF00000+ | 32KB | RPMSG communication |
| Shared Buffer | 0xA8400000 | 1MB | Data exchange |
| M33 Reserved | 0xA8600000 | 16MB | Non-cacheable section |
# Load CM33 firmware from SD card
=> fatload mmc 1:1 ${loadaddr} cm33_firmware.bin
=> cp.b ${loadaddr} 0x201e0000 ${filesize}
=> bootaux 0x201e0000 0# Load and start CM33 firmware
echo "cm33_firmware.elf" > /sys/class/remoteproc/remoteproc0/firmware
echo "start" > /sys/class/remoteproc/remoteproc0/state
# Check status
cat /sys/class/remoteproc/remoteproc0/state-
RPMSG Channels:
/dev/rpmsg0for data exchange -
TTY Console:
/dev/ttyRPMSG0for CM33 console access - Mailbox: Hardware-accelerated message passing
- Shared Memory: Direct memory access between cores
- Real-Time Processing: Time-critical sensor data processing
- Power Management: Low-power monitoring while A55 cores sleep
- Peripheral Control: Dedicated control of specific hardware
- Security Functions: Isolated security processing
For detailed CM33 development information, see docs/CM33_FIRMWARE_GUIDE.md.
The Edge EInk board implements sophisticated power management designed for e-ink applications:
The board supports multiple suspend modes:
- s2idle (freeze) - CPU suspended, devices remain powered
- mem (deep sleep) - Maximum power savings with selective wake sources
# Suspend the system
sudo systemctl suspendThe board can wake from:
- Magic packets (Wake-on-LAN)
- USB activity (when enabled)
- GPIO interrupts (external triggers)
- RTC alarms (scheduled wake)
The board supports selective WiFi wake using WoWLAN (Wake-on-WLAN):
# Check current WoWLAN status
iw phy mwiphy0 wowlan show
# Enable magic packet wake (automatic on suspend)
sudo systemctl suspendFrom any device on the network:
# Wake the board using magic packet
wakeonlan 22:ba:36:5c:ae:c5
# Or using etherwake
etherwake 22:ba:36:5c:ae:c5Note: The MAC address shown is an example - use ip addr show wlan0 to get the actual MAC address.
- Selective wake filtering - Only magic packets wake the device
- No broadcast wake - Network scans and DHCP don't trigger wake
- Automatic power save - WiFi enters low-power mode during suspend
Correct GPIO mappings for i.MX93:
- WiFi Power GPIO: 634 (GPIO4_26)
- Bluetooth Power GPIO: 632 (GPIO4_24)
- WiFi Wake GPIO: 633 (GPIO4_25)
# Check WiFi interface
ip addr show wlan0
# Check connection status
nmcli device status# Add WiFi connection
nmcli con add type wifi con-name "MyNetwork" ssid "MySSID" \
wifi-sec.key-mgmt wpa-psk wifi-sec.psk "MyPassword"
# Connect
nmcli con up "MyNetwork"# Check IW612 firmware version
cat /proc/mwlan/adapter0/wlan0/info | grep version# Check Bluetooth status
hciconfig -a
# Enable Bluetooth and scan
bluetoothctl power on
bluetoothctl scan onNote: Bluetooth uses LPUART4 with DAP pin mapping on the i.MX93 platform.
For development, you can set up local WiFi credentials without committing them to git:
- Copy the template:
cp recipes-support/default-network-manager/default-network-manager/wifi-config.local.example \
recipes-support/default-network-manager/default-network-manager/wifi-config.local- Edit the local config:
# Edit wifi-config.local with your network credentials
WIFI_SSID="YourNetwork"
WIFI_PASSWORD="YourPassword"- Rebuild the image - the credentials will be included but not committed to git.
# 1. Suspend the device
ssh fio@192.168.0.90 "sudo systemctl suspend"
# 2. Wait for suspend (5-10 seconds)
sleep 10
# 3. Verify device is suspended
ping -c 1 192.168.0.90 || echo "Device suspended"
# 4. Wake with magic packet
wakeonlan 22:ba:36:5c:ae:c5
# 5. Wait for wake (5-10 seconds)
sleep 10
# 6. Verify device is awake
ping -c 2 192.168.0.90 && echo "Wake successful!"# Check suspend/resume logs
sudo journalctl -u eink-suspend.service -f
# Check WoWLAN setup logs
sudo tail -f /var/log/setup-wowlan.log-
Immediate resume: Check for active wake sources with
cat /sys/power/wakeup_count -
Failed suspend: Review kernel logs with
dmesg | grep -i suspend - GPIO errors: Verify correct GPIO numbers for i.MX93 platform
-
Magic packet not working: Verify WoWLAN is enabled with
iw phy mwiphy0 wowlan show -
Wrong MAC address: Check actual WiFi MAC with
ip addr show wlan0 - Network issues: Ensure magic packet sender is on same network
- UART not found: Verify LPUART4 device tree configuration
- Invalid BD Address: Check UART communication and pin mapping
- Failed initialization: Review GPIO power control and reset timing
# Set machine type for Edge EInk board
export MACHINE=imx93-jaguar-eink
# Build factory image
kas build kas/lmp-dynamicdevices.yml- eink-power-management - Power management and WoWLAN configuration
- default-network-manager - Local WiFi testing infrastructure
- lmp-device-tree - Board-specific device tree configuration
- Hardware Rev 1.0+ - All power management features supported
- LPUART4 mapping - Uses DAP pins for Bluetooth UART communication
- IW612 WiFi module - Tri-radio with WoWLAN support
For the latest hardware specifications and schematics, contact Dynamic Devices support.