Introduction to Firmware

Preview:

Citation preview

FIRMWARE

2016

01Background

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!

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

02What’s different?

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

What’s different?

System constraints define firmware programming

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

8 // What’s different?

Constraints

03What Lies Beneath

● 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

11 // Hardware

Memory Mapped I/O

Address Decoder

Memory Cell

EnableRead/Write

Address Bus

Data Bus

Normal Memory

Latch & Amplifier

Address Decoder

EnableRead/Write

Address Bus

Data Bus

LED

GPIO

Address Decoder

Peripheral

EnableRead/Write

Address Bus

Data Bus

Generic Peripheral

12 // Hardware

Harvard Architecture Von Neumann Architecture

● 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

Interrupts

04Tools and Techniques

● 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

● 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

17 // Hardware

Concurrency Fun

35 FF FF FF

clock

FF

currentTime

35 FF FF FF FF FF

36 00 00 00

Interrupt fires!

00 FF FF

36 00 00 00 36 00 FF FF

currentTime = clock;

18 // Tools and Techniques

Compiler/IDE

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

external hardware

● 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...

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

21 // Tools and Techniques

Test Equipment

● Multimeters● Oscilloscopes● Logic Analyzers

Key Takeaway

Embedded systems are “small”

Recommended