Skip to content

joaocarvalhoopen/How_to_learn_modern_Embedded_Systems

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 

Repository files navigation

How to learn modern Embedded Systems

A guide to the adventurer

Description

This is a guide to learn embedded systems, with updated resources that I think are relevant and modern.
In this repository there are resources for 3 areas:

  • Embedded microcontroller programming
  • Embedded FPGA programming
  • Embedded Linux drivers and systems programming

Engineering a project from idea to final product

This example is beautifully explained in 15 minutes with clarity and simplicity. With access to all the files (Open Hardware). A really good and simple project of IoT to learn from. Study it and see also the other videos from the same Youtuber, because Sayanee Basu is a really good educator in embedded development. A nice video to start this guide.

  1. Initial idea
  2. Market study. Search for other products in the market and open projects.
  3. Concept development
  4. Circuit design
  5. Procurement of components
  6. PCB design with a microcontroller
  7. Logistics to send the board to factory
  8. Construction, soldering the components on the board
  9. Boot loader flashing
  10. Firmware development in Arduino-CLI
  11. PC Web development configuration control over USB.
  12. Publishing of all files of the project on the Web
  13. Demo of the project and the project development steps on a Youtube video

Programming

C programming

C++ programming

Python programming

Rust programming

Embedded Rust

Embedded Rust with STM32 BluePill - STM32F103

Embedded Rust with Raspberry Pi Pico - 4 dollars board

Rust on or for the Raspberry Pi

There are two modes of using Rust with the Raspberry Pi.
The first one is installing Rust development tools on the Raspberry Pi itself, and the second one is installing on the PC and making cross-compilation to generate a executable that runs on the Raspberry Pi.

Developing on the Raspberry Pi and running Rust programs on the Raspberry Pi

Developing on the PC and cross-compiling to run Rust programs on the Raspberry Pi

Algorithms

Microcontrollers

Arduino

  • Programming Arduino: Getting Started with Sketches, 2nd Ed
    by Simon Monk
    Pag 208

  • Programming Arduino Next Steps: Going Further with Sketches, 2nd Ed
    by Simon Monk
    Pag 320

  • Exploring Arduino: Tools and Techniques for Engineering Wizardry 2nd Ed
    by Jeremy Blum
    Pag 512

  • Embedded Controllers using C and Arduino 2nd Ed
    By James Fiore
    Pag 166 Price Free Creative commons, but small symbolic price if bought on paper on Amazon. book
    Book and videos - http://www.dissidents.com/books.htm

  • Laboratory Manual for Embedded Controllers using C and Arduino 2nd Ed
    By James Fiore
    Pag 100 Price Free Creative commons, but small symbolic price if bought on paper on Amazon. book
    Book and videos - http://www.dissidents.com/books.htm

Arduino-CLI

This is the best way and the more professional way of working with Arduino. With your own editor, with your own make file, with all your tools in place, really the best way. All this is beautifully explained in simple terms and in a show how to do it way in the following video play list from Sayanee Basu.

AVR

  • AVR Programming: Learning to Write Software for Hardware
    by Elliot Williams
    Pag 474

STM32

  • Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC
    by Warren Gay
    Pag 430

  • STM32 ARM Programming for Embedded Systems
    by Mazidi, Chen, Ghaemi
    Pag 378

  • STM32 MOOC Courses on STM32CubeMX HAL and LL and others
    Official free MOOC's

  • STM32 Online Training
    Free online training

  • STM32 HAL e LL manual for the STM32 family.

  • The ST docs that you will need: Microcontroller Datasheet, Reference Manual and Dev Board Starter Manual.

ESP32 and ESP32-S2

  • Learn ESP32 with Arduino IDE
    I took this course and I recommend it, because it is a good course. It's an extensive course, good for the beginner and not so beginners. It covers in many, many projects all the micro-controller programming and the IoT - Internet Of Things stuff with the Arduino IDE. The author is constantly adding material to the course. I have experience with several different micro-controllers and in my opinion, the ESP32 and the future ESP32-S02 are good safe bet's to learn micro-controllers in general and IoT in particular. Also they are low cost and have large range of advanced features.
    https://randomnerdtutorials.com/learn-esp32-with-arduino-ide/

  • Learn ESP32 The ESP-IDF
    I took this course and I recommend it highly, this is an excellent course. This is a course for a more professional or more in depth persons, for the ones that really need to know what's under the hood and want to make use of every feature, capacity and possibility that the incredible ESP32 provides. The other kind of person that I can imagine doing this course is if you are already a developer for example in PC or web context, you will rapidly understand all the details and understand all the micro-controller power that the author explains to you. The framework used (ESP-IDF) is the one made by ExpressIF, the enterprise that makes the ESP32. The knowledge that you will obtain from this course is really profound, although the author goes to extensive length to explain the foundations that you need even in more advanced C programming, it is for people that already used a micro-controller before, be it a simple Arduino Uno board, or a more professional one. But I would like to say clearly that, the knowledge that you obtain from this course is profound. In my opinion it gives you the tools, it enables you to work professional on this field developing embedded systems software with the ESP32 including IoT. The course already as 12 hours, with all the code accessible in GitHub, but it's author is currently still adding content. It also includes advanced sections on freeRTOS. It uses in a very intelligent and useful way the free Visual Studio Code Editor in Windows and Linux, even allowing debugging in ESP32 inside Visual Studio Code with a cheap 10 dollars JTAG addon board.
    https://www.learnesp32.com/

