Files
m3y54m_Embedded-Engineering…/README.md
T
2023-08-01 13:14:05 +03:30

382 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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, I have carefully selected the topics based on current open job requirements and organized them 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 comprehension of hardware functionality and, as the well-known saying goes, **"Hardware is hard."** Therefore, patience and passion are the essential qualities that will help you overcome the various challenges encountered along this journey.
## Roadmap
![Embedded Systems Engineering Roadmap](https://github.com/m3y54m/Embedded-Engineering-Roadmap/releases/download/Rev.L-2023-07-31/Embedded-Engineering-Roadmap.png)
## Learning Resources
### ⭐️ Featured Material
#### Google
- [Searching is Your Super Power!](https://www.google.com)
#### Courses and Youtube Channels
- [Fastbit Embedded Brain Academy](https://fastbitlab.com/)
- [DigiKey YouTube Channel](https://www.youtube.com/@digikey)
- [Ben Eater YouTube Channel](https://www.youtube.com/@BenEater)
- [Phil’s Lab YouTube Channel](https://www.youtube.com/@PhilsLab)
#### Simulation
- [Wokwi - Online ESP32, STM32, Arduino Simulator](https://wokwi.com/)
#### Arduino
- [Arduino Language Reference](https://www.arduino.cc/reference/en/)
#### STM32
- [Getting Started with STM32 and Nucleo](https://youtube.com/playlist?list=PLEBQazB0HUyRYuzfi4clXsKUSgorErmBv)
#### Educational Websites
- [SparkFun Learn: Learn at SparkFun Electronics](https://learn.sparkfun.com/)
- [Random Nerd Tutorials | Learn ESP32, ESP8266, Arduino, and Raspberry Pi](https://randomnerdtutorials.com/)
> **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 each topic.
> Of course, the more you study and practice, the deeper and wider your knowledge will become.
> This will ultimately improve your skills as an engineer.
>
> Some the resources mentioned here will only be used as references. Refer to them only when you need them.
### Electronics Fundamentals
#### Basic Math & Calculus
- [Khan Academy - Calculus 1](https://www.khanacademy.org/math/calculus-1)
- [Calculus - Robert T Smith, Roland Minton](https://www.mheducation.com/highered/product/calculus-smith-minton/M9780073383118.html)
#### Electrical Circuits Basics
#### Electronic Components
- [#1099 How I learned electronics](https://youtu.be/Bgrubw6B_us)
- [Lessons in Electric Circuits](https://www.allaboutcircuits.com/textbook/)
- [Fundamentals of Electric Circuits - Charles K. Alexander, Matthew Sadiku](https://www.amazon.com/dp/1260226409?ref_=cm_sw_r_cp_ud_dp_Q11YHXNY2BK530RQZC4S)
- [Grob’s Basic Electronics - Mitchel E. Schultz](https://a.co/d/g1g73HV)
- [Make: Electronics: Learning by Discovery - Charles Platt](https://a.co/d/fbRoM1R)
- [Encyclopedia of Electronic Components - Charles Platt](https://a.co/d/83cSiU7)
- [The Art of Electronics - Paul Horowitz, Winfield Hill](https://artofelectronics.net/)
#### Digital Circuits & Logic Design
#### Computer Architecture
- [Build an 8-bit computer from scratch](https://eater.net/8bit/)
- [Computer Organization and Design: ARM Edition - David A. Patterson, John L. Hennessy](https://github.com/AbderrhmanAbdellatif/ComputerOrganization/blob/master/%5BThe%20Morgan%20Kaufmann%20Series%20in%20Computer%20Architecture%20and%20Design%5D%20David%20A.%20Patterson%2C%20John%20L.%20Hennessy%20-%20Computer%20Organization%20and%20Design_%20The%20Hardware%20Software%20Interface_%20ARM%20Edition%20(2016%2C%20Morgan%20Kaufmann).pdf)
- [Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris](https://a.co/d/4otoVvI)
- [Digital Design - Morris Mano](https://www.portcity.edu.bd/files/636444791235373856_Digitallogicdesign.pdf)
- [Embedded Systems Architecture - Tammy Noergaard](https://www.oreilly.com/library/view/embedded-systems-architecture/9780123821966/)
### Using Test Equipment
#### Multimeter
- [Learn How to Use a Multimeter!](https://youtu.be/4lAyzRxsbDc)
- [How to Use a Multimeter ](https://learn.sparkfun.com/tutorials/how-to-use-a-multimeter/all)
#### Logic Analyzer
- [Instrument Basics: Logic Analyzer](https://youtu.be/u1DYs2I-_lU)
#### Oscilloscope
- [What’s an OSCILLOSCOPE?](https://youtu.be/DgYGRtkd9Vs)
- [How to Use an Oscilloscope](https://youtu.be/u4zyptPLlJI)
- [How to use an oscilloscope / What is an oscilloscope / Oscilloscope tutorial](https://youtu.be/CzY2abWCVTY)
### Prototyping Skills
#### PCB Design
- [How To Learn PCB Design (My Thoughts, Journey, and Resources) - Phil's Lab #87](https://youtu.be/aODkA2mrimQ)
- [KiCad 6 STM32 PCB Design Full Tutorial - Phil's Lab #65](https://youtu.be/aVUqaB0IMh4)
- [Intro to KiCad](https://www.youtube.com/watch?v=vaCVh2SAZY4&list=PLEBQazB0HUyR24ckSZ5u05TZHV9khgA1O)
- [Altium Academy YouTube Channel](https://www.youtube.com/@AltiumAcademy)
- [Microcontroller-Based Hardware Design With Altium Designer](https://www.youtube.com/playlist?list=PL3aaAq2OJU5HcbClqrOhqBDozF7HmxV-s)
- [Robert Feranec YouTube Channel](https://www.youtube.com/@RobertFeranec)
- [PCB Design for EMI & SI - Phil's Lab #64](https://www.youtube.com/watch?v=VtzPL8wQ8-E)
- [PCB Design for Advanced Users](https://youtube.com/playlist?list=PL3aaAq2OJU5EWfYT_Z93tc9pBF_Sidba_)
#### Soldering
- [How To Solder - Electronics with Becky Stern | Digi-Key Electronics](https://www.youtube.com/watch?v=sS4v2hIFp9I)
- [HOW TO SOLDER! (Beginner's Guide)](https://www.youtube.com/watch?v=3jAw41LRBxU)
- [Soldering Crash Course: Basic Techniques, Tips and Advice!](https://www.youtube.com/watch?v=6rmErwU5E-k)
- [How to Solder Through-Hole Components - Another Teaching Moment | DigiKey Electronics](https://www.youtube.com/watch?v=DJH7VLGJ4fs)
- [How to Solder QFN MLF Package by Hand (Using a Hot Air Rework Station) | Digi-Key Electronics](https://youtu.be/X3Rc1s6EpSI)
- [From Solderless Breadboard to Soldered Circuit - Electronics with Becky Stern | Digi-Key Electronics](https://www.youtube.com/watch?v=F9Krq7seV1g)
#### Using Breadboards
- [Everything You Need to Know about Breadboards](https://www.youtube.com/watch?v=mE33WpRWrXs)
- [How to Use a Breadboard](https://youtu.be/6WReFkfrUIk)
### FPGA Design
- [Introduction to FPGA](https://youtube.com/playlist?list=PLEBQazB0HUyT1WmMONxRZn9NmQ_9CIKhb)
- [FPGA Fundamentals](https://nandland.com/fpga-101/)
- [FPGA Embedded Design, Part 1 - Verilog](https://www.udemy.com/course/fpga-embedded-design-verilog/)
- [FPGA Embedded Design, Part 2 - Basic FPGA Training](https://www.udemy.com/course/fpga-embedded-design-fpgas/)
- [FPGA Embedded Design, Part 3 - EDA Tools](https://www.udemy.com/course/fpga-embedded-design-eda-tools/)
- [FPGA Embedded Design, Part 4 - Microprocessor Design](https://www.udemy.com/course/fpga-embedded-design-cpu/)
### Programming Fundamentals
#### Algorithms & Data Structures
- [Grokking Algorithms - Aditya Y. Bhargava ](https://www.manning.com/books/grokking-algorithms)
- [Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein](http://mitpress.mit.edu/9780262367509/introduction-to-algorithms/)
- [Data Structures in C](https://www.sanfoundry.com/c-programming-examples-data-structures/)
- [Data Structures - Full Course Using C and C++](https://www.youtube.com/watch?v=B31LgI4Y4DQ)
#### Design Patterns
- [Embedded Systems State Machines & Data Structures](https://www.udemy.com/course/embedded-systems-state-machines-data-structures-like-a-pro/)
- [Design Patterns for Embedded Systems in C - Bruce Powel Douglass](https://www.oreilly.com/library/view/design-patterns-for/9781856177078/)
#### State Machines / UML
- [Embedded System Design using UML State Machines](https://www.udemy.com/course/embedded-system-design-using-uml-state-machines/)
#### Memory Allocation
- [Understanding the C runtime memory model](https://www.youtube.com/watch?v=3F3lp_F2YpQ)
- [Dynamic Memory Allocation | C Programming Tutorial](https://www.youtube.com/watch?v=R0qIYWo8igs)
### Programming Languages
#### C
- [W3Schools C Tutorial](https://www.w3schools.com/c/index.php)
- [Microcontroller Embedded C Programming: Absolute Beginners](https://www.udemy.com/course/microcontroller-embedded-c-programming/)
- [The C Programming Language - Brian W. Kernighan, Dennis M. Ritchie ](https://www.amazon.com/dp/0131103628?ref_=cm_sw_r_cp_ud_dp_KRZ8M1WTXWVG0HMSRBXA)
- [C How to Program - Paul Deitel, Harvey Deitel ](https://deitel.com/c-how-to-program-9-e/)
- [Effective C - An Introduction to Professional C Programming - Robert C. Seacord](https://nostarch.com/Effective_C)
#### C++
- [C++ Tutorial for Beginners - Full Course](https://www.youtube.com/watch?v=vLnPwxZdW4Y)
- [C++ YouTube Playlist by The Cherno](https://youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb)
- [Learn Modern C++ by Building an Audio Plugin (w/ JUCE Framework) - Full Course](https://www.youtube.com/watch?v=i_Iq4_Kd7Rc)
- [C++ Concurrency in Action - Anthony Williams ](https://www.manning.com/books/c-plus-plus-concurrency-in-action)
#### Assembly
- [Assembly Language Programming with ARM – Full Tutorial for Beginners](https://www.youtube.com/watch?v=gfmRrPjnEw4)
#### Python
- [Real Python: Python Tutorials](https://realpython.com/)
- [Python Crash Course - Eric Matthes](https://a.co/d/hSMTJwE)
- [MicroPython - Python for microcontrollers](https://micropython.org/)
- [CircuitPython](https://circuitpython.org/)
#### Rust
- [The Embedded Rust Book](https://docs.rust-embedded.org/book/)
### Build System
#### GCC
#### Makefile
- [GCC and Make - Compiling, Linking and Building C/C++ Applications](https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html)
#### CMake
- [How to CMake Good](https://youtube.com/playlist?list=PLK6MXr8gasrGmIiSuVQXpfFuE1uPT615s)
#### Bash Script
- [Bash scripting cheatsheet](https://devhints.io/bash)
- [Bash Scripting Tutorial for Beginners](https://www.youtube.com/watch?v=tK9Oc6AEnR4)
#### Docker
- [Introduction to Docker for the Embedded Developer](https://www.youtube.com/watch?v=Fz7ou-VBk-w)
### Version Control
#### Git
- [Git Tutorial for Beginners: Learn Git in 1 Hour](https://www.youtube.com/watch?v=8JJ101D3knE)
- [Git for Professionals Tutorial - Tools & Concepts for Mastering Version Control with Git](https://www.youtube.com/watch?v=Uszj_k0DGsg)
### Microcontrollers
#### GPIO
#### ADC
#### DAC
#### Timers
#### PWM
#### Interrupts
#### Watchdog
#### DMA
#### Power Management
#### Bootloader
- [How to Create a Super Simple Bootloader](https://www.youtube.com/watch?v=OkUQ3iMmiYQ&list=PLnMKNibPkDnEb1sphpdFJ3bR9dNy7S6mO)
- [STM32Fx Microcontroller Custom Bootloader Development](https://www.udemy.com/course/stm32f4-arm-cortex-mx-custom-bootloader-development/)
#### Functional Safety
- [Functional Safety According to ISO 26262 - Crash Course](https://www.udemy.com/course/iso-26262-crash-course/)
### Operating Systems
#### Operating System Fundamentals
- [Operating Systems: Three Easy Pieces - Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau](https://pages.cs.wisc.edu/~remzi/OSTEP/)
#### Embedded Linux
- [Introduction to Embedded Linux](https://youtube.com/playlist?list=PLEBQazB0HUyTpoJoZecRK6PpDG31Y7RPB)
##### Linux Kernel
- [The Linux Programming Interface - Michael Kerrisk](https://man7.org/tlpi/)
##### Linux Device Drivers
##### U-Boot
##### BuildRoot
##### Yocto
##### Qt
#### Real-Time OS
##### FreeRTOS
- [FreeRTOS - Market leading RTOS](https://www.freertos.org)
- [Introduction to RTOS](https://www.youtube.com/playlist?list=PLEBQazB0HUyQ4hAPU1cJED6t3DU0h34bz)
##### Zephyr
- [Zephyr® Project](https://www.zephyrproject.org/)
- [ESP32 on Zephyr OS](https://www.youtube.com/playlist?list=PLEQVp_6G_y4iFfemAbFsKw6tsGABarTwp)
##### NuttX
- [NuttX - The Apache Software Foundation!](https://nuttx.apache.org/)
- [Getting Started to NuttX](https://www.youtube.com/playlist?list=PLd73yQk5Fd8JEsVD-lhwYRQKVu6glfDa8)
##### RT-Thread
- [RT-Thread | An Open Source Embedded Real-time Operating System](https://www.rt-thread.io/)
- [RT-Thread Beginners Guide](https://youtube.com/playlist?list=PLXUV89C_M3G5KVw2IerI-pqApdSM_IaZo)
##### QNX
- [BlackBerry QNX: Embedded OS, Support, and Services](https://blackberry.qnx.com/en)
##### VxWorks
- [VxWorks | Industry Leading RTOS for Embedded Systems](https://www.windriver.com/products/vxworks)
### Digital Signal Processing
#### Controls Systems
#### PID Loops
#### Digital Filters (FIR / IIR)
#### Fourier Transform / FFT
#### MATLAB / Simulink
### Debugging
#### JTAG / SWD
#### GDB
#### OpenOCD
### Testing
- [Intro to CI/CD](https://youtu.be/1nxGcfIm-TU)
#### Unit Testing
- [Embedded C/C++ Unit Testing with Mocks](https://interrupt.memfault.com/blog/unit-test-mocking)
#### Integration Testing
#### SIL / HIL Testing
- [Embedded CI/CD with HIL Testing](https://youtube.com/playlist?list=PL4cGeWgaBTe1uwiqIAc6fwPzPpvgPZI2J)
### Embedded AI
- [Intro to Edge AI: Machine Learning + IoT – Maker.io Tutorial | Digi-Key Electronics](https://www.youtube.com/watch?v=Ejld8XZmvwE)
#### AI/ML Basics
- [Getting Started with Embedded AI | Edge AI](https://www.udemy.com/course/getting-started-with-embedded-ai-hands-on-experience/)
#### TensorFlow
- [Getting Started with TensorFlow and Keras – Maker.io | Digi-Key Electronics](https://www.youtube.com/watch?v=HCG3hFe1KYY)
- [Intro to TensorFlow Lite Part 1: Wake Word Feature Extraction – Maker.io | Digi-Key Electronics](https://www.youtube.com/watch?v=0fn7pj7Dutc)
- [Intro to TensorFlow Lite Part 2: Speech Recognition Model Training – Maker.io | Digi-Key Electronics](https://www.youtube.com/watch?v=yv_WVwr6OkI)
#### tinyML
- [Intro to TinyML Part 1: Training a Neural Network for Arduino in TensorFlow | Digi-Key Electronics](https://www.youtube.com/watch?v=BzzqYNYOcWc)
- [Intro to TinyML Part 2: Deploying a TensorFlow Lite Model to Arduino | Digi-Key Electronics](https://www.youtube.com/watch?v=dU01M61RW8s)
### Security & Cryptography
#### Cryptographic Algorithms
#### Hash Algorithms
#### Secure Boot
#### Secure OTA Update
## History
The idea of creating this roadmap came from [vazeri / Embedded-Engineering-RoadMap-2018](https://github.com/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](https://github.com/m3y54m/Embedded-Engineering-Roadmap-Archived) which is now archived. Early versions of the roadmap were created using [Balsamiq Wireframes](https://balsamiq.com) 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](https://creativecommons.org/licenses/by-sa/4.0/) 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](https://www.reddit.com/r/embedded) subreddit for their suggestions that helped in improving this roadmap.
## Contribution
If you think that this map can be improved in anyway, please start an issue or pull request. I’ll be maintaining and updating this repository frequently.
The source file is created using [Microsoft Visio](https://office.com/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](https://draw.io) which can import and export `.vsdx` files.