RPPAL - Raspberry Pi Peripheral Access Library
RPPAL is a Rust library that provides access to the Raspberry Pi's GPIO and SPI peripherals. Support for additional peripherals will be added in future updates. The library is compatible with the Raspberry Pi A, A+, B, B+, 2B, 3B, 3B+, Compute, Compute 3, Zero and Zero W.
Backwards compatibility for minor revisions isn't guaranteed until the library reaches v1.0.0.
Documentation
Documentation for the latest release can be found at docs.golemparts.com/rppal. Documentation for earlier releases is stored at docs.rs/rppal.
Supported peripherals
GPIO
To ensure fast performance, RPPAL interfaces with the GPIO peripheral by directly accessing the registers through either /dev/gpiomem
or /dev/mem
. GPIO interrupts are controlled using the sysfs interface.
Features
- Get/set pin modes.
- Read/write pin logic levels.
- Activate built-in pull-up/pull-down resistors.
- Configure synchronous and asynchronous interrupt handlers.
SPI
RPPAL accesses the Raspberry Pi's main and auxiliary SPI peripherals through the spidev device interface.
Features
- SPI master, mode 0-3, Slave Select active-low/active-high, 8 bits per word, configurable clock speed
- Half-duplex reads, writes, and multi-segment transfers
- Full-duplex transfers and multi-segment transfers
- Customizable options for each segment in a multi-segment transfer (clock speed, delay, SS change)
- Reverse bit order helper function
Unsupported features
Several features offered by the generic spidev interface aren't fully supported by the underlying driver or the BCM283x SoC: SPI_LSB_FIRST (LSB first bit order), SPI_3WIRE (bidirectional mode), SPI_LOOP (loopback mode), SPI_NO_CS (no Slave Select), SPI_READY (slave ready signal), SPI_TX_DUAL/SPI_RX_DUAL (dual SPI), SPI_TX_QUAD/SPI_RX_QUAD (quad SPI), and any number of bits per word other than 8.
If your slave device requires SPI_LSB_FIRST, you can use the
reverse_bits
function instead to reverse the bit order in software.
SPI_LOOP mode can be achieved by connecting the MOSI and MISO pins together.
SPI_NO_CS can be implemented by connecting the Slave Select pin on your slave device to any other available GPIO pin on the Pi, and manually changing it to high and low as needed.
Usage
Add a dependency for rppal
to your Cargo.toml
.
[]
= "0.6"
Link and import rppal
from your crate root.
extern crate rppal;
Call Gpio::new()
to create a new Gpio instance with the default settings. In production code, you'll want to parse the result rather than unwrap it.
use Gpio;
let mut gpio = new.unwrap;
Example
extern crate rppal;
use thread;
use Duration;
use ;
use DeviceInfo;
// The GPIO module uses BCM pin numbering. BCM GPIO 18 can be accessed through physical pin 12.
const GPIO_LED: u8 = 18;
Caution
Always be careful when working with the Raspberry Pi's peripherals, especially if you attach any external components to the GPIO pins. Improper use can lead to permanent damage.
Cross compilation
If you're not working directly on a Raspberry Pi, you'll likely need to cross compile your code for the appropriate ARM architecture. Check out this guide for more information, or try the cross project for "zero setup" cross compilation.
Copyright and license
Copyright (c) 2017-2018 Rene van der Meer. Released under the MIT license.