Introduction to Firmware


Transcript of Introduction to Firmware

Page 1: Introduction to Firmware



Page 2: Introduction to Firmware


Page 3: Introduction to Firmware

3 // Background

An Embedded System is:

● A computer processor with a dedicated purpose● Part of a larger electronic device (“embedded”)● Not intended to be a general-purpose computer

Any device that contains a processor, but isn’t a PC or smartphone!

Page 4: Introduction to Firmware

4 // Background

Firmware is Embedded Software

● Runs on embedded systems● Directly controls electronic (or mechanical) hardware● Historically, this software was set in stone at manufacturing time,

essentially becoming part of the hardware → “firmware”○ Today, many devices have updatable firmware

Page 5: Introduction to Firmware

02What’s different?

Page 6: Introduction to Firmware

6 // What’s different?

● Runs on a general-purpose device

● User-centric, graphical

● Operating system mediates hardware access

● State of the art hardware

● A variety of higher-level programming languages

● An integral part of the device

● Primitive or no user interface

● Direct hardware access

● Primitive hardware capabilities

● Programmed in low-level languages such as C or assembly

Page 7: Introduction to Firmware

What’s different?

System constraints define firmware programming

Page 8: Introduction to Firmware

● RAM● Program Storage● Speed● Math● Libraries● Operating System● Debugging Capabilities

8 // What’s different?


Page 9: Introduction to Firmware

03What Lies Beneath

Page 10: Introduction to Firmware

● Digital○ General Purpose Input/Output (GPIO)○ Serial communications (SPI, I2C, etc)○ USB

● Analog○ Analog-to-digital converters (ADC)

● Specialized Peripherals○ Radio on-chip (Bluetooth, ZigBee, Thread, RF4CE, etc)

10 // Hardware

Interfacing to the outside world

Page 11: Introduction to Firmware

11 // Hardware

Memory Mapped I/O

Address Decoder

Memory Cell


Address Bus

Data Bus

Normal Memory

Latch & Amplifier

Address Decoder


Address Bus

Data Bus



Address Decoder



Address Bus

Data Bus

Generic Peripheral

Page 12: Introduction to Firmware

12 // Hardware

Harvard Architecture Von Neumann Architecture

Page 13: Introduction to Firmware

● The most primitive form of multitasking● The interrupt vector stores callback functions● Hardware triggers the CPU to invoke these functions in response to

certain events○ Timer elapsing○ Data arriving on serial interface○ Many more!

13 // Hardware


Page 14: Introduction to Firmware

04Tools and Techniques

Page 15: Introduction to Firmware

● Usually C, sometimes assembly○ Must allow addressing specific memory locations

● Low-level programming style -- abstraction is expensive○ global variables○ fixed-size arrays○ avoid passing large objects on the stack

● Very often you’re counting every byte○ fixed-width types are preferred○ bitwise operations are common

15 // Tools and Techniques

Programming Language

Page 16: Introduction to Firmware

● ISRs must be fast!● Only has access to global state● Great care must be taken when main thread accesses shared global

state○ Turn off interrupts (“go atomic”)○ Use CPU instructions that are guaranteed to be atomic

● You can poll the interrupt flags when interrupts are turned off

16 // Hardware

Interrupt Service Routines

Page 17: Introduction to Firmware

17 // Hardware

Concurrency Fun






36 00 00 00

Interrupt fires!

00 FF FF

36 00 00 00 36 00 FF FF

currentTime = clock;

Page 18: Introduction to Firmware

18 // Tools and Techniques


● Expensive, awkward, buggy● Cross-compiled from your computer● Emulators are not usually useful because of the tight coupling to

external hardware

Page 19: Introduction to Firmware

● No obvious sign! It’s just a brick● Logging is not always available● Stack traces are not always available● External hardware is required to debug● Limited number of breakpoints!● LEDs are pretty great

19 // Tools and Techniques

When things go wrong...

Page 20: Introduction to Firmware

20 // Tools and Techniques

Programming/Debug Hardware

● Expensive, awkward, buggy● Some device interfaces are proprietary, but there are also standards

such as JTAG or SerialWire

Page 21: Introduction to Firmware

21 // Tools and Techniques

Test Equipment

● Multimeters● Oscilloscopes● Logic Analyzers

Page 22: Introduction to Firmware

Key Takeaway

Embedded systems are “small”