2012年9月21日 星期五

FT232R

FT232R 是一個 USB 轉 UART 的晶片,整合 clock 及 EEPROM 等,讓線路非常簡單。有些 Arduino 含有 FT232R 來提供 USB 界面,例如 DuemilanoveDiecimila,但新的 Leonardo 使用 ATmega32u4 處理器已經內建 USB 了。FT232R 除了 UART 功能外,亦可作為 Clock 產生器,透過 bit bang 模式提供 GPIO 或 SPI 功能,或者作為 FTDIChip-ID™ security dongle 功能。
  • 相關文件:DatasheetBit Bang Application NoteFTDIChip-ID™ Application Note
  • 內建 128 bytes EEPROM 作為設定用,其中 Manufacturer, ManufacturerId, Description, SerialNumber 字串最長 96 bytes,沒用完的可作為 user area 或 FTDIChip-ID 使用。
  • 可產生 6/12/24/48 MHz clock
  • Big Band I/O
    • Asynchronous:UART 8 IO 作為 8-bit data,CBUS 提供 RD# 跟 WR# 訊號
    • Synchronous:同上
    • CBUS Mode:CBUS0~CBUS3 4-bit GPIO
  • 內建 3.3V 電源轉換,最大提供 50mA。
  • 驅動程式
    • Virtaul Com Port (VCP):變成一般序列埠使用
      • Linux: ftdi_sio → usbserial
    • Direct (D2XX):設定 EEPROM 及 bit bang 需要
    • libFTDI for Linux
      • 裡面的 ftdi_eeprom_build() 或 ftdi_eeprom_decode() 可看出 EEPROM 內容每個位址的定義。

FT232RL IO 訊號
PinName預設功能Bit Bang
CBUS modeAsynchronous / Synchronous
1TXD 輸出D0
5RXD 輸入D1
3RTS# 輸出 (Arduino Reset)D2
11CTS# 輸入D3
2DTR# 輸出 (Arduino Reset)D4
9DSR# 輸入D5
10DCD# 輸入D6
6RI# 輸入D7
23CBUS0TXLED# 輸出4-bit GPIO其中兩個作為 RD# 及 WR#
22CBUS1RXLED# 輸出
13CBUS2TXDEN 輸出,RS-485 用。
14CBUS3PWREN# 輸出,需外加 10kΩ pull high,USB 設定完 low,USB suspend 時 high。
12CBUS4SLEEP# 輸出,USB suspend 時 low。
CBUSx 都可以設定成任何 CBUS 功能,除了表列五種外,尚有 TX&RXLED#、6/12/24/48 MHz clock 輸出。

內部 EEPROM,整理自 datasheet 及 libFTDI。
parameteraddressvalue說明
High Current I/Os0.20
10x40IN endpoint size
Vendor ID3~20403hFTDI default VID
Product ID5~46001hFTDI default PID
Device Type7~60x06000x0600=FT232R
Battery Powered8.40
Remote Wake Up8.51RI# low → wake up USB Host Controller in 20 ms
Bus Powered 8.61
Load VCP Driver8.71Make the host to load VCP driver。此位置是猜測的。
Max Bus Power Current990mA以 2 mA 為單位
IN endpoint is isochronous0x0a.00
OUT endpoint is isochronous0x0a.10
Enable suspend I/O power down0x0a.20
Use serial number string0x0a.30
Change USB Version0x0a.40
Invert TXD0x0b0
Invert RXD0
Invert RTS#0
Invert CTS#0
Invert DTR#0
Invert DSR#0
Invert DCD#0
Invert RI#0
USB Version0x0d~0x0c0x0200USB 2.0 Full Speed
Manufacturer Offset0x0e.6~00x18指向 10, 0x03, "FTDI"
Manufacturer Enabled0xe.71
Manufacturer Size0x0f10byte 數含結尾 0,因每個字佔 2 bytes,所以需乘二
Product Description Offset0x10.6~00x24指向 32, 0x03, "FT232R USB UART"
Product Description Enabled0x10.71
Product Description Size0x1132
Serial Number Offset0x12.6~00x46指向 18, 0x03, "A6001dHI",A unique serial number
Serial Number Enabled0x12.71
Serial Number Size0x1318
CBUS00x14.3~030=TXDEN, 1=PWREN#, 2=RXLED#, 3=TXLED#, 4=TXRXLED#, 5=SLEEP#, 6=CLK48, 7=CLK24, 8=CLK12, 9=CLK6, 10=Bitbang IO mode, 11=Bitbang WR#, 12=Bitbang RD#
CBUS10x14.7~42
CBUS20x15.3~00
CBUS30x15.7~41
CBUS40x16.3~05
Dynamic Content0x18~0x7f見說明預設應該是放 Manufacturer, Production Description, 及 Serial 字串。字串含 0,每字佔兩個 byte。格式依序是長度,0x03,字串本身。
10, 0x03, "FTDI"
32, 0x03, "FT232R USB UART"
18, 0x03, "A6001dHI"
ChipID0x86~0x89見說明

USB 的請求控制指令:
  • reset (0x00)
  • set baud rate (0x01)
  • set data (0x02):設定 RS-232 參數
  • set flow control (0x03)
  • modem control (0x04):設定 DTR, RTS 等。
  • poll modem status (0x05)
  • set event char (0x06)
  • set error char (0x07)
  • set latency timer (0x09)
  • get latency timer (0x0a)
  • set bit mode (0x0b)
  • read pins (0x0c)
  • read eeprom (0x90)
  • write eeprom (0x91)

實際應用

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...