2014年6月19日木曜日

LPC1114FN28でUSBパケットキャプチャ



USBロースピード(LS)1.5Mbpsだけですが、LPC1114FN28でUSBパケットキャプチャをしてみました。
一年ほど前に作ったLPC1768のロースピードUSBをパケットキャプチャ(USBLowsCap)に比較してまだまだ安定していなくてCRCエラーが頻発していますが、ホストとデバイスとのパケットのやりとりはだいたいわかります。



LPC1114の16ビットカウンタタイマ(CT16B1)のキャプチャ機能(CAP0)を使ってUSBのDATA+ラインの変化をみています。
割込みを使うとぜんぜん間に合わない。最小のビット0値の時の32サイクル以内に処理が終わらない。ポーリングでキャプチャ値(CR0)を読みだしてパルス幅からビット変換します。
SYNC、PIDまではキャプチャ値から直接デコードする。ビット1値が6個連続する事はないのでビット挿入を削除する必要はありません。
それ以降のデータはキャプチャ値を保存しておいてパケットを受信完了してからデコードしています。PIDからパケットの長さがわかる時はEOPの検出には問題ないが、DATA0/DATA1の可変長の時はDATA+ライン、DATA-ラインの状態をGPIOで読み取ってEOPを判断しています。GPIOの読み取りに時間がかかって検出出来ない時があるようです。

ソースコード:
LPC1114_USBProtocolAnalyzer

(2014/6/18)
---

0 件のコメント: