Gobinath Kannan
Munich, Germany

Gobinath Kannan
Embedded Software

About 10 years of embedded firmware in C and C++, from requirements and architecture through design, implementation and testing to series production. Most recently I was the sole firmware owner of an electric vehicle instrument cluster, which I took to production in about 70–80 vehicles, together with the CAN bootloader and the OTA update system for the fleet.

~10years in embedded
70–80vehicles in the field with firmware I worked on
OTAfleet updates over LTE + CAN
M.Sc.Embedded Systems · TU Chemnitz
// 01  how I work

From requirements to series production

01

REQUIREMENTS

Structured requirement documents, in direct contact with customers. Hardware requirements for schematic and PCB.

02

ARCHITECTURE

MCU and component selection, CAN interfaces between ECUs, architecture documents for every product.

03

DESIGN

Modules and state machines, architecture and API documentation for my modules, technical reviews.

04

IMPLEMENTATION

C and C++ on STM32 and ESP32, FreeRTOS, drivers, TouchGFX GUI, MISRA-C, code reviews.

05

TESTING

Unit tests, HIL bench with recorded CAN traffic replayed against the real hardware, test cases traced to requirements.

06

RELEASE & FIELD

Prototype to production, CAN bootloader and OTA updates, root-cause analysis on the bench and in the vehicle.

V-model: every test case traced back to its requirement · phased releases
// 02  projects

What I have built

[ production ]

EV instrument cluster: from prototype to series production

E-Works Mobility GmbH, Ismaning · 2022 – 2026

E-Works Mobility converted diesel commercial vehicles to electric drive. I was the sole firmware owner of the instrument cluster. I rebuilt the OEM's complete cluster alone by reverse-engineering its hardware and software (the OEM had a full team for it), added new functions, integrated it into our vehicle and took it to production in about 70–80 vehicles.

Instrument cluster running in the vehicle
> the cluster in the vehicle: stepper gauges, LEDs, TouchGFX display
Cluster firmware block diagram
> firmware-visible architecture (generalised)
  • Platform: STM32H7 with FreeRTOS, 480×800 RGB TFT with a TouchGFX GUI in C++ and SDRAM framebuffer, graphics, fonts and audio in external QSPI flash, SAI audio codec, stepper-motor gauges, LED chains, ADAS and safety warnings.
  • CAN: communication with every ECU in the vehicle, data from the VCU and BMS, commands exchanged with the VCU. I decoded the OEM's CAN messages and defined the CAN interfaces between the cluster, the junction box and the telematics unit.
  • Hardware: selected the MCU, flash, LCD and LED drivers, supplied the hardware requirements for schematic and PCB, reviewed schematics, brought up the boards and debugged at signal level with oscilloscope and logic analyzer.
  • Testing: built an automated hardware-in-the-loop bench test with PCAN-Explorer: recorded vehicle CAN traffic replayed against the real hardware, with pass/fail reports, as part of the release validation.
CC++STM32H7FreeRTOSTouchGFXCANQSPIDMAHIL testing
[ in the field ]

CAN bootloader and over-the-air updates for the fleet

E-Works Mobility GmbH · deployed in about 70–80 vehicles

The wire harness and CAN were the only access to the ECUs in the vehicle, so updates had to work reliably over CAN.

  • CAN bootloader: composite image across internal and external QSPI flash, adapted open-source ISO-TP library for multi-frame transfer, CRC32 integrity check on every boot, recovery from interrupted updates.
  • OTA system: C++ application on the telematics unit (Raspberry Pi, Linux) with WireGuard VPN. It receives new firmware over LTE, verifies it and flashes the ECUs over CAN.
  • Low-voltage junction box (STM32F4): worked on it together with colleagues and added overcurrent detection, fault recovery and reporting, safe-state handling, bootloader-side update support and a hardware-version layer (one binary for all PCB revisions).
  boot.c  (simplified idea)
void boot_main(void) { const app_hdr_t *hdr = APP_HEADER; /* new image waiting? flash it over ISO-TP */ if (update_pending()) { receive_image_over_can(); } /* check the image on every boot */ if (crc32(hdr->start, hdr->len) != hdr->crc) { enter_recovery(); /* interrupted update */ } jump_to_app(hdr->start); }
BootloaderISO-TPCRC32OTALinuxWireGuardLTEFault handling
[ production · diagnostics ]

Vehicle dataloggers and an Android diagnostic app over Bluetooth

Intellipredikt Technologies, India · 2018 – 2021 · Technical Lead

