Skip to content

Latest commit

 

History

History
1106 lines (754 loc) · 71 KB

README.md

File metadata and controls

1106 lines (754 loc) · 71 KB

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 my 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?

ISO/IEC/IEEE 24765 Standard:

computer system that is part of a larger system and performs some of the requirements of that system. For example, a computer system used in an aircraft or rapid transit system.

The hardware and software of an embedded system are usually minimized and optimized for specific functions. The embedded system includes at least one microcontroller, microprocessor or digital signal processor. The embedded system designed to optimize reliability, cost, size and power saving for applications.

"Making Embedded Systems" Book:

An embedded system is a computerized system that is purpose built for its application.

"Computer Organization and Embedded Systems" Book:

A physical system that employs computer control for a specific purpose, rather than for general-purpose computation, is referred to as an embedded system.

Analog Devices Glossary:

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.

Embedded Systems Glossary:

A combination of computer hardware and software, and perhaps additional mechanical or other parts, designed to perform a dedicated function.

In some cases, embedded systems are part of a larger system or product, as in the case of an antilock braking system in a car.

Roadmap

The roadmap is divided into three main sections: SOFTWARE, HARDWARE, and SOFT SKILLS.

The hardware and software sections overlap in many embedded job roles. Different job titles, such as "Embedded Software Engineer / Developer," "Firmware Engineer / Developer," and "Embedded Linux Software Engineer / Developer," tend to focus more on software. On the other hand, job roles like "Embedded Hardware Engineer" and "Hardware Design Engineer" primarily focus on hardware. Additionally, there are positions like "Embedded Systems Engineer" that require a good understanding of both hardware and software. It's crucial to understand that each company in the embedded industry may have specific requirements for a job role, regardless of its title.

With this in mind, the roadmap is designed to cover topics necessary for an "Embedded Systems Engineer" role. If you are aiming for an embedded software position, you should focus more on software skills in the roadmap. Conversely, if you are interested in an embedded hardware job, you should prioritize hardware skills.

In the embedded industry, all job roles require some soft skills, which cannot be acquired solely through reading or watching videos. Soft skills are developed through communication with others and facing various work challenges. Improving soft skills is not a one-size-fits-all approach. It varies depending on your individual characteristics and involves being aware of your own strengths and weaknesses. Enhancing these skills takes time and effort.

Remember that the emphasis on software or hardware skills may vary depending on the specific requirements of the company or job position.

Embedded Systems Engineering Roadmap

Learning Resources

⭐️ Featured Material

🔎 Searching is Your Super Power!

🎥 Courses and YouTube Contents

🛠️ IDEs

👨‍💻 VS Code Extensions

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.

🕹️ 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.

👨‍🏫 Educational Websites

⚒️ Projects

🗺️ Other Helpful Roadmaps

❓ Ask Questions


⚠️ Note: It is not necessary to read or watch all of the following materials, but it is important to study enough to have at least a basic understanding of the required topics. Of course, the more you study and practice, the more your knowledge will grow. This continuous learning process will gradually improve your skills and make you a better engineer.

Some of the resources mentioned here will just be used as references. Refer to them only when you need them.

Symbols Guide:

👶 : Indicates easy-to-understand and beginner-friendly references. Refer to them if you do not have much knowledge in embedded systems.

💎 : Indicates well-known references that have truly invaluable and comprehensive content. Refer to them if you want to deepen your understanding of a topic.


Soft Skills


Electronics

Basic Math & Calculus

Principles of Electric Circuits

Electronics Fundamentals

Digital Circuits & Logic Design

Computer Architecture


Using Test Equipment

Multimeter

Logic / Protocol Analyzer

Oscilloscope


Prototyping Skills

Breadboarding

Hardware Design Basics

PCB Design

Soldering


FPGA Design


Software Development Life Cycle (SDLC) Models

Agile / SCRUM

V-Model (V-cycle)


Programming Fundamentals

Algorithms & Data Structures

Design Patterns

State Machines / UML

Memory Management


Programming Languages

C

C++

Assembly

Python

Rust


Build Tools

GCC & Make

CMake

Bash Scripting

Docker


Version Control

Git

SVN (Subversion)


Microcontrollers

GPIO

ADC

DAC

Timers

PWM

Interrupts

Watchdog

Clock Management

DMA

Bootloader

Power Management

GUI Design

Functional Safety


Simulation / Emulation Tools


Interfaces, Protocols & Communication Technologies

‌Basic Protocols

UART
I2C
SPI
SDIO
I3C
1-Wire

Audio Protocols

I2S

Image & Video Protocols

CSI-2
HDMI

Wireless Protocols

Bluetooth / BLE
Wi-Fi
LoRa
Zigbee
Thread
Matter

Industrial Protocols

Modbus
RS485
CoAP & MQTT

High-Speed Protocols

Ethernet
USB
PCIe

Automotive Protocols

CAN

Network Protocols

Cellular Communication

GSM / LTE
LTE-M & NB-IoT

Memories

NOR / NAND Flash

eMMC

SD Card

EEPROM

SRAM / DRAM


Sensors & Actuators

Sensors

Actuators


Operating Systems

Operating System Fundamentals

Embedded Linux

Linux Kernel
Linux Device Drivers
U-Boot
Buildroot
Yocto
Multithreading & Parallel Processing
Inter Process Communication (IPC)
Qt Framework

Real-Time OS

RTOS Basics
FreeRTOS
Zephyr
μC/OS / Micriμm OS
NuttX
RT-Thread
Mbed OS
QNX
VxWorks
Azure RTOS (ThreadX)

Digital Signal Processing

DSP Fundamentals & Filter Design

Discrete Fourier Transform / FFT

Controls Systems / PID Control

MATLAB / Simulink


Debugging

JTAG / SWD

GDB

OpenOCD


Testing

Unit Testing

Integration Testing

CI/CD Pipelines

SIL / HIL Testing

Industry Standards & Certifications


Embedded AI

AI & ML Basics

TensorFlow Lite

tinyML


Embedded Security

Hardware Hacking

Cryptography

Secure Boot & Secure Firmware Update

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.