Hardware: Omi Wearable Firmware (nRF)
Relevant source files
The following files were used as context for generating this wiki page:
The Omi Wearable Firmware is a sophisticated software stack built on the Zephyr Real-Time Operating System (RTOS) and the nRF Connect SDK (NCS). It is specifically designed to run on the Nordic Semiconductor nRF5340 dual-core Bluetooth LE SoC, which serves as the primary processing hub for the Omi AI wearable device. The firmware facilitates real-time audio capture, low-latency compression, and secure data transmission to mobile applications.
The firmware manages the dual-core architecture of the nRF5340, separating high-level application logic (Application Core) from time-critical radio operations (Network Core). It integrates key hardware components including top-port PDM microphones, NAND flash for offline storage, and IMU sensors, all while maintaining power efficiency for 24h+ continuous capture.
Sources: omi/firmware/BUILD_AND_OTA_FLASH.md:44-55, omi/hardware/consumer/README.md:46-55, omi/firmware/readme.md:6-10
System Architecture
The firmware utilizes the dual-core ARM Cortex-M33 architecture of the nRF5340. This separation ensures that radio communications do not interfere with heavy audio processing or sensor data handling.
Core Roles
- Application Core (CPUAPP): Executes the main Omi logic, including the OPUS audio codec, file system management for SD cards/NAND flash, and user interface elements (LEDs and haptics).
- Network Core (CPUNET): Manages the Bluetooth Low Energy (BLE) stack and radio hardware.
Sources: omi/firmware/BUILD_AND_OTA_FLASH.md:60-65, omi/firmware/BUILD_AND_OTA_FLASH.md:188-195
Memory and Partition Layout
The system uses a static memory layout managed by the Zephyr Partition Manager to enable dual-core operation and secure Over-the-Air (OTA) updates.
| Core | Component | Size |
|---|---|---|
| Application | MCUboot Bootloader | 64 KB |
| Application | Primary Partition | 982 KB |
| Application | Secondary (OTA) Partition | 982 KB |
| Network | Network Bootloader | 34 KB |
| Network | Network Primary | 222 KB |
| Network | Network Secondary | 222 KB |
| Sources: omi/firmware/BUILD_AND_OTA_FLASH.md:185-195 |
Audio Processing Pipeline
The primary function of the firmware is the capture and transmission of high-quality audio data for AI processing.
The diagram above illustrates the flow of audio data from hardware capture through compression to either real-time transmission or local storage.
Sources: omi/firmware/readme.md:73-81, omi/firmware/BUILD_AND_OTA_FLASH.md:48-52
Key Audio Components
- Microphone Capture: Handles raw input from dual TDK T5838 PDM microphones.
- Codec: Implements the OPUS 1.2.1 codec for real-time audio compression to minimize BLE bandwidth usage.
- Transport: Manages the GATT services for audio streaming. It is optimized for high throughput, utilizing BLE 5.0 with 2M PHY and extended data lengths (MTU of 498 bytes).
Sources: omi/firmware/readme.md:76-79, omi/firmware/test/BLE_THROUGHPUT_TEST.md:17-20, omi/firmware/BUILD_AND_OTA_FLASH.md:204-205
Power and UI Management
The firmware coordinates user feedback and power states to ensure device longevity and usability.
Haptic and LED Feedback
The firmware provides visual and tactile feedback for various device states:
- Power On/Off: Triggers specific haptic patterns and entering/exiting deep sleep mode.
- Charging: The LED provides status updates during charging, though current versions focus on green feedback for "on-charger" status.
- BLE Status: Distinct LED patterns for connected vs. disconnected states.
Sources: omi/firmware/omi/README.md:38-42, omi/firmware/omi/README.md:50-54
Deep Sleep and Battery
- Deep Sleep: The device enters a low-power state to preserve battery when not in use.
- Monitoring: Battery levels are monitored via a BQ25101 charger IC and reported to the mobile app via BLE.
Sources: omi/hardware/consumer/README.md:57, omi/firmware/omi/README.md:59-62
Storage and Offline Mode
When the BLE connection to the mobile application is lost, the firmware automatically switches to an offline storage mode.
- Initialization: A new file is created on the 4Gbit NAND flash or SD card whenever the device is turned on.
- Recording: OPUS-encoded audio packets are written to the storage medium.
- Synchronization: Upon reconnection to the mobile app, the "Storage Streamer" begins transmitting stored packets. Once a file is successfully transferred, the firmware attempts to delete it to free space.
Sources: omi/firmware/readme.md:83-91, omi/firmware/omi/README.md:46-48
Secure Update Mechanism (OTA)
The firmware supports secure, cryptographically signed updates using MCUboot.
This sequence shows the Over-the-Air (OTA) update process facilitated by MCUmgr and MCUboot.
Sources: omi/firmware/BUILD_AND_OTA_FLASH.md:144-156, omi/firmware/BUILD_AND_OTA_FLASH.md:198-202
Security Specifications
- Signing: All images are signed with RSA-2048.
- Rollback Protection: Prevents the device from being downgraded to older, potentially vulnerable firmware versions.
- MCUmgr: Uses the MCUmgr protocol over BLE for managing image uploads and verification.
Sources: omi/firmware/BUILD_AND_OTA_FLASH.md:198-202, omi/firmware/scripts/ci/README.md:54-55
Build and Release Automation
The firmware release process is automated via GitHub Actions, producing standardized OTA assets.
| Requirement | Specification |
|---|---|
| Toolchain | nRF Connect SDK v2.9.0 |
| Tag Format | Omi_CV1_v<ver> |
| OTA Asset | Must contain ota and end in .zip |
| Signing Key | root-rsa-2048.pem (Application Core) |
| Sources: omi/firmware/scripts/ci/README.md:14-25, omi/firmware/scripts/ci/README.md:54-55 |
Build Output Files
Successfull builds generate several critical artifacts:
merged.hex: Complete binary for initial factory flashing via J-Link.dfu_application.zip: The package used for mobile OTA updates.merged_CPUNET.hex: Dedicated firmware for the radio core.
Sources: omi/firmware/BUILD_AND_OTA_FLASH.md:108-115, omi/firmware/FLASH_3.0.8/README.md:17-21
Conclusion
The Omi Wearable Firmware represents a high-performance implementation of the Zephyr RTOS, optimized for the nRF5340 dual-core architecture. By separating audio encoding and radio management, it achieves the low latency required for real-time AI interaction while providing robust failsafes through its offline storage and secure OTA update systems. Its integration with standard nRF development tools allows for continuous enhancement and reliable field updates for the Omi hardware ecosystem.