https://github.com/m3y54m/embedded-engineering-roadmap
Comprehensive roadmap for aspiring Embedded Systems Engineers, featuring a curated list of learning resources
https://github.com/m3y54m/embedded-engineering-roadmap
electronics electronics-engineering embedded embedded-developer embedded-engineer embedded-software embedded-systems firmware firmware-engineer hardware roadmap software-engineer
Last synced: 4 months ago
JSON representation
Comprehensive roadmap for aspiring Embedded Systems Engineers, featuring a curated list of learning resources
- Host: GitHub
- URL: https://github.com/m3y54m/embedded-engineering-roadmap
- Owner: m3y54m
- License: cc-by-sa-4.0
- Created: 2023-07-25T14:14:27.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2025-01-15T21:00:47.000Z (over 1 year ago)
- Last Synced: 2025-02-16T04:02:23.626Z (over 1 year ago)
- Topics: electronics, electronics-engineering, embedded, embedded-developer, embedded-engineer, embedded-software, embedded-systems, firmware, firmware-engineer, hardware, roadmap, software-engineer
- Homepage:
- Size: 3.8 MB
- Stars: 5,434
- Watchers: 144
- Forks: 566
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Embedded Systems Engineering Roadmap
[](https://github.com/m3y54m/Embedded-Engineering-Roadmap/stargazers)
[](https://github.com/m3y54m/Embedded-Engineering-Roadmap/forks)
[](https://github.com/m3y54m/Embedded-Engineering-Roadmap/watchers)
[](https://github.com/m3y54m/Embedded-Engineering-Roadmap/graphs/contributors)
[](https://github.com/m3y54m/Embedded-Engineering-Roadmap/releases/latest)
[](https://github.com/m3y54m/Embedded-Engineering-Roadmap/releases/latest)
[](https://github.com/m3y54m/Embedded-Engineering-Roadmap/releases)
This roadmap is designed to help beginners aspiring to build a career as an **Embedded Engineer/Developer**, as well as assist current practitioners in expanding their skills.
Embedded engineering demands a solid understanding of hardware functionality as well as software development and programming skills. If you really want to pursue this career you must be highly motivated and passionate about it. As the well-known saying goes, "Hardware is hard!". But don't panic and be patient for the challenges you may encounter along this exciting journey. By dedicating enough time and effort practicing and doing projects you will soon find yourself as a real embedded engineer! ๐
## โ What is an Embedded System?
โถ๏ธ [ISO/IEC/IEEE 24765 Standard:](https://www.iso.org/obp/ui/en/#iso:std:iso-iec-ieee:24765:ed-2:v1:en)
> **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:](https://www.oreilly.com/library/view/making-embedded-systems/9781449308889/)
> An embedded system is a **computerized system** that is **purpose built for its application**.
โถ๏ธ ["Computer Organization and Embedded Systems" Book:](https://a.co/d/2lt4Svf)
> 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:](https://www.analog.com/en/design-center/glossary/embedded-system.html)
> 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:](https://barrgroup.com/embedded-systems/glossary-e)
> 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.
## ๐บ๏ธ The Roadmap

The embedded systems engineering roadmap is structured into three fundamental areas: **SOFTWARE**, **HARDWARE**, and **SOFT SKILLS**.
While the intersection of hardware and software is prevalent in embedded systems, specific job titles tend to emphasize one aspect over the other. For instance, roles like "Embedded Software Engineer/Developer," "Firmware Engineer/Developer," and "Embedded Linux Engineer/Developer" predominantly focus on software development. In contrast, positions such as "Embedded Hardware Engineer" and "Hardware Design Engineer" primarily deal with hardware design and electronics. Moreover, there are roles like "Embedded Systems Engineer" that necessitate a comprehensive understanding of both hardware and software.
It's crucial to note that each company in the embedded industry may have unique requirements for a given job title. Therefore, it's essential to tailor your focus based on your career aspirations. If you're seeking an embedded software position, prioritize the software-related skills outlined in the roadmap. Conversely, if you're interested in an embedded hardware job, concentrate on hardware skills and dedicate more time to learning electronics.
The roadmap provides a comprehensive guide to the essential topics for a typical "Embedded Systems Engineer" role. By delving into both software and hardware aspects, you can develop the necessary skills to thrive in this dynamic field. However, if you have a clear preference for software or hardware, you can tailor your learning path accordingly.
๐ For more information about the history behind this roadmap, read this article: [Embedded Systems Roadmap: Bridging the Gap](https://interrupt.memfault.com/blog/embedded-systems-roadmap-bridging-the-gap)
> [!NOTE]
> **Remember that the importance of individual software and hardware skills can differ depending on the specific requirements of the company and the job role.**
> [!TIP]
> To differentiate between the types of learning resources and the quality of their content, specific symbols are used before each item.
>
> **Resource types:**
>
> - ๐ : Books
> - ๐๏ธ : Videos
> - ๐ : Write-ups, articles, and blog posts
> - ๐ : Other links that do not fit into any of the above categories
>
> **Content quality symbols:**
>
> - ๐ถ : Easy-to-understand and beginner-friendly resources. Refer to them if you do not have prior knowledge in a topic.
> - ๐ : Well-known references that have truly invaluable and comprehensive content. Refer to them if you want to deepen your understanding of a topic.
> [!IMPORTANT]
> **This repository is not affiliated with or financially supported by any content creator, publisher, or organization. We do not endorse or recommend any specific paid resources. Both free and paid resources are included to provide a range of options, allowing you to choose what best suits your needs and preferences.**
## ๐ Don't Know Where to Start!
**If you feel overwhelmed by the extensive list of topics in the roadmap, you're not alone. Before delving too deeply, let's ease into it with some simple starter projects. Learning embedded systems engineering takes time and effort. Don't get discouraged if you don't understand something right away. Keep practicing and you will eventually get there.**
### โ๏ธ Projects
Engaging in hands-on projects is the most effective approach to learning. Rather than solely relying on theoretical knowledge from books or articles. Undertaking projects allows for practical learning experiences. Even a seemingly basic project has the potential to teach you more than hours of aimless reading. You can refer to books, articles, and courses when faced with difficulties in understanding the problems in real-world projects.
Don't try to build a complex project right away. Start with small, manageable projects to get your feet wet.
- [๐ Random Nerd Tutorials | Learn ESP32, ESP8266, Arduino, and Raspberry Pi](https://randomnerdtutorials.com/)
- [๐ Last Minute Engineers](https://lastminuteengineers.com/)
- [๐ 51 STM32 Projects & Tutorials for Beginners and Up - Hackster.io](https://www.hackster.io/stm32/projects)
- [๐ STM32 (STM32F103C8) Projects & Tutorials](https://circuitdigest.com/stm32-projects-and-tutorials)
- [๐ ElectronicWings Projects](https://www.electronicwings.com/projects)
- [๐ STM32 Firmware - Philโs Lab (YouTube Playlist)](https://youtube.com/playlist?list=PLXSyc11qLa1a4Tqbz228dPZfMrs-KRpzA)
- [๐ Raspberry Pi Based Embedded Project Ideas](https://www.rs-online.com/designspark/raspberry-pi-based-embedded-project-ideas)
- [๐ Embedded Linux On ARM | Projects](https://www.emertxe.com/embedded-systems/embedded-linux-on-arm/elarm-projects/)
- [๐ Embedded System Project Series - Artful Bytes (YouTube Playlist)](https://www.youtube.com/playlist?list=PLS_iNJJVTtiRV0DZRDcTHnvAuDrKGPN40)
- [๐ ESP32 ESP-IDF Tutorials & IoT Protocols](https://esp32tutorials.com/)
### ๐ Search and Ask!
Use search engines to find the answers to your questions.
- [๐ Google](https://www.google.com)
- [๐ Bing](https://www.bing.com/)
- [๐ DuckDuckGo](https://duckduckgo.com/)
If you can't find what you're looking for using search engines, AI chatbots can also provide assistance. Keep in mind that AI may provide incorrect answers in some cases. It's best to confirm any answers with more reliable references.
- [๐ DuckDuckGo AI Chat](https://duckduckgo.com/?q=DuckDuckGo&ia=chat)
- [๐ Microsoft Copilot](https://copilot.microsoft.com)
- [๐ Google Gemini](https://gemini.google.com)
- [๐ ChatGPT](https://chat.openai.com)
- [๐ Claude AI](https://claude.ai/chats)
- [๐ Poe - Fast, Helpful AI Chat](https://poe.com)
If you have reservations about relying on AI advice alone, you can also ask your questions from real people:
- [๐ Electrical Engineering Stack Exchange](https://electronics.stackexchange.com/)
- [๐ Reddit ยท r/embedded](https://www.reddit.com/r/embedded/)
### โณ๏ธ Career Development
As an embedded systems engineer, it's essential to stay up-to-date with industry trends, best practices, and new technologies to advance your career. Here are some resources to help you achieve your career goals:
- [๐ EmbeddedJobs](https://embedded.jobs/jobs) - A job board focused exclusively on Embedded Systems job market.
### ๐ฅ Courses and YouTube Contents
You may have heard that YouTube is a university. And it's true - there is an extensive amount of invaluable free content on embedded systems available on YouTube. You'll also find some excellent free courses through Coursera and EdX. Additionally, Udemy offers some high-quality paid course options.
- [๐๏ธ DigiKey (YouTube Channel)](https://www.youtube.com/@digikey)
- [๐๏ธ Coursera - Introduction to Embedded Systems Software and Development Environments](https://www.coursera.org/learn/introduction-embedded-systems)
- [๐๏ธ Coursera - Embedded Software and Hardware Architecture](https://www.coursera.org/learn/embedded-software-hardware)
- [๐๏ธ Fastbit Embedded Brain Academy](https://fastbitlab.com/)
- [๐๏ธ Modern Embedded Systems Programming Course (YouTube Playlist)](https://www.youtube.com/playlist?list=PLPW8O6W-1chwyTzI3BHwBLbGQoPFxPAPM)
- [๐๏ธ element14 presents (YouTube Channel)](https://www.youtube.com/@element14presents)
- [๐๏ธ Ben Eater (YouTube Channel)](https://www.youtube.com/@BenEater)
- [๐๏ธ Philโs Lab (YouTube Channel)](https://www.youtube.com/@PhilsLab)
- [๐๏ธ Embedded Systems - Jacob Sorber (YouTube Playlist)](https://www.youtube.com/playlist?list=PL9IEJIKnBJjEcPAz6fss-Hx0TLytCOMVC)
- [๐๏ธ edX - Embedded Systems - Shape The World: Microcontroller Input/Output](https://learning.edx.org/course/course-v1:UTAustinX+UT.6.10x+3T2022/home)
- [๐๏ธ edX - Embedded Systems - Shape The World: Multi-Threaded Interfacing](https://www.edx.org/learn/computer-programming/the-university-of-texas-at-austin-embedded-systems-shape-the-world-multi-threaded-in)
- [๐๏ธ Low Byte Productions](https://www.youtube.com/@lowbyteproductions)
### ๐น๏ธ 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](https://github.com/arduino/ArduinoCore-API) takes care of most of the low-level hardware-associated operations that you, as an embedded engineer, should be able to handle yourself or at least have a clear understanding of. If you want to become a professional embedded developer, you should be able to effectively use industry-standard APIs and SDKs provided and approved by microcontroller vendors, such as CMSIS for ARM Cortex-M microcontrollers, STM32Cube for STM32, ESP-IDF for Espressif microcontrollers, etc.
- [๐ Getting Started with Arduino](https://docs.arduino.cc/learn/starting-guide/getting-started-arduino)
- [๐ ArduinoMap (Open-source Arduino course)](https://arduinomap.me/)
- [๐๏ธ All New Arduino R4 WiFi LESSONS for Absolute Beginners (YouTube Playlist)](https://www.youtube.com/playlist?list=PLGs0VKk2DiYyn0wN335MXpbi3PRJTMmex)
- [๐๏ธ New Arduino Tutorials (YouTube Playlist)](https://youtube.com/playlist?list=PLGs0VKk2DiYw-L-RibttcvK-WBZm8WLEP)
- [๐๏ธ Arduino in a commercial product?](https://www.youtube.com/watch?v=c5LzsqeSCAc)
- [๐๏ธ Arduino Project to Product (YouTube Playlist)](https://www.youtube.com/playlist?list=PLEBQazB0HUyQd6Fsf5NQ75M9llbi1_j_8)
### ๐จโ๐ซ Educational Websites
- [๐ DeepBlueMbedded](https://deepbluembedded.com/)
- [๐๐ Interrupt Blog by Memfault](https://interrupt.memfault.com/blog/)
- [๐๐ EmbeddedRelated.com](https://www.embeddedrelated.com/)
- [๐ ElectronicWings - Hardware Developers Community](https://www.electronicwings.com/)
- [๐ Microchip University](https://mu.microchip.com/)
- [๐ Nordic Developer Academy](https://academy.nordicsemi.com/)
- [๐ Electronics Tutorials](https://www.electronics-tutorials.ws)
- [๐ SparkFun Learn: Learn at SparkFun Electronics](https://learn.sparkfun.com/)
- [๐ Adafruit Learning System](https://learn.adafruit.com/)
- [๐ STM32 World](https://stm32world.com)
- [๐ ControllersTech](https://controllerstech.com/)
### ๐บ๏ธ Other Helpful Roadmaps
- [๐ Embedded Artistry Beginners Roadmap](https://embeddedartistry.com/beginners/)
- [๐ Embedded Systems Skill Tree](https://github.com/sjpiper145/MakerSkillTree/tree/main/Embedded%20Systems%20Skill%20Tree)
- [๐ PCB Design Skill Tree](https://github.com/sjpiper145/MakerSkillTree/tree/main/PCB%20Design%20Skill%20Tree)
- [๐ FPGA / ASIC Engineering Roadmap](https://github.com/m3y54m/FPGA-ASIC-Roadmap)
### ๐ ๏ธ IDEs
- [๐ Keil MDK & ยตVision](https://www.keil.com/)
- [๐ IAR Embedded Workbench](https://www.iar.com)
- [๐ STM32CubeIDE](https://www.st.com/en/development-tools/stm32cubeide.html)
- [๐ Microchip Studio for AVRยฎ and SAM Devices](https://www.microchip.com/en-us/tools-resources/develop/microchip-studio)
- [๐ MPLABยฎ X IDE](https://www.microchip.com/en-us/tools-resources/develop/mplab-x-ide)
- [๐ MCUXpresso IDE](https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE)
### ๐จโ๐ป VS Code Extensions
- [๐ Cortex-Debug](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug)
- [๐ STM32 VS Code Extension](https://marketplace.visualstudio.com/items?itemName=stmicroelectronics.stm32-vscode-extension)
- [๐ Espressif IDF](https://marketplace.visualstudio.com/items?itemName=espressif.esp-idf-extension)
- [๐ MCUXpresso for VS Code](https://marketplace.visualstudio.com/items?itemName=NXPSemiconductors.mcuxpresso)
### ๐ 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 - A professional collaborative platform for embedded development](https://platformio.org/)
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.
## ๐ Learning Resources
> [!WARNING]
> It is not necessary to read all the books, articles, or watch all the videos you see here. If you try to do so, you will finally get tired and disappointed. You cannot study all the available content here in a reasonable time because it may take years. It is important to study enough to have at least a basic understanding of the required topics. Of course, the more time you dedicate to studying and doing projects, the more profound your knowledge and expertise will become.
>
> Some of the resources mentioned here will just be used as references. Refer to them only when you need them.
_________________
### โณ๏ธ Soft Skills
Similar to other professions, embedded engineers require soft skills that can't be solely obtained from reading or watching videos. These skills are cultivated through interactions and tackling various work obstacles. Improving soft skills is not a one-size-fits-all approach. It will vary based on one's individual traits and requires self-awareness of your strengths and areas for growth. Enhancing these skills takes time and effort.
- [๐ Soft Skills For Embedded Systems Software Developers](https://www.embeddedrelated.com/showarticle/1470.php)
- [๐ 10 Skills Every Embedded Engineer Should Have](https://medium.com/@lanceharvieruntime/10-skills-every-embedded-engineer-should-have-dcb867095b91)
_________________
### โณ๏ธ Electronics
#### ๐ต Basic Calculus
- [๐๏ธ Khan Academy - Calculus 1](https://www.khanacademy.org/math/calculus-1)
- [๐๐ถ Calculus For Dummies - Mark Ryan](https://a.co/d/cyvZqE1)
- [๐๐ Thomas' Calculus](https://a.co/d/gFcCC37)
#### ๐ต Principles of Electric Circuits
- [๐๐ถ Lessons in Electric Circuits (All About Circuits)](https://www.allaboutcircuits.com/textbook/)
- [๐๐ถ๐ Electronics Tutorials](https://www.electronics-tutorials.ws)
- [๐๐ถ๐ Fundamentals of Electric Circuits - Charles K. Alexander, Matthew Sadiku](https://www.amazon.com/dp/1260226409?ref_=cm_sw_r_cp_ud_dp_Q11YHXNY2BK530RQZC4S)
- [๐๐ถ๐ Principles of Electric Circuits: Conventional Current Version - Thomas L Floyd, David M. Buchla](https://a.co/d/32T2t2X)
- [๐๏ธ๐ Basic Circuit Theory I (By Prof. Razavi) (YouTube Playlist)](https://www.youtube.com/playlist?list=PL9KyzjPFbwH37w22z-UHVEt37pdJHjZ7x)
#### ๐ต Electronics Fundamentals
- [๐๐ถ๐ Build Electronic Circuits - รyvind Nydal Dahl](https://www.build-electronic-circuits.com/)
- [๐๏ธ๐ถ Electronic Basics - GreatScott! (YouTube Playlist)](https://youtube.com/playlist?list=PLAROrg3NQn7cyu01HpOv5BWo217XWBZu0)
- [๐๐ถ Make: Electronics: Learning by Discovery - Charles Platt](https://a.co/d/fbRoM1R)
- [๐๐ถ๐ Electronic Devices: Conventional Current Version - Thomas Floyd, David Buchla, Steven Wetterling](https://a.co/d/1dsS0vx)
- [๐๐ถ๐ Electronics Fundamentals: Circuits, Devices & Applications - Thomas L Floyd, David M. Buchla, Gary D. Snyder](https://a.co/d/4Ye5m8h)
- [๐๐ถ Practical Electronics for Inventors - Paul Scherz, Simon Monk](https://a.co/d/1QfSN8j)
- [๐๐ The Art of Electronics - Paul Horowitz, Winfield Hill](https://artofelectronics.net/)
- [๐ Hereโs a Quick Way to Know about Major Electronic Components](https://www.elprocus.com/major-electronic-components/)
- [๐ Encyclopedia of Electronic Components - Charles Platt](https://a.co/d/83cSiU7)
#### ๐ต Digital Design
- [๐๐ถ Tiny Tapeout > Digital Design Guide](https://tinytapeout.com/digital_design/)
- [๐๐ Digital Design - Morris Mano, Michael Ciletti](https://a.co/d/c3tBaoc)
- [๐๐ถ๐ Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris](https://a.co/d/4otoVvI)
- [๐๐ถ๐ Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris](https://a.co/d/61l7Jtb)
- [๐๐ถ Digital Fundamentals - Thomas L. Floyd](https://a.co/d/2lgJKNX)
#### ๐ต Computer Architecture
Computer architecture is the backbone of embedded systems, governing the hardware and software interactions. Embedded developers need a grasp of computer architecture to design, develop, and debug embedded software effectively. Expertise in ARM and RISC-V, two prevalent instruction set architectures (ISAs) in embedded systems, is paramount for embedded developers. ARM is the dominant ISA, while RISC-V's open-source nature and flexibility are gaining traction.
- [๐๐ถ๐ Computer Organization and Design: ARM Edition - David A. Patterson, John L. Hennessy](https://a.co/d/8YPUXG7)
- [๐๐ถ๐ Digital Design and Computer Architecture: ARM Edition - Sarah Harris, David Harris](https://a.co/d/4otoVvI)
- [๐๐ถ๐ Digital Design and Computer Architecture: RISC-V Edition - Sarah Harris, David Harris](https://a.co/d/61l7Jtb)
- [๐๐ถ The Elements of Computing Systems - Noam Nisan, Shimon Schocken](https://a.co/d/cX6jkLl)
- [๐ Computer Organization and Embedded Systems - Carl Hamacher, Zvonko Vranesic, Safwat Zaky, Naraig Manjikian](https://a.co/d/2lt4Svf)
- [๐ Embedded Systems Architecture - Tammy Noergaard](https://www.oreilly.com/library/view/embedded-systems-architecture/9780123821966/)
- [๐ Embedded Systems Architecture - Daniele Lacamera](https://www.packtpub.com/product/embedded-systems-architecture-second-edition/9781803239545)
- [๐ The Definitive Guide to ARMยฎ Cortexยฎ-M0 and Cortex-M0+ Processors - Joseph Yiu](https://www.oreilly.com/library/view/the-definitive-guide/9780128032787/)
- [๐ The Definitive Guide to ARMยฎ Cortexยฎ-M3 and Cortexยฎ-M4 Processors - Joseph Yiu](https://www.oreilly.com/library/view/the-definitive-guide/9780124080829/)
- [๐ Build an 8-bit computer from scratch](https://eater.net/8bit/)
_________________
### โณ๏ธ Using Test Equipment
Embedded systems often require specialized test equipment to verify their functionality and performance. This equipment includes multimeters, oscilloscopes, logic analyzers, function generators, power supplies, and other tools that allow engineers to measure signals, inject stimuli, and monitor the behavior of embedded systems.
#### ๐ต 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 / Protocol 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)
- [๐๏ธ Understanding EMI Debugging with Oscilloscopes](https://www.youtube.com/watch?v=x1rn5YNLmVw)
_________________
### โณ๏ธ Prototyping Skills
While hardware design and prototyping are primarily the responsibility of electronic hardware design engineers, embedded software engineers can benefit from a basic understanding of these concepts. This knowledge can be instrumental in identifying and resolving hardware-related issues during embedded system debugging. By having a grasp of hardware principles, embedded software engineers can effectively pinpoint the root causes of problems, leading to quicker and more efficient troubleshooting.
#### ๐ต Breadboarding
Breadboarding is a hands-on approach to prototyping circuits, providing a versatile platform for experimentation and circuit design. Embedded systems often utilize breadboards for their ease of use, flexibility, and cost-effectiveness. By connecting components on a breadboard, embedded systems developers can quickly test and refine their designs without the need for permanent soldering. This allows for rapid iterations and efficient debugging, making breadboarding an invaluable tool for embedded system development.
- [๐๏ธ๐ถ Everything You Need to Know about Breadboards](https://www.youtube.com/watch?v=mE33WpRWrXs)
- [๐๏ธ๐ถ How to Use a Breadboard](https://youtu.be/6WReFkfrUIk)
#### ๐ต Hardware Design Basics
- [๐๏ธ๐ถ๐ Hardware Design - Philโs Lab (YouTube Playlist)](https://www.youtube.com/playlist?list=PLXSyc11qLa1YhVCZ5xWPuPsE5MkgEy5TF)
- [๐๏ธ Electronic Circuit Design - IFE - TU Graz (YouTube Playlist)](https://www.youtube.com/playlist?list=PLLpZ1DoEuR9tbV8r8bMSI94znm6pRB905)
- [๐๏ธ Microcontroller-Based Hardware Design With Altium Designer (YouTube Playlist)](https://www.youtube.com/playlist?list=PL3aaAq2OJU5HcbClqrOhqBDozF7HmxV-s)
#### ๐ต PCB Design / EMC
- [๐๏ธ๐ Altium Academy YouTube Channel](https://www.youtube.com/@AltiumAcademy)
- [๐๏ธ๐ Robert Feranec YouTube Channel](https://www.youtube.com/@RobertFeranec)
- [๐๏ธ๐ถ Altium Tutorials for Beginners - Robert Feranec (YouTube Playlist)](https://www.youtube.com/playlist?list=PLXvLToQzgzdduBaD4horowdWgcG5uGUW4)
- [๐๏ธ๐ถ Create PCBs for Rapid Prototyping - DigiKey (YouTube Playlist)](https://www.youtube.com/playlist?list=PLEBQazB0HUyRVK1RpHIjyjuTxn5srz6XM)
- [๐๏ธ๐ถ๐ PCB Design for Beginners - Altium Academy (YouTube Playlist)](https://www.youtube.com/playlist?list=PL3aaAq2OJU5EsYtNwTPHNO3RHNJN34FbO)
- [๐๏ธ How to Make a Raspberry Pi Compute Module 4 Carrier Board - DigiKey (YouTube Playlist)](https://www.youtube.com/playlist?list=PLEBQazB0HUyRwjr761b-MLNEu8FA8WKSG)
- [๐๏ธ๐ 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 - DigiKey (YouTube Playlist)](https://www.youtube.com/watch?v=vaCVh2SAZY4&list=PLEBQazB0HUyR24ckSZ5u05TZHV9khgA1O)
- [๐๏ธ๐ PCB Design for EMI & SI - Phil's Lab #64](https://www.youtube.com/watch?v=VtzPL8wQ8-E)
- [๐๏ธ๐ PCB Design for Advanced Users (YouTube Playlist)](https://youtube.com/playlist?list=PL3aaAq2OJU5EWfYT_Z93tc9pBF_Sidba_)
- [๐๏ธ๐ PCB Knowledge [PCB Production Tips By PCBWay] (YouTube Playlist)](https://www.youtube.com/playlist?list=PLzxdr3n97eVtHuh7gnDzMubuO836kvfu7)
- [๐๏ธ๐Udemy โ High-Speed Board Design Course System On Module -EsteemPCB](https://www.udemy.com/course/highspeed_board_design_course)
- [๐๏ธ๐Udemy โ Advanced Hardware and PCB Design Masterclass 2022](https://www.udemy.com/course/advanced-hardware-design-course)
- [๐๏ธ๐ 9 Simple Tricks to Improve EMC / EMI on Your Boards - Practical examples (with Min Zhang)](https://www.youtube.com/watch?v=Lf51sx6sC0I)
- [๐๏ธ๐ Many EMC Tips to Help You Design Better PCB Boards (with Keith Armstrong)](https://www.youtube.com/watch?v=gHF5JyJF-N4)
- [๐ LearnEMC - EMC Resources](https://learnemc.com/emc-resources)
- [๐ A Better Way to Build PCBs - Flux AI](https://www.flux.ai/p/)
- [๐ EasyEDA](https://easyeda.com/it)
- [๐ Fritzing](https://fritzing.org/)
- [๐ Cirkit Designer](https://www.cirkitstudio.com/)
#### ๐ต Soldering / Rework
- [๐๏ธ๐ถ 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)
_________________
### โณ๏ธ FPGA Development
FPGAs (Field-Programmable Gate Arrays) are specialized integrated circuits that can be configured to perform various digital logic functions. They are widely used in embedded systems to achieve high performance, flexibility, and cost-effectiveness. FPGA designers use hardware description languages (HDLs) to create customized circuits that map directly to the FPGA architecture. Since FPGA engineering and verification differ significantly from embedded software development, it stands as a specialized domain within embedded systems.
- [๐ FPGA / ASIC Engineering Roadmap](https://github.com/m3y54m/FPGA-ASIC-Roadmap)
- [๐ What are FPGAs?](https://hackaday.io/project/27550-the-hobbyists-guide-to-fpgas/log/68114-what-are-fpgas)
- [๐ FPGA vs. Microcontroller: How to choose the right one for your project](https://www.youtube.com/watch?v=jblpHUCPQYs)
- [๐๏ธ๐ถ Introduction to FPGA (YouTube Playlist)](https://youtube.com/playlist?list=PLEBQazB0HUyT1WmMONxRZn9NmQ_9CIKhb)
- [๐๐ถ FPGA Fundamentals - Nandland](https://nandland.com/fpga-101/)
- [๐๏ธ๐ Coursera โ FPGA Design for Embedded Systems Specialization](https://www.coursera.org/specializations/fpga-design)
- [๐๐ A Hands-On Guide to Designing Embedded Systems - Adam Taylor, Dan Binnun, Saket Srivastava](https://www.amazon.com/Hands-Guide-Designing-Embedded-Systems/dp/1630816833)
_________________
### โณ๏ธ Programming Fundamentals
Mastering programming fundamentals and software development principles is essential for a successful embedded design. Embedded systems demand efficient code, optimized data management, reusable design patterns, and effective memory management to function effectively in resource-constrained environments. Embedded developers must possess a strong foundation in these core concepts to create reliable and performant embedded systems.
#### ๐ต Basic Discrete Mathematics
- [๐๏ธ Coursera - Introduction to Discrete Mathematics for Computer Science Specialization](https://www.coursera.org/specializations/discrete-mathematics)
- [๐๐ถ Open Access Discrete Mathematics Books by LibreTexts](https://math.libretexts.org/Bookshelves/Combinatorics_and_Discrete_Mathematics)
- [๐๐ถ Essential Discrete Mathematics for computer science by Lewis HARRY., Zax R. ACM DL](https://dl.acm.org/doi/book/10.5555/3388468)
- [๐๐ถ Guide to Discrete Mathematics - Gerard O'Regan, Springer](https://link.springer.com/book/10.1007/978-3-030-81588-2)
- [๐๐ Bridge to Abstract Mathematics, AMS](https://bookstore.ams.org/view?ProductCode=TEXT/22)
#### ๐ต 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/)
- [๐ Collection of various algorithms in mathematics, machine learning, computer science, physics, etc implemented in C for educational purposes](https://github.com/TheAlgorithms/C)
- [๐๏ธ Udemy โ Embedded Systems State Machines & Data Structures](https://www.udemy.com/course/embedded-systems-state-machines-data-structures-like-a-pro/)
- [๐ 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)
- [๐ Hello Algo](https://www.hello-algo.com/en/)
#### ๐ต Design Patterns
- [๐ Practical Design Patterns: Opaque Pointers and Objects in C](https://interrupt.memfault.com/blog/opaque-pointers)
- [๐๐ Design Patterns for Embedded Systems in C - Bruce Powel Douglass](https://www.oreilly.com/library/view/design-patterns-for/9781856177078/)
- [๐๐ Making Embedded Systems: Design Patterns for Great Software - Elecia White](https://www.oreilly.com/library/view/making-embedded-systems/9781449308889/)
- [๐ง๐ Making Embedded Systems: Design Patterns for Great Software - Elecia White (Audio Book)](https://www.audiobooks.com/audiobook/making-embedded-systems-design-patterns-for-great-software/814297)
- [๐ Design Patterns - Refactoring Guru](https://refactoring.guru/design-patterns)
#### ๐ต State Machines
- [๐ Programming embedded systems the easy way โ with state machines](https://www.embedded.com/programming-embedded-systems-the-easy-way-with-state-machines/)
- [๐๏ธ๐ State Machines (YouTube Playlist)](https://www.youtube.com/playlist?list=PLPW8O6W-1chxym7TgIPV9k5E8YJtSBToI)
- [๐๏ธ๐ Event-Driven Programming (YouTube Playlist)](https://www.youtube.com/playlist?list=PLPW8O6W-1chx8Y7Oq2gOE0NUPXmQxu2Wr)
- [๐๏ธ๐ Udemy - Embedded System Design using UML State Machines](https://www.udemy.com/course/embedded-system-design-using-uml-state-machines/)
- [๐ โInput-Drivenโ vs. Event-Driven State Machines](https://www.state-machine.com/input-driven-vs-event-driven-state-machines)
- [๐ State Machines for Event-Driven Systems](https://barrgroup.com/embedded-systems/how-to/state-machines-event-driven-systems)
- [๐ Practical UML Statecharts in C/C++ by Miro Samek](https://www.amazon.sg/Practical-UML-Statecharts-Event-Driven-Programming/dp/0750687061)
#### ๐ต Memory Management
- [๐๏ธ Understanding the C runtime memory model](https://www.youtube.com/watch?v=3F3lp_F2YpQ)
- [๐๏ธ Pointers and dynamic memory - stack vs heap](https://www.youtube.com/watch?v=_8-ht2AKyH4)
- [๐๏ธ Dynamic Memory Allocation | C Programming Tutorial](https://www.youtube.com/watch?v=R0qIYWo8igs)
- [๐๏ธ Dynamic memory allocation in C - malloc calloc realloc free](https://www.youtube.com/watch?v=xDVC3wKjS64&t=140s)
- [๐ What is Memory Leak in C/C++? How can we avoid?](https://aticleworld.com/what-is-memory-leak-in-c-c-how-can-we-avoid/)
- [๐ Understanding Memory Management in Rust](https://medium.com/geekculture/understanding-memory-management-in-rust-a341cfce9807)
- [๐ Memory Management in Python](https://realpython.com/python-memory-management/)
_________________
### โณ๏ธ Programming Languages
Low-level languages like C and assembly provide direct hardware access, enabling efficient code optimization for resource-constrained embedded systems. System-level languages like C++ and Rust offer a higher level of abstraction for complex embedded applications, while Python is often employed for testing embedded systems due to its simplicity.
#### ๐ต C
- [๐๏ธ๐ถ Microchip University - Syntax And Structure of C - Simply C](https://mu.microchip.com/syntax-and-structure-of-c)
- [๐๏ธ๐ Microchip University - Advanced C Programming](https://mu.microchip.com/advanced-c-programming)
- [๐๏ธ๐ Microchip University - Advanced Embedded C Tips, Tricks, and Cautions](https://mu.microchip.com/advanced-embedded-c-tips-tricks-and-cautions)
- [๐๏ธ๐ Microchip University - C Programming: Linked List Data Structures](https://mu.microchip.com/c-programming-linked-list-data-structures)
- [๐๏ธ๐ Microchip University - C Programming Callbacks](https://mu.microchip.com/c-programming-callbacks)
- [๐๏ธ๐ถ C Programming for Beginners | Full Course](https://www.youtube.com/watch?v=ssJY5MDLjlo)
- [๐๏ธ C Programming Tutorials (YouTube Playlist)](https://www.youtube.com/playlist?list=PLA1FTfKBAEX4hblYoH6mnq0zsie2w6Wif)
- [๐๐ 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 by Example](https://www.cbyexample.com/)
- [๐ 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)
- [๐ Modern C - Jens Gustedt](https://gustedt.gitlabpages.inria.fr/modern-c/)
- [๐ Embedded C Coding Standard](https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard)
- [๐ newlib C Library Documentation](https://sourceware.org/newlib/docs.html)
- [๐ The GNU C Library (glibc)](https://www.gnu.org/software/libc/documentation.html)
- [๐ From Zero to main(): Bare metal C](https://interrupt.memfault.com/blog/zero-to-main-1)
- [๐ From Zero to main(): Bootstrapping libc with Newlib](https://interrupt.memfault.com/blog/boostrapping-libc-with-newlib)
- [๐๏ธ๐ถ Learn C Programming and OOP with Dr. Chuck](https://www.youtube.com/watch?v=PaPN51Mm5qQ)
- [๐ Extreme C - Kamran Amini](https://www.packtpub.com/free-ebook/extreme-c/9781789343625)
- [๐๏ธ๐ถ Coursera - C Programming with Linux Specialization](https://www.coursera.org/specializations/c-programming-linux)
#### ๐ต C++
- [๐ Modern C++ in Embedded Development: (Don't Fear) The ++](https://www.embeddedrelated.com/showarticle/1532.php)
- [๐ C++ On Embedded Systems](https://blog.mbedded.ninja/programming/languages/c-plus-plus/cpp-on-embedded-systems/)
- [๐๏ธ๐ C++ in Constrained Environments - Bjarne Stroustrup - CppCon 2022](https://www.youtube.com/watch?v=2BuJjaGuInI)
- [๐๏ธ๐ถ C++ Tutorial for Beginners - Full Course](https://www.youtube.com/watch?v=vLnPwxZdW4Y)
- [๐๏ธ C++ by The Cherno (YouTube Playlist)](https://youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb)
- [๐๏ธ๐ถ๐ Udemy - Beginning C++ Programming - From Beginner to Beyond](https://www.udemy.com/course/beginning-c-plus-plus-programming/)
- [๐๏ธ๐ CppCon Conferences - YouTube](https://www.youtube.com/@CppCon/playlists)
- [๐๐ A Tour of C++ (3rd Edition) - Bjarne Stroustrup](https://www.stroustrup.com/tour3.html)
- [๐๐ The C++ programming Language (C++11) - Bjarne Stroustrup](https://www.stroustrup.com/4th.html)
- [๐๐ Programming -- Principles and Practice Using C++ (3rd Edition) - Bjarne Stroustrup](https://www.stroustrup.com/programming.html)
- [๐๐ Real-Time C++: Efficient Object-Oriented and Template Microcontroller Programming - Christopher Kormanyos](https://link.springer.com/book/10.1007/978-3-662-62996-3)
- [๐ Effective Modern C++ - Scott Meyers](https://www.oreilly.com/library/view/effective-modern-c/9781491908419/)
##### Additional resources from Bjarne Stroustrup, creator of C++
- [๐๏ธ๐ถ The Essence of C++ by Bjarne Stroustrup - YouTube](https://www.youtube.com/watch?v=86xWVb4XIyE)
- [๐๏ธ๐ถ๐ Delivering Safe C++ by Bjarne Stroustrup - CppCon 2023](https://www.youtube.com/watch?v=I8UvQKvOSSw)
- [๐๏ธ๐ถ๐ The Design of C++ by Bjarne Stroustrup Computer History - YouTube](https://www.youtube.com/watch?v=69edOm889V4)
- [๐ The Design and Evolution of C++ - Bjarne Stroustrup](https://www.stroustrup.com/dne.html)
- [๐๐ Papers on C++ by Bjarne Stroustrup - Stroustrup's Website](https://www.stroustrup.com/papers.html)
- [๐ Papers on C++ by Bjarne Stroustrup - ACM DL](https://dl.acm.org/keyword/C%2B%2B?expand=all&ContribRoleAndId=author%3A10.1145%2Fcontrib-81100106139)
#### ๐ต Assembly
- [๐๐ถ Introduction to ARM Assembly Basics](https://azeria-labs.com/writing-arm-assembly-part-1/)
- [๐๏ธ Udemy โ ARM GNU Assembly Programming From Ground Up](https://www.udemy.com/course/arm-gnu-assembly-programming-from-ground-uptm/)
- [๐๏ธ Assembly Language Programming with ARM โ Full Tutorial for Beginners](https://www.youtube.com/watch?v=gfmRrPjnEw4)
- [๐ How to Use Inline Assembly Language in C Code](https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html)
- [๐ Raspberry Pi Assembly Language Programming : ARM Processor Coding](https://www.amazon.com/Raspberry-Assembly-Language-Programming-Processor/dp/1484252861)
#### ๐ต Python
- [๐ Python for embedded systems testing](https://www.elsys-design.com/en/python-embedded-systems-testing/)
- [๐๐ถ The Python Handbook โ Learn Python for Beginners](https://www.freecodecamp.org/news/the-python-handbook/)
- [๐๐ Real Python: Python Tutorials](https://realpython.com/)
- [๐๐ถ๐ Python Crash Course - Eric Matthes](https://a.co/d/hSMTJwE)
##### ๐ถ Python for Microcontrollers
- [๐ MicroPython - Python for microcontrollers](https://micropython.org/)
- [๐ MicroPython 101 | Arduino Documentation](https://docs.arduino.cc/micropython-course/)
- [๐ CircuitPython](https://circuitpython.org/)
- [๐ The Pros and Cons of Designing Embedded Systems with MicroPython](https://www.designnews.com/electronics-test/pros-and-cons-designing-embedded-systems-micropython)
- [๐ Programming the ESP32 with MicroPython](https://wolles-elektronikkiste.de/en/programming-the-esp32-with-micropython)
#### ๐ต Rust
- [๐ 5 roadblocks to Rust adoption in embedded systems](https://www.embedded.com/5-roadblocks-to-rust-adoption-in-embedded-systems/)
- [๐ The Embedded Rust Book](https://docs.rust-embedded.org/book/)
- [๐๏ธ The Future of Programming: Rust (YouTube Playlist)](https://www.youtube.com/playlist?list=PLc7W4b0WHTAUAEAguiqpNa5H0QqXJIJI6)
- [๐ Community Rust support projects for STM32 microcontrollers](https://github.com/stm32-rs)
- [๐ Rust on ESP Community](https://github.com/esp-rs)
- [๐ Rust on STM32: Getting started](https://jonathanklimt.de/electronics/programming/embedded-rust/rust-on-stm32-2/)
- [๐ From Zero to main(): Bare metal Rust](https://interrupt.memfault.com/blog/zero-to-main-rust-1)
- [๐ Writing an OS in Rust - Philipp Oppermann's blog](https://os.phil-opp.com/)
- [๐ Kernel Driver with Rust in 2022](https://not-matthias.github.io/posts/kernel-driver-with-rust/)
- [๐ Rustlings - Small exercises to get you used to reading and writing Rust code!](https://rustlings.cool/)
- [๐ Learn Rust the Effective Way](https://www.rustfinity.com/)
#### ๐ต Zig
- [๐ Testing Zig for embedded development](https://www.kuon.ch/post/2022-06-22-zig-embed/)
- [๐ Zig Embedded Group](https://github.com/ZigEmbeddedGroup)
- [๐ MicroZig - Unified abstraction layer and HAL for several microcontrollers](https://github.com/ZigEmbeddedGroup/microzig)
- [๐ Zig Bare Metal Programming on STM32F103 โ Booting up](https://maldus512.medium.com/zig-bare-metal-programming-on-stm32f103-booting-up-b0ecdcf0de35)
_________________
### โณ๏ธ Microcontrollers
Microcontrollers are integrated circuits (ICs) that combine a microprocessor, memory, and input/output (I/O) peripherals on a single chip. They are designed for embedded applications, where they are used to control devices in a variety of industries, including automotive, industrial, consumer electronics, and healthcare.
Some popular microcontroller families include AVR, PIC, STM32, MSP430, nRF, and ESP32. Choosing the right microcontroller involves assessing application requirements, processing power, memory needs, and input/output capabilities. Consider ease of use, cost, reliability, availability, and future expansion.
- [๐ What Is a Microcontroller? The Defining Characteristics and Architecture of a Common Component](https://www.allaboutcircuits.com/technical-articles/what-is-a-microcontroller-introduction-component-characteristics-component/)
- [๐ How to Choose the Right Microcontroller for Your Application](https://www.allaboutcircuits.com/technical-articles/how-to-choose-the-right-microcontroller-for-your-application/)
- [๐ How to Read a Microcontroller Datasheet: Introduction and First Steps](https://www.allaboutcircuits.com/technical-articles/how-to-read-a-microcontroller-datasheet-introduction-and-first-steps2/)
- [๐๐ถ Make: AVR Programming - Elliot Williams](https://www.oreilly.com/library/view/make-avr-programming/9781449356484/)
- [๐๏ธ๐ถ๐ NewbieHack - Microcontroller Tutorial - A Beginners Guide (AVR)](https://www.youtube.com/playlist?list=PLE72E4CFE73BD1DE1)
- [๐๏ธ๐ถ Getting Started with STM32 and Nucleo (YouTube Playlist)](https://youtube.com/playlist?list=PLEBQazB0HUyRYuzfi4clXsKUSgorErmBv)
- [๐๐ Mastering STM32 - Carmine Noviello](https://leanpub.com/mastering-stm32-2nd)
- [๐๐ Developing IoT Projects with ESP32 - Vedat Ozan Oner](https://www.packtpub.com/product/developing-iot-projects-with-esp32-second-edition/9781803237688)
- [๐๏ธ๐ถ Intro to Raspberry Pi Pico and RP2040 (YouTube Playlist)](https://www.youtube.com/playlist?list=PLEBQazB0HUyQO6rJxKr2umPCgmfAU-cqR)
- [๐ Getting started with STM32: STM32 step-by-step](https://wiki.st.com/stm32mcu/wiki/Category:Getting_started_with_STM32_:_STM32_step_by_step)
- [๐๏ธ Getting Started With AVR (YouTube Playlist)](https://www.youtube.com/playlist?list=PLtQdQmNK_0DRhBWYZ32BEILOykXLpJ8tP)
- [๐๏ธ Fundamentals of Microcontrollers - Arduino bare-metal breakdown (YouTube Playlist)](https://www.youtube.com/playlist?list=PLNyfXcjhOAwOF-7S-ZoW2wuQ6Y-4hfjMR)
- [๐๏ธ Bare Metal Embedded Programming: Theory and Practice Using STM32 (YouTube Playlist)](https://www.youtube.com/playlist?list=PL4cGeWgaBTe155QQSQ72DksLIjBn5Jn2Z)
- [๐ Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC - Warren Gay](https://link.springer.com/book/10.1007/978-1-4842-3624-6)
- [๐๏ธ Udemy โ Microcontroller Embedded C Programming: Absolute Beginners](https://www.udemy.com/course/microcontroller-embedded-c-programming/)
- [๐๏ธ Udemy โ Embedded Systems STM32 Low-Layer APIs(LL) Driver Development](https://www.udemy.com/course/embedded-systems-stm32-low-level-ll-driver-development/)
- [๐๏ธ Udemy โ Embedded Systems STM32 HAL APIs Driver Development](https://www.udemy.com/course/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](https://link.springer.com/book/10.1007/978-3-030-88439-0)
- [๐๐ Embedded Systems Design using the MSP430FR2355 LaunchPad - Brock J. LaMeres](https://link.springer.com/book/10.1007/978-3-030-40574-8)
- [๐๐ Building Embedded Systems: Programmable Hardware - Changyi Gu](https://link.springer.com/book/10.1007/978-1-4842-1919-5)
- [๐ Awesome Embedded: A curated list of awesome embedded programming](https://github.com/nhivp/Awesome-Embedded)
#### ๐ต GPIO
- [๐๏ธ Tutorial 5: Peripheral 1 - General purpose Input Output (GPIO) Configuration in STM32](https://youtu.be/tjDhmavBGf0)
#### ๐ต ADC
- [๐๏ธ How Do ADCs Work? - The Learning Circuit](https://www.youtube.com/watch?v=g4BvbAKNQ90)
- [๐๏ธ Tutorial 13: ADC in STM32F4](https://youtu.be/vIlG_i3GqeU)
- [๐๏ธ Tutorial 14: ADC by Polling](https://www.youtube.com/watch?v=uUi6JyUuEJA)
#### ๐ต DAC
- [๐๏ธ How Do DACs Work? - The Learning Circuit](https://www.youtube.com/watch?v=YAxrmoVtEtE)
- [๐๏ธ DAC in STM32 || Sine wave || HAL || CubeIDE](https://www.youtube.com/watch?v=6Z1L6ox63j0)
#### ๐ต Timers / Counters
- [๐ Introduction to Microcontroller Timers: Periodic Timers](https://www.allaboutcircuits.com/technical-articles/introduction-to-microcontroller-timers-periodic-timers/)
- [๐ AVR Timer programming](https://exploreembedded.com/wiki/AVR_Timer_programming)
- [๐๏ธ STM32 TIMERS (YouTube Playlist)](https://www.youtube.com/playlist?list=PLfIJKC1ud8gjLZBzjE3kKBMDEH_lUc428)
#### ๐ต PWM (Pulse Width Modulation)
- [๐๏ธ What is PWM?](https://www.youtube.com/watch?v=B_Ysdv1xRbA)
- [๐ Pulse-width Modulation (PWM) Timers in Microcontrollers](https://www.allaboutcircuits.com/technical-articles/introduction-to-microcontroller-timers-pwm-timers/)
- [๐๏ธ STM32 Guide #3: PWM + Timers](https://www.youtube.com/watch?v=AjN58ceQaF4)
#### ๐ต RTC (Real Time Clock)
- [๐ Real Time Clocks (RTCs) in Microcontroller Timers](https://www.allaboutcircuits.com/technical-articles/introduction-to-microcontroller-timers-real-time-clocks/)
#### ๐ต Watchdog
- [๐ A Guide to Watchdog Timers for Embedded Systems](https://interrupt.memfault.com/blog/firmware-watchdog-best-practices)
- [๐ Watchdog Timers in Microcontrollers](https://www.allaboutcircuits.com/technical-articles/watchdog-timers-microcontroller-timers/)
- [๐๏ธ The Watchdog Timer on Arduino](https://www.youtube.com/watch?v=AzZBgH67mgE)
- [๐๏ธ WATCHDOGS in STM32 || IWDG and WWDG || CubeIDE](https://www.youtube.com/watch?v=AelNsnpfbcM)
#### ๐ต Interrupts
- [๐๏ธ Polling/Interrupt/DMA differences explained easily](https://www.youtube.com/watch?v=LNPBr3WvuNg)
- [๐๏ธ Level Up Your Arduino Code: External Interrupts](https://www.youtube.com/watch?v=J61_PKyWjxU)
- [๐๏ธ Tutorial 10: Peripheral 2 - Nested Vector Interrupt controller (NVIC) in STM32](https://www.youtube.com/watch?v=qwebM-YaSU4)
- [๐๏ธ Tutorial 11: LAB - External Interrupt ( EXTI ) Interfacing in STM32 using STM32CUBEMX](https://www.youtube.com/watch?v=oJc0seuBbzI)
- [๐๏ธ Tutorial 12: Interrupt Priorities in STM32](https://www.youtube.com/watch?v=aXLJD4qJmtk)
#### ๐ต DMA
- [๐๏ธ Introduction to Direct Memory Access (DMA)](https://www.youtube.com/watch?v=M16l_ymlfcs)
- [๐๏ธ STM32 DMA PT 1](https://www.youtube.com/watch?v=yvLHtXJ_KSg)
- [๐๏ธ STM32 DMA PT 2](https://www.youtube.com/watch?v=Kb8dX18xYuo)
- [๐๏ธ Getting Started With STM32 & Nucleo Part 4: Working with ADC and DMA - Maker.io](https://www.youtube.com/watch?v=EsZLgqhqfO0)
- [๐๏ธ STM32 UART DMA and IDLE LINE || Receive unknown length DATA](https://www.youtube.com/watch?v=Bo6MC5A8uTE)
#### ๐ต Clock Management
- [๐ Clock Configuration in STM32](https://medium.com/@csrohit/clock-configuration-in-stm32-6a058da220e0)
- [๐๏ธ STM32: Change clock speed via registers](https://www.youtube.com/watch?v=W_9jPMgiqaQ)
- [๐๏ธ #1. Intro to STM32F4 Register Based Programming || Clock Setup || LED Blinking || NO HAL](https://www.youtube.com/watch?v=GJ_LFAlOlSk)
- [๐๏ธ Tutorial 8: MCU Clocks configuration in STM32 using STM32CUBEMX](https://www.youtube.com/watch?v=y8yNsWpQiTM)
- [๐๏ธ Clock sources and PLL in ARM Cortex M4](https://www.youtube.com/watch?v=2ou8FQ_7PdI)
#### ๐ต Power Management
- [๐๏ธ SLEEP Mode in STM32F103 || CubeIDE || Low Power Mode || Current Consumption](https://www.youtube.com/watch?v=2rKcsGkCG0s)
- [๐๏ธ STOP MODE in STM32 || CubeIDE || Low Power Mode](https://www.youtube.com/watch?v=UtQhc4XV8k4)
#### ๐ต Bootloader / DFU (Device Firmware Update)
- [๐ Basics to Developing Bootloader for Arduino](https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino)
- [๐ From Zero to main(): How to Write a Bootloader from Scratch](https://interrupt.memfault.com/blog/how-to-write-a-bootloader-from-scratch)
- [๐๏ธ How to Create a Super Simple Bootloader](https://www.youtube.com/watch?v=OkUQ3iMmiYQ&list=PLnMKNibPkDnEb1sphpdFJ3bR9dNy7S6mO)
- [๐๏ธ Blinky To Bootloader: Bare Metal Programming Series (YouTube Playlist)](https://www.youtube.com/playlist?list=PLP29wDx6QmW7HaCrRydOnxcy8QmW0SNdQ)
- [๐ Simple AVR Bootloader tutorial](https://www.pocketmagic.net/simple-avr-bootloader-tutorial/)
- [๐๏ธ๐ Udemy โ STM32Fx Microcontroller Custom Bootloader Development](https://www.udemy.com/course/stm32f4-arm-cortex-mx-custom-bootloader-development/)
- [๐๐ Device Firmware Update Cookbook](https://interrupt.memfault.com/blog/device-firmware-update-cookbook)
_________________
### โณ๏ธ Interfaces, Protocols & Communication Technologies
Embedded systems often communicate with other devices or external systems via interfaces, protocols. Interfaces provide the physical connections, protocols define data exchange rules. The choice depends on application-specific needs, including bandwidth, distance, security, and power consumption.
#### ๐ต โBasic Protocols
- [๐๏ธ๐ถ Understanding Serial Protocols](https://www.youtube.com/watch?v=LEz5UCN3aHA)
- [๐๏ธ๐ถ Serial Protocol Fundamentals](https://www.youtube.com/watch?v=yz7h5xd18OE)
- [๐๐ถ Understanding and Selecting in 2024: I2C, SPI, UART Explained](https://www.parlezvoustech.com/en/comparaison-protocoles-communication-i2c-spi-uart/)
- [๐๏ธ PROTOCOLS: UART - I2C - SPI - Serial communications #001](https://www.youtube.com/watch?v=IyGwvGzrqp8)
##### ๐ถ UART
- [๐๏ธ๐ถ Understanding UART](https://www.youtube.com/watch?v=sTHckUyxwp8)
- [๐๏ธ how does UART work??? (explained clearly)](https://www.youtube.com/watch?v=V6m2skVlsQI)
- [๐๏ธ Basics of UART Communication | UART Frame Structure | RS 232 Basics | Part1](https://www.youtube.com/watch?v=JuvWbRhhpdI)
- [๐๏ธ Understanding UART Communication Programming | UART Peripherals | Part 2](https://www.youtube.com/watch?v=QmjKRwgddxw)
- [๐๏ธ The RS-232 protocol](https://www.youtube.com/watch?v=AHYNxpqKqwo)
##### ๐ถ I2C
- [๐๏ธ๐ถ Understanding I2C](https://www.youtube.com/watch?v=CAvawEcxoPU)
- [๐ I2C in a Nutshell](https://interrupt.memfault.com/blog/i2c-in-a-nutshell)
- [๐๏ธ STM32 I2C SLAVE (YouTube Playlist)](https://www.youtube.com/playlist?list=PLfIJKC1ud8gj_P7Qb28aTr0t92uk_vwg0)
##### ๐ถ SPI
- [๐๏ธ๐ถ Understanding SPI](https://www.youtube.com/watch?v=0nVNwozXsIc)
- [๐๏ธ SPI: The serial peripheral interface](https://www.youtube.com/watch?v=MCi7dCBhVpQ)
- [๐๏ธ Getting Started with STM32 and Nucleo Part 5: How to Use SPI | Digi-Key Electronics](https://www.youtube.com/watch?v=eFKeNPJq50g)
##### ๐ถ SDIO
- [๐ SDIO Protocol](https://prodigytechno.com/sdio-protocol/)
- [๐ Interface SD CARD with SDIO in STM32](https://controllerstech.com/interface-sd-card-with-sdio-in-stm32/)
- [๐ SDIO Card Slave Driver - ESP32 - Technical Documents](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/sdio_slave.html)
##### ๐ถ I3C
- [๐๏ธ What is I3Cยฎ?](https://www.youtube.com/watch?v=g3TBNHec5Ec)
- [๐ MIPI I3C & MIPI I3C Basic](https://www.mipi.org/specifications/i3c-sensor-specification)
- [๐ I3C Protocol: Understanding and Debug](https://prodigytechno.com/mipi-i3c-protocol-debug/)
- [๐๏ธ MIPI I3C Basic - The next generation sensor interface enabling low-power IoT applications](https://www.youtube.com/watch?v=xWKxZp_9RFQ)
##### ๐ถ 1-Wire
- [๐๏ธ 1-Wireยฎ Technology Overview](https://www.youtube.com/watch?v=CjH-OztKe00)
#### ๐ต Digital Audio Protocols
##### ๐ถ I2S
- [๐ Introduction to the I2S Interface](https://www.allaboutcircuits.com/technical-articles/introduction-to-the-i2s-interface/)
- [๐๏ธ Building a Digital Music Player with I2S?! What is I2S! EB#45](https://www.youtube.com/watch?v=qNLvoSQCx60)
- [๐ UM11732 - I2S bus specification](https://www.nxp.com/docs/en/user-manual/UM11732.pdf)
##### ๐ถ PCM
- [๐ HUAWEI LGA Module - PCM Audio Design Guide](https://www.paoli.cz/out/media/HUAWEI%20LGA%20Module%20PCM%20Audio%20Design%20Guide-V100R001_04(1).pdf)
- [๐ PCM Terminology and Concepts](https://larsimmisch.github.io/pyalsaaudio/terminology.html)
#### ๐ต Display & Camera Protocols
##### ๐ถ MIPI CSI-2
- [๐ MIPI Camera Serial Interface 2](https://www.mipi.org/specifications/csi-2)
- [๐๏ธ Tutorial: MIPI CSI-2](https://www.youtube.com/watch?v=8REu_h7bzHM)
- [๐ AN13573 - i.MX 8/RT MIPI DSI/CSI-2](https://www.nxp.com/docs/en/application-note/AN13573.pdf)
##### ๐ถ MIPI DSI
- [๐ MIPI Display Serial Interface](https://www.mipi.org/specifications/dsi)
- [๐ AN4860 - Introduction to DSI host on STM32 MCUs and MPUs](https://www.st.com/resource/en/application_note/an4860-introduction-to-dsi-host-on-stm32-mcus-and-mpus-stmicroelectronics.pdf)
##### ๐ถ HDMI
- [๐๏ธ TI Precision Labs - Video Interface: What are HDMI & Dual-Mode DisplayPort?](https://www.youtube.com/watch?v=jCO7Up1rzJc)
- [๐๏ธ HDMI 2.1 & TMDS Crash Course - ENMU EET 457 - Presentation](https://www.youtube.com/watch?v=5acgSK0kWTE)
#### ๐ต Wireless Protocols
##### ๐ถ Bluetooth / BLE
- [๐๏ธ๐ถ๐ Microchip University - First Steps into Bluetooth Low Energy (BLE)](https://mu.microchip.com/first-steps-into-bluetooth-low-energy-ble)
- [๐ Bluetooth Basics](https://learn.sparkfun.com/tutorials/bluetooth-basics/all)
- [๐ Bluetooth Low Energy: A Primer](https://interrupt.memfault.com/blog/bluetooth-low-energy-a-primer)
- [๐ A Practical Guide to BLE Throughput](https://interrupt.memfault.com/blog/ble-throughput-primer)
- [๐๏ธ SparkFun According to Pete #49 - How Bluetooth Works](https://www.youtube.com/watch?v=zJqGLWQGyvk)
- [๐ Bluetooth Low Energy Fundamentals - Nordic Semiconductor](https://academy.nordicsemi.com/courses/bluetooth-low-energy-fundamentals/)
- [๐ Bluetooth Overview - ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/bluetooth.html)
##### ๐ถ Wi-Fi
- [๐๏ธ 802.11 How WiFi Works - Wireless Networks | Computer Networks Ep. 7.3 | Kurose & Ross](https://www.youtube.com/watch?v=vvhEnr52UOU)
- [๐๏ธ 802.11 Frame Analysis](https://www.youtube.com/watch?v=ITAJb3v5VKQ)
- [๐ Wi-Fi Driver - ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/wifi.html)
- [๐ ESP32 Set an Access Point (AP) using ESP-IDF](https://esp32tutorials.com/esp32-access-point-ap-esp-idf/)
- [๐ ESP32 ESP-IDF Connect with WiFi โ Station Mode Example](https://esp32tutorials.com/esp32-esp-idf-connect-wifi-station-mode-example/)
##### ๐ถ LoRa / LoRaWAN
- [๐ The Arduino Guide to LoRaยฎ and LoRaWANยฎ](https://docs.arduino.cc/learn/communication/lorawan-101)
- [๐๐ The Things Fundamentals on LoRaWAN!](https://www.thethingsnetwork.org/docs/lorawan/)
- [๐ What are LoRaยฎ and LoRaWANยฎ?](https://lora-developers.semtech.com/documentation/tech-papers-and-guides/lora-and-lorawan/)
- [๐๏ธ #112 LoRa / LoRaWAN De-Mystified / Tutorial](https://www.youtube.com/watch?v=hMOwbNUpDQA)
- [๐ ESP32 with LoRa using Arduino IDE โ Getting Started](https://randomnerdtutorials.com/esp32-lora-rfm95-transceiver-arduino-ide/)
##### ๐ถ Zigbee
- [๐๏ธ What is ZIGBEE And How It Works?](https://www.youtube.com/watch?v=THtVeaxnd9E)
- [๐๏ธ How to take advantage of Zigbee and Bluetooth LE 5.2 on STM32WB wireless MCUs - Webinar Replay](https://www.youtube.com/watch?v=2sYEPykOaLQ)
##### ๐ถ Thread
- [๐ OpenThread - An open-source implementation of Threadยฎ](https://openthread.io/)
- [๐๏ธ What is Thread? Low-power IoT Networking for Smart Home Devices | Digi-Key Electronics](https://youtu.be/5CauESYB9-A)
- [๐ OpenThread - ESP-IDF Programming Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/openthread.html)
##### ๐ถ Matter
- [๐๏ธ What is Matter? Unifying IoT Devices for the Smart Home | Digi-Key Electronics](https://youtu.be/vJIEfih9bl0)
#### ๐ต Industrial Protocols
##### ๐ถ Modbus
- [๐๏ธ What is Modbus and How does it Work?](https://www.youtube.com/watch?v=txi2p5_OjKU)
- [๐๏ธ How does Modbus Communication Protocol Work?](https://www.youtube.com/watch?v=JBGaInI-TG4)
- [๐๏ธ MODBUS STM32 (YouTube Playlist)](https://www.youtube.com/playlist?list=PLfIJKC1ud8ggRvaEsMjSEDazoBAnY4MUv)
##### ๐ถ RS485
- [๐๏ธ What is RS485 and How it's used in Industrial Control Systems?](https://www.youtube.com/watch?v=3wgKcUDlHuM)
- [๐๏ธ What is RS-485?](https://www.youtube.com/watch?v=bt9Px51eP6s)
##### ๐ถ EtherCAT
- [๐๏ธ Microchip University - An Introduction to EtherCATยฎ, EtherCAT P and the Microchip LAN925x family of Slave Controllers](https://mu.microchip.com/an-introduction-to-ethercat-ethercat-p-and-the-microchip-lan925x-family-of-slave-controllers)
##### ๐ถ CoAP & MQTT
- [๐๏ธ #144 Internet Protocols: CoAP vs MQTT, Network Sniffing, and preparation for IKEA Tradfri Hacking](https://www.youtube.com/watch?v=pfG8uEDZj5g)
- [๐๏ธ MQTT vs. CoAP | Comparison of IoT Protocols](https://www.youtube.com/watch?v=0CORpVSUQe0)
- [๐๏ธ Simple ESP32 IoT Sensor Node Tutorial: WiFi Enabled MQTT Sensor Data Node](https://www.youtube.com/watch?v=x5A5S0hoyJ0)
- [๐ Cellular IoT Fundamentals - Nordic Semiconductor](https://academy.nordicsemi.com/courses/cellular-iot-fundamentals/)
#### ๐ต High-Speed Protocols
##### ๐ถ Ethernet
- [๐๏ธ๐ถ Microchip University - Ethernet Fundamentals](https://mu.microchip.com/ethernet-fundamentals)
- [๐ How the Ethernet Protocol Works โ A Complete Guide](https://www.freecodecamp.org/news/the-complete-guide-to-the-ethernet-protocol/)
- [๐๏ธ What is an Ethernet PHY?](https://www.youtube.com/watch?v=JH3cMYErmKI)
- [๐๏ธ The Data Link Layer, MAC Addressing, and the Ethernet Frame](https://www.youtube.com/watch?v=_b4dXKB8Pt8)
- [๐๏ธ Microchip University - Serializer/Deserializer (SerDes) Basics for Your Next Microchip Ethernet PHY Design](https://mu.microchip.com/serializerdeserializer-serdes-basics-for-your-next-microchip-ethernet-phy-design)
- [๐๏ธ Microchip University - Ethernet Switch Fundamentals](https://mu.microchip.com/ethernet-switch-fundamentals)
##### ๐ถ USB
- [๐๏ธ๐ถ Microchip University - Introduction to USB 2.0](https://mu.microchip.com/introduction-to-usb-20)
- [๐๏ธ๐ถ Microchip University - USB 3 Fundamentals](https://mu.microchip.com/usb-3-fundamentals)
- [๐๏ธ Training - USB 101 - Introduction to USB](https://www.youtube.com/watch?v=5S6ZPmtPzRA)
- [๐ USB 101: An Introduction to Universal Serial Bus 2.0](https://www.infineon.com/dgdl/Infineon-AN57294_USB_101_An_Introduction_to_Universal_Serial_Bus_2.0-ApplicationNotes-v09_00-EN.pdf?fileId=8ac78c8c7cdc391c017d072d8e8e5256)
- [๐๏ธ How does a USB keyboard work?](https://youtu.be/wdgULBpRoXk)
- [๐๏ธ How does USB device discovery work?](https://www.youtube.com/watch?v=N0O5Uwc3C0o)
- [๐๏ธ MOOC - STM32 USB training (YouTube Playlist)](https://www.youtube.com/playlist?list=PLnMKNibPkDnFFRBVD206EfnnHhQZI4Hxa)
- [๐๏ธ Microchip University - USB2 Hub Fundamentals](https://mu.microchip.com/usb2-hub-fundamentals)
- [๐ Beyond Logic - USB in a NutShell](https://www.beyondlogic.org/usbnutshell/usb1.shtml)
##### ๐ถ PCIe
- [๐๏ธ What is PCIe?](https://www.youtube.com/watch?v=L9qXjmJdQXY)
- [๐๏ธ PCIe QuickLearn (YouTube Playlist)](https://www.youtube.com/playlist?list=PL9B4edd-p2ajuP4dBHcnhtHKoZKkoR1R4)
- [๐๏ธ PCIe Protocol (YouTube Playlist)](https://www.youtube.com/playlist?list=PLZe4P0P_9Cosd0i2ha_QRdWlR1iZ0yVG4)
#### ๐ต Automotive Protocols
##### ๐ถ CAN
- [๐๏ธ๐ถ Microchip University - CAN and CAN FD Protocol and Physical Layer Basics](https://mu.microchip.com/understanding-the-can-fd-protocol)
- [๐๐ถ CAN bus in 2024: Operation, Advantages and Recent Developments](https://www.parlezvoustech.com/en/bus-can-2024-technologie-avantages-evolutions/)
- [๐๏ธ๐ถ CAN Bus: Serial Communication - How It Works?](https://www.youtube.com/watch?v=JZSCzRT9TTo&t=21s)
- [๐๏ธ๐ถ CAN Bus: A Beginners Guide Part 1](https://www.youtube.com/watch?v=YBrU_eZM110)
- [๐๏ธ๐ถ CAN Bus: A Beginners Guide Part 2](https://www.youtube.com/watch?v=z5CVljiLhvc)
- [๐๏ธ๐ Microchip University - Designing and Implementing a CAN FD Network](https://mu.microchip.com/designing-and-implementing-a-can-fd-network)
- [๐๏ธ Improving my electric longboard with a CAN Bus! What can the CAN Bus do? EB#44](https://www.youtube.com/watch?v=PL0TPdrhMuI)
- [๐๏ธ CAN Bus, OBD2 & J1939 Explained (YouTube Playlist)](https://www.youtube.com/playlist?list=PLpV68vjf4Xo4vZ_SjJ6tTlomYm-k18vDZ)
- [๐๏ธ J1939 Explained - A Simple Intro [v2.0 | 2021]](https://www.youtube.com/watch?v=vlqxu9ojbHg)
- [๐๏ธ Unified Diagnostic Services (UDS) Explained - A Simple Intro [2022]](https://www.youtube.com/watch?v=CV_B8tJgI5E)
#### ๐ต Network Protocols / Socket Programming
- [๐๏ธ Networking Fundamentals - Practical Networking (YouTube Playlist)](https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi)
- [๐๏ธ TCP vs UDP - Explaining Facts and Debunking Myths - TCP Masterclass](https://www.youtube.com/watch?v=jE_FcgpQ7Co)
- [๐๏ธ TCP - 12 simple ideas to explain the Transmission Control Protocol](https://www.youtube.com/watch?v=JFch3ctY6nE)
- [๐๏ธ UDP doesn't suck! It's the BEST L4 protocol for THESE types of applications...](https://www.youtube.com/watch?v=LaDRWycC7Iw)
- [๐๏ธ Networking tutorial - Ben Eater (YouTube Playlist)](https://www.youtube.com/playlist?list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW)
- [๐๐ Hands-On Network Programming with C - Lewis Van Winkle](https://www.amazon.com/exec/obidos/ASIN/1789349869/aoeu-20)
- [๐๐ Network Algorithmics - George Varghese, Jun Xu](https://www.oreilly.com/library/view/network-algorithmics-2nd/9780128099865/)
- [๐ tcpdump & libpcap libraries](https://www.tcpdump.org/)
- [๐ lwIP - A Lightweight TCP/IP stack](https://savannah.nongnu.org/projects/lwip/)
- [๐ lwIP (ESP-IDF)](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/lwip.html)
- [๐ Developing applications on STM32Cube with LwIP TCP/IP stack](https://www.st.com/resource/en/user_manual/um1713-developing-applications-on-stm32cube-with-lwip-tcpip-stack-stmicroelectronics.pdf)
#### ๐ต Cellular Communication
##### ๐ถ GSM / LTE
- [๐๏ธ STM32 : Internet Of Things With 4G LTE Modem (YouTube Playlist)](https://www.youtube.com/playlist?list=PL2_RO8p04imYY5JOrCDT7V0hnzkgyExRe)
##### ๐ถ LTE-M & NB-IoT
- [๐ Cellular IoT Fundamentals - Nordic Semiconductor](https://academy.nordicsemi.com/courses/cellular-iot-fundamentals/)
_________________
### โณ๏ธ Memory Technologies & File Systems
Embedded systems employ a combination of volatile (SRAM, DRAM, PSRAM) and non-volatile (flash, EEPROM, FRAM) memory to store and access data, based on factors like performance, cost, power consumption, and durability.
- [๐ Memory Options for Embedded Systems: How to Select the Right Memory Configuration](https://www.qt.io/embedded-development-talk/memory-options-for-embedded-systems-how-to-select-the-right-memory-configuration)
#### ๐ต Flash Memory
- [๐ NAND and eMMC: All You Need to Know About Flash Memory](https://www.makeuseof.com/tag/nand-emmc-need-know-flash-memory/)
##### ๐ถ NOR / NAND
- [๐๏ธ QSPI in STM32 || Write and Read || N25Q](https://www.youtube.com/watch?v=xIfh_uYy-OU)
- [๐๏ธ QSPI in STM32 || Boot from EXT Memory || XIP || N25Q](https://www.youtube.com/watch?v=gAyuF20ok8c)
- [๐๏ธ Flash Memory in Embedded Linux Systems](https://www.youtube.com/watch?v=hdwMvwJIV-Y)
##### ๐ถ eMMC
- [๐๏ธ What is a eMMC? Intro, Comparing to Other Storage, and Upgrading. SSD, M.2](https://www.youtube.com/watch?v=vGatKmqYxEA)
##### ๐ถ SD Card
- [๐๏ธ Interfacing with an SD Card](https://www.youtube.com/watch?v=g40tUdjZ-Sk)
#### ๐ต EEPROM
- [๐๏ธ Using EEPROM with Arduino - Internal & External](https://www.youtube.com/watch?v=ShqvATqXA7g)
#### ๐ต SRAM / DRAM
- [๐ SRAM vs DRAM: Difference Between SRAM & DRAM Explained](https://www.enterprisestorageforum.com/hardware/sram-vs-dram/)
- [๐๏ธ What is SRAM?](https://www.youtube.com/watch?v=kU2SsUUsftA)
- [๐๏ธ SDRAM Hardware & Firmware Tutorial (STM32) - Phil's Lab #80](https://www.youtube.com/watch?v=h28D4AaPSjg)
- [๐๏ธ SDRAM in STM32 || MT48LC4](https://www.youtube.com/watch?v=QnDenqvzwyE)
#### ๐ต File Systems
A file system is a way of organizing data on a storage device, such as a hard drive, flash drive, or solid-state drive. It provides a way to store, access, and manage files, which are collections of data that can be accessed individually. File systems in embedded systems are typically lightweight and optimized for efficiency, considering the limited resources and specific requirements of embedded devices. They often employ simpler file structures and data structures compared to desktop or server file systems.
- [๐ Flash filesystems](https://hugh712.gitbooks.io/embeddedsystem/content/flash_filesystems.html)
- [๐ Block filesystems](https://hugh712.gitbooks.io/embeddedsystem/content/block_filesystems.html)
- [๐ Understanding the UBI File System in Embedded Devices](https://serhack.me/articles/understanding-ubi-file-system-embedded-devices-reolink/)
- [๐ UBI File System](https://docs.kernel.org/filesystems/ubifs.html)
- [๐ JFFS : The Journalling Flash File System](https://sourceware.org/jffs2/jffs2-html/)
- [๐ Preventing Filesystem Corruption In Embedded Linux](https://www.embeddedts.com/assets/preventing-filesystem-corruption-in-embedded-linux)
- [๐ LittleFS - A high-integrity embedded file system](https://os.mbed.com/blog/entry/littlefs-high-integrity-embedded-fs/)
- [๐ SPIFS - Wear-leveled SPI flash file system for embedded devices](https://github.com/pellepl/spiffs)
- [๐ EEPROM File System (EEFS)](opensource.gsfc.nasa.gov/projects/eefs/index.php)
_________________
### โณ๏ธ Hardware Simulation / Emulation
Embedded system development often involves simulating or emulating hardware environments to test and debug software before deploying it on actual hardware. Simulation tools create virtual models of hardware systems, while emulation tools replicate the actual hardware behavior using real hardware components. These tools offer several advantages, including reducing development time, minimizing hardware costs, and enhancing software reliability.
- [๐๐ถ Wokwi - Online ESP32, STM32, Arduino Simulator](https://wokwi.com/)
- [๐๐ถ SimulIDE Circuit Simulator](https://simulide.com/)
- [๐๐ถ Digital logic designer and circuit simulator designed for educational purposes](https://github.com/hneemann/Digital)
- [๐๐ถ EveryCircuit](https://everycircuit.com/)
- [๐๐ถ Circuit Simulator Applet](https://www.falstad.com/circuit/)
- [๐๐ถ Tinkercad](https://www.tinkercad.com/)
- [๐๐ถ Voltsim](https://www.voltsimulator.com/)
#### ๐ต QEMU
- [๐ QEMUโs documentation](https://www.qemu.org/docs/master/index.html)
- [๐ Running AVR code in QEMU - A quick-start guide to accelerate AVR firmware development](https://yeah.nah.nz/embedded/qemu-avr/)
- [๐ QEMU Simulation - Blinky - STM32F767ZI Full Stack](https://longer-vision-robot.gitbook.io/stm32f767zi-full-stack/chapter-2.-programming-for-stm32/2.4-qemu-simulation-blinky)
- [๐ Emulating a Raspberry Pi in QEMU](https://interrupt.memfault.com/blog/emulating-raspberry-pi-in-qemu)
#### ๐ต Renode
- [๐ Renode - GitHub Repo](https://github.com/renode/renode)
- [๐ Renode - Documentation](https://renode.readthedocs.io/en/latest/)
- [๐ Renode - Official Tutorials](https://renode.io/tutorials/)
- [๐ Cortex-M MCU Emulation with Renode](https://interrupt.memfault.com/blog/intro-to-renode)
- [๐ A simple guide to get started on renode](https://github.com/tarciszera/renode_guide)
- [๐๏ธ Using CI-based workflow with Renode in bringing TensorFlow Lite to Zephyr](https://www.youtube.com/watch?v=jF94cXPoZZg)
_________________
### โณ๏ธ Sensors & Actuators
Sensors and actuators are the eyes and hands of embedded systems. They are responsible for gathering information about the environment and taking actions based on that information. Sensors convert physical phenomena, such as temperature, light, or sound, into electrical signals that can be processed by the embedded system. Actuators, on the other hand, convert electrical signals into physical actions, such as controlling the speed of a motor or opening and closing a valve.
- [๐๏ธ๐ Coursera - Embedding Sensors and Motors Specialization](https://www.coursera.org/specializations/embedding-sensors-motors)
#### ๐ต Sensors
- [๐ Calibrating Sensors](https://learn.adafruit.com/calibrating-sensors)
- [๐ DHT11 vs DHT22 vs LM35 vs DS18B20 vs BME280 vs BMP180](https://randomnerdtutorials.com/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](https://www.youtube.com/watch?v=isOekyygpR8)
- [๐๏ธ GPS Module and STM32 || NEO 6M || Get coordinates, Date, Time, Speed, etc.](https://www.youtube.com/watch?v=tq_RoaPLahk)
- [๐๏ธ Interface MPU6050/GY-521 with STM32 || LCD 20x4 || CubeMx || HAL || SW4STM](https://www.youtube.com/watch?v=xxphp9wDnHA)
- [๐ Arduino with PIR Motion Sensor](https://randomnerdtutorials.com/arduino-with-pir-motion-sensor/)
- [๐ Complete Guide for Ultrasonic Sensor HC-SR04 with Arduino](https://randomnerdtutorials.com/complete-guide-for-ultrasonic-sensor-hc-sr04/)
- [๐๏ธ Electronic Basics #15: Temperature Measurement (Part 1) || NTC, PT100, Wheatstone Bridge](https://youtu.be/1U4fep_qAeo?si=Q2FF__EXONN-xN5M)
#### ๐ต Actuators
- [๐ Adafruit Motor Selection Guide](https://learn.adafruit.com/adafruit-motor-selection-guide)
- [๐๏ธ DC Motor Speed Controller PWM With Potentiometer Using STM32](https://www.youtube.com/watch?v=8QpegVuV_AQ)
- [๐ All About Stepper Motors](https://learn.adafruit.com/all-about-stepper-motors)
- [๐ Using Servos With CircuitPython and Arduino](https://learn.adafruit.com/using-servos-with-circuitpython)
- [๐๏ธ Electronic Basics #25: Servos and how to use them](https://youtu.be/J8atdmEqZsc?si=bH_xoIwnAsNU5_lD)
- [๐๏ธ Electronic Basics #24: Stepper Motors and how to use them](https://youtu.be/bkqoKWP4Oy4?si=kvhwykmFZ0UnLDJ7)
- [๐๏ธ Electronic Basics #18: DC & Brushless DC Motor + ESC](https://youtu.be/UteZJ_7C4Mg?si=uADPmCaucyWXd8Xe)
_________________
### โณ๏ธ Digital Signal Processing
Digital signal processing (DSP) is a branch of engineering that deals with the processing of digital signals. It is used in a wide variety of applications, including embedded systems, communication systems, and multimedia systems. DSP algorithms are often implemented in hardware using application-specific integrated circuits (ASICs) or field-programmable gate arrays (FPGAs).
#### ๐ต DSP Basics & Filter Design
- [๐๐ The Scientist and Engineer's Guide to Digital Signal Processing - Steven W. Smith](https://www.dspguide.com/pdfbook.htm)
- [๐๏ธ FIR Filter Design and Software Implementation - Phil's Lab #17](https://www.youtube.com/watch?v=uNNNj9AZisM)
- [๐๏ธ IIR Filters - Theory and Implementation (STM32) - Phil's Lab #32](https://www.youtube.com/watch?v=QRMe02kzVkA)
- [๐๏ธ Digital Signal Processing (ECSE-4530) Lectures, Fall 2014 (YouTube Playlist)](https://youtube.com/playlist?list=PLuh62Q4Sv7BUSzx5Jr8Wrxxn-U10qG1et)
- [๐๏ธ Udemy โ Digital Signal Processing (DSP) From Ground Up in C](https://www.udemy.com/course/digital-signal-processing-dsp-from-ground-uptm-in-c/)
- [๐ Real-Time Digital Signal Processing: Fundamentals, Implementations and Applications - Sen M. Kuo, Bob H. Lee, Wenshun Tian](https://www.wiley.com/en-us/Real+Time+Digital+Signal+Processing%3A+Fundamentals%2C+Implementations+and+Applications%2C+3rd+Edition-p-9781118414323)
- [๐ Real-Time Digital Signal Processing from MATLAB to C with the TMS320C6x DSPs - Thad B. Welch, Cameron H.G. Wright, Michael G. Morrow](https://www.routledge.com/Real-Time-Digital-Signal-Processing-from-MATLAB-to-C-with-the-TMS320C6x/Welch-Wright-Morrow/p/book/9780367736453)
- [๐ Schaum's Outline of Signals and Systems - Hwei P. Hsu](https://www.mhprofessional.com/schaum-s-outline-of-signals-and-systems-fourth-edition-9781260454246-usa)
- [๐๐ Digital Signal Processing - John G. Proakis, Dimitris K. Manolakis](https://a.co/d/75P5PiE)
#### ๐ต Discrete Fourier Transform / FFT
- [๐๏ธ Discrete Fourier Transform - Simple Step by Step](https://www.youtube.com/watch?v=mkGsMWi_j4Q)
- [๐๏ธ The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever?](https://youtu.be/h7apO7q16V0)
- [๐๏ธ The FFT Algorithm - Simple Step by Step](https://www.youtube.com/watch?v=htCj9exbGo0)
- [๐๏ธ STM32 Fast Fourier Transform (CMSIS DSP FFT) - Phil's Lab #111](https://youtu.be/d1KvgOwWvkM)
### โณ๏ธ Control Theory
- [๐๏ธ Understanding Control Systems (YouTube Playlist)](https://youtube.com/playlist?list=PLn8PRpmsu08q8CE0pbZ-cSrMm_WYJfVGd)
- [๐๏ธ Control Systems - CircuitBread (YouTube Playlist)](https://www.youtube.com/playlist?list=PLfYdTiQCV_p4YZNJWExM-5_g0fk9bHDL8)
- [๐๏ธ๐ Brian Douglas' Control Systems Lectures (YouTube Channel)](https://www.youtube.com/@BrianBDouglas)
- [๐๐ Control Systems Engineering - Norman S. Nise](https://www.wiley.com/en-us/Control+Systems+Engineering%2C+8th+Edition-p-9781119474227)
- [๐๐ Modern Control Systems - Richard C. Dorf, Robert H. Bishop](https://www.pearson.com/en-us/subject-catalog/p/modern-control-systems/P200000003484/9780137307098)
#### ๐ต PID Controller
- [๐๏ธ๐ถ What is a PID Controller? | DigiKey](https://www.youtube.com/watch?v=tFVAaUcOm4I)
- [๐๏ธ๐ถ How to Tune a PID Controller for an Inverted Pendulum | DigiKey](https://www.youtube.com/watch?v=hRnofMxEf3Q)
- [๐๏ธ PID Controller Explained](https://www.youtube.com/watch?v=fv6dLTEvl74)
- [๐๏ธ Understanding PID Control (YouTube Playlist)](https://youtube.com/playlist?list=PLn8PRpmsu08pQBgjxYFXSsODEF3Jqmm-y)
- [๐๏ธ PID Controller Implementation in Software - Phil's Lab #6](https://www.youtube.com/watch?v=zOByx3Izf5U)
#### ๐ต MATLAB / Simulink
- [๐๏ธ MATLAB Tutorials: Getting Started with MATLAB (YouTube Playlist)](https://youtube.com/playlist?list=PL7CAABC40B2825C8B)
- [๐๏ธ Getting Started with Simulink (YouTube Playlist)](https://youtube.com/playlist?list=PL484BA2AD3AE4C2D0)
- [๐๏ธ Udemy โ MATLAB/SIMULINK Bible|Go From Zero to Hero!](https://www.udemy.com/course/matlabsimulink-biblego-from-zero-to-hero/)
_________________
### โณ๏ธ Operating Systems
Embedded systems can be programmed with either an operating system (OS) or directly on the hardware, known as bare-metal programming. Each approach has its own advantages and disadvantages. Embedded operating systems provide a layer of abstraction between the hardware and the application code, offering benefits like resource management, task scheduling, error handling, and communication capabilities. However, they add overhead and may not be suitable for memory-constrained applications.
#### ๐ต Operating System Fundamentals
- [๐๐ถ Putting the โYouโ in CPU](https://cpu.land/)
- [๐๐ถ The little book about OS development](https://littleosbook.github.io/)
- [๐๐ถ Operating Systems: From 0 to 1](https://github.com/tuhdo/os01/blob/master/Operating_Systems_From_0_to_1.pdf)
- [๐๐ Operating Systems: Three Easy Pieces - Remzi H Arpaci-Dusseau, Andrea C Arpaci-Dusseau](https://pages.cs.wisc.edu/~remzi/OSTEP/)
- [๐๐ Modern Operating Systems - Andrew S. Tanenbaum, Herbert Bos](https://www.pearson.com/en-us/subject-catalog/p/modern-operating-systems/P200000003295)
- [๐ Writing an OS in Rust - Philipp Oppermann's blog](https://os.phil-opp.com/)
- [๐ Operating System development tutorials in Rust on the Raspberry Pi](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials)
#### ๐ต Real-Time Operating Systems
Real-time operating systems (RTOS) are specialized operating systems designed to meet strict timing deadlines. They are used in embedded systems where timing is critical, such as avionics, robotics, and medical devices. RTOSs provide a deterministic environment in which tasks can be executed with predictable timing. This ensures that critical tasks are always executed on time, even in the presence of interrupts and other disruptions.
##### ๐ถ RTOS Basics
- [๐ Bare-metal and RTOS Based Embedded Systems](https://microcontrollerslab.com/difference-bare-metal-and-rtos-based-embedded-systems/)
- [๐ RTOS vs. Bare Metal: Navigating Performance, Complexity, and Efficiency](https://weston-embedded.com/support/media-articles/119-rtos-vs-bare-metal-navigating-performance-complexity-and-efficiency)
- [๐ The Pros and Cons of RTOS vs Bare Metal: Which Will You Choose?](https://medium.com/@lanceharvieruntime/the-pros-and-cons-of-rtos-vs-bare-metal-which-will-you-choose-756e33ba6df7)
- [๐ FreeRTOS vs Linux for Embedded Systems](https://www.bytesnap.com/news-blog/freertos-vs-linux-embedded-systems/)
- [๐ Real-Time Systems Concepts](https://micrium.atlassian.net/wiki/spaces/osiidoc/pages/163855/Real-Time+Systems+Concepts)
- [๐ RTOS Fundamentals](https://www.freertos.org/Documentation/01-FreeRTOS-quick-start/01-Beginners-guide/01-RTOS-fundamentals)
- [๐ A Simple Scheduler via an Interrupt-driven Actor Model](https://interrupt.memfault.com/blog/hardware-actor-scheduler)
- [๐ ARM Cortex-M RTOS Context Switching](https://interrupt.memfault.com/blog/cortex-m-rtos-context-switching)
- [๐๏ธ RTOS (YouTube Playlist)](https://www.youtube.com/playlist?list=PLPW8O6W-1chyrd_Msnn4LD6LBs2slJITs)
- [๐๏ธ Beyond the RTOS (YouTube Playlist)](https://www.youtube.com/playlist?list=PLPW8O6W-1chytjkg63-tM7MI0BvGxxPIP)
##### ๐ถ FreeRTOS
- [๐ FreeRTOS - Market leading RTOS](https://www.freertos.org)
- [๐๏ธ๐ถ Introduction to RTOS (YouTube Playlist)](https://www.youtube.com/playlist?list=PLEBQazB0HUyQ4hAPU1cJED6t3DU0h34bz)
- [๐๐ Mastering the FreeRTOS Real Time Kernel - a Hands On Tutorial Guide](https://www.freertos.org/Documentation/RTOS_book.html)
- [๐๏ธ๐ถ Microchip University - FreeRTOS Simplified: A Beginner's Guide to Develop and Debug FreeRTOS Applications](https://mu.microchip.com/freertos-simplified)
- [๐๏ธ Getting Started With STM32 and Nucleo Part 3: FreeRTOS - How To Run Multiple Threads w/ CMSIS-RTOS](https://www.youtube.com/watch?v=CdpgqpuPSyQ)
- [๐ Hands-On RTOS with Microcontrollers: Building real-time embedded systems using FreeRTOS, STM32 MCUs, and SEGGER debug tools - Brian Amos](https://a.co/d/11MSPlo)
- [๐ Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC - Warren Gay](https://link.springer.com/book/10.1007/978-1-4842-3624-6)
- [๐ SafeRTOS - Safety Critical Real-Time OS](https://www.freertos.org/FreeRTOS-Plus/Safety_Critical_Certified/SafeRTOS.html)
##### ๐ถ Zephyr
- [๐ Zephyrยฎ Project](https://www.zephyrproject.org/)
- [๐๐ Getting Started With Zephyr](https://www.embeddedrelated.com/showarticle/1505.php)
- [๐ Zephyr: Tutorial for Beginners](https://maksimdrachov.github.io/zephyr-rtos-tutorial/)
- [๐ Why We Moved from FreeRTOS to Zephyr RTOS](https://www.zephyrproject.org/why-we-moved-from-freertos-to-zephyr-rtos/)
- [๐ nRF Connect SDK](https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/)
- [๐๏ธ ESP32 on Zephyr OS (YouTube Playlist)](https://www.youtube.com/playlist?list=PLEQVp_6G_y4iFfemAbFsKw6tsGABarTwp)
- [๐๏ธ๐ Introduction to Zephyr - Digikey (YouTube Playlist)](https://www.youtube.com/playlist?list=PLEBQazB0HUyTmK2zdwhaf8bLwuEaDH-52)
##### ๐ถ ฮผC/OS / Micriฮผm OS
- [๐ Micriฮผm OS](https://www.silabs.com/developers/micrium)
- [๐ ยตC/OS-III Documentation](https://micrium.atlassian.net/wiki/spaces/osiiidoc/overview)
- [๐ ยตC/OS-III Books](https://weston-embedded.com/micrium-books)
- [๐๐ ยตC/OS-II Documentation (Previously published as a book titled "MicroC/OS-II: The Real-Time Kernel")](https://micrium.atlassian.net/wiki/spaces/osiidoc/overview)
##### ๐ถ NuttX
- [๐ NuttX - The Apache Software Foundation](https://nuttx.apache.org/)
- [๐ NuttX Documentation](https://nuttx.apache.org/docs/latest/)
- [๐๏ธ Getting Started to NuttX (YouTube Playlist)](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 document center](https://www.rt-thread.io/document/site/)
- [๐๏ธ RT-Thread Beginners Guide (YouTube Playlist)](https://youtube.com/playlist?list=PLXUV89C_M3G5KVw2IerI-pqApdSM_IaZo)
##### ๐ถ Mbed OS
- [๐ Mbed OS](https://os.mbed.com/mbed-os/)
- [๐ Mbed OS Documentation](https://os.mbed.com/docs/mbed-os/)
##### ๐ถ QNX
- [๐ BlackBerry QNX: Embedded OS, Support, and Services](https://blackberry.qnx.com/en)
- [๐ QNX Product Documentation](https://www.qnx.com/developers/docs/index.html)
##### ๐ถ VxWorks
- [๐ VxWorks | Industry Leading RTOS for Embedded Systems](https://www.windriver.com/products/vxworks)
- [๐ VxWorks Documentation](https://docs.windriver.com/category/os_vxworks?labelkey=os_vxworks)
- [๐๏ธ VxWORKS-RTOS - Kumar M (YouTube Playlist)](https://www.youtube.com/playlist?list=PLyp1I7W35-q34sYWBlBg8xgoqsizZ57P7)
##### ๐ถ Azure RTOS (ThreadX)
- [๐ Azure RTOS - Making embedded IoT development and connectivity easy](https://azure.microsoft.com/en-us/services/rtos/)
- [๐ Microsoft Azure RTOS documentation](https://learn.microsoft.com/en-us/azure/rtos/)
- [๐ Azure RTOS ThreadX](https://github.com/azure-rtos/threadx)
#### ๐ต Embedded Linux
Embedded Linux is a specialized version of the Linux operating system tailored for embedded systems. It's designed to operate on devices with resource constraints, such as limited memory, processing power, and power consumption.
- [๐ What Is Embedded Linux?](https://www.windriver.com/solutions/learning/embedded-linux)
- [๐ FreeRTOS vs Linux for Embedded Systems](https://www.bytesnap.com/news-blog/freertos-vs-linux-embedded-systems/)
- [๐๏ธ๐ถ Introduction to Embedded Linux (YouTube Playlist)](https://youtube.com/playlist?list=PLEBQazB0HUyTpoJoZecRK6PpDG31Y7RPB)
- [๐ Mastering Embedded Linux Series - George Hilliard's blog](https://www.thirtythreeforty.net/series/mastering-embedded-linux/)
- [๐๐ Mastering Embedded Linux Programming - Chris Simmonds](https://www.packtpub.com/product/mastering-embedded-linux-programming-third-edition/9781789530384)
- [๐๏ธ๐ Coursera - Advanced Embedded Linux Development Specialization](https://www.coursera.org/specializations/advanced-embedded-linux-development)
- [๐ Linux From Scratch - step-by-step instructions for building your own custom Linux system](https://www.linuxfromscratch.org/)
- [๐ Automotive Grade Linux (AGL)](https://docs.automotivelinux.org/)
- [๐ Real Time Linux and `PREEMPT_RT` Patch](https://wiki.linuxfoundation.org/realtime/start)
- [๐ Android Open Source Project](https://source.android.com)
- [๐ Android Automotive](https://source.android.com/docs/automotive)
##### ๐ถ Linux Kernel
- [๐๐ถ Linux Kernel Development - Robert Love](https://www.oreilly.com/library/view/linux-kernel-development/9780768696974/)
- [๐๐ The Linux Programming Interface - Michael Kerrisk](https://man7.org/tlpi/)
- [๐ How Linux Works - Brian Ward](https://nostarch.com/howlinuxworks3)
##### ๐ถ Linux Device Drivers
- [๐๐ถ Writing a Simple Linux Kernel Module](https://blog.sourcerer.io/writing-a-simple-linux-kernel-module-d9dc3762c234)
- [๐๐ Linux Device Drivers - Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman](https://lwn.net/Kernel/LDD3/)
- [๐ The Linux Kernel Module Programming Guide](https://sysprog21.github.io/lkmpg/)
- [๐ Mastering Linux Device Driver Development - John Madieu](https://www.packtpub.com/product/mastering-linux-device-driver-development/9781789342048)
- [๐ Kernel Driver with Rust in 2022](https://not-matthias.github.io/posts/kernel-driver-with-rust/)
##### ๐ถ U-Boot
- [๐ The U-Boot Documentation](https://u-boot.readthedocs.io/en/latest/)
- [๐ Barebox](https://www.barebox.org/doc/latest/index.html)
##### ๐ถ Buildroot
- [๐ Buildroot Documentation](https://buildroot.org/docs.html)
- [๐๏ธ Introduction to Embedded Linux Part 1 - Buildroot | Digi-Key Electronics](https://www.youtube.com/watch?v=9vsu67uMcko)
- [๐ Building Tiny Raspberry Pi Linux Images With Buildroot](https://rickcarlino.com/2021/building-tiny-raspberry-pi-linux-images-with-buildroot.html)
##### ๐ถ Yocto
- [๐ Yocto Project Quick Build](https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html)
- [๐๐ Yocto Project Documentation](https://docs.yoctoproject.org/index.html)
- [๐๏ธ Introduction to Embedded Linux Part 2 - Yocto Project | Digi-Key Electronics](https://www.youtube.com/watch?v=2-PwskQrZac&t=7s)
- [๐ Build Linux Image for Raspberry Pi board using Yocto Project](https://tutorialadda.com/yocto/create-your-own-linux-image-for-the-raspberry-pi-board-using-yocto-project)
- [๐๏ธ Yocto Project Tutorial Series (Basic to Advance) (YouTube Playlist)](https://www.youtube.com/playlist?list=PLwqS94HTEwpQmgL1UsSwNk_2tQdzq3eVJ)
- [๐๏ธ Udemy โ Embedded Linux using Yocto](https://www.udemy.com/course/embedded-linux-using-yocto/)
- [๐๐ Embedded Linux Systems with the Yocto Project - Rudolf J.Streif](https://www.oreilly.com/library/view/embedded-linux-systems/9780133443301/)
- [๐ Embedded Linux Development using Yocto Project Cookbook - Alex Gonzalez](https://www.oreilly.com/library/view/embedded-linux-development/9781788399210/)
- [๐ Bootlin Embedded Linux, Kernel, drivers, Yocto, Buildroot and Graphics Training](https://bootlin.com/training/)
##### ๐ถ Multithreading & Parallel Processing
- [๐ Threading/Concurrency vs Parallelism](http://www.danielmoth.com/Blog/threadingconcurrency-vs-parallelism.aspx)
- [๐ Multi-threading and Parallel Programming](https://dev.to/kwereutosu/multi-threading-and-parallel-programming-1l9m)
- [๐ Multitasking vs Multithreading vs Multiprocessing](https://medium.com/codex/multitasking-vs-multithreading-vs-multiprocessing-2b0087c861ae)
- [๐๐ Programming with POSIX Threads - David Butenhof](https://a.co/d/9R6DswF)
- [๐ C++ Concurrency in Action - Anthony Williams](https://www.manning.com/books/c-plus-plus-concurrency-in-action)
##### ๐ถ High-Performance Computing (HPC)
- [๐ Parallel Programming and Performance Optimization With OpenMP](https://passlab.github.io/OpenMPProgrammingBook/index.html)
- [๐๏ธ Introduction to OpenMP - Tim Mattson (Intel) (YouTube Playlist)](https://youtube.com/playlist?list=PLLX-Q6B8xqZ8n8bwjGdzBJ25X2utwnoEG)
- [๐ OpenCL Tutorials](https://www.intel.com/content/www/us/en/developer/articles/training/opencl-tutorials.html)
- [๐ CUDA C++ Programming Guide](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html)
##### ๐ถ Inter-Process Communication (IPC)
- [๐ Inter Process Communication (IPC)](https://www.scaler.com/topics/operating-system/inter-process-communication-in-os/)
- [๐ What Is Inter-Process Communication In Linux?](https://www.scaler.com/topics/ipc-in-linux/)
- [๐๏ธ Udemy โ Linux Inter Process Communication (IPC) from Scratch in C](https://www.udemy.com/course/linuxipc/)
- [๐ Extreme C - Kamran Amini | Chapter 19: Single-Host IPC and Sockets](https://www.packtpub.com/free-ebook/extreme-c/9781789343625)
- [๐๏ธ Udemy โ Multi-Threading and IPC with Qt 5 C++](https://www.udemy.com/course/multi-threading-and-ipc-with-qt-c-plus-plus/)
- [๐ D-Bus Tutorial](https://dbus.freedesktop.org/doc/dbus-tutorial.html)
##### ๐ถ Qt Framework
- [๐ Qt Documentation](https://doc.qt.io/)
_________________
### โณ๏ธ Debugging
Debugging embedded systems involves identifying and resolving software defects and hardware malfunctions. Various techniques are employed to pinpoint the root causes of issues, such as static code analysis, dynamic analysis, simulation and emulation, in-circuit debugging, and hardware debugging.
- [๐ Using Asserts in Embedded Systems](https://interrupt.memfault.com/blog/asserts-in-embedded-systems)
#### ๐ต JTAG / SWD
JTAG and SWD (Serial Wire Debug) are two popular interface protocols used for debugging and programming embedded systems. JTAG is a more general-purpose protocol that can be used to debug and program a wider range of devices, while SWD is a simpler and more compact protocol that is specifically designed for ARM microcontrollers.
- [๐ A Deep Dive into ARM Cortex-M Debug Interfaces](https://interrupt.memfault.com/blog/a-deep-dive-into-arm-cortex-m-debug-interfaces)
- [๐ Guide: Connecting your debugger](https://stm32-base.org/guides/connecting-your-debugger.html)
- [๐๏ธ STM32 + SWD + ST-Link + CubeIDE | Debugging on Custom Hardware Tutorial - Phil's Lab #4](https://www.youtube.com/watch?v=qMUzLU636s8)
- [๐ Diving into JTAG protocol. Part 1 โ Overview](https://medium.com/@aliaksandr.kavalchuk/diving-into-jtag-protocol-part-1-overview-fbdc428d3a16)
- [๐ Diving into JTAG protocol. Part 2 โ Debugging](https://medium.com/@aliaksandr.kavalchuk/diving-into-jtag-protocol-part-2-debugging-56a566db3cf8)
- [๐ Diving into JTAG protocol. Part 3 โ Boundary Scan](https://medium.com/@aliaksandr.kavalchuk/diving-into-jtag-part-3-boundary-scan-17f9975ecc59)
#### ๐ต GDB
GDB (GNU Debugger) is a powerful and versatile debugger for source-level and machine-level debugging. It supports a wide range of programming languages, including C, C++, Objective-C, Java, and Rust. GDB is a free and open-source software tool that is widely used by developers and researchers.
- [๐ Advanced GDB Usage](https://interrupt.memfault.com/blog/advanced-gdb)
- [๐ How do breakpoints even work?](https://interrupt.memfault.com/blog/cortex-m-breakpoints)
- [๐ GNU GDB Debugger Command Cheat Sheet](http://www.yolinux.com/TUTORIALS/GDB-Commands.html)
- [๐ gdbgui - A browser-based frontend to gdb (gnu debugger)](https://www.gdbgui.com/)
- [๐๏ธ everyone needs to stop using print debugging (do THIS instead)](https://www.youtube.com/watch?v=3T3ZDquDDVg)
- [๐๏ธ GDB is REALLY easy! Find Bugs in Your Code with Only A Few Commands](https://www.youtube.com/watch?v=Dq8l1_-QgAc)
- [๐ Introduction to ARM Semihosting](https://interrupt.memfault.com/blog/arm-semihosting)
#### ๐ต OpenOCD
OpenOCD (Open On-Chip Debugger) is an open-source software tool that provides a powerful and versatile platform for debugging and programming embedded systems. It serves as an interface between a hardware debug adapter (HDA) and a debugger, such as GNU Debugger (GDB), enabling developers to interact with the target microcontroller or microprocessor. OpenOCD supports a wide range of hardware platforms and provides a comprehensive set of features for hardware debugging, programming, and boundary-scan testing.
- [๐ OpenOCD - GitHub repository](https://github.com/openocd-org/openocd)
- [๐๏ธ This Is 100% How You Should Be Debugging | How to Use OpenOCD to Debug Embedded Software with GDB](https://www.youtube.com/watch?v=_1u7IOnivnM)
_________________
### โณ๏ธ Build System
Build systems automate the process of compiling and linking source code into executable programs. They are essential tools for software development, as they can help to improve the efficiency and consistency of the build process. Popular build systems include Make, and CMake.
#### ๐ต Compilers / GCC
GCC (the GNU Compiler Collection) is a free and open-source compiler system that can compile programs for many different programming languages, including C, C++, Objective-C, Fortran, Ada, and Go. GCC is a popular choice for embedded systems development due to its open source nature, maturity, stability, portability, performance, and large community. On the other hand proprietary compilers like Keil and IAR offer toolchain support, target-specific optimizations, and customer support, which may be preferred for specific projects.
- [๐ GCC and Make - Compiling, Linking and Building C/C++ Applications](https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html)
- [๐ The Best and Worst GCC Compiler Flags For Embedded](https://interrupt.memfault.com/blog/best-and-worst-gcc-clang-compiler-flags)
- [๐ From Zero to main(): Demystifying Firmware Linker Scripts](https://interrupt.memfault.com/blog/how-to-write-linker-scripts-for-firmware)
- [๐ Bare Metal - From zero to blink](https://www.linuxembedded.fr/2021/02/bare-metal-from-zero-to-blink)
- [๐ Keil MDK & ยตVision](https://www.keil.com/)
- [๐ IAR Embedded Workbench](https://www.iar.com)
#### ๐ต Make / CMake
CMake and Make are both tools for building software applications. CMake is a meta-build system that generates Makefiles, which are then used by Make to build the software. CMake is more versatile and cross-platform than Make, and it is becoming the more popular choice for modern software development.
- [๐ A Shallow Dive into GNU Make](https://interrupt.memfault.com/blog/gnu-make-guidelines)
- [๐๏ธ Building STM32 projects from scratch with cross platform tools like Make, CMake and arm-gcc compiler toolchain (YouTube Playlist)](https://www.youtube.com/playlist?list=PLEg2mgYz66IOcHRvvUDf9O1ZCGy58M1Bt)
- [๐ CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html)
- [๐๏ธ How to CMake Good (YouTube Playlist)](https://youtube.com/playlist?list=PLK6MXr8gasrGmIiSuVQXpfFuE1uPT615s)
- [๐๐ถ The most thoroughly commented embedded CMakeLists file](https://dnedic.github.io/blog/the-most-thoroughly-commented-embedded-cmakelists/)
#### ๐ต Bash Scripting
Bash scripting serves as a powerful tool in embedded systems development, enabling developers to automate repetitive tasks, handle complex configurations, and manage the embedded system's environment effectively. Bash scripting is a Linux-specific tool that is not natively integrated into Windows. However, it can be accessed via the Windows Subsystem for Linux (WSL).
- [๐ Bash scripting cheatsheet](https://devhints.io/bash)
- [๐๏ธ Bash Scripting Tutorial for Beginners](https://www.youtube.com/watch?v=tK9Oc6AEnR4)
#### ๐ต Docker
Docker containers provide a consistent and isolated environment for building software applications. This can help to improve the reproducibility of builds and reduce the risk of errors. Docker also makes it easier to share build environments, which can save time and effort for developers.
- [๐ Docker Docs](https://docs.docker.com/get-started/)
- [๐ Docker Cheat Sheet](https://dockerlabs.collabnix.com/docker/cheatsheet/)
- [๐๐ถ