Our hardware box, a communication device, connects to the vehicle bus and logs and forwards the data. A production Android app connects to the box over Bluetooth and talks to the vehicle through it, for example to read and clear diagnostic trouble codes (DTCs).

  • Datalogger firmware: CAN / J1939, ISO 15765 and UDS stacks for production dataloggers, for customers such as Fiat Chrysler, Eaton, Nissan and Dearborn Group.
  • Android diagnostic app for Dearborn Group: Bluetooth link to the box, read and clear DTCs, RP1227 API ported from Windows to Android, CAN bus statistics.
  • Asset-monitoring gateways for Wipro (GSM, Bluetooth).
  • Led and mentored a small embedded team, worked along the V-model from requirements to traced test cases, and was in direct contact with the customers.
VEHICLE DATA INTERFACE
CAN / J1939
ISO 15765
◉ VEHICLE SCAN
CONNECTED · J1939 / BT
Waiting for vehicle data
READ DTC
CLEAR
Preparing scan loop...
> illustration: vehicle → comm device (CAN) → Bluetooth → Android app reads and clears DTCs
CANJ1939ISO 15765UDSDTC read / clearBluetoothAndroidRP1227Team lead
[ wireless ]

BLE 5.0 mesh stack for Autoliv

Intellipredikt Technologies, India · seat-belt monitoring

I delivered a BLE 5.0 mesh stack for Autoliv's seat-belt monitoring system.

  • BLE: GATT services, advertising, pairing and mesh networking.
GATEWAY BLE 5.0 buckled unbuckled mesh hops → gateway
> illustration: seat-belt nodes report their status through the BLE mesh to the gateway
BLE 5.0MeshGATTAdvertisingPairingEmbedded C
[ public infrastructure ]

Wireless traffic signal control for the Tamil Nadu Police

Analog and Digital Labs, India · 2017 – 2018

My main project at Analog and Digital Labs: a wireless system to control traffic signals for the Tamil Nadu Police.

  • System: the central traffic control system connects to an access point; the signal units are Wi-Fi slave devices connected to it.
  • Firmware: wireless control over Wi-Fi, SPI-driven output control of the signal lamps.
  • Hardware: PCB design for the system.
  • Also built an LED scroll board with audio.
CENTRAL CONTROLLER ACCESS POINT Wi-Fi slave node on each signal junction · central controller → access point → Wi-Fi signal nodes
> illustration: the central traffic control system talks through an access point to the Wi-Fi slave nodes at each signal
Wi-FiSPIEmbedded CPCB designLamp control
[ IoT · research ]

Growthboxes: remote-controlled growing boxes on ThingsBoard

TU Chemnitz · Research Assistant · 2022

Plants, insects and more are grown inside the boxes. The firmware measures the conditions in each box and controls it, and the status and controls of the boxes are on ThingsBoard.

  • Box controller: firmware on a 32-bit MCU reading temperature and humidity sensors and controlling pumps and actuators.
  • IoT: ESP32 devices sending data over MQTT to ThingsBoard, with dashboards for status and remote control of the devices.
T/RH pump GROWTH BOX ESP32 CONTROLLER MCU / ESP32 MQTT THINGSBOARD pump temp humidity
> illustration: growth box with sensor and pump → controller → MQTT → ThingsBoard
32-bit MCUESP32SensorsPumps / actuatorsMQTTThingsBoardIoT
[ industrial · first project ]

Industrial dataloggers: many machines, one central receiver

Lakshmi Info Tech, India · 2016 – 2017

My first project: dataloggers on several machines collect the machine data and send it over Wi-Fi to a central router, which receives the data from all machines in one place.

  • Datalogger firmware: data collection on each machine and Wi-Fi transfer to the central router.
  • Energy monitoring for Texmo: Modbus energy meters read on a Raspberry Pi.
LOGGER MACHINE 1 MACHINE 2 MACHINE 3 Wi-Fi CENTRAL ROUTER MACHINE DATA factory floor · Wi-Fi dataloggers
> illustration: dataloggers on each machine → Wi-Fi → central router → machine data
DataloggersWi-FiModbusRaspberry PiEnergy monitoring
[ hardware ]

PCB design: my own boards in KiCad

schematic · layout · Gerber · BOM · ordering

I design my own boards in KiCad, including 4-layer prototypes, and order them myself. The impedance measurement board (AD5933 with STM32) came out of the preparation phase of my master's thesis. The 32-channel force sensor system was my M.Sc. research project (grade 1.3): I designed the PCB, wrote the ESP32 firmware and tested the system.

