Job Title: Senior Embedded Software Engineer (Contract)
Job Description
This contract Senior Embedded Software Engineer role focuses on delivering one or more subsystems within an existing embedded framework and credential reader application for NFC/RFID reader firmware. You will work hands-on to implement, validate, and ship production firmware against a defined scope, collaborating closely with internal engineering teams while working independently day to day. The position requires strong modern C++ firmware expertise, sound architectural judgment within an established framework, and the ability to balance feature delivery with technical risk while consistently meeting coding standards from the outset.
Responsibilities
- Own the design, implementation, and delivery of one or more subsystems within the embedded framework and credential reader application for NFC/RFID reader firmware.
- Design and implement components, threads, and modules in modern C++ (C++17 and later) using the existing Module/Thread/Component framework without rewriting the core architecture.
- Implement ETL-based state machines and lifecycle hooks that meet hard real-time deadlines on Cortex-M4F microcontrollers.
- Develop, harden, and maintain Device Abstraction Layer drivers for STM32G474, including SPI, I2C, USB, UART, GPIO, timers, and DMA interfaces.
- Extend and enhance the USB stack to support CCID and related functionality for secure credential reading.
- Perform memory, timing, and power optimization, validating implementations against defined budgets using static analysis, profiling, and on-target measurements.
- Implement robust error handling, fault recovery, and safety-tolerant patterns consistent with a no-exceptions, no-heap-after-initialization policy.
- Integrate new firmware components cleanly with existing engineering work products, adhering to established coding standards and review practices.
- Work within a real-time operating system environment (with a strong preference for Zephyr RTOS) to develop low-level microcontroller and driver-level firmware rather than application-level software.
- Collaborate with other engineers to clarify requirements, identify technical risks, and propose solutions that align with project goals and timelines.
- Contribute to the validation and hardening of firmware for production release, including debugging, issue resolution, and iterative refinement.
- Maintain clear, concise documentation of firmware modules, interfaces, and design decisions to support ongoing development and maintenance.
Essential Skills
- At least 5 years of professional experience in embedded firmware development at the Senior or staff engineer level.
- Strong proficiency in modern C++ for firmware development, with comfort using C++17 and later standards.
- Hands-on experience developing low-level microcontroller firmware and driver-level code, as opposed to application-level development.
- Proven experience working with real-time operating systems (RTOS), with Zephyr RTOS strongly preferred.
- Practical experience working with UART, USB, SPI, and I2C interfaces, with a solid foundational understanding of USB as a primary interface.
- Experience implementing and optimizing firmware on Cortex-M class microcontrollers, such as Cortex-M4F.
- Demonstrated ability to design and implement state machines and lifecycle hooks for real-time embedded systems.
- Experience developing and hardening Device Abstraction Layer drivers for microcontrollers, including peripherals such as GPIO, timers, and DMA.
- Ability to perform memory, timing, and power optimization using tools such as static analysis, profiling, and on-target measurements.
- Strong understanding of robust error handling, fault recovery, and safety-tolerant firmware design, including adherence to policies such as no exceptions and no heap allocation after initialization.
- Bachelor’s degree in Engineering or a related technical field.
Additional Skills & Qualifications
- Experience with STM32 microcontrollers, particularly the STM32G474 family.
- Familiarity with ETL-based (Embedded Template Library) state machines and patterns for embedded systems.
- Domain experience with security-focused products or secure access and authentication solutions.
- Background with organizations or products emphasizing security and secure communications.
- Experience extending USB stacks, particularly for CCID or similar secure credential protocols.
- Ability to work effectively as a contractor, owning deliverables and meeting defined milestones with minimal supervision.
- Strong analytical and debugging skills for complex embedded systems.
- Clear written and verbal communication skills to document work and collaborate with cross-functional engineering teams.