マイコン工作実験日記

Microcontroller を用いての工作、実験記録

OHCIの勉強中

2009-05-23 13:36:32 | Weblog
LPC2388にMMcodec01をつなげてのMP3再生ができたので、次のステップとして、再生/休止の制御あるいはSDカードからの再生機能の実装をするつもりだったのですが、ちょっと考えが変わりました。

いずれは、これらの機能追加はするつもりですが、その前にUSBホスト機能であるOHCIを使ってみようではないかと。USBスピーカをつなげてやれば、MMcodec01のようなコーデックが無くてもMP3プレーヤになるじゃないかと考えたわけです。そんなことだったらMMcodec01買わなくても良かったかもという気もしないではありませんが、まだ入力側は使っていませんので、気が向いたらそちら側も試すことにしましょう。

そういうわけで、OHCIの勉強中です。OHCIはAT91SAM9260でもサポートされているので以前から興味はあったのですが、ちゃんと資料を読んだことがありませんでした。FR60でもサポートされているので説明記事を期待していましたが、昨年はほとんど満足な説明がありませんでした。今年はインターフェース6月号で簡単に説明がありましたが、使い方の詳細は別途資料とサンプルプログラムを読まないとわかりそうもありません。

6月号の記事はNXPが提供しているUSB Host Liteという簡易USBホスト・スタックを利用しています。実際にソースを見てみるとファイル数も少なくて、とても小さくできています。ちょっとコードを読んでみると、デバイスはひとつしかつなげないことを前提としていますし、リスト処理も簡単化して複数ED/TDをリンクしないとか最低限の処理に限定してあるようです。しかし、これでも限定的な使い方しかしない組み込み用途ではそれなりに使えるでしょう。しかし、このHost Liteではコントロール転送とバルク転送しかサポートしていません。サンプルのようにUSBメモリをつなぐには これでも用が足りるのですが、USBスピーカをつなぐにはアイソクロナス転送を追加サポートしてやらねばなりません。

LPC2388のマニュアルを読んでも、OHCIの詳しい説明についてはコンパックのサイトにある仕様書を参照しろと書いてあるだけです(あるいはココ)。そんなこんなで、やはり真面目にOHCIの仕様書を読むことになりました。この仕様書ですが、3回ほど斜め&飛ばし読みしてなんとか雰囲気がつかめてきました。最初読みにくく感じるのは、この仕様書の独特の構成の仕方に原因があります。実際のところ、仕様書の Introductionの章でも断り書きがあるのですが、この仕様書ではOHCIの動作仕様をドライバとコントローラの両方の観点から説明する独立した章を持っています。また、両者が共通して扱うデータ構造やレジスタについては別建ての章で説明されています。その結果、類似した説明が繰り返しでてくるのです。また、説明に関連するデータ構造やレジスタを参照するために、別の章やページを行き来して読む必要も生じます。PDFファイルには、しおりがついていないので、読みたいページへジャンプすることもできません。

OHCIの仕様書には、リスト制御の手順を説明するためのデータ構造やコードも例示されているので、これをベースにしてスタックを作成することもできそうです。しかし、スピーカを鳴らすだけの限定的な使い方であればUSB Liteのコードにアイソクロナス転送機能の処理を追加するだけで用が足りそうなので、その方向で作業する予定です。