USB OTG機能の BDT(バッファディスクリプタテーブル)の使い方が難しく難航しています。
- PIC24 USB OTG 日本語マニュアル
- USB通信プロトコル (picfun/電子工作の実験室)
そこで備忘録としてBDTについてメモをしておきます。
BDTは、USB機能のSIE(シリアルインターフェースエンジン)とCPU(PIC)とのデータ受け渡しとなるメモリバッファ(EPn)のアドレス情報などが格納されたテーブルとなります。USB機能はBDTに設定された情報をもとに、PICのメモリにDMAで読み書きします。
- BDTの配置は512バイト境界に合わせる必要がある。
- U1BDTP1 レジスタにBDTのアドレスの上位7bitを格納する。
- ホスト機能の場合、EP0の領域のみを使用する。 ※USBの通信がEP1やEP2で通信が行われていても ホスト機能のはBDTのEP0領域のみ使用。
- EPnにはRX(受信)のエリアとTX(送信)のエリアがそれぞれある。
- RX,TXのエリアはそれぞれ レジスタ2Byte+アドレス2Byte構成となり、EP0だけで8Byte必要となる。
- BDT
- EP0
- RX
- RXレジスタ--------------16 bits
- RXバッファアドレス-----16 bits
- TX
- TXレジスタ--------------16 bits
- TXバッファアドレス-----16 bits
- data0, data1 を別々のバッファ(ピンポンバッファ)として使う場合は、上記をそれぞれに用意する為、16Byte必要となる。
- data0 EVEN(偶数) BD
- data1 ODD(奇数) BD