ftdi-embedded-hal
This is an embedded-hal implementation for the FTDI chips that can use various drivers including libftd2xx and ftdi-rs.
This enables development of embedded device drivers without the use of a microcontroller. The FTDI devices interface with PC via USB, and provide a multi-protocol synchronous serial engine to interface with most GPIO, SPI, I2C embedded devices.
Note: This is strictly a development tool. The crate contains runtime borrow checks and explicit panics to adapt the FTDI device into the embedded-hal traits.
Quickstart
- Enable the "libftd2xx-static" feature flag to use static linking with libftd2xx driver.
- Linux users only: Add udev rules.
[]
= "0.22.0"
= ["libftd2xx", "libftd2xx-static"]
Limitations
- Limited trait support: SPI, I2C, Delay, InputPin, and OutputPin traits are implemented.
- Limited device support: FT232H, FT2232H, FT4232H.
- Limited SPI modes support: MODE0, MODE2.
Examples
SPI
Pin setup:
- D0 - SCK
- D1 - SDO (MOSI)
- D2 - SDI (MISO)
- D3..D7 - Available for CS
Communicate with SPI devices using ftdi-rs driver:
use ftdi_embedded_hal as hal;
let device = find_by_vid_pid
.interface
.open?;
let hal = init_freq?;
let spi = hal.spi?;
Communicate with SPI devices using libftd2xx driver:
use ftdi_embedded_hal as hal;
let device = with_description?;
let hal = init_freq?;
let spi = hal.spi?;
I2C
Communicate with I2C devices using ftdi-rs driver:
use ftdi_embedded_hal as hal;
let device = find_by_vid_pid
.interface
.open?;
let hal = init_freq?;
let i2c = hal.i2c?;
Communicate with I2C devices using libftd2xx driver:
use ftdi_embedded_hal as hal;
let device = with_description?;
let hal = init_freq?;
let i2c = hal.i2c?;
GPIO
Control GPIO pins using libftd2xx driver:
use ftdi_embedded_hal as hal;
let device = with_description?;
let hal = init_default?;
let gpio = hal.ad6;
Control GPIO pins using ftdi-rs driver:
use ftdi_embedded_hal as hal;
let device = find_by_vid_pid
.interface
.open?;
let hal = init_default?;
let gpio = hal.ad6;
More examples
- newAM/eeprom25aa02e48-rs: read data from Microchip 25AA02E48 SPI EEPROM
- newAM/bme280-rs: read samples from Bosch BME280 sensor via I2C protocol