As Senior Firmware Engineer, you will be responsible for programming
the high-level firmware of our product line. You will work in close
collaboration with the hardware and embedded systems engineers to ensure
a seamless integration and to deliver fully functional and
cost-efficient solutions. Because Winky is also intended to be an open
target for gaming and educational apps, you will partake in the
development of Winky’s API, in close collaboration with the game
development team. A wide degree of creativity and autonomy is expected
as you will also take part in the upstream brainstorming phases of our
application feature development cycle. You will be provided with all the
lab equipment, evaluation kits and prototypes needed for the job.
Reporting to the CTO, you will work both as part of a team and
individually; depending on the development options chosen, you may have
to manage and/or interact with an external development team.
Job Responsibilities:
* Develop, release, and maintain stable builds for the system firmware;
* Propose, integrate and validate cost-effective product designs;
* Support software QA, optimize I/O performance, reduce power consumption, enable OTA firmware updates;
* Implement robot-side communication protocols and behavior engine;
* Foster quality control tools and methodology, set and run continuous unit * and integration tests;
* Keep technical documentation up-to-date;
* Ensure software and hardware licensing compatibility with third-party technologies.
Skills:
* Problem solving/analysis, ability to convert functional specifications to technical solutions;
* Solid software development skills, expertise with C programming language, compilers and debuggers;
* Expertise with low-level firmware programming, ability to write reliable firmware from scratch;
* Advanced mathematical knowledge (engineer-grade level);
* Mastery of the basic MCU registers and peripherals (GPIO, ADC,
DAC, comparators, timer/counters, DMA, RTC, serial communications,
watchdogs, debug interfaces, security, memory tables…);
* Ability to find specific information efficiently in technical datasheets and application notes;
* Proficiency with non-blocking and multithreaded programming style and tools;
* Theoretical and practical knowledge of Digital Signal Processing, related mathematical tools and instruction sets;
* Hands-on experience with Bluetooth stacks, USB a plus;
* Ability to assess, test, integrate and interface with a wide range of sensors and actuators;
* Excellent troubleshooting ability, using lab equipment to identify
and fix issues (debugger, logic analyzer, data logger, oscilloscope…);
* Understanding of the whole digital electronics engineering pipeline, from component assessment to integration and testing;
* Ability to fix library compatibility issues at low level;
* Attention to detail, coupled with a knowledge sharing attitude.
Prerequisites:
* A proven working experience in firmware engineering is required;
* An experience in a professional or open hardware development team is appreciated;
* Proficiency with the development environments of at least 2 major manufacturers;
* Programming languages: assembly, C, C++, C#, Python;
* Autonomous, proactive, rigorous, organized and cost-driven mindset;
* Interest for robotics, videogames and education.
Technical Stack:
* ARM Cortex M series-based MCUs (NXP / Freescale);
* GCC / G++, GDB, make, Git;
* Real Time Operating System (FreeRTOS);
* Digital audio signal protocol and processing (I2S, DSP…);
* Serial communications (UART, I2C, SPI);
* Bluetooth (classic and BLE) stack, in particular SPP, A2DP and HID profiles;
* Co-processors; power supply (PMIC, boost converter, wired logic…).