FreeRTOS - Real time operating system

  • FreeRTOS Getting Started, Guide and reference manual on freeRTOS site.
    FreeRTOS Documentation

  • FreeRTOS for ESP32-Arduino
    by Warren Gay

  • Hands-On RTOS with Microcontrollers: Building real-time embedded systems using FreeRTOS, STM32 MCUs...
    by Brian Amos
    Pag 496

Fixed Point Math

Microcontrollers for less than 1 dollar

  • The amazing $1 microcontroller (Jay Carlson)
    A new series that explores 21 different microcontrollers — all less than $1 — to help familiarize you with all the major ecosystems out there.
    https://jaycarlson.net/microcontrollers/

Linux

Learn Embedded Linux

Command line

  • The Linux Command Line: A Complete Introduction 2nd Ed
    by William Shotts
    Pag 480

Computer systems, Operating systems and Drivers

  • Computer Systems: A Programmer's Perspective, 3rd Ed
    by Randal E. Bryant, David R. O'Hallaron
    Pag 1120

  • How Linux Works: What every super user should know
    by Brian Ward
    Pag 392

  • The Linux Programming Interface: A Linux and UNIX System Programming Handbook 1st Ed
    by Michael Kerrisk
    Pag 1552

  • Linux Device Drivers, 3rd Ed
    by Jonathan Corbet, Alessandro Rubini
    Pag 640
    Note: Not up to date, but free online and a good book.
    https://lwn.net/Kernel/LDD3/

  • Linux Driver Development for Embedded Processors 2th Ed: Learn to develop Linux embedded drivers with kernel 4.9 LTS
    by Alberto Liberal de los Ríos
    Pag 680

RaspberryPi

  • The Official Raspberry Pi Beginner's Guide
    by Gareth Halfacree
    Pag 248

  • Raspberry Pi - Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux
    by Derek Molloy
    Pag 720

  • Learning Computer Architecture with Raspberry Pi
    by Eben Upton, Jeffrey Duntemann, Ralph Roberts, Tim Mamtora, Ben Everard
    Pag 528

FPGA's

Verilog

  • Verilog by Example: A Concise Introduction for FPGA Design
    by Blaine Readler
    Pag 124

  • Programming FPGAs: Getting Started with Verilog
    by Simon Monk
    Pag 192

VHDL

  • VHDL By Example: A Concise Introduction for FPGA Design
    by Blaine Readler
    Pag 120

FPGA Open source Tools

Others

Electronics

PCB - KiCAD

  • Kicad Like a Pro, 2nd edition
    by Dr. Peter Dalmaris
    Pag 459 (A4)
    https://techexplorations.com/st/klp_2e/

  • PCB design course KiCAD like a Pro I took this course and reed the book and I recommend it highly, this is an excellent course. There comes a time that every person that enter this field of electronics or embedded systems, will feel the need to make a professional looking board for the system that you design. When breadboard, soldering wires or simples pre-fabricated modules connected by wires, are not enough. That is the time to start learning about how to design a PCB's. Starting by drawing the schematic, to the design of the effective PCB, reaching out to a fabric to make you PCB and then assemble in your home or in the fabric with an assembly service. This course cover it all. KiCAD is a free open source tool that is of professional grade.
    https://techexplorations.com/so/kicada/

  • KiCad - Sayanee Basu
    https://www.youtube.com/playlist?list=PL9wSRifxQqRqdhVqZtdHnlwophrsjL9ic

DSP

  • Understanding Digital Signal Processing 3th Ed
    by Richard G. Lyons
    Pag 954

  • Digital Signal Processing in Modern Communication Systems
    by Andreas Schwarzinger
    Pag 398

  • The Scientist & Engineer's Guide to Digital Signal Processing
    by Steven W. Smith
    Pag 626 Free on the net
    http://www.dspguide.com/

GCC and GDB

  • An Introduction to GCC
    by Brian J Gough, Richard M Stallman
    Pag 144

  • GDB Pocket Reference
    by Arnold Robbins
    Pag 78

Git

Code editors

All my other guides

Have fun!

Best regards,
Joao Nuno Carvalho

About

A guide to the adventurer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published