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

Projects: MetalBird · PenguOS · Linux kernel · Debug logs

MetalBird: FPV drone flight controller: custom PCB + bare-metal firmware

Feb 2026 – present · STM32F411 · ARM Thumb-2 asm · C · KiCad · OpenOCD · GDB · repo · 3D board, PCB layers and schematic

3D render of the MetalBird v1 PCB

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.

MCUSTM32F411CE (QFN-48), Cortex-M4F @ 84 MHz (8 MHz HSE → PLL)
Board2-layer, 38 × 38 mm, 611 track segments, 94 vias (v1, fabricated)
PowerMP2331H buck 7.4 V → 5 V, AMS1117 3.3 V LDO, PMOS reverse-polarity protection
SensorsMPU-6050 IMU + BMP280 barometer on I2C
I/O4 ESC headers, ELRS receiver, camera + VTX, USB/UART debug, SWD
FirmwareHand-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

  • 2026-02-26 First schematic
  • 2026-03-03 MP2331H buck converter: 7.4 V → 5.4 V
  • 2026-05-21 IMU section complete
  • 2026-05-22 Flight-controller schematic complete
  • 2026-05-26 Routing complete
  • 2026-05-27 Gerbers + BOM exported → v1 fabricated
  • 2026-06-03 Buck converter simulated in MPSmart (MP2331H, 7.4 V in → 5 V out)
  • 2026-06-08 v2 redesign begins: 4-in-1 ESC
  • 2026-07-27 Bare-metal firmware skeleton
  • 2026-07-28 "Metal Bird says hello to world"
  • 2026-08-01 Clock tree + HSE oscillator
  • 2026-08-13 USART setup
  • 2026-08-23 I2C init complete
  • 2026-09-26 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

LanguagesC, ARM Thumb-2 assembly (GAS), x86 assembly (NASM), Python, Bash
EmbeddedSTM32F4 / Cortex-M4 at register level, RCC / clock tree, GPIO, USART, I2C, SysTick, Startup code & linker scripts
HardwareKiCad schematic & PCB layout, Buck + LDO power design, Datasheet-driven bring-up
Debug & ToolsGDB, OpenOCD, SWD / CMSIS-DAP, QEMU, arm-none-eabi, GCC, Make, Git
Kernelx86 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.

Rajveer Chaudhari · rajveer@rajveerchaudhari.com · BIOS version · plain version · llms.txt