CubeではUSB_OTG_HSのInternal FS PhyでHost_Onlyを選択し、USB_HOSTでClass For HS IPからMass Storage Host Classを選択します。またFATFSのUSB Diskをチェックします。
あとはコードを生成し、FATFSを使用する部分を書くだけでUSBメモリを使用できるようになりました。基本的にCubeのコードに書き加える部分はありませんが、FatFsのマウントだけ自分でやる必要があります。このあたりはディスクの取り出し操作とかの兼ね合いもあるので、自分で処理したほうが安全だと言うことでしょう。
USBホストの場合、基本的にマイコンのピンとUSBのコネクタを直結するだけで十分です。配線を引き回すならダンピング抵抗とかが有ったほうが良いかもしれませんが、今回は不要でした(オシロで見たわけじゃないですが)。
USBの規格的には、HostはD+とD-を15kでプルダウンし、Deviceは機能に応じてD+かD-を1.5kでプルアップする必要があります。STM32F1を使ったSTBeeはこのあたりの回路が複雑でした。
一方、STM32F4に内蔵されているUSB_OTGコアの場合、マイコン内にプルアップやプルダウンの機能を備え、DeviceやHostに応じて適切なプルが実行されるようです。OTGのHost/Deviceで使う場合でも、IDのプルアップが自動的に行われ、この状態に応じてD+/D-のプルも自動的に行われるようです。
ということで、Full Speedに限って言えばマイコン外にコネクタ以外の部品を置かずにUSB機能が使えます。
ベンチマークは行っていませんが、SDカードほどの速度は出ないと思います。例えばSPIモードは1bitで25MHzくらいまで出せますし、SDIOなら4bitで25MHzくらいまで出せますが、USB FSの場合は1bitで12MHzしか出せません。しかもUSBプロトコルの上でデータ転送を行いますから、純粋にデータ転送だけを行えるSDカードよりも効率は悪いはずです。ということで、SPIモードの5分の1とか10分の1くらい出れば十分じゃないかなぁ、って気がしてます。
STBee F4miniもいろいろな用途に使えるようになってきて、そろそろもう1ランク上のボードも欲しくなってきました。144ピンクラスとか。
ストリナさーん!フルサイズSTBee F4作ってくださーい!
これで開発環境の構築が楽なら言うこと無いんですけどねぇ。NETMFとかどうなってるんだろう。あれ止めるの(or世に出すの)ちょっと早すぎたんじゃないかなぁ。
追記
STBee F4miniはPD4をLED用に配線し、ピンヘッダには出してないんだけど、SDIOはPD4が必須なので、このままでは使うことができない。らしい。SDIOは使ったことがないので気が付かなかった。
STBee F4miniはUSBの5Vがピンヘッダに出てなかったり、細かいところが結構微妙な感じ。
0 件のコメント:
コメントを投稿