EA LPC4088クイックスタートボードはmbedのUSBホストでサポートされていないので試作してみました。
LPC4088のUSBコントローラは0x10000000から始まるメインSRAMにはアクセス出来なく、
0x20000000からのメモリAHBSRAM0,AHBSRAM1のみにアクセス出来ます。(以下USBRAMと略す)
USBRAMに転送データがあれば問題無いのだがmbed OfficialのUSBHostとインターフェース互換に
したかったので、USBデバイスへの転送の都度、USBRAMにコピーしてからUSBコントローラを
起動してしています。
実装ではUSBRAMからfirst-fitアルゴリズムで64バイト単位で転送領域を切り出すようにしています。
もちろん、HCED,HCTD,HCITD,HCCAも切り出しています。
USBコントローラの初期設定はLPC1768のとほぼ同じです。
LPC4088のLPCOpenのサンプルコードを参考にしたところ、
USBポートの機能設定がLPC_PINCONからLPC_IOCONに変わっているだけでした。
LPCOpenサンプルコードとはP1_19の扱いが違うのでLPCOpenのように設定してはいけない。
EA LPC4088 QSBではUSBホストへの電力供給イネーブルに使っています。
#if defined(TARGET_LPC1768) LPC_PINCON->PINSEL1 &= ~((3<<26) | (3<<28)); LPC_PINCON->PINSEL1 |= ((1<<26)|(1<<28)); #elif defined(TARGET_LPC4088) LPC_IOCON->P0_29 = 0x01; // USB_D+1 LPC_IOCON->P0_30 = 0x01; // USB_D-1 // DO NOT CHANGE P1_19. #elseLPC_USBのレジスタ名が違っていたのでLPC1768の名前で再定義しました。
#define HcRevision Revision
#define OTGStCtrl StCtrl
ハードウェア依存以外はKL46ZのUSBホスト試作のコードを使いました。
ノンブロック型転送の場合にUSBHost::poll()を呼び続ける事以外は
OfficialのUSBHostとインターフェース互換です。
制限事項も同じく、USBデバイスは予め接続しておかなければいけない。
USBデバイスの取り外しには対応していません。
USBハブは使えます。
アイソクロナス転送だけはKL46Zのとインターフェース互換ではありません。
Webカメラ用に専用のライブラリを作りました。
まだまだ不具合がありますが、使用例をmbedサイトに置きました。
USBフラッシュメモリの使用例
LPC4088-USBHostMSD_HelloWorld
Webカメラの使用例
LPC4088-USBHostC270_example
(2014/4/24)
---
0 件のコメント:
コメントを投稿