Problem & Context
Developing a custom GPS device provided the flexibility to tailor both firmware and hardware behavior to a specific application. Custom GPS reduces our exposure to supply chain or vendor issues. A custom solution allows integration of smarter behavior that is non-existent in other similar devices.
Scope of Work
- Built firmware for an open-hardware GPS design featuring an nRF52840 MCU and BG96 LTE Cat M1/NB-IoT cellular module with embedded GNSS.
- Implemented the serial command protocol for communicating with a legacy system.
- Leveraged open-source schematics to map all the MCU-BG96 interconnects, power traces, and peripheral circuitry for firmware driver integration.
- Structured the firmware into clear modules: Cellular, GNSS, USB CDC, GPIO, and Serial command
Technical Approach
Developed and built the firmware in VS Code using nRF Connect SDK with Zephyr RTOS, taking advantage of Zephyrs devicetree for UART, GPIO and USB configuration.
Employed a J-Link EDU Mini for flashing and debugging on the nRF52840.
Configured UART drivers to communicate between the MCU, BG96, and logic-level converter.
Implemented communication protocol based on echo and command/response transactions, with adjustable NMEA-interval parsing for GNSS updates.
Integrated USB CDC as a virtual COM port to allow real-time control and diagnostics via terminal commands
Designed modular firmware organization for maintainability.
Technical diagram or schematic would be displayed here
Results
Project results visualization
The board successfully acquired GNSS fixes through the BG96 module and transmitted position data over cellular networks, validating the end-to-end functionality.
The device can be configured through serial interface via USB CDC (GPS intervals, network mode, APN, server).
Fully modular firmware structure.
GPS serial logs
Source Code Snippet