f13e6e4513
Also, add safety docs where demanded by clippy. |
5 years ago | |
---|---|---|
.. | ||
.cargo | 5 years ago | |
raspi3_boot | 5 years ago | |
src | 6 years ago | |
Cargo.lock | 5 years ago | |
Cargo.toml | 5 years ago | |
Makefile | 5 years ago | |
README.md | 6 years ago | |
kernel8 | 5 years ago | |
kernel8.img | 5 years ago | |
link.ld | 6 years ago |
README.md
Tutorial 0A - Power management
For embedded systems, power consumption is critical. The Raspberry Pi 3 has a very sophisticated PM interface. You can turn each device on and off independently. There's a catch though. The GPIO VCC pins are hardwired, there's no way to turn them off programmatically. This means if you connect some devices to them, you'll have to implement a way to turn those devices off (with a transistor connected to a data GPIO pin for example).
power.rs
Unfortunately, the documentation about the PM interface is very very rare. We will therefore more or less implement a carbon copy of respective functions of Linux' bcm2835_wdt.c driver.
The power management controller is one of the peripherals that are not emulated properly by QEMU. Our implementation therefore works on real hardware only.
Power::off(&self, mbox: &mut mbox::Mbox, gpio: &gpio::GPIO)
shuts down the
board to an almost zero power consumption state.
Power::reset(&self)
reboots the machine. Also handled by the PMC, and since
the Raspberry Pi does not have a hardware reset button, it's very useful.
When using make raspboot
and choosing reset()
, you can see your code in
action nicely as you generate a boot-loop.
gpio.rs
We introduce a lot of new GPIO pins. It's a good time to refactor the GPIO MMIO
interface into its own type with the common RegisterBlock
implementation that
you already know from the other components.
main.rs
We display a simple menu, and wait for user input. Depending on the input, we reboot the system or power it off.