Bare Metal Programming

IoT and embedded systems projects increasingly make use of pre-existing operating systems and libraries, but there are many situations where bare metal software is required to satisfy memory, performance or bill-of-materials constraints.

We have expertise in writing firmware for a wide range of microcontrollers, FPGA and CPLD devices. Our experience has helped clients in Europe, Asia and USA to implement bare metal solutions from scratch as well as crafting upgrades for firmware already deployed in the field.

Example Projects

Azure Sphere MT3620 Drivers

Development of low-level drivers for the CM4 cores on Microsoft's Azure Sphere MT3620 IoT platform, now widely adopted by the MT3620 user base. Our flexible drivers provide interfaces to the I2C, I2S, SPI, Timers, UART, Mailboxes & ADC peripheral systems.

Low-cost logic analyser

Design of a low-cost logic analyser from the ground up, based on ST microcontroller silicon. Part of this work involved upstreaming improvements to libopencm3 and adding drivers for our device to sigrok.

Preemptive RTOS for audio processing

Development of a custom preemptive RTOS for a DSP which allowed multiple audio processing algorithms to be run on a DSP single core. This reduced the number of required DSP cores, lowering production costs and power consumption across several consumer devices.

Medical FPGA-based data processing

Embedded controller for a complex FGPA-based medical data acquisition and processing system. Development of firmware to upload the FPGA bitcode, configured CPLDs, and monitored the system - including providing toolchains and environments for future development work.

Bloodlight Research Platform

Design and development of electronics and software for Bloodlight, a fully open source project based on an ST microcontroller, which provides a research platform for measuring absorption and transmission of light using LEDs covering a broad frequency spectrum.

System controller for Cortex-M3

Implementation of a system management controller for a high-density blade server directly on Cortex-M3 which provided power management and sequencing, remote JTAG, system help monitoring, and console access.

Cycling fitness trainer firmware

Development of firmware for performance pro cycling training hardware. The device logged data from a range of sensor sources - for download and analysis later.

USB audio adapter upgrade

Upgraded a USB audio adapter from support for USB Audio Device Class 2 to 3 for a major US vendor. The work involved introducing patches to ROM code via function pointer callback tables stored in flash.

Cortex-M0 Computer Vision Firmware

Implementation of firmware from scratch for a Cortex-M0 microcontroller to support a client's computer vision product IP. The hardware involved a two-stage computer vision pipeline, with one accelerator to extract feature data from video, and a second accelerator to perform classifications of the features in real time.

Our firmware configured the pipeline according to data provided over a mailbox API and marshalled the data through, ensuring the final output classifications were stored in the right place at the right time for the host. We also wrote tests and support software to run on the host.

Realtime Booking System

Development of an ad-hoc meeting room booking system, which involved developing software for nodes of a mesh network running bare metal firmware on nRF528 SoCs.

Get in touch to find out how Codethink can help you +44 161 660 9930