# ft260hid FTDI 社製 USB-I2C/UART 変換 IC FT260 を Rust から制御するための非公式ライブラリーです。 ## FT260 について - [データシート](https://ftdichip.com/wp-content/uploads/2023/11/DS_FT260.pdf) - [アプリケーションノート](https://ftdichip.com/wp-content/uploads/2020/07/AN_394_User_Guide_for_FT260.pdf) この USB シリアル変換 IC の特徴として、仮想シリアルポートではなく HID インターフェース経由で制御を行うところにあります。 そのため取り扱いが一般的な変換 IC と比べてやや複雑になる一方で、通常のシリアル通信以外に例えば GPIO の制御を行ったり [HID over I2C](https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/hid-over-i2c-guide) に準拠した通信を行ったりといった、比較的柔軟な利用が可能になっています。 ## 使用例 詳しくは同梱の単体テストを参照してください。 テストには市販の同 IC の評価ボード [UMFT260EV1A](https://ftdichip.com/products/umft260ev1a/) を使用しております。 ### GPIO ```rust use ft260hid::device; use ft260hid::io::gpio::{Dir, Group, Pin, Val}; // . . . // FT260 の HID インターフェースを開く let dev = device::open(0).unwrap(); // GPIO 機能インターフェースを作成 let gpio = dev.gpio(); // GPIO 0,1 (I2C 兼用) ピンを GPIO として使用する gpio.enable_pin(Group::Gpio_0_1); // GPIO 0 を出力に設定 gpio.set_dir(Pin::Gpio0, Dir::Out); // GPIO 0 から Low 出力 gpio.write(Pin::Gpio0, Val::Low); // GPIO 1 を入力に設定 gpio.set_dir(Pin::Gpio1, Dir::In); // GPIO 1 の内部プルアップを有効化 gpio.set_pull_up(Pin::Gpio1); ``` ### I2C UMFT260EV1A ボード上の I2C EEPROM ([AT24C02D_SOT23](https://ww1.microchip.com/downloads/en/DeviceDoc/AT24C01D-AT24C02D-I2C-Compatible-Two-Wire-Serial-EEPROM-1Kbit-2Kbit-20006100A.pdf)) を用いて単体テストを行うことが可能です。 ```rust use ft260hid::device; use ft260hid::io::i2c; // . . . /// UMFT260EV1A ボード上の EEPROM の I2C アドレス const EEPROM_ADDRESS: u8 = 0x50; /// EEPROM のページサイズ const EEPROM_PAGE_SIZE: usize = 8; // . . . // FT260 の HID インターフェースを開く let dev = device::open(0).unwrap(); // I2C 機能インターフェースを作成 let mut i2c = dev.i2c(); // I2C 機能の初期化 i2c.init(i2c::KBPS_DEFAULT); // EEPROM ページ読み出しのための Write データ let addr = [0u8]; // Read データバッファ let mut data_read = [0u8; EEPROM_PAGE_SIZE]; i2c.write_read(EEPROM_ADDRESS, &addr, 1, &mut buf, EEPROM_PAGE_SIZE, i2c::DURATION_WAIT_DEFAULT ); ``` ### UART UMFT260EV1A ボード上の TXD-RXD ピンをショートさせることで、単体テストが可能になります。 ```rust use ft260hid::device; use ft260hid::io::uart; // . . . // FT260 の HID インターフェースを開く (インターフェース番号に注意) let dev = device::open(1).unwrap(); // UART 機能インターフェースを作成 let mut uart = dev.uart(); // 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(); // FIFO の中の RX データのサイズ 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(); ``` ## 免責事項 本ソフトウェアは FTDI 社の公式製品ではなく、独自に開発された非公式のオープンソースソフトウェアです。本ソフトウェアの使用は自己責任で行ってください。本ソフトウェアの使用によって生じたいかなる直接的または間接的な損害はすべて使用者の責任となります。 本ソフトウェアは FTDI 社の IC を制御するためのものですが FTDI 社による公式のサポートや保証はありません。本ソフトウェアの使用に関連するリスクはすべて使用者が負うものとします。 本ソフトウェアの使用により、FTDI 社の製品保証が無効になる可能性があることを予めご了承ください。また、本ソフトウェアの使用が原因で FTDI 社の製品が損傷した場合、修理や交換の責任は使用者が負うものとします。 本ソフトウェアはオープンソースライセンスの下で提供されています。ライセンス条項に従って、自由に使用、改変、再配布することができますが、それにはライセンスに記載されている条件が適用されます。ライセンスの全文は、本ソフトウェアに同梱されているLICENSEファイル(またはオンラインで公開されているURL)で確認できます。 本免責事項は、予告なしに変更されることがあります。最新の情報については、本ソフトウェアの公式リポジトリまたはウェブサイトをご確認ください。