AD5933 and STM32 impedance measurement board
AD5933 + STM32 impedance board
32-channel force sensor board, front
32-ch force sensor board · front
32-channel force sensor board, back
back: USB-C + sensor connectors
KiCad4-layer PCBGerber / BOMSTM32ESP32Board bring-up
[ university · FPGA ]

Digital Stopwatch and Timer using FPGA

TU Chemnitz · M.Sc. course “Hardware Acceleration using FPGA” · Xilinx Artix-7 · Vivado · ModelSim

A digital stopwatch and countdown timer in synthesizable VHDL on a Xilinx Artix-7, running on the lab platform with push buttons and a character LCD. A start menu on the LCD selects the stopwatch or the timer.

  • Control: FSM-based control with input debouncing and lap-time storage.
  • Display: parallel driver for a 20×4 ST7036 character LCD.
  • Top level: an arbiter between the stopwatch and the timer function.
  • Verification: my own ModelSim testbenches and post-synthesis simulation in Vivado.
  stopwatch.vhd  (simplified idea)
type state_t is (IDLE, RUNNING, PAUSED); signal state : state_t := IDLE; process (clk) begin if rising_edge(clk) then case state is when IDLE => if btn_start = '1' then state <= RUNNING; end if; when RUNNING => if tick_10ms = '1' then time_cnt <= time_cnt + 1; end if; if btn_lap = '1' then -- store lap lap_mem(lap_idx) <= time_cnt; end if; if btn_stop = '1' then state <= PAUSED; end if; when PAUSED => if btn_start = '1' then state <= RUNNING; end if; end case; end if; end process;
Artix-7 FPGA module on the lab platform with buttons, LEDs and character LCD
> Artix-7 module on the lab platform
Vivado simulation waveform with reset, clock, button input, counter, function select and FSM state
> Vivado simulation: clock, button, counter, function select and FSM state
LCD start menu: choose stopwatch or timer
> start menu
LCD stopwatch screen with two lap times
> stopwatch with laps
LCD countdown timer screen
> countdown timer
VHDLXilinx Artix-7VivadoModelSimFSMTestbenchesLCD driver
[ research · M.Sc. thesis ]

Comparative Study of Excitation Signals for Bioimpedance Measurement on STM32 Microcontrollers: Performance and Energy Efficiency Analysis

TU Chemnitz, Professorship of Measurement and Sensor Technology · 2026 · grade 1.7

Application: portable, battery-powered bioimpedance spectroscopy devices, which measure how biological tissue reacts to a small AC signal over many frequencies. Such a device needs the right microcontroller and the right excitation signal to get both accurate measurements and low power consumption.

My thesis compares nine excitation signals (multisine, DIBS, MLBS, linear, logarithmic and quadratic chirp, sine sweep) on six STM32 microcontrollers (F303, L476, L4P5, L552, U5A5, G474), each with DAC-based and timer-based generation, measured with the I-V method and FFT from 1 to 250 kHz.

MATLAB12-bit LUT DMA DACor timer PWM DUT Cole ADC1/2V(t), I(t) DMA FFT |Z|, phaseUART → CSV Timer 2 MHz Timer trigger sine sweep · multisine · DIBS · linear / log / quad chirp · MLBS — 1–250 kHz, 5 / 10 / 15 / 20 frequencies
> my signal chain on the STM32: lookup table → DMA → DAC → DUT → ADC → DMA → FFT → impedance
  • Signal generation: frequencies log-spaced and aligned to the FFT bins, quantized to 12 bit in MATLAB and exported as C arrays. On the STM32 the table streams via DMA into the DAC, triggered by a timer at 2 MHz. Binary signals (DIBS, MLBS) also run without a DAC: DMA writes the timer's compare register and the PWM output on a GPIO carries the signal.
  • Acquisition: voltage and current captured with ADC1 and ADC2, timer-triggered, via DMA; impedance by FFT.
  • Verification: every signal checked on the PicoScope in time domain and spectrum against the MATLAB simulation, including the effect of the internal RC clock (HSI) against the external crystal (HSE).
  • Power and runtime: current measured with a Nordic Power Profiler Kit II and an ST-LINK-V3PWR (both agree within 0.1 mA); runtime with the ARM DWT cycle counter.
  • Accuracy: validated against an HP4294A precision impedance analyzer on three test loads, including a Cole circuit as a tissue model; results exported over UART to CSV.
PicoScope capture of the multisine signal with 20 frequencies, time domain and spectrum
> real capture: 20-frequency multisine from the STM32 DAC on the PicoScope
Nyquist plot of the Cole circuit measured with all signals against the HP4294A reference
> result: Cole circuit, all signals vs. HP4294A reference

