rajveerchaudhari.com · open the BIOS version → · plain version
Rajveer Chaudhari
Firmware & Low-Level Systems. I write the code that runs before everything else.
rajveer@rajveerchaudhari.com · GitHub · Resume (PDF)
Open to firmware / embedded internships
MetalBird: FPV drone flight controller: custom PCB + bare-metal firmware

A drone flight controller built from zero: my own 2-layer PCB, and firmware written in Cortex-M4 assembly with no dev board, no HAL and no RTOS.
| MCU | STM32F411CE (QFN-48), Cortex-M4F @ 84 MHz (8 MHz HSE → PLL) |
|---|---|
| Board | 2-layer, 38 × 38 mm, 611 track segments, 94 vias (v1, fabricated) |
| Power | MP2331H buck 7.4 V → 5 V, AMS1117 3.3 V LDO, PMOS reverse-polarity protection |
| Sensors | MPU-6050 IMU + BMP280 barometer on I2C |
| I/O | 4 ESC headers, ELRS receiver, camera + VTX, USB/UART debug, SWD |
| Firmware | Hand-written vector table, startup, linker script; clocks, SysTick, USART, I2C |
Firmware
- Startup & clocks: Custom vector table and Reset_Handler: FLASH_ACR wait states + ART cache, HSE start-up, PLL (M=4, N=168, P=4) to 84 MHz, then SysTick timing.
- USART debug console: Register-level USART with print helpers and a REG_CHECK macro that dumps expected vs. actual register values during bring-up.
- I2C master driver: I2C2 in assembly: START/ADDR/ACK-failure handling, multi-byte register reads. It brings up the MPU-6050 (WHO_AM_I, reset, configuration).
- Wireless debugging: Flashing and GDB over SWD through an ESP32 running CMSIS-DAP with OpenOCD, so the board can be debugged without a cable to the PC.
Timeline
- First schematic
- MP2331H buck converter: 7.4 V → 5.4 V
- IMU section complete
- Flight-controller schematic complete
- Routing complete
- Gerbers + BOM exported → v1 fabricated
- Buck converter simulated in MPSmart (MP2331H, 7.4 V in → 5 V out)
- v2 redesign begins: 4-in-1 ESC
- Bare-metal firmware skeleton
- "Metal Bird says hello to world"
- Clock tree + HSE oscillator
- USART setup
- I2C init complete
- MPU-6050 init complete
About
I'm a CS undergrad who likes the layer where software meets silicon. I've written an x86 operating system from the bootloader up, designed a drone flight-controller PCB and I'm bringing it up with hand-written ARM assembly, and I've had patches accepted into the mainline Linux kernel.
I learn by building the whole stack myself: no HAL, no RTOS, no external libraries. Then I debug it with GDB over SWD, a UART console and a lot of reference-manual reading until I can explain every cycle.
- MetalBird (PCB + bare-metal ARM): Flight-controller PCB I designed and had fabricated, brought up with hand-written Cortex-M4 assembly.
- PenguOS (x86 OS from scratch): Bootloader, paging, drivers, scheduler and a software 3D engine. It boots right here in your browser.
- Linux kernel (4 commits in mainline): IIO and staging patches applied by Jonathan Cameron and Greg Kroah-Hartman.
Skills
| Languages | C, ARM Thumb-2 assembly (GAS), x86 assembly (NASM), Python, Bash |
|---|---|
| Embedded | STM32F4 / Cortex-M4 at register level, RCC / clock tree, GPIO, USART, I2C, SysTick, Startup code & linker scripts |
| Hardware | KiCad schematic & PCB layout, Buck + LDO power design, Datasheet-driven bring-up |
| Debug & Tools | GDB, OpenOCD, SWD / CMSIS-DAP, QEMU, arm-none-eabi, GCC, Make, Git |
| Kernel | x86 protected mode, paging, interrupts, Linux IIO subsystem, Mailing-list patch workflow |
Education
B.Tech CSE, IIIT Vadodara (International Campus Diu), Aug 2024 – May 2028. Coursework: Operating Systems, Computer Organization, Digital Logic & Electronics, Computer Networks.