Embedded Systems Engineering Roadmap
This roadmap is designed to assist beginners aspiring to build a career as an Embedded Engineer / Developer. To provide comprehensive guidance, the topics have been carefully selected based on current job requirements and organized according to personal experience.
Becoming an embedded engineer requires a broad understanding of both software and hardware. If you are starting on this journey, you must be highly motivated and passionate to pursue this path. The field of embedded systems demands a solid understanding of hardware functionality. But, as the well-known saying goes, "Hardware is hard!". So, patience and passion are the essential qualities that will help you overcome the various challenges encountered along this journey.
What is an Embedded System?
An embedded system is a system in which the computer (generally a microcontroller or microprocessor) is included as an integral part of the system.
Often, the computer is relatively invisible to the user, without obvious applications, files, or operating systems. Examples of products with invisible embedded systems are the controller that runs a microwave oven or the engine control system of a modern automobile.
Roadmap
Learning Resources
⭐️ Featured Material
🎥 Courses and YouTube Contents
- Coursera - Introduction to Embedded Systems Software and Development Environments
- Coursera - Embedded Software and Hardware Architecture
- Fastbit Embedded Brain Academy
- edX - Embedded Systems - Shape The World: Microcontroller Input/Output
- edX - Embedded Systems - Shape The World: Multi-Threaded Interfacing
- Quantum Leaps, LLC (YouTube Channel)
- DigiKey (YouTube Channel)
- element14 presents (YouTube Channel)
- Ben Eater (YouTube Channel)
- Phil’s Lab (YouTube Channel)
- Electronic Basics - GreatScott! (YouTube Playlist)
- Embedded Systems - Jacob Sorber (YouTube Playlist)
📚 Books
- Embedded System Design with ARM Cortex-M Microcontrollers: Applications with C, C++ and MicroPython - Cem Ünsalan, Hüseyin Deniz Gürhan, Mehmet Erkin Yücel
- A Hands-On Guide to Designing Embedded Systems - Adam Taylor, Dan Binnun, Saket Srivastava
🤡 Simulation
- Wokwi - Online ESP32, STM32, Arduino Simulator
- QEMU - open-source freeware for emulating hardware and devices
👨💻 IDEs
🕹️ Arduino
If you do not have any background in programming the embedded systems, Arduino boards and libraries are the best choice for you to start and learn the basics. Just keep in mind that most of the Arduino libraries are developed for learning purposes and are not optimized to be used in industry.
Additionally, the Arduino Core takes care of most of the low-level operations and manipulation of registers that you, as an embedded engineer, should be able to handle yourself. If you want to become a professional embedded developer, you must be able to effectively use industry-standard APIs and frameworks provided and approved by microcontroller vendors. For example, CMSIS for ARM Cortex, STM32Cube for STM32, ESP-IDF for Espressif microcontrollers, etc.
- Getting Started with Arduino
- New Arduino Tutorials
- Arduino in a commercial product?
- Arduino Project to Product
🐜 PlatformIO
PlatformIO is a cross-platform, cross-architecture, multiple framework, professional tool for embedded systems engineers and for software developers who write applications for embedded products.
PlatformIO is not yet extensively adopted in industrial and large-scale projects, however, it is an excellent choice for individuals working on smaller projects. This is because it greatly reduces the need to install frameworks and setup build and debug tools, allowing you to concentrate on programming.
👨🏫 Educational Websites
- DeepBlueMbedded
- Interrupt Blog by Memfault
- Microchip University
- SparkFun Learn: Learn at SparkFun Electronics
- Adafruit Learning System
- Random Nerd Tutorials | Learn ESP32, ESP8266, Arduino, and Raspberry Pi
- ControllersTech
🗺️ Other Helpful Roadmaps
⚒️ Projects
- STM32 Firmware - Phil’s Lab (YouTube Playlist)
- Udemy – STM32 : Internet Of Things with 4G LTE Modem - Hardware
😈 Hardware Hacking
- Hardware Hacking Tutorial
- The Hardware Hacking Handbook: Breaking Embedded Security with Hardware Attacks - Jasper van Woudenberg, Colin O'Flynn
Note: It is not necessary to read or watch all of the following materials, but it is important to study enough to have a basic understanding of each topic. Of course, the more you study and practice, the greater your knowledge will become, ultimately enhancing your abilities as an engineer.
Some of the resources mentioned here will just be used as references. Refer to them only when you need them.
The symbol of 💎 is to indicate well-known references that have really invaluable and comprehensive content. If you want to deepen your understanding of a topic, refer to the resources marked with a 💎 icon.
Soft Skills
Electronics Fundamentals
Basic Math & Calculus
Electrical Circuits Basics
- Lessons in Electric Circuits
- Fundamentals of Electric Circuits - Charles K. Alexander, Matthew Sadiku
- Grob’s Basic Electronics - Mitchel E. Schultz
- 💎 Make: Electronics: Learning by Discovery - Charles Platt
- 💎 The Art of Electronics - Paul Horowitz, Winfield Hill
Electronic Components
- Here’s a Quick Way to Know about Major Electronic Components
- Encyclopedia of Electronic Components - Charles Platt
Digital Circuits & Logic Design
Computer Architecture
- Build an 8-bit computer from scratch
- Computer Organization and Design: ARM Edition - David A. Patterson, John L. Hennessy
- 💎 Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris
- 💎 Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris
- Embedded Systems Architecture - Tammy Noergaard
- The Definitive Guide to ARM® Cortex®-M0 and Cortex-M0+ Processors - Joseph Yiu
- The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors - Joseph Yiu
Using Test Equipment
Multimeter
Logic Analyzer
Oscilloscope
- What’s an OSCILLOSCOPE?
- How to Use an Oscilloscope
- How to use an oscilloscope / What is an oscilloscope / Oscilloscope tutorial
- Understanding EMI Debugging with Oscilloscopes
Prototyping Skills
Using Breadboards
Hardware Design Basics
- Electronic Circuit Design - IFE - TU Graz
- Hardware Design - Phil’s Lab
- Microcontroller-Based Hardware Design With Altium Designer
PCB Design
- Create PCBs for Rapid Prototyping
- How to Make a Raspberry Pi Compute Module 4 Carrier Board
- How To Learn PCB Design (My Thoughts, Journey, and Resources) - Phil's Lab #87
- KiCad 6 STM32 PCB Design Full Tutorial - Phil's Lab #65
- Intro to KiCad
- Altium Academy YouTube Channel
- Robert Feranec YouTube Channel
- PCB Design for EMI & SI - Phil's Lab #64
- PCB Design for Advanced Users
- 9 Simple Tricks to Improve EMC / EMI on Your Boards - Practical examples (with Min Zhang)
- Many EMC Tips to Help You Design Better PCB Boards (with Keith Armstrong)
Soldering
- How To Solder - Electronics with Becky Stern | Digi-Key Electronics
- HOW TO SOLDER! (Beginner's Guide)
- Soldering Crash Course: Basic Techniques, Tips and Advice!
- How to Solder Through-Hole Components - Another Teaching Moment | DigiKey Electronics
- How to Solder QFN MLF Package by Hand (Using a Hot Air Rework Station) | Digi-Key Electronics
- From Solderless Breadboard to Soldered Circuit - Electronics with Becky Stern | Digi-Key Electronics
FPGA Design
- FPGA vs. Microcontroller: How to choose the right one for your project
- Introduction to FPGA
- FPGA Fundamentals
- Udemy – FPGA Embedded Design, Part 1 - Verilog
- Udemy – FPGA Embedded Design, Part 2 - Basic FPGA Training
- Udemy – FPGA Embedded Design, Part 3 - EDA Tools
- Udemy – FPGA Embedded Design, Part 4 - Microprocessor Design
Software Development Life Cycle (SDLC) Models
- What is the software development life cycle?
- Embedded Product Development Life Cycle: Four Main Steps
- Does agile work with embedded software?
- Scrum for embedded software: Good – but for reasons other than what your manager thinks
- What Is Scrum: A Guide to the Most Popular Agile Framework
- What Is the V-Model in Software Development?
Programming Fundamentals
Algorithms & Data Structures
- 💎 Grokking Algorithms - Aditya Y. Bhargava
- Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
- Collection of various algorithms in mathematics, machine learning, computer science, physics, etc implemented in C for educational purposes
- Udemy – Embedded Systems State Machines & Data Structures
- Data Structures in C
- Data Structures - Full Course Using C and C++
Design Patterns
- Design Patterns for Embedded Systems in C - Bruce Powel Douglass
- Making Embedded Systems: Design Patterns for Great Software - Elecia White
State Machines / UML
Memory Management
- Understanding the C runtime memory model
- Dynamic Memory Allocation | C Programming Tutorial
- What is Memory Leak in C/C++? How can we avoid?
Programming Languages
C
- W3Schools C Tutorial
- C Programming for Beginners | Full Course
- C Programming Tutorials
- 💎 The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie
- C How to Program - Paul Deitel, Harvey Deitel
- Effective C - An Introduction to Professional C Programming - Robert C. Seacord
C++
- Modern C++ in Embedded Development: (Don't Fear) The ++
- C++ On Embedded Systems
- C++ Tutorial for Beginners - Full Course
- C++ YouTube Playlist by The Cherno
Assembly
- Udemy – ARM GNU Assembly Programming From Ground Up
- Assembly Language Programming with ARM – Full Tutorial for Beginners
Python
- Real Python: Python Tutorials
- Python Crash Course - Eric Matthes
- MicroPython - Python for microcontrollers
- CircuitPython
Rust
- The Embedded Rust Book
- The Future of Programming: Rust
- Community Rust support projects for STM32 microcontrollers
- Rust on ESP Community
Build System
GCC & Make
CMake
Bash Scripting
Docker
Version Control
Git
- Git Tutorial for Beginners: Learn Git in 1 Hour
- Git for Professionals Tutorial - Tools & Concepts for Mastering Version Control with Git
SVN (Subversion)
Microcontrollers
- 💎 Make: AVR Programming - Elliot Williams
- 💎 Mastering STM32 - Carmine Noviello
- Getting Started with STM32 and Nucleo
- Bare Metal Embedded Programming: Theory and Practice Using STM32
- Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC - Warren Gay
- Intro to Raspberry Pi Pico and RP2040
- Udemy – Microcontroller Embedded C Programming: Absolute Beginners
- Udemy – Embedded Systems STM32 Low-Layer APIs(LL) Driver Development
- Udemy – Embedded Systems STM32 HAL APIs Driver Development
GPIO
ADC
DAC
Timers
PWM
Interrupts
- Polling/Interrupt/DMA differences explained easily
- Level Up Your Arduino Code: External Interrupts
- Tutorial 10: Peripheral 2 - Nested Vector Interrupt controller (NVIC) in STM32
- Tutorial 11: LAB - External Interrupt ( EXTI ) Interfacing in STM32 using STM32CUBEMX
- Tutorial 12: Interrupt Priorities in STM32
Watchdog
DMA
- STM32 DMA PT 1
- STM32 DMA PT 2
- Getting Started With STM32 & Nucleo Part 4: Working with ADC and DMA - Maker.io
- STM32 UART DMA and IDLE LINE || Receive unknown length DATA
Bootloader
- How to Create a Super Simple Bootloader
- Udemy – STM32Fx Microcontroller Custom Bootloader Development
Power Management
- SLEEP Mode in STM32F103 || CubeIDE || Low Power Mode || Current Consumption
- STOP MODE in STM32 || CubeIDE || Low Power Mode
GUI Design
Functional Safety
- Udemy – Functional Safety According to ISO 26262 - Crash Course
- A Guide to MISRA C Coding Standards - MISRA C and MISRA C++
Interfaces, Protocols & Communication Technologies
Common
UART
- Understanding UART
- how does UART work??? (explained clearly)
- Basics of UART Communication | UART Frame Structure | RS 232 Basics | Part1
- Understanding UART Communication Programming | UART Peripherals | Part 2
- The RS-232 protocol
I2C
SPI
- Understanding SPI
- SPI: The serial peripheral interface
- Getting Started with STM32 and Nucleo Part 5: How to Use SPI | Digi-Key Electronics
1-Wire
I2S
Wireless
- Bluetooth Low Energy Fundamentals - Nordic Semiconductor
- What is Thread? Low-power IoT Networking for Smart Home Devices | Digi-Key Electronics
- What is Matter? Unifying IoT Devices for the Smart Home | Digi-Key Electronics
Industrial
Modbus
RS485
CoAP & MQTT
- #144 Internet Protocols: CoAP vs MQTT, Network Sniffing, and preparation for IKEA Tradfri Hacking
- MQTT vs. CoAP | Comparison of IoT Protocols
- Simple ESP32 IoT Sensor Node Tutorial: WiFi Enabled MQTT Sensor Data Node
- Cellular IoT Fundamentals - Nordic Semiconductor
High-Speed
Ethernet
- How the Ethernet Protocol Works – A Complete Guide
- What is an Ethernet PHY?
- The Data Link Layer, MAC Addressing, and the Ethernet Frame
USB
- Training - USB 101 - Introduction to USB
- How does a USB keyboard work?
- How does USB device discovery work?
- MOOC - STM32 USB training
Automotive
CAN
- CAN Bus: Serial Communication - How It Works?
- CAN Bus: A Beginners Guide Part 1
- CAN Bus: A Beginners Guide Part 2
- Improving my electric longboard with a CAN Bus! What can the CAN Bus do? EB#44
- CAN Bus, OBD2 & J1939 Explained
- J1939 Explained - A Simple Intro [v2.0 | 2021]
- Unified Diagnostic Services (UDS) Explained - A Simple Intro [2022]
Network
- Networking Fundamentals
- TCP vs UDP - Explaining Facts and Debunking Myths - TCP Masterclass
- TCP - 12 simple ideas to explain the Transmission Control Protocol
- UDP doesn't suck! It's the BEST L4 protocol for THESE types of applications...
- Networking tutorial
- Hands-On Network Programming with C - Lewis Van Winkle
Cellular
GSM / LTE
LTE-M & NB-IoT
Memories
NOR / NAND Flash
- QSPI in STM32 || Write and Read || N25Q
- QSPI in STM32 || Boot from EXT Memory || XIP || N25Q
- Flash Memory in Embedded Linux Systems
eMMC
EEPROM
SRAM / DRAM
- SRAM vs DRAM: Difference Between SRAM & DRAM Explained
- What is SRAM?
- SDRAM Hardware & Firmware Tutorial (STM32) - Phil's Lab #80
- SDRAM in STM32 || MT48LC4
Sensors & Actuators
- Getting Started With STM32 and Nucleo Part 2: How to Use I2C to Read Temperature Sensor TMP102
- GPS Module and STM32 || NEO 6M || Get coordinates, Date, Time, Speed, etc.
- Interface MPU6050/GY-521 with STM32 || LCD 20x4 || CubeMx || HAL || SW4STM
- DC Motor Speed Controller PWM With Potentiometer Using STM32
Operating Systems
Operating System Fundamentals
Multitasking and Parallel Processing
- Multitasking vs Multithreading vs Multiprocessing
- Programming with POSIX Threads - David Butenhof
- Parallel Programming and Performance Optimization With OpenMP
- Introduction to OpenMP - Tim Mattson (Intel)
- C++ Concurrency in Action - Anthony Williams
Embedded Linux
- FreeRTOS vs Linux for Embedded Systems
- Introduction to Embedded Linux
- Linux From Scratch - step-by-step instructions for building your own custom Linux system
Linux Kernel
- Practical System Programming with C: Pragmatic Example Applications in Linux and Unix-Based Operating Systems - Sri Manikanta Palakollu
- 💎 The Linux Programming Interface - Michael Kerrisk
Linux Device Drivers
- 💎 Linux Device Drivers - Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
- Mastering Linux Device Driver Development - John Madieu
U-Boot
BuildRoot
Yocto
- Introduction to Embedded Linux Part 2 - Yocto Project | Digi-Key Electronics
- Yocto Project Tutorial Series (Basic to Advance)
- Udemy – Embedded Linux using Yocto
Qt
Real-Time OS
- Bare-metal and RTOS Based Embedded Systems
- The Pros and Cons of RTOS vs Bare Metal: Which Will You Choose?
- FreeRTOS vs Linux for Embedded Systems
- Real-Time Systems Concepts
- RTOS
- Beyond the RTOS
FreeRTOS
- FreeRTOS - Market leading RTOS
- Introduction to RTOS
- Mastering the FreeRTOS Real Time Kernel - a Hands On Tutorial Guide
- Getting Started With STM32 and Nucleo Part 3: FreeRTOS - How To Run Multiple Threads w/ CMSIS-RTOS
- Hands-On RTOS with Microcontrollers: Building real-time embedded systems using FreeRTOS, STM32 MCUs, and SEGGER debug tools - Brian Amos
- Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC - Warren Gay
- SafeRTOS - Safety Critical Real-Time OS
Zephyr
μC/OS / Micriμm OS
- Micriμm OS
- µC/OS-III Documentation
- µC/OS-III Books
- 💎 µC/OS-II Documentation (Previously published as a book titled "MicroC/OS-II: The Real-Time Kernel")
NuttX
RT-Thread
Mbed OS
QNX
VxWorks
Digital Signal Processing
DSP Fundamentals & Filter Design
- FIR Filter Design and Software Implementation - Phil's Lab #17
- IIR Filters - Theory and Implementation (STM32) - Phil's Lab #32
- Digital Signal Processing (ECSE-4530) Lectures, Fall 2014
- Udemy – Digital Signal Processing (DSP) From Ground Up in C
- Real-Time Digital Signal Processing: Fundamentals, Implementations and Applications - Sen M. Kuo, Bob H. Lee, Wenshun Tian
- Real-Time Digital Signal Processing from MATLAB to C with the TMS320C6x DSPs - Thad B. Welch, Cameron H.G. Wright, Michael G. Morrow
- Digital Signal Processing - John G. Proakis, Dimitris K. Manolakis
- Schaum's Outline of Signals and Systems - Hwei P. Hsu
Discrete Fourier Transform / FFT
- Discrete Fourier Transform - Simple Step by Step
- The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever?
- The FFT Algorithm - Simple Step by Step
- STM32 Fast Fourier Transform (CMSIS DSP FFT) - Phil's Lab #111
Controls Systems / PID Control
- Understanding Control Systems
- Control Systems - CircuitBread (YouTube Playlist)
- What is a PID Controller? | DigiKey
- PID Controller Explained
- Understanding PID Control
- PID Controller Implementation in Software - Phil's Lab #6
- Control Systems Engineering - Norman S. Nise
- Modern Control Systems - Richard C. Dorf, Robert H. Bishop
MATLAB / Simulink
- MATLAB Tutorials: Getting Started with MATLAB
- Getting Started with Simulink
- Udemy – MATLAB/SIMULINK Bible|Go From Zero to Hero!
Debugging
JTAG / SWD
- Guide: Connecting your debugger
- STM32 + SWD + ST-Link + CubeIDE | Debugging on Custom Hardware Tutorial - Phil's Lab #4
GDB
- everyone needs to stop using print debugging (do THIS instead)
- GDB is REALLY easy! Find Bugs in Your Code with Only A Few Commands
OpenOCD
Testing
CI/CD Flow
- Intro to CI/CD
- How to Build a Continuous Integration and Delivery Process for Embedded Software
- What is DevOps in an Embedded Device Company?
Unit Testing
- Unit Testing for C (especially Embedded Software)
- GoogleTest - Google Testing and Mocking Framework
- Embedded C/C++ Unit Testing with Mocks
- Unit Testing Principles, Practices, and Patterns - Vladimir Khorikov
Integration Testing
SIL / HIL Testing
Embedded AI
AI & ML Basics
- A beginner's guide to artificial intelligence and machine learning
- Udemy – Getting Started with Embedded AI | Edge AI
- Intro to Edge AI: Machine Learning + IoT – Maker.io Tutorial | Digi-Key Electronics
TensorFlow
- Getting Started with TensorFlow and Keras – Maker.io | Digi-Key Electronics
- Intro to TensorFlow Lite Part 1: Wake Word Feature Extraction – Maker.io | Digi-Key Electronics
- Intro to TensorFlow Lite Part 2: Speech Recognition Model Training – Maker.io | Digi-Key Electronics
tinyML
- Intro to TinyML Part 1: Training a Neural Network for Arduino in TensorFlow | Digi-Key Electronics
- Intro to TinyML Part 2: Deploying a TensorFlow Lite Model to Arduino | Digi-Key Electronics
- Coursera - Introduction to Embedded Machine Learning
- TinyML: Getting Started with TensorFlow Lite for Microcontrollers | Digi-Key Electronics
- TinyML: Getting Started with STM32 X-CUBE-AI | Digi-Key Electronics
- edX - Fundamentals of TinyML
- edX - Applications of TinyML
- edX - Deploying TinyML
- edX - MLOps for Scaling TinyML
- TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers - Pete Warden, Daniel Situnayake
Embedded Security
Cryptography
- Hashing, Hashing Algorithms, and Collisions - Cryptography - Practical TLS
- Data Integrity - How Hashing is used to ensure data isn't modified - HMAC - Cryptography
- Encryption - Symmetric Encryption vs Asymmetric Encryption - Cryptography - Practical TLS
- Public and Private Keys - Signatures & Key Exchanges - Cryptography - Practical TLS
- Understanding AES Encryption Mechanics: BMPS
- 💎 Understanding Cryptography: A Textbook for Students and Practitioners - Christof Paar, Jan Pelzl
- Cryptography and Network Security: Principles and Practice - William Stallings
- Serious Cryptography: A Practical Introduction to Modern Encryption - Jean-Philippe Aumasson
- MOOC - Security Part2: Basics of cryptography
- MOOC - Security Part3 : STM32 security features
- Introduction to encryption for embedded Linux developers
- A hands-on approach to symmetric-key encryption
- Asymmetric-Key Encryption and Digital Signatures in Practice
Secure Boot & Secure Firmware Update
- Blinky To Bootloader: Bare Metal Programming Series
- MOOC - Security Part4 : STM32 security in practice
- MOOC - Security Part5 : How to define your security needs
- MOOC - Security Part6: STM32 security ecosystem, from theory to practice
- TPM (Trusted Platform Module) - Computerphile
- Securing Embedded Linux Systems with TPM 2.0 - Philip Tricca, Intel
- TPM: Basic applications to embedded devices
- Introduction to Embedded Linux Security - part 1
- Introduction to Embedded Linux Security - part 2
History
The idea of creating this roadmap came from vazeri / Embedded-Engineering-RoadMap-2018 which was well designed but had some flaws and not updated for years. I took that idea, changed the structure of the roadmap and tried to improve it. The initial results can be accessed in m3y54m / Embedded-Engineering-Roadmap-Archived which is now archived. Early versions of the roadmap were created using Balsamiq Wireframes which is not suitable for these types of diagrams. So I decided to use Microsoft Visio instead and redrew the whole diagram.
Copyright
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License which means that you are free to share or adapt this work under the following terms:
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
Acknowledgement
Special thanks to my friends in the community of Iranian Embedded Engineers in Twitter and r/embedded subreddit for their suggestions that helped in improving this roadmap.
Contribution
If you think that this roadmap can be improved in anyway or you know some good learning resources that can be added here, please start an issue or a pull request. I’ll be maintaining and updating this repository frequently.
The source file is created using Microsoft Visio in .vsdx format and included in this repository for your contributions. If you do not have Microsoft Visio or you want to use free software, you can use draw.io which can import and export .vsdx files.