// key results

  • Most accurate: on the Cole circuit, multisine had the lowest magnitude deviation (0.89 %) and DIBS-DAC the lowest phase deviation (0.42°). DAC-based signals beat their timer-based versions.
  • Power: the signal type hardly matters; the MCU architecture does.
  • Runtime: the Cortex-M33 parts (L5, U5) are fastest, about 40 ms for 20 frequencies. Sine sweep is about 3× slower.
  • Limits found: MLBS works with the DAC but fails with the timer (GPIO too slow for the fast switching); sine sweep loses about 5 % to DAC settling.
  • Recommendation: STM32L5 with multisine or DIBS-DAC for battery-powered devices, STM32U5 for a balance of low power and speed, STM32G4 for high accuracy thanks to its math accelerators (CORDIC, FMAC) and high-resolution timer.
STM32 F3 / G4 / L4 / L5 / U5DACADCDMATimers / HRTIMFFTMATLABPicoScopePower profilingDWT
// 03  experience

Where I have worked

Oct 2022 – Jul 2026

Embedded Software Developer

E-Works Mobility GmbH, Ismaning, Germany

Firmware for EV conversion ECUs: instrument cluster (sole owner), CAN bootloader, OTA, junction box functions, HIL bench testing. Working student until Sep 2023, then full-time. The company closed in July 2026 because of insolvency.

Jan 2022 – Sep 2022

Research Assistant (Software)

TU Chemnitz, Germany

Growthboxes project: boxes for growing plants and insects. Firmware on a 32-bit MCU reading temperature and humidity sensors and controlling pumps and actuators; ESP32 IoT devices with MQTT, status and controls on ThingsBoard.

Aug 2018 – Sep 2021

Technical Lead

Intellipredikt Technologies, India

Joined as Senior Software Engineer, Technical Lead from June 2019. Vehicle dataloggers (CAN, J1939, UDS), Android diagnostic app over Bluetooth (read and clear DTCs), BLE 5.0 mesh for Autoliv, team lead and customer contact.

Dec 2017 – Aug 2018

Embedded Software Developer

Analog and Digital Labs, India

Main project: wireless traffic signal control for the Tamil Nadu Police (Wi-Fi, SPI lamp control, PCB design). Also an LED scroll board with audio.

Jun 2016 – Dec 2017

R&D Engineer

Lakshmi Info Tech, India

First project: dataloggers on several machines sending data over Wi-Fi to a central router. Modbus energy monitoring on Raspberry Pi for Texmo.

// 04  skills

What I work with

PROGRAMMING

C, C++, Python, MATLAB

MCU

ARM Cortex-M (STM32 F4/H7), ESP32, NXP, TI, Silicon Labs; Raspberry Pi

RTOS

FreeRTOS (CMSIS-RTOS v2), TI-RTOS, Linux (application level); bootloaders, OTA, interrupts, DMA, caches, state machines, fault handling

AUTOMOTIVE

CAN, CAN FD, ISO-TP (ISO 15765), J1939, UDS; AUTOSAR and V-model

INTERFACES

SPI, QSPI, I²C, UART, I2S/SAI, LIN, Ethernet, RS-232/485, Modbus, MQTT, BLE (GATT, advertising, pairing, mesh), Wi-Fi, LTE

HARDWARE

Schematic and 4-layer PCB design in KiCad, Gerber/BOM, board bring-up, component selection

DEBUG

arm-none-eabi-gcc, make, CMake, gdb, OpenOCD, J-Link, ST-LINK, oscilloscope, logic analyzer, PCAN-Explorer, BUSMASTER

TOOLS

VS Code, STM32CubeIDE, TouchGFX, Git, GitLab CI/CD, Jira, Confluence, Doxygen

METHODS

Unit testing, HIL bench testing, MISRA-C, code reviews, requirements and design documentation, V-model, Agile/Scrum

LEARNING

Embedded Linux: Linux system programming, Buildroot, Yocto, Linux kernel modules and drivers

// 05  education

Where I studied

2021 – 2026

M.Sc. Embedded Systems

TU Chemnitz, Germany

Thesis (1.7): “Comparative Study of Excitation Signals for Bioimpedance Measurement on STM32 Microcontrollers: Performance and Energy Efficiency Analysis”, for portable bioimpedance spectroscopy devices. Research project (1.3): ESP32 measurement system for 32 force sensors, including PCB design. Coursework in real-time systems, automotive platforms (AUTOSAR, CAN, FlexRay, Automotive Ethernet), DSP, FPGA/VHDL, verification and test, network security.

2012 – 2016

B.E. Electronics and Communication

Anna University, India