This unofficial library controls FT260 USB-I2C/UART bridge IC made by FTDI.
The library depends on "hidapi" crate mainly.
This USB device does not have virtual COM port. Instead, it has HID interface.
For example, HID Input/Output Reports are converted into I2C/UART communication between the FT260 and its external devices.
Unit tests are executed on the evaluation board UMFT260EV1A.
use ft260hid::device;
use ft260hid::io::gpio::{Dir, Group, Pin, Val};
// . . .
let dev = device::open(0).unwrap();
let gpio = dev.gpio();
gpio.enable_pin(Group::Gpio_0_1);
gpio.set_dir(Pin::Gpio0, Dir::Out);
gpio.write(Pin::Gpio0, Val::Low);
gpio.set_dir(Pin::Gpio1, Dir::In);
gpio.set_pull_up(Pin::Gpio1);
I2C EEPROM (AT24C02D_SOT23) is mounted on UMFT260EV1A board, and it can be used for unit tests.
use ft260hid::device;
use ft260hid::io::i2c;
// . . .
/// I2C address of EEPROM on UMFT260EV1A
const EEPROM_ADDRESS: u8 = 0x50;
/// page size of EEPROM
const EEPROM_PAGE_SIZE: usize = 8;
// . . .
let dev = device::open(0).unwrap();
let mut i2c = dev.i2c();
i2c.init(i2c::KBPS_DEFAULT);
// address value to read EEPROM page out
let addr = [0u8];
let mut data_read = [0u8; EEPROM_PAGE_SIZE];
i2c.write_read(EEPROM_ADDRESS,
&addr,
1,
&mut buf,
EEPROM_PAGE_SIZE,
i2c::DURATION_WAIT_DEFAULT
);
The TXD-RXD pins on UMFT260EV1A are shorted for unit tests.
use ft260hid::device;
use ft260hid::io::uart;
// . . .
// interface number is `1` !!
let dev = device::open(1).unwrap();
let mut uart = dev.uart();
uart.init();
uart.set_config(&uart::Config::default());
// UART TX
let mut buf_tx = [0u8; 256];
let size_sent = uart.write(&buf_tx, len).unwrap();
// RX data in FIFO
let size_to_read = uart.size_to_read();
// UART RX
let mut buf_rx = [0u8; 256];
let size_rec = uart.read(&mut buf_rx, size_to_read, uart::DURATION_WAIT_DEFAULT).unwrap();