Embedded Systems Engineering Roadmap
Lộ trình này được thiết kế để hỗ trợ những người mới bắt đầu mong muốn xây dựng sự nghiệp với tư cách là Kỹ sư / Nhà phát triển nhúng. Để cung cấp hướng dẫn toàn diện, các chủ đề đã được lựa chọn cẩn thận dựa trên yêu cầu công việc hiện tại và được sắp xếp theo kinh nghiệm cá nhân của tôi.
Trở thành một kỹ sư nhúng đòi hỏi sự hiểu biết rộng rãi về cả phần mềm và phần cứng. Nếu bạn đang bắt đầu cuộc hành trình này, bạn phải có động lực và đam mê cao để theo đuổi con đường này. Lĩnh vực hệ thống nhúng đòi hỏi sự hiểu biết vững chắc về chức năng phần cứng. Tuy nhiên, như câu nói nổi tiếng, "Phần cứng rất khó!". Vì vậy, sự kiên nhẫn và niềm đam mê là những phẩm chất cần thiết sẽ giúp bạn vượt qua những thử thách khác nhau gặp phải trong hành trình này.
Hệ thống nhúng là gì?
hệ thống máy tính là một phần của hệ thống lớn hơn và thực hiện một số yêu cầu của hệ thống đó. Ví dụ, một hệ thống máy tính được sử dụng trong máy bay hoặc hệ thống vận chuyển nhanh.
Phần cứng và phần mềm của hệ thống nhúng thường được giảm thiểu và tối ưu hóa cho các chức năng cụ thể. Hệ thống nhúng bao gồm ít nhất một bộ vi điều khiển, bộ vi xử lý hoặc bộ xử lý tín hiệu số. Hệ thống nhúng được thiết kế để tối ưu hóa độ tin cậy, chi phí, kích thước và tiết kiệm năng lượng cho các ứng dụng.
"Making Embedded Systems" Book:
Hệ thống nhúng là hệ thống được vi tính hóa được xây dựng nhằm mục đích cho ứng dụng của nó.
"Computer Organization and Embedded Systems" Book:
Hệ thống vật lý sử dụng điều khiển máy tính cho mục đích cụ thể, thay vì tính toán cho mục đích chung, được gọi là hệ thống nhúng.
Hệ thống nhúng là một hệ thống trong đó máy tính (thường là bộ vi điều khiển hoặc bộ vi xử lý) được bao gồm như một phần không thể thiếu của hệ thống.
Thông thường, máy tính tương đối vô hình đối với người dùng, không có ứng dụng, tệp hoặc hệ điều hành rõ ràng. Ví dụ về các sản phẩm có hệ thống nhúng vô hình là bộ điều khiển chạy lò vi sóng hoặc hệ thống điều khiển động cơ của ô tô hiện đại.
Sự kết hợp của phần cứng và phần mềm máy tính và có lẽ các bộ phận cơ khí hoặc bộ phận khác bổ sung, được thiết kế để thực hiện chức năng chuyên dụng.
ITrong một số trường hợp, hệ thống nhúng là một phần của hệ thống lớn hơn hoặc sản phẩm, như trong trường hợp hệ thống chống bó cứng phanh trên ô tô.
Roadmap
Lộ trình được chia thành ba phần chính: PHẦN MỀM, PHẦN CỨNG và KỸ NĂNG PHẦN MỀM.
Các phần phần cứng và phần mềm chồng chéo lên nhau trong nhiều vai trò công việc được nhúng. Các chức danh công việc khác nhau, chẳng hạn như "Kỹ sư / Nhà phát triển phần mềm nhúng", "Kỹ sư / nhà phát triển phần mềm cơ sở" và "Kỹ sư / nhà phát triển phần mềm Linux nhúng" có xu hướng tập trung nhiều hơn vào phần mềm. Mặt khác, các vai trò công việc như "Kỹ sư phần cứng nhúng" và "Kỹ sư thiết kế phần cứng" chủ yếu tập trung vào phần cứng. Ngoài ra, có những vị trí như "Kỹ sư hệ thống nhúng" yêu cầu hiểu biết tốt về cả phần cứng và phần mềm. Điều quan trọng là phải hiểu rằng mỗi công ty trong ngành nhúng có thể có những yêu cầu cụ thể cho một vai trò công việc, bất kể chức danh của nó là gì.
Với suy nghĩ này, lộ trình được thiết kế để bao gồm các chủ đề cần thiết cho vai trò "Kỹ sư hệ thống nhúng". Nếu bạn đang hướng tới vị trí phần mềm nhúng, bạn nên tập trung nhiều hơn vào các kỹ năng phần mềm trong lộ trình. Ngược lại, nếu bạn quan tâm đến công việc phần cứng nhúng thì nên ưu tiên các kỹ năng về phần cứng.
Trong ngành công nghiệp nhúng, tất cả các vai trò công việc đều yêu cầu một số kỹ năng mềm không thể có được chỉ bằng cách đọc hoặc xem video. Kỹ năng mềm được phát triển thông qua giao tiếp với người khác và đối mặt với nhiều thách thức công việc khác nhau. Cải thiện kỹ năng mềm không phải là cách tiếp cận chung cho tất cả. Nó thay đổi tùy thuộc vào đặc điểm cá nhân của bạn và liên quan đến việc nhận thức được điểm mạnh và điểm yếu của chính bạn. Việc nâng cao những kỹ năng này cần có thời gian và công sức.
Hãy nhớ rằng việc nhấn mạnh vào kỹ năng phần mềm hoặc phần cứng có thể khác nhau tùy thuộc vào yêu cầu cụ thể của công ty hoặc vị trí công việc.
Tài nguyên học tập
⭐️ Tài liệu nổi bật
🔎 Tìm kiếm là siêu năng lực của bạn!
🎥 Các khóa học và nội dung YouTube
- Fastbit Embedded Brain Academy
- Có 1 video đầu tiên về STM NUC: Quantum Leaps, LLC (YouTube Channel)
- Kênh của anh bạn đeo nơ, anh, nên xem thường xuyên : DigiKey (YouTube Channel)
- Có một series về phần cứng, các ic : element14 presents (YouTube Channel)
- Nói về một số giao tiếp : Ben Eater (YouTube Channel)
- Kiến thức chủ yếu hề hardware : Phil’s Lab (YouTube Channel)
- Kiến thức chủ yếu về C, Makefile: Embedded Systems - Jacob Sorber (YouTube Playlist)
- edX - Embedded Systems - Shape The World: Microcontroller Input/Output
- edX - Embedded Systems - Shape The World: Multi-Threaded Interfacing
🛠️ IDEs
- Keil MDK & µVision
- IAR Embedded Workbench
- STM32CubeIDE
- Microchip Studio for AVR® and SAM Devices
- MPLAB® X IDE
- MCUXpresso IDE
👨💻 VS Code Extensions
PlatformIO
PlatformIO là một công cụ chuyên nghiệp, đa nền tảng, đa kiến trúc, đa nền tảng dành cho các kỹ sư hệ thống nhúng và dành cho các nhà phát triển phần mềm viết ứng dụng cho các sản phẩm nhúng.
PlatformIO chưa được áp dụng rộng rãi trong các dự án công nghiệp và quy mô lớn, tuy nhiên, đây là sự lựa chọn tuyệt vời cho các cá nhân làm việc trong các dự án nhỏ hơn. Điều này là do nó làm giảm đáng kể nhu cầu cài đặt framework cũng như thiết lập các công cụ xây dựng và gỡ lỗi, cho phép bạn tập trung vào lập trình.
👨🏫 Trang web giáo dục
- DeepBlueMbedded
- 💎 Interrupt Blog by Memfault
- ElectronicWings - Hardware Developers Community
- Microchip University
- Nordic Developer Academy
- Electronics Tutorials
- SparkFun Learn: Learn at SparkFun Electronics
- Adafruit Learning System
- STM32 World
- Random Nerd Tutorials | Learn ESP32, ESP8266, Arduino, and Raspberry Pi
- ControllersTech
⚒️ Dự án
Tham gia vào các dự án thực hành là cách tiếp cận học tập hiệu quả nhất. Thay vì chỉ dựa vào kiến thức lý thuyết từ sách hoặc bài báo, việc thực hiện các dự án mang lại trải nghiệm học tập thực tế. Ngay cả một dự án tưởng chừng như cơ bản cũng có khả năng dạy bạn nhiều điều hơn là việc đọc không có mục đích. Bạn có thể tham khảo sách và bài báo khi gặp khó khăn trong việc hiểu các vấn đề trong một dự án trong thế giới thực.
- 51 STM32 Projects & Tutorials for Beginners and Up - Hackster.io
- STM32 (STM32F103C8) Projects & Tutorials
- ElectronicWings Projects
- STM32 Firmware - Phil’s Lab (YouTube Playlist)
- Raspberry Pi Based Embedded Project Ideas
🗺️ Lộ trình hữu ích khác
❓ Câu hỏi
⚠️ Lưu ý: Không cần thiết phải đọc hoặc xem hết các tài liệu sau, nhưng điều quan trọng là phải học đủ để có hiểu biết cơ bản về các chủ đề được yêu cầu. Tất nhiên, càng học tập và thực hành nhiều thì kiến thức của bạn sẽ càng phong phú hơn. Quá trình học tập liên tục này sẽ dần dần cải thiện kỹ năng của bạn và giúp bạn trở thành một kỹ sư giỏi hơn.
Một số tài nguyên được đề cập ở đây sẽ chỉ được sử dụng làm tài liệu tham khảo. Chỉ tham khảo chúng khi bạn cần chúng.
Hướng dẫn ký hiệu:
👶 Newbie
💎 Đầy đủ
1. 👣Soft Skills
d
2. 👣Electronics
Basic Math & Calculus
Principles of Electric Circuits
- 👶 💎 Electronics Tutorials
- 👶 Lessons in Electric Circuits
- 👶 💎 Fundamentals of Electric Circuits - Charles K. Alexander, Matthew Sadiku
- 👶 💎 Principles of Electric Circuits: Conventional Current Version - Thomas L Floyd, David M. Buchla
- 💎 Basic Circuit Theory I (By Prof. Razavi) (YouTube Playlist)
Electronics Fundamentals
- 👶 Electronic Basics - GreatScott! (YouTube Playlist)
- 👶 Make: Electronics: Learning by Discovery - Charles Platt
- 👶 💎 Electronic Devices: Conventional Current Version - Thomas Floyd, David Buchla, Steven Wetterling
- 👶 💎 Electronics Fundamentals: Circuits, Devices & Applications - Thomas L Floyd, David M. Buchla, Gary D. Snyder
- 👶 Practical Electronics for Inventors - Paul Scherz, Simon Monk
- 💎 The Art of Electronics - Paul Horowitz, Winfield Hill
- Here’s a Quick Way to Know about Major Electronic Components
- Encyclopedia of Electronic Components - Charles Platt
Digital Circuits & Logic Design
- 👶 Tiny Tapeout > Digital Design Guide
- 👶 FPGA Fundamentals - Nandland
- 💎 Digital Design - Morris Mano, Michael Ciletti
- 👶 💎 Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris
- 👶 💎 Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris
- 👶 Digital Fundamentals - Thomas L. Floyd
Computer Architecture
- 👶 💎 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
- Computer Organization and Embedded Systems - Carl Hamacher, Zvonko Vranesic, Safwat Zaky, Naraig Manjikian
- 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
- Build an 8-bit computer from scratch
- Embedded Systems Architecture - Daniele Lacamera
3. 👣Using Test Equipment
Multimeter
Logic / Protocol 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
4. 👣Prototyping Skills
Breadboarding
Hardware Design Basics
- 👶 💎 Hardware Design - Phil’s Lab (YouTube Playlist)
- Electronic Circuit Design - IFE - TU Graz (YouTube Playlist)
- Microcontroller-Based Hardware Design With Altium Designer (YouTube Playlist)
PCB Design
- Altium Academy YouTube Channel
- Robert Feranec YouTube Channel
- 👶 Altium Tutorials for Beginners - Robert Feranec (YouTube Playlist)
- 👶 Create PCBs for Rapid Prototyping - DigiKey (YouTube Playlist)
- How to Make a Raspberry Pi Compute Module 4 Carrier Board - DigiKey (YouTube Playlist)
- 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 - DigiKey (YouTube Playlist)
- PCB Design for EMI & SI - Phil's Lab #64
- PCB Design for Advanced Users (YouTube Playlist)
- 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)
- LearnEMC - EMC Resources
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
5. 👁️FPGA Design
- What are FPGAs?
- FPGA vs. Microcontroller: How to choose the right one for your project
- Introduction to FPGA (YouTube Playlist)
- FPGA Fundamentals - Nandland
- 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
- 💎 A Hands-On Guide to Designing Embedded Systems - Adam Taylor, Dan Binnun, Saket Srivastava
6. ❌Software Development Life Cycle (SDLC) Models
- What is the software development life cycle?
- Embedded Product Development Life Cycle: Four Main Steps
Agile / SCRUM
- 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
- Jira - Issue & Project Tracking Software
V-Model (V-cycle)
7. 👣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
- Practical Design Patterns: Opaque Pointers and Objects in C
- 💎 Design Patterns for Embedded Systems in C - Bruce Powel Douglass
- 💎 Making Embedded Systems: Design Patterns for Great Software - Elecia White
State Machines / UML
- Programming embedded systems the easy way – with state machines
- State Machines (YouTube Playlist)
- Event-Driven Programming (YouTube Playlist)
- Embedded System Design using UML State Machines
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?
8. ❌Programming Languages
C
- 👶 W3Schools C Tutorial
- 👶 C Programming for Beginners | Full Course
- C Programming Tutorials (YouTube Playlist)
- 💎 The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie
- newlib C Library Documentation
- The GNU C Library (glibc)
- C How to Program - Paul Deitel, Harvey Deitel
- Effective C - An Introduction to Professional C Programming - Robert C. Seacord
- From Zero to main(): Bare metal C
- From Zero to main(): Bootstrapping libc with Newlib
C++
- Modern C++ in Embedded Development: (Don't Fear) The ++
- C++ On Embedded Systems
- 👶 C++ Tutorial for Beginners - Full Course
- C++ by The Cherno (YouTube Playlist)
Assembly
- 👶 Introduction to ARM Assembly Basics
- Udemy – ARM GNU Assembly Programming From Ground Up
- Assembly Language Programming with ARM – Full Tutorial for Beginners
Python
- Python for embedded systems testing
- 👶 The Python Handbook – Learn Python for Beginners
- 💎 Real Python: Python Tutorials
- 👶 💎 Python Crash Course - Eric Matthes
Python for Microcontrollers
- MicroPython - Python for microcontrollers
- MicroPython 101 | Arduino Documentation
- CircuitPython
- The Pros and Cons of Designing Embedded Systems with MicroPython
Rust
- 5 roadblocks to Rust adoption in embedded systems
- The Embedded Rust Book
- The Future of Programming: Rust (YouTube Playlist)
- Community Rust support projects for STM32 microcontrollers
- Rust on ESP Community
- Rust on STM32: Getting started
- From Zero to main(): Bare metal Rust
- Writing an OS in Rust - Philipp Oppermann's blog
- Kernel Driver with Rust in 2022
Zig
- Testing Zig for embedded development
- Zig Embedded Group
- MicroZig - Unified abstraction layer and HAL for several microcontrollers
- Zig Bare Metal Programming on STM32F103 — Booting up
9. 👣Build Tools
GCC & Make
- GCC and Make - Compiling, Linking and Building C/C++ Applications
- A Shallow Dive into GNU Make
- The Best and Worst GCC Compiler Flags For Embedded
- Building STM32 projects from scratch with cross platform tools like Make, CMake and arm-gcc compiler toolchain (YouTube Playlist)
- From Zero to main(): Demystifying Firmware Linker Scripts
- Bare Metal - From zero to blink
CMake
Bash Scripting
Docker
- Docker Docs
- Docker Cheat Sheet
- 👶 Docker for Dummies
- Introduction to Docker for the Embedded Developer
- Intro to CI/CD Part 1: Getting Started with Docker | Digi-Key Electronics
- A Modern C Development Environment _________________
10. 👣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)
11. ❌Microcontrollers
- What Is a Microcontroller? The Defining Characteristics and Architecture of a Common Component
- How to Choose the Right Microcontroller for Your Application
- How to Read a Microcontroller Datasheet: Introduction and First Steps
- 👶 💎 Make: AVR Programming - Elliot Williams
- 💎 Mastering STM32 - Carmine Noviello
- Getting started with STM32: STM32 step-by-step
- Getting Started With AVR (YouTube Playlist)
- 👶 Fundamentals of Microcontrollers - Arduino bare-metal breakdown (YouTube Playlist)
- 👶 Getting Started with STM32 and Nucleo (YouTube Playlist)
- Bare Metal Embedded Programming: Theory and Practice Using STM32 (YouTube Playlist)
- Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC - Warren Gay
- 👶 Intro to Raspberry Pi Pico and RP2040 (YouTube Playlist)
- 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
- 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
- 💎 Embedded Systems Design using the MSP430FR2355 LaunchPad - Brock J. LaMeres
- Awesome Embedded: A curated list of awesome embedded programming
- 💎 Building Embedded Systems: Programmable Hardware - Changyi Gu
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
- A Guide to Watchdog Timers for Embedded Systems
- The Watchdog Timer on Arduino
- WATCHDOGS in STM32 || IWDG and WWDG || CubeIDE
Clock Management
- Clock Configuration in STM32
- STM32: Change clock speed via registers
- #1. Intro to STM32F4 Register Based Programming || Clock Setup || LED Blinking || NO HAL
- Tutorial 8: MCU Clocks configuration in STM32 using STM32CUBEMX
- Clock sources and PLL in ARM Cortex M4
DMA
- Introduction to Direct Memory Access (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
- Basics to Developing Bootloader for Arduino
- From Zero to main(): How to Write a Bootloader from Scratch
- How to Create a Super Simple Bootloader
- Blinky To Bootloader: Bare Metal Programming Series (YouTube Playlist)
- Simple AVR Bootloader tutorial
- 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
- Microchip University - Introduction to Functional Safety
- Udemy – Functional Safety According to ISO 26262 - Crash Course
- A Guide to MISRA C Coding Standards - MISRA C and MISRA C++
- A Firmware Development Standard by Jack Ganssle
- Safety-critical Embedded systems: How to prepare for software development
12. 👣Simulation / Emulation Tools
QEMU
- QEMU’s documentation
- Running AVR code in QEMU - A quick-start guide to accelerate AVR firmware development
- QEMU Simulation - Blinky - STM32F767ZI Full Stack
- Emulating a Raspberry Pi in QEMU
Renode
- Renode - GitHub Repo
- Renode - Documentation
- Renode - Official Tutorials
- Cortex-M MCU Emulation with Renode
- A simple guide to get started on renode
- Using CI-based workflow with Renode in bringing TensorFlow Lite to Zephyr
13. ❌Interfaces, Protocols & Communication Technologies
Basic Protocols
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
SDIO
- SDIO Protocol
- Interface SD CARD with SDIO in STM32
- SDIO Card Slave Driver - ESP32 - Technical Documents
I3C
- What is I3C®?
- MIPI I3C & MIPI I3C Basic
- I3C Protocol: Understanding and Debug
- MIPI I3C Basic - The next generation sensor interface enabling low-power IoT applications
1-Wire
Audio Protocols
I2S
Image & Video Protocols
CSI-2
HDMI
- TI Precision Labs - Video Interface: What are HDMI & Dual-Mode DisplayPort?
- HDMI 2.1 & TMDS Crash Course - ENMU EET 457 - Presentation
Wireless Protocols
Bluetooth / BLE
- Bluetooth Basics
- Bluetooth Low Energy: A Primer
- A Practical Guide to BLE Throughput
- SparkFun According to Pete #49 - How Bluetooth Works
- Bluetooth Low Energy Fundamentals - Nordic Semiconductor
- Bluetooth Overview - ESP-IDF Programming Guide
Wi-Fi
- 802.11 How WiFi Works - Wireless Networks | Computer Networks Ep. 7.3 | Kurose & Ross
- 802.11 Frame Analysis
- Wi-Fi Driver - ESP-IDF Programming Guide
- ESP32 Set an Access Point (AP) using ESP-IDF
- ESP32 ESP-IDF Connect with WiFi – Station Mode Example
LoRa / LoRaWAN
- The Arduino Guide to LoRa® and LoRaWAN®
- 💎 The Things Fundamentals on LoRaWAN!
- What are LoRa® and LoRaWAN®?
- #112 LoRa / LoRaWAN De-Mystified / Tutorial
- ESP32 with LoRa using Arduino IDE – Getting Started
Zigbee
- What is ZIGBEE And How It Works?
- How to take advantage of Zigbee and Bluetooth LE 5.2 on STM32WB wireless MCUs - Webinar Replay
Thread
- OpenThread - An open-source implementation of Thread®
- What is Thread? Low-power IoT Networking for Smart Home Devices | Digi-Key Electronics
- OpenThread - ESP-IDF Programming Guide
Matter
Industrial Protocols
Modbus
- What is Modbus and How does it Work?
- How does Modbus Communication Protocol Work?
- MODBUS STM32 (YouTube Playlist)
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 Protocols
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
- USB 101: An Introduction to Universal Serial Bus 2.0
- How does a USB keyboard work?
- How does USB device discovery work?
- MOOC - STM32 USB training (YouTube Playlist)
PCIe
Automotive Protocols
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 (YouTube Playlist)
- J1939 Explained - A Simple Intro [v2.0 | 2021]
- Unified Diagnostic Services (UDS) Explained - A Simple Intro [2022]
Network Protocols
- Networking Fundamentals - Practical Networking (YouTube Playlist)
- 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 - Ben Eater (YouTube Playlist)
- 💎 Hands-On Network Programming with C - Lewis Van Winkle
- tcpdump & libpcap libraries
- lwIP - A Lightweight TCP/IP stack
- lwIP (ESP-IDF)
- Developing applications on STM32Cube with LwIP TCP/IP stack
Cellular Communication
GSM / LTE
LTE-M & NB-IoT
14. ❌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
SD Card
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
15. 👣Sensors & Actuators
Sensors
- Calibrating Sensors
- DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180
- 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
- Arduino with PIR Motion Sensor
- Complete Guide for Ultrasonic Sensor HC-SR04 with Arduino
- Electronic Basics #15: Temperature Measurement (Part 1) || NTC, PT100, Wheatstone Bridge
Actuators
- Adafruit Motor Selection Guide
- DC Motor Speed Controller PWM With Potentiometer Using STM32
- All About Stepper Motors
- Using Servos With CircuitPython and Arduino
- Electronic Basics #25: Servos and how to use them
- Electronic Basics #24: Stepper Motors and how to use them
- Electronic Basics #18: DC & Brushless DC Motor + ESC
16. ❌Operating Systems
Operating System Fundamentals
- 👶 Putting the “You” in CPU
- 👶 The little book about OS development
- 👶 Operating Systems: From 0 to 1
- 💎 Operating Systems: Three Easy Pieces - Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau
- 💎 Modern Operating Systems - Andrew S. Tanenbaum, Herbert Bos
- Writing an OS in Rust - Philipp Oppermann's blog
Embedded Linux
- FreeRTOS vs Linux for Embedded Systems
- Linux Basics (LPIC 1)
- 👶 Introduction to Embedded Linux (YouTube Playlist)
- Mastering Embedded Linux Series - George Hilliard's blog
- 💎 Mastering Embedded Linux Programming - Chris Simmonds
- Linux From Scratch - step-by-step instructions for building your own custom Linux system
- Automotive Grade Linux (AGL)
Linux Kernel
- 👶 Writing a Simple Linux Kernel Module
- The Linux Kernel - David A Rusling
- 💎 The Linux Programming Interface - Michael Kerrisk
- How Linux Works - Brian Ward
- Practical System Programming with C: Pragmatic Example Applications in Linux and Unix-Based Operating Systems - Sri Manikanta Palakollu
Linux Device Drivers
- 💎 Linux Device Drivers - Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
- The Linux Kernel Module Programming Guide
- Mastering Linux Device Driver Development - John Madieu
- Kernel Driver with Rust in 2022
U-Boot
Buildroot
- Buildroot Documentation
- Introduction to Embedded Linux Part 1 - Buildroot | Digi-Key Electronics
- https://rickcarlino.com/2021/building-tiny-raspberry-pi-linux-images-with-buildroot.html
Yocto
- Yocto Project Quick Build
- 💎 Yocto Project Documentation
- Introduction to Embedded Linux Part 2 - Yocto Project | Digi-Key Electronics
- Build Linux Image for Raspberry Pi board using Yocto Project
- Yocto Project Tutorial Series (Basic to Advance) (YouTube Playlist)
- Udemy – Embedded Linux using Yocto
- 💎 Embedded Linux Systems with the Yocto Project - Rudolf J.Streif
- Embedded Linux Development using Yocto Project Cookbook - Alex Gonzalez
Multithreading & Parallel Processing
- Threading/Concurrency vs Parallelism
- Multi-threading and Parallel Programming
- Multitasking vs Multithreading vs Multiprocessing
- 💎 Programming with POSIX Threads - David Butenhof
- Parallel Programming and Performance Optimization With OpenMP
- Introduction to OpenMP - Tim Mattson (Intel) (YouTube Playlist)
- OpenCL Tutorials
- CUDA C++ Programming Guide
- C++ Concurrency in Action - Anthony Williams
Inter Process Communication (IPC)
- Inter Process Communication (IPC)
- What Is Inter-Process Communication In Linux?
- Udemy – Linux Inter Process Communication (IPC) from Scratch in C
- Udemy – Multi-Threading and IPC with Qt 5 C++
Qt Framework
Real-Time OS
RTOS Basics
- Bare-metal and RTOS Based Embedded Systems
- RTOS vs. Bare Metal: Navigating Performance, Complexity, and Efficiency
- The Pros and Cons of RTOS vs Bare Metal: Which Will You Choose?
- FreeRTOS vs Linux for Embedded Systems
- Real-Time Systems Concepts
- RTOS Fundamentals
- A Simple Scheduler via an Interrupt-driven Actor Model
- ARM Cortex-M RTOS Context Switching
- RTOS (YouTube Playlist)
- Beyond the RTOS (YouTube Playlist)
FreeRTOS
- FreeRTOS - Market leading RTOS
- 👶 Introduction to RTOS (YouTube Playlist)
- 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
- Zephyr® Project
- Why We Moved from FreeRTOS to Zephyr RTOS
- nRF Connect SDK
- ESP32 on Zephyr OS (YouTube Playlist)
μ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
- NuttX - The Apache Software Foundation
- NuttX Documentation
- Getting Started to NuttX (YouTube Playlist)
RT-Thread
- RT-Thread | An Open Source Embedded Real-time Operating System
- RT-Thread document center
- RT-Thread Beginners Guide (YouTube Playlist)
Mbed OS
QNX
VxWorks
- VxWorks | Industry Leading RTOS for Embedded Systems
- VxWorks Documentation
- VxWORKS-RTOS - Kumar M (YouTube Playlist)
Azure RTOS (ThreadX)
- Azure RTOS - Making embedded IoT development and connectivity easy
- Microsoft Azure RTOS documentation
- Azure RTOS ThreadX
17. 👁️Digital Signal Processing
DSP Fundamentals & Filter Design
- 💎 The Scientist and Engineer's Guide to Digital Signal Processing - Steven W. Smith
- 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 (YouTube Playlist)
- 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
- Schaum's Outline of Signals and Systems - Hwei P. Hsu
- 💎 Digital Signal Processing - John G. Proakis, Dimitris K. Manolakis
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 (YouTube Playlist)
- Control Systems - CircuitBread (YouTube Playlist)
- What is a PID Controller? | DigiKey
- PID Controller Explained
- Understanding PID Control (YouTube Playlist)
- 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 (YouTube Playlist)
- Getting Started with Simulink (YouTube Playlist)
- Udemy – MATLAB/SIMULINK Bible|Go From Zero to Hero!
18. 👁️Debugging
JTAG / SWD
- A Deep Dive into ARM Cortex-M Debug Interfaces
- Guide: Connecting your debugger
- STM32 + SWD + ST-Link + CubeIDE | Debugging on Custom Hardware Tutorial - Phil's Lab #4
GDB
- Advanced GDB Usage
- How do breakpoints even work?
- GNU GDB Debugger Command Cheat Sheet
- gdbgui - A browser-based frontend to gdb (gnu debugger)
- everyone needs to stop using print debugging (do THIS instead)
- GDB is REALLY easy! Find Bugs in Your Code with Only A Few Commands
- Introduction to ARM Semihosting
OpenOCD
- OpenOCD - GitHub repository
- This Is 100% How You Should Be Debugging | How to Use OpenOCD to Debug Embedded Software with GDB
19. 👣Testing
- Embedded Testing
- What is Embedded Testing in Software Testing?
- Verification vs Validation in Embedded Software
- Testing: Unit VS Integration VS Regression VS Acceptance
- Firmware Testing with Renode and GitHub Actions
- Balancing Test Coverage vs. Overhead
- 💎 Test Driven Development for Embedded C - James Grenning
Unit Testing
- Embedded C/C++ Unit Testing Basics
- Embedded C/C++ Unit Testing with Mocks
- Unit Testing for C (especially Embedded Software)
- GoogleTest - Google Testing and Mocking Framework
- Unit Testing Principles, Practices, and Patterns - Vladimir Khorikov
Integration Testing
- Hardware CI Arena
- Exclave: Hardware Testing in Mass Production, Made Easier
- Regression Testing of Embedded Systems
CI/CD Pipelines
- Intro to CI/CD Part 1: Getting Started with Docker | Digi-Key Electronics
- Intro to CI/CD Part 2: Getting Started with GitHub Actions | Digi-Key Electronics
- How to Build a Continuous Integration and Delivery Process for Embedded Software
- Continuous Integration & Continuous Delivery for Embedded Systems (Whitepaper)
- What is DevOps in an Embedded Device Company?
SIL / HIL Testing
Industry Standards & Certifications
- Intro to Embedded Development: Styles and Standards
- Safety Standards and Certifications for Embedded Systems Development
- Microchip University - An Introduction To The ISA/IEC 62443 Standard
20. 👁️Embedded AI
- Udemy – Getting Started with Embedded AI | Edge AI
- Intro to Edge AI: Machine Learning + IoT – Maker.io Tutorial | Digi-Key Electronics
AI & ML Basics
- A beginner's guide to artificial intelligence and machine learning
- 👶 Introduction to Machine Learning for Coders!
- Machine Learning Crash Course with TensorFlow APIs - Google
TensorFlow Lite
- 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 _________________
21. 👁️Embedded Security
Hardware Hacking
- 💎 Practical Hardware Pentesting - Jean-Georges Valle
- Hardware Hacking Tutorial (YouTube Playlist)
- 💎 The Hardware Hacking Handbook: Breaking Embedded Security with Hardware Attacks - Jasper van Woudenberg, Colin O'Flynn
Cryptography
- Microchip University - Cryptography Primer
- 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
- 💎 Handbook of Applied Cryptography - Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone
- Serious Cryptography: A Practical Introduction to Modern Encryption - Jean-Philippe Aumasson
- MOOC - Security Part2: Basics of cryptography (YouTube Playlist)
- MOOC - Security Part3 : STM32 security features (YouTube Playlist)
- 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
- Device Firmware Update Cookbook
- Saving bandwidth with delta firmware updates
- AVR231: AES Bootloader
- Blinky To Bootloader: Bare Metal Programming Series (YouTube Playlist)
- MOOC - Security Part4 : STM32 security in practice (YouTube Playlist)
- MOOC - Security Part5 : How to define your security needs (YouTube Playlist)
- MOOC - Security Part6: STM32 security ecosystem, from theory to practice (YouTube Playlist)
- TPM (Trusted Platform Module) - Computerphile
- Securing Embedded Linux Systems with TPM 2.0 - Philip Tricca, Intel
- TPM: Basic applications to embedded devices
- OTA for Embedded Linux Devices: A practical introduction
- 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 about 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.
Shop link kiện điện tử
https://shopee.vn/meltsee.vn?categoryId=100644&itemId=3605142304&page=3&sortBy=pop&upstream=search

Top comments (0)