Embedded Systems 1

Introduction

edit

This course is an introduction to bare-metal embedded systems programming. Assuming solid foundational knowledge of Rust, each lab should take 1 day, except the final project, which could take anywhere from a few days to multiple weeks. The time required is very approximate, and depends on the student's learning style and target thoroughness. This course is roughly equivalent to half of a semester-long college course.

The course will roughly follow the Embedded Rust Book (CC BY-SA 4.0), using it as assigned reading, and occasionally borrowing files and the like.

It is important to note that this course is for bare-metal programming, which entails things like modifying registers, configuring peripherals, and using interrupts. For a microcontroller course based on a higher level abstraction, consider Arduino

Prerequisites

edit
  • Computer Architecture I
  • A very basic understanding of Git (cloning, committing, ignoring, what a repository is)
  • The Rust programming language

Platform Agnosticism

edit

It would be ideal for this class to be platform-agnostic, but due to the nature of embedded systems and how they can go wrong, it would be ideal for students to use the same platform as the teacher. While the information presented and the experience gained will be easy to adapt to other platforms once learned, I cannot recommend highly enough to take this class using Linux, Rust, and the STM32 SoC. After completing this class, it may be straightforward to redo it on another platform, but troubleshooting issues without fully understanding the content may prove difficult. Optimally, this class will eventually support other platforms, but that is not currently a priority.

Terms

edit
  • SoC (System on a Chip): Also known as a microcontroller, this will be the device you program in the course.
  • Debugger: Though there are many tools used for debugging, this term generally refers to a software program run on your computer to examine the states of various parts of your SoC, such as registers or memory locations.
  • Processor: Each SoC has a primary processing unit that runs the code that you put on it. Generally this will be either an ARM, Atmel, or RISC-V CPU.
  • Peripheral: A set of hardware devices, either built into your SoC or connected to it externally using the pins.
  • IC (Integrated Circuit): A circuit built into a single package, generally a flat black box with metal 'legs' sticking out of it. The SoC is an example of an IC.

Course Checklist

edit
Lesson Name Description
Lab 00: Hello, World! Get your code from your brain, through your computer, onto your target chip
Lab 01: Debugging Enable communication between your computer and your chip so that you can more easily see what is going on inside of it
Lab 02: Types of data An overview of the many types of data in embedded systems programming, and how using them differs from traditional computer programming
Lab 03: Input Read digital and analog data from the outside world
Lab 03: Output Write digital and analog data to the outside world
Lab 04: Timing Measure time using a Timer peripheral
Lab 05: Communication protocols Implement three of the most widely used communication protocols to interface your SoC to external ICs
Lab 06: Final project Implement one of 3 different projects that uses all of the concepts from the course, or even better, design and create your own!

See Also

edit
  Type classification: this resource is a course.
  Educational level: this is a tertiary (university) resource.
  Subject classification: this is an engineering resource.
  Completion status: this resource is just getting off the ground. Please feel welcome to help!