architectures von Neumann, Harvard, bugs RISC, CISC microprocessor, microcontroller multi-core GPU, embedded FPGA, TinyFPGA, IceStorm, Symbiflow SiliconCompiler spatial memory registers (instructions) SRAM (fast) DRAM (big) EEPROM (non-volatile) FLASH (programs, strings) fuse (configuration) peripherals ports A/D comparator D/A timer/counter/PWM USART USB math crypto ... word size 8 16 32 64 processor families hardware, software benchmarks LOGIC Megaprocessor MOnSter 6502 8051 PIC MSP AVR • 6-100 pin packages ATtiny10 • SOT23-6 ATtiny45V, ATtiny44A • prior ATtiny412, ATtiny1614, ATtiny3216 • 1-series • 8 bit, 1.8-5.5V, 20 MHz • single-cycle global instructions • simple peripheral register access • low pin-count packages • one-pin serial programming ATtiny1624 • 2-series • programmable gain amplifier AVR128DB32 • 24 MHz • analog signal conditioning • level shifting • hardware multiplier ARM D11C, D11D, D21E, D51 • 32 bit, 1.6-3.6V • 48 MHz clock, more complex clock distribution and synchronization • more powerful peripherals, more complex register access and libraries • diverse family, larger packages • standard in-circuit debugging STM32 • 8-265 pins • good software support RP2040 • 32-bit dual-core • 133 MHz clock (250 MHz+ over-clocked) • 264k SRAM • programmable peripherals Xtensa (MIPS) ESP8266, ESP32 • integrated RF, networking RISC-V • open architecture • ESP32-C3 PSoC, xCORE, Propeller, Lattice, NVIDIA • parallel vendors Octopart Digi-Key Mouser Newark Farnell SparkFun Adafruit packages DIP SOT SOIC TSSOP TQFP LQFP MLF, WLCSP, BGA embedded languages modifying code assembly hex file instruction set, opcodes mnemonics, directives, expressions avr-as inline C C++ programming types GCC make files (tabs) bit operations AVR libc modules types math benchmarks avr-libc binutils-avr gcc-avr homebrew-avr ARM gcc-arm-none-eabi gdb-multiarch homebrew-arm libopencm3 Microchip Studio toolchains packs (zip) ASF START Rust Go memory leaks, memory overruns, race conditions interpreters MicroPython CircuitPython language implementation REPL speed bridge boot.py, main.py ulab Espruino Kaluma DeviceScript in-system development bootloader, bootloaders JTAG SWD (ARM) software OpenOCD EDBG program: edbg -b -t target_type -epv -f binary_file read fuses: edbg -b -t target_type -F r,*,file_name write fuses: edbg -b -t target_type -F w,high_bit:low_bit,bit_value disable SAMD bootloader protection: edbg -b -t target_type -F w,2:0,7 hardware Atmel-ICE PICO GoodFET Raspberry Pi Free-DAP USB-D11C-SWD-10 pin board components traces traces+exterior interior USB-D11C-SWD-4 pin board components traces traces+exterior interior SWD-10-4-0.05 pitch board components traces traces+exterior interior SWD-10-4-0.1 pitch board components traces traces+exterior interior binary video USB-D11C-SWD-10 pin Eagle brd sch USB-D11C-SWD-10 pin KiCad sch pcb prl pro USB-D11C-SWD-10 pin SVG-PCB js UPDI (newer AVR) software pyupdi install: pip3 install intelhex pylint pyserial program: python3 pyupdi.py -d your_processor -c your_port -b your_baud_rate -f your_hex_file -v pymcuprog install: apt install libusb-1.0-0-dev, libudev-dev pip3 install pymcuprog program: pymcuprog -d your_processor -t uart -u your_port -c your_baud_rate -v info erase pymcuprog -d your_processor -t uart -u your_port -c your_baud_rate -v info write -f your_hex_file hardware USB-D11C-serial board components top top+exterior interior bootloader SAMD11C SAMD11C_serial video serial-UPDI-2 pin board components traces traces+exterior interior connector(less) serial UPDI-3 pin board components traces traces+exterior interior USB-FT230X-UPDI board components traces traces+exterior interior dual serial SWD+UPDI ISP (original AVR) software avrdude hardware header pads clip pins Atmel-ICE Arduino ATmega16U2 Zaerc ATtiny45 Sean Alex Tomás Jonathan Brian Zaerc ATtiny44 Ali Valentin Bas Andy David USB-t44-ISP board components traces traces+exterior interior firmware.zip programming breakout raw REPL, Web REPL, upy.py development environments Microchip Studio Eclipse VS Code Thonny Codebra PlatformIO Arduino board + toolchain + libraries + IDE + bootloader + header programming C++ Create Codebender Ardublock CLI original Fabkit Fabio satshakit hello.328P cores Arduino-Pico ESP32 ESP8266 fab-sam tinyAVR DxCore ATTinyCore overhead millis interrupts ISR development boards XIAO (CT) Adafruit Pololu Olimex Micro:bit Beagle Rasberry Pi Quentorres Fab-Xiao SAMDino Adrianino D11C devkit D21E devkit operating systems bare-metal cooperative vs preemptive multitasking FreeRTOS TinyOS Mbed OS ROS clocks types RC (10%, 1% calibrated) ceramic (0.5%) quartz (50 ppm) PLL instruction cycles overclocking underclocking serial communication RS232 bit timing VT100/ANSI/ISO/ECMA terminal Arduino serial monitor Screen screen port speed, ctrl-a k to quit pySerial miniterm python -m serial.tools.miniterm /dev/your_device_port your_baud_rate SerialPort terminal serialport-terminal Web Serial USB ASF Arduino TinyUSB USB-D11C-serial board components top interior bootloader serial.ino video SAMD11C_serial FTDI drivers libFTDI cable chip hello.USB-serial.FT230X board components traces traces+exterior interior RP2040 XIAO pinout hello.button-blink.RP2040 board components traces interior hello.button-blink.RP2040.1.ino 1.py 2.ino 2.py video Pico Doom ESP32 ESP32-C3 XIAO pinout hello.button-blink.C3 board components traces interior hello.button-blink.C3.ino hello.button-blink.C3.py video ESP32-WROOM-32 module versions ESP32-WROOM-echo board components traces traces+exterior holes interior echo.ino video ring.ino Python video ESP8266 ESP-01 module ESP-01-echo board components traces traces+exterior holes interior echo.ino video ESP-WROOM-02D module ESP-WROOM-02D-echo board components traces traces+exterior holes interior echo.ino video Python video ATSAMD11C D11C-blink board components traces traces+exterior interior D11C-blink-reset board components traces traces+exterior interior D11C-blink-reset-clock board components traces traces+exterior interior blink.c blink.make bootloader blink.ino video ring.ino D11C-echo board components traces traces+exterior interior D11C-echo-10 board components traces traces+exterior interior D11C-echo-mini board components traces traces+exterior holes interior D11C-echo-micro board components traces traces+exterior holes interior echo.ino video D11C-serial board components top interior D11C-serial-micro-4 board components traces traces+exterior holes interior D11C-serial-large vias board components top top+exterior bottom holes interior D11C-serial-small vias board components top top+exterior bottom holes interior Gerber serial.ino video SAMD11C_serial ATSAMD11D D11D-echo board components traces traces+exterior interior openocd.cfg bootloader echo.ino video ATSAMD21E D21E-echo board components traces traces+exterior interior bootloader echo.ino video Python ATSAMD51 hello worlds ring.ino ATtiny412 t412-blink-3 pin board components traces mask traces+exterior interior blink.ino blink.c make video t412-blink-2 pin board components traces traces+exterior interior blink.ino video ring.ino t412-echo board componenets traces traces+exterior interior echo.ino video echo.c echo.make video ATtiny45 t45-echo board components traces traces+exterior interior pin re-use ports port.c port.make port.ino port.write.ino bit-bang echo.c echo.make echo.ino echo.serial.ino video ATtiny1614 ATtiny1624 t1614-echo board components traces traces+exterior interior echo.ino video ATtiny44 t44-echo board components traces traces+exterior interior t44-echo-2 sided board components top top+exterior bottom holes interior programming mods echo.c echo.c.make echo.interrupt.c echo.interrupt.c.make echo.asm echo.asm.make ATtiny3216 ATtiny3226 t3216-echo board components traces traces+exterior interior echo.ino video AVR128DB32 128DB32-echo board components traces traces+exterior interior ring.c ring.make echo.c echo.make video debugging simulation digital Wokwi video mixed-signal AVR8js video software blink LED add print statements use embedded debugger gdb, ddd Microchip Studio Arduino 2 hardware inspect, reflow solder joints check component orientation, values verify data sheets confirm connector orientation measure supply voltages probe I/O signals AI embedded TensorFlow Lite TinyML ESP-DL Edge Impulse coding ChatGPT Copilot DeepSeek bugs, hallucination, copyright infringement, ... assignment assignment assignment group assignment: demonstrate and compare the toolchains and development workflows for alternative embedded architectures individual assignment: browse through the data sheet for your microcontroller write a program for a microcontroller to interact (with local input &/or output devices) and communicate (with remote wired or wireless connections), and simulate its operation extra credit: test it on a development board extra credit: try different languages &/or development environments