Fulfil is a well-funded, rapidly growing company focused on developing automation robotics systems for the food supply chain. The Staff / Principal Firmware Engineer will lead the architecture and development of embedded firmware systems, ensuring robust integration with hardware and collaboration across teams.
Responsibilities:
- Lead architecture and development of embedded firmware systems from concept through production
- Drive system design across multiple communication layers: from physical protocols (CAN, I2C) to high-level RPC interfaces
- Mentor and coach engineers on best practices, code quality, and architectural decisions
- Implement robust, portable firmware using C/C++ for ARM-based microcontrollers and SBCs (e.g., STM32, NXP, Raspberry Pi-class devices)
- Develop and maintain protocol implementations for CAN bus, Modbus, I2C, UART, and SPI
- Design and maintain gRPC and Protocol Buffer interfaces to expose hardware services cleanly and safely to higher-level systems (e.g., orchestration, cloud, or local UIs)
- Integrate Linux-based SBC firmware modules with hardware abstraction layers
- Implement motor control algorithms, including tuning, sequencing, encoder-based positioning, and jerk limiting
- Use real-world feedback (encoders, sensors, timing feedback) to optimize motion sequences and avoid unnecessary re-homing
- Design and maintain unit testing and HIL (Hardware-in-the-Loop) environments
- Debug systems at all layers — from firmware logic to sensor integration to timing drift
- Use oscilloscopes, multimeters, logic analyzers, and related tools to bring up and validate hardware interfaces
- Work with systems, hardware, software, and operations teams to align on firmware behaviors and API contracts
- Own interface boundaries between hardware components, middleware, and application layers
- Participate in bring-up, debugging, and integration of custom hardware
- Ensure detailed documentation of firmware APIs, hardware mappings, and integration guides
- Promote best practices for version control, CI/CD for firmware, and structured release processes