Firmware, hardware & production behind connected products.
An embedded engineer, platform-agnostic across nRF, ESP32, STM32 and Silicon Labs, with products in the field across security, asset tracking and industrial monitoring.
Firmware and hardware,
taken all the way to silicon.
Full-lifecycle embedded engineering, from schematic to production line, drawn from products now in deployment.
RTOS & super-loop firmware in C: driver development, BLE/GATT design, OTA & secure boot, structured for a product line, not one demo.
- Layered HAL + driver abstraction
- BLE GATT services with secure DFU
- MCUboot secure boot + signed OTA
Schematic capture and layout, RF layout for 2.4 GHz & GNSS, component selection, DFM review, bring-up and validation.
- Schematic capture + multilayer layout
- Matched 2.4 GHz / GNSS RF routing
- DFM review + bring-up report
Microamp-budget design and measurement: PMIC, FEM, sleep-state architecture and power profiling for battery products that last years.
- µA sleep-state architecture
- PMIC + FEM selection
- Measured power profile vs. battery life
BLE (extended adv, Coded PHY, DFU), Thread/Matter, cellular IoT (LTE-M/NB-IoT), LoRaWAN, Sigfox & sub-GHz, chosen for the deployment, not the datasheet.
- BLE Coded PHY + extended advertising
- LTE-M / NB-IoT modem bring-up
- Link budget + antenna tuning
Test jigs, test firmware, provisioning and transfer-to-production. The unglamorous work that decides whether a product actually ships.
- Test jig + test firmware
- Provisioning + key injection
- Transfer-to-production pack
Schematic, layout and firmware reviews before fabrication, and traceable URS/SRS/HRS documentation introduced as an engineering-wide standard.
- Firmware + architecture review
- Schematic + layout review before fab
- Traceable URS / SRS / HRS
Talk is cheap.
Show me the code.
— Linus Torvalds, Linux kernel mailing list, 2000
So here it is: a custom BLE GATT service with encrypted, counter-protected challenge-response auth on Zephyr. The kind of firmware that ends up in production. Tab through the project.
/* Authenticated unlock characteristic: command + monotonic counter */
#include <zephyr/bluetooth/gatt.h>
#include <zephyr/bluetooth/conn.h>
#include <zephyr/bluetooth/hci_types.h>
static ssize_t write_unlock(struct bt_conn *conn,
const struct bt_gatt_attr *attr,
const void *buf, uint16_t len,
uint16_t offset, uint8_t flags)
{
if (offset != 0) {
return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);
}
if (len != sizeof(struct auth_token)) {
return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN);
}
/* verify HMAC + monotonic counter; reject replays */
if (!auth_verify(conn, buf, len)) {
bt_conn_disconnect(conn, BT_HCI_ERR_AUTH_FAIL);
return BT_GATT_ERR(BT_ATT_ERR_AUTHENTICATION);
}
actuator_unlock();
return len;
}
BT_GATT_SERVICE_DEFINE(lock_svc,
BT_GATT_PRIMARY_SERVICE(&lock_uuid.uuid),
BT_GATT_CHARACTERISTIC(&unlock_uuid.uuid,
BT_GATT_CHRC_WRITE,
BT_GATT_PERM_WRITE_AUTHEN,
NULL, write_unlock, NULL),
);
# BLE peripheral · pairing + signing · secure DFU
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_SMP=y # pairing + link encryption
CONFIG_BT_SIGNING=y
CONFIG_BT_GATT_DYNAMIC_DB=y
# Secure boot + over-the-air update
CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_IMG_MANAGER=y
CONFIG_MCUBOOT_IMG_MANAGER=y
# Power management, target: < 8 µA idle
CONFIG_PM=y
CONFIG_PM_DEVICE=y
CONFIG_PM_DEVICE_RUNTIME=y
CONFIG_SERIAL=n # cut the UART in production
/* Custom board: lock actuator + fuel gauge */
/ {
actuator: actuator {
compatible = "gpio-leds";
gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
};
};
&i2c0 {
fuel_gauge: max17048@36 {
compatible = "maxim,max17048";
reg = <0x36>;
status = "okay";
};
};
$ west build -b nrf52840dk_nrf52840
-- Found Zephyr: 3.6.0
[100%] Built target zephyr_final
Memory region Used Size Region Size %age Used
FLASH: 212 KB 1 MB 20.7%
RAM: 38 KB 256 KB 14.9%
✓ build succeeded · measured idle 7.4 µA @ 3.0 V
Platform-agnostic in practice.
Hands-on experience across the major MCU and RF ecosystems.
Products designed with EMC/RF and South African regulatory requirements (ICASA, NRCS) in mind from the schematic up, so certification isn't a surprise at the end, backed by local production experience.
Get in touch.
Questions about the work above, or want to compare notes on an embedded problem? Send a message.
↳ I reply within 2 working days.
Prefer to chat? WhatsApp →