About the role
Job Overview We are seeking a skilled Embedded Software/Firmware Engineer to design, develop, and optimize firmware and low-level software for our embedded systems. The ideal candidate will have experience working with hardware interfaces, writing efficient, reliable code in C/C++, and a strong understanding of computer architecture and hardware-level programming. This role will also involve developing and maintaining the Board Support Package (BSP) for new hardware platforms, including bootloaders, peripheral drivers, and low-level system initialization. Responsibilities * Design, develop, and maintain firmware for embedded systems, microcontrollers, and Linux applications. * Develop and maintain BSPs for custom hardware, including initialization routines, device tree configurations, and hardware abstraction layers. * Write and optimize low-level code in C/C++ for performance, reliability, and scalability on resource-constrained environments. * Interface with hardware through device drivers and manage communications with peripherals (I2C, SPI, UART, etc.). * Collaborate with hardware engineers to understand hardware specifications, timing constraints, and ensure firmware compatibility. * Debug and troubleshoot firmware and BSP issues at the hardware level, using oscilloscopes, logic analyzers, and other debugging tools. * Develop and execute tests to validate BSP and firmware functionality, reliability, and performance in real-time embedded systems. * Maintain technical documentation for BSP, firmware design, implementation, and debugging processes. * Perform code reviews and contribute to firmware architecture and process improvements.
Qualifications * Bachelor’s degree in Computer Science, Electrical Engineering, or related field * 4+ years of experience in low-level software/firmware development for embedded systems. * Proficiency in C/C++ programming with experience in low-level debugging and optimization. * Experience with BSP development for embedded hardware, including system initialization and device tree configuration. * Hands-on experience with hardware debugging tools such as oscilloscopes, multimeters, and logic analyzers. * Familiarity with version control systems like Git. * Experience with communication protocols such as I2C, SPI, UART, CAN, and USB. * Knowledge of assembly language, ARM or similar microcontroller architecture is a plus. * Strong problem-solving skills and the ability to work independently as well as in a collaborative team environment. * Familiarity with scripting languages (e.g., Python) for test automation.