Firmware Engineer PCIe NVMe
Manpower
Saint Paul, United States of America
yesterday
Role details
Contract type
Permanent contract Employment type
Full-time (> 32 hours) Working hours
Regular working hours Languages
EnglishJob location
Remote
Saint Paul, United States of America
Tech stack
Microsoft Windows
Unit Testing
Bash
Booting (BIOS)
C++
Profiling
Code Review
Computer Programming
Computer Engineering
Datasheets
Software Debugging
Device Drivers
Perl
Embedded Software
Serial ATA
Firmware
Field-Programmable Gate Array (FPGA)
Revision Control Systems
Interoperability
Joint Test Action (IEEE Standards)
Python
Linux kernel
PCI Express
Performance Tuning
Queue Management Systems
Real-Time Operating Systems
SAS (Software)
Small Computer System Interface (SCSI)
Scripting (Bash/Python/Go/Ruby)
Extensible Firmware Interface
PIC Microcontroller
Application Specific Integrated Circuits
GIT
Integration Tests
Storage Technologies
Information Technology
U-Boot
Nvme
Job description
- Design, develop, and maintain firmware for PCIe and NVMe-based devices.
- Implement and debug lowlevel driver and firmware features related to NVMe controllers, PCIe endpoints, DMA engines, interrupt handling, queues, and command processing.
- Work with PCIe concepts such as enumeration, BARs, MSI/MSIX, link training, LTSSM, power management, error handling, and performance tuning.
- Develop and validate NVMe functionality including admin commands, I/O queues, namespaces, submission/completion queues, doorbells, PRPs/SGLs, and error recovery flows.
- Bring up firmware on FPGA, emulation platforms, presilicon environments, and/or production silicon.
- Debug hardware/software interactions using tools such as protocol analyzers, logic analyzers, JTAG, oscilloscopes, trace buffers, and firmware logs.
- Collaborate with hardware, ASIC, validation, systems, and software driver teams to rootcause issues.
- Optimize firmware for performance, latency, reliability, and resource usage.
- Develop unit tests, integration tests, and validation utilities for firmware and driver functionality.
- Support compliance, interoperability, and stress testing for PCIe and NVMe products.
- Participate in architecture reviews, code reviews, and technical documentation.
Requirements
The ideal candidate has hands-on experience working close to hardware, understands PCIe transaction layers and NVMe command flows, and is comfortable debugging complex interactions between firmware, drivers, operating systems, and silicon. Our client is headquartered out of Minneapolis, MN but this role can work remote. Candidates MUST be US Citizens., * Bachelor's or Master's degree in Electrical Engineering, Computer Engineering, Computer Science, or a related field.
- Strong programming experience in C and/or C++ for embedded or systemslevel software.
- Experience developing or debugging firmware, device drivers, bootloaders, or lowlevel embedded software.
- Familiarity with PCIe architecture , including configuration space, BAR mapping, interrupts, DMA, link states, and error reporting.
- Experience with the NVMe protocol , including command sets, queue management, namespaces, and host/controller interactions.
- Understanding of operating system driver models, preferably Linux kernel, Windows driver framework, or embedded RTOS environments.
- Strong debugging skills across firmware, software, and hardware boundaries.
- Experience reading hardware specifications, register maps, datasheets, and protocol standards.
- Comfortable working with source control systems such as Git.
Preferred Qualifications
- Experience with NVMe SSDs, storage controllers, computational storage, SmartNICs, accelerators, or PCIe endpoint devices.
- Handson experience with Linux kernel driver development.
- Familiarity with PCIe Gen3, Gen4, Gen5, or newer.
- Experience with NVMeMI, SR-IOV, CMB, PMR, ZNS, FDP, or other advanced NVMe features.
- Experience with UEFI, boot firmware, secure boot, or platform initialization.
- Knowledge of embedded processors such as ARM, RISCV, ARC, or custom microcontrollers.
- Experience with firmware performance profiling and latency optimization.
- Familiarity with scripting languages such as Python, Bash, or Perl for automation and testing.
- Experience with presilicon simulation, FPGA bring-up, or ASIC validation.
- Familiarity with storage protocols beyond NVMe, such as SATA, SAS, UFS, or SCSI, is a plus.