What embedded system will we learn about in this class?

Embedded is usually used as an umbrella term that can relate to many components. It is important to clarify what our “embedded device” is!

In this class we develop for an embedded system running a real time operating system (RTOS). Our target system is a Cortex M0 device. This class will teach you the tools needed to deal these types of systems. Usually these systems are developed using C, which is the language we will use for this class (C++ is outside the scope of this class). New languages that are getting popular in embedded systems (but are “still not there”) are out of the scope of this class (such as Rust).

Outside of the scope of this class is any Linux/android programming (or any embedded system that uses any “Soft Time” operating system).

What tool do we use for designing boards?

For board design we use Altium Studio (latest version is Altium Studio 20).

A common question is – would it be ok to use another tool? Unfortunately the answer is this is not possible- we cannot provide support for people who want to use other tools such as Kicad or Eagle.

But do not worry! Even if Altium is not the tool of your choice, what is important is that this class will teach you the basic principles of sound hardware architecture design. We will teach you how to draw effective schematics, the basics on board layout, how to do a good board layout, and how to take a board into production. These concepts are useful not matter the tool you use in the future. Once you have these concepts internalized, changing tools will become easier.


Altium 20 only runs on Windows Operating Systems. If you have a Mac or a Linux machine, you will need to install a virtual machine and run a Windows instance in order to use Altium. Students can download images of Windows OSs on the following link:  https://cets.seas.upenn.edu/answers/azure.html

What platform do we develop for? What IDE do we use?

This class uses the SAMW25 Module. The SAMW25 is a device that combines an Cortex M0+ microcontroller (SAMD21), a Wi-Fi controller (WINC1500), and a security IC (ATECC508). You can learn more about it here. The code we develop will “live” on the Samd21 device.

For developing on this device, we use Microchip Studio (formerly Atmel Studio) as our IDE. Microchip Studio is an IDE that allows us to write code, compile it, and debug it in the hardware in a single program. You can learn more about it here.

There are many IDEs or methods to develop embedded systems (Keil, IAR, or GCC with your text editor of choice). For simplicity we decide to use Microchip Studio as our IDE. However, it is common to sometimes prefer another program for writing the code – in this case, we recommend Visual Studio Code (https://code.visualstudio.com/)

I am interested in the class! What pre-requisites should I have?

This class assumes the following:

You have at least a basic experience in embedded systems: A class pre-requisite is ESE519 (https://ese519.seas.upenn.edu/). This (great) class teaches the concepts to develop real-time systems. If you have taken this class, you can apply for ESE516 with no problem.

If you have not seen this class, you can ask for admission as long as you have previous embedded experience. This can be:

  • Have developed embedded devices in the past (hobby, previous classes, internships).
  • Knowledge of C
  • Knows about microcontroller architecture (what is an interrupt? What are peripherals? What is bare-metal coding?)

Basic Circuit/electronics experience : This class has a hardware component to it. Prospective students should have at least basic knowledge about circuitry.

If you do not have the previous experience, it is recommended to take ESE519 first.