Firmware Engineer
The job description
Tech stack. C/C++, ARM Cortex-M, RTOS (FreeRTOS/Zephyr), I2C/SPI/UART drivers, JTAG/SWD debugging, oscilloscopes and logic analyzers, low-power design, bootloader basics, version control
About the role
You will write the firmware that brings connected devices to life, working at the boundary where software meets physical hardware. Firmware engineers here own their code from board bring-up through production: peripheral drivers, application logic, communication stacks, and power management. You will debug with oscilloscopes as often as debuggers, read schematics alongside source code, and develop an intuition for what the silicon is actually doing. It is concrete, demanding engineering where your code has physical consequences you can measure. Engineers who thrive here combine careful analysis with fast, honest lab work. You will also own the low-power state machine that gates clocks and peripherals in sleep, since standby current often decides whether the product meets its battery-life claims.
What you will achieve
- Deliver production firmware for connected devices: peripheral drivers, application logic, and communication stacks, all validated on real hardware
- Bring up new boards efficiently: clock trees, peripheral initialization, and debug interfaces working within days of hardware arrival
- Achieve aggressive power targets through sleep mode architecture, peripheral gating, and careful firmware design validated with current measurements
- Debug hardware-software integration issues spanning both domains: correlating scope captures with code execution to find root causes quickly
- Build reusable driver libraries and board support packages with clean APIs and documentation that accelerate every future product on the platform
What you will bring
Must-haves
- 2 to 5 years writing firmware in C or C++ with code running on real shipping hardware in customers' hands
- Experience with ARM Cortex-M microcontrollers: clock configuration, NVIC interrupts, DMA, timers, and low-power modes
- Familiarity with communication peripherals: I2C, SPI, UART implementation and debugging with logic analyzers and oscilloscopes
- Ability to read schematics and datasheets carefully to write correct drivers for unfamiliar hardware and sensors
- Debugging skills with JTAG/SWD probes, plus comfort correlating firmware behavior with hardware measurements
- Understanding of memory-constrained design: static allocation, stack sizing, and fitting within small flash and RAM footprints
- BS in Electrical Engineering, Computer Engineering, or Computer Science
Nice-to-haves
- RTOS experience: FreeRTOS, Zephyr, or ThreadX, including task design and inter-task communication patterns
- Familiarity with wireless stacks: Bluetooth LE or WiFi integration on resource-constrained microcontrollers
- Knowledge of bootloaders and firmware update mechanisms for field-deployed devices
- Experience with Python scripting for test automation and hardware-in-the-loop validation
Apple
Tesla
Qualcomm
Intel
Western Digital
Seagate