Job Overview
We are looking for an Embedded Software Engineer to write and validate firmware for the battery management systems inside our energy storage and critical power products. This is a hands-on individual contributor role on the Firmware & Embedded Software team.
You will own features, not subsystems. Requirements and architecture come to you already defined; your job is to implement them correctly, test them on real hardware, and defend your work in code review. Our firmware ships into UL-certified safety-critical products, so the bar for correctness is higher than most embedded work, and you will be reviewed against it. In exchange, you get direct mentorship from senior firmware engineers, a lab bench a few steps from your desk, and exposure to the full path from schematic to certification.
This is the right seat for an engineer with a couple of years of production embedded C behind them who wants to go deep on battery systems and safety-critical development rather than broad on application software.
What you'll do
- Implement and maintain BMS firmware in C on STM32 Arm Cortex-M platforms for safety-critical battery applications.
- Write and test peripheral drivers for ADC, SPI, I2C, UART, CAN, DMA, timers, and GPIO against defined interface specifications.
- Integrate multi-cell battery monitoring front ends for cell voltage, temperature, and current measurement β register configuration, fault decode, and daisy-chained pack communication.
- Implement protection features to specification β overvoltage, undervoltage, overcurrent, overtemperature, and short-circuit response β and prove the trip behavior on the bench.
- Implement and tune passive cell balancing for multi-series pack configurations across sodium-ion, lithium-titanate, and lithium-ion chemistries.
- Develop CAN and CANopen communication firmware for pack-to-host telemetry, status reporting, and command handling.
- Support board bring-up: verify power rails and sequencing, confirm peripheral communication, and work through hardware/firmware integration issues alongside the hardware team.
- Write and maintain unit tests and on-target tests that exercise both nominal operation and fault paths, and keep them running as the firmware changes.
- Instrument and debug firmware on real hardware using SWD/JTAG, logic analyzers, and oscilloscopes, and trace a symptom to its root cause rather than to a workaround.
- Implement firmware requirements traced to FMEA and fault tree analysis in support of UL 1973, UL 1998, and UL 9540 certification, and produce the evidence that shows they were met.
- Write design descriptions, interface specifications, and test procedures for the code you own.
- Participate in code reviews β both receiving them and reading other people's changes carefully.
Required Qualifications
- B.S. in Computer Engineering, Electrical Engineering, Computer Science, or a related field, or equivalent practical experience.
- 2+ years developing production embedded firmware in C for Arm Cortex-M microcontrollers.
- Hands-on experience configuring and using common MCU peripherals: ADC, SPI, I2C, UART, CAN, DMA, timers, and GPIO.
- Working knowledge of CAN bus β message framing, arbitration, bus-off handling, and what a node looks like when it misbehaves.
- Ability to read a schematic, a datasheet, and a reference manual, and to reconcile the three when they disagree.
- β’ Practical debugging skill with SWD/JTAG debuggers, logic analyzers, and oscilloscopes β comfortable at a bench, not only in an IDE.
- Proficiency with Git and a structured branch, review, and release workflow.
- Willingness to work to a written specification and to accept review on safety-critical code paths.
- Clear written communication β you will be expected to document what you built and why.
- Onsite in Carlsbad, CA. This role is lab-dependent and is not remote.
Preferred Qualifications
- Experience with battery management system firmware: cell monitoring, balancing, state-of-charge estimation, or pack protection.
- Familiarity with STM32 development using STM32CubeIDE, STM32CubeMX, or equivalent ST toolchains.
- RTOS-based development (FreeRTOS, Zephyr, or similar), including task priorities and inter-task communication.
- Understanding of analog signal chains from the firmware side: ADC sampling and settling, filtering, calibration, and noise management.
- Exposure to safety-critical or certified product development β UL 1973, UL 9540, IEC 62619, IEC 61508, or ISO 26262.
- Experience with digital filtering applied to sensor data (moving average, low-pass IIR, or estimation filters).
- Exposure to requirements traceability and formal verification evidence, in any tooling.
- Experience with isolated measurement and current sensing circuits (AMC1301, shunt-based sensing, Hall-effect sensors).
- Python for scripting, log analysis, and test automation
Prior Experience With
- Multiple battery chemistries, and an understanding of how chemistry differences change firmware behavior.
- CANopen and the CiA 301 object dictionary model.
- Bootloaders and firmware update over an embedded bus.
- Hardware-in-the-loop test rigs, or emulation frameworks such as Renode or QEMU.
- MISRA C, static analysis, or on-target unit test frameworks.
- Rust for embedded development (Embassy, RTIC, or bare-metal).
- High-voltage systems (100 V+) and the lab safety practices that go with them.
Compensation & Benefits
- Salary range: $115,000 β $145,000 depending on experience and qualifications.
- Equity options as part of the compensation package.
- Comprehensive healthcare benefits (medical, dental, vision).
- Generous paid time off and paid holidays (PTO) policy.
Ready to work on power systems that matter? Let's talk.
Learn more about this Employer on their Career Site
