Skip to content
Home: Anjaneya AutomationFrom Idea to Intelligent Machines
Firmware

Firmware development

Custom embedded software, from register-level drivers to full RTOS applications, written for reliability, low power and the engineer who maintains it after us. Because we also design the boards, bring-up is fast and nobody argues about whose side the bug is on.

Where AI fits

AI on the microcontroller

Small models running inside the firmware classify sensor data, vibration and sound on the device itself, with no network and very little power.

See AI integration
  • TinyML on STM32 and ESP32-S3
  • Sensor and vibration classification
  • Model updates over the air
What we do

What we do

Bare-metal and RTOS firmware for STM32, ESP32 and more: drivers, connectivity, bootloaders and OTA.

Bare-metal firmware

Register-level and HAL code for deterministic, low-latency work: interrupt routines, bootloaders and power-critical code.

  • Register-level C
  • ISR tuning
  • HAL and CMSIS

RTOS applications

Multitasking firmware on FreeRTOS or Zephyr: scheduling, queues, semaphores, event groups and memory management.

  • FreeRTOS
  • Zephyr
  • Task design

Device drivers

Drivers for I²C, SPI, UART, CAN, USB, ADC and displays, verified on hardware with a scope and logic analyser.

  • I²C, SPI, UART
  • CAN and CAN FD
  • USB
  • MIPI DSI

Wireless and IoT

Wi-Fi provisioning, BLE pairing, LoRaWAN, MQTT over TLS and certificate-based device authentication.

  • Wi-Fi and BLE
  • LoRaWAN
  • MQTT and TLS

Low power

Sleep-mode architecture and power profiling for battery devices that must last for years.

  • Sleep modes
  • Power profiling
  • Energy harvesting

Bootloaders and OTA

Dual-bank updates with rollback, signature checks and secure boot, tied into your fleet management.

  • Dual-bank OTA
  • Secure boot
  • Rollback

How we write firmware

The standards and tools behind every release, and the platforms we work on.

Languages
C99, C++17, Arm assembly
RTOS
FreeRTOS, Zephyr, Azure RTOS
Coding standard
MISRA C:2012 guidelines
Version control
Git with GitLab CI or GitHub Actions
Debugging
JTAG and SWD, J-Link, OpenOCD
Unit testing
Unity, Ceedling, CMock
Build
CMake, Make, PlatformIO
Protocols
UART, SPI, I²C, CAN, USB, Ethernet
Wireless stacks
ESP-IDF, Zephyr Bluetooth, LoRaWAN
Security
TLS 1.3, AES-256, secure boot
Documentation
Doxygen, SRS, software design description
Static analysis
PC-lint, Clang-Tidy, Cppcheck

Platforms

  • STM32

    Cortex-M0 to M7, our main platform for industrial products, including dual-core H7.

  • ESP32

    ESP32, S3, C3 and C6 for Wi-Fi, BLE and Thread devices.

  • Nordic nRF52 and nRF9160

    Low-power BLE and LTE-M for wearables and trackers.

  • NXP i.MX RT

    Crossover MCUs for HMI, motor control and edge processing.

  • AVR and ATmega

    Simple, low-cost controllers such as the ATmega32U4.

  • TI MSP430 and TM4C

    Ultra-low-power designs for battery-critical products.

  • Raspberry Pi and CM4

    Linux gateways, kiosks and edge AI.

  • RISC-V

    GD32V, ESP32-C3 and custom SoC firmware.

Process

How a project runs

  1. 01

    Requirements and architecture

    Timing, memory and power constraints turned into a task design, memory map and boot sequence before coding starts.

    • SRS document
    • Architecture diagram
    • Memory map
  2. 02

    Board bring-up

    Clocks, peripherals and pin mapping brought up and checked against the schematic with a scope and logic analyser.

    • BSP
    • Clock configuration
    • Bring-up log
  3. 03

    Drivers and middleware

    Drivers, sensor libraries and communication stacks, reviewed with static analysis and unit-tested with mocked hardware.

    • Drivers
    • Communication stacks
    • Unit tests
  4. 04

    Application and RTOS

    State machines, inter-task communication and scheduling, profiled for CPU load, stack use and worst-case timing.

    • Task design
    • State machines
    • CPU profile
  5. 05

    Testing

    Hardware-in-the-loop, stress and soak tests, watchdog recovery and power measurement, run in CI on every change.

    • HIL tests
    • Soak test log
    • Power report
  6. 06

    Release

    A tagged binary with release notes, API documentation, porting guide and full source with Git history.

    • Release binary
    • API docs
    • Porting guide

What you receive

Everything is yours at handover, including the source and its history.

  • Production binary

    Tagged .hex, .bin and .elf with checksums and flashing instructions.

  • Full source code

    Commented source with complete Git history.

  • API documentation

    Generated reference for every module and public interface.

  • Architecture documents

    Task diagrams, state machines and the memory map.

  • Test reports

    Unit, hardware-in-the-loop and soak test results.

  • Porting guide

    How to move the firmware to the next board revision.

  • Build system

    CMake or Make project with CI scripts.

  • OTA package

    Signed update image with manifest and rollback support.

Tools

Tools we use

  • Primary IDE

    STM32CubeIDE and CubeMX

    HAL generation, GDB debugging and profiling.

  • Multi-platform

    VS Code and PlatformIO

    One environment for STM32, ESP32, Nordic and more.

  • Debug and trace

    SEGGER J-Link and Ozone

    RTT logging, trace and power analysis.

  • Unit testing

    Unity and Ceedling

    C unit tests with hardware mocks in CI.

  • Static analysis

    PC-lint and Cppcheck

    MISRA checks as a gate in the pipeline.

  • Version control

    Git and GitLab CI

    Code review, automated builds and tests on every merge.

From Idea to Intelligent Machines

Ready to make your machine smarter?

Tell us about the machine you run or the product you imagine. We reply within 24 hours on working days. We sign an NDA before you share details.