MAX3421Eを使ってのUSBホストのドライバを書き始めました。
改めためてデータシートを見てみると、現在のチップのリビジョンは3になっており、初期のバグがいくつか修正されているようです。REVISIONレジスタを読み出して確認してみましたが、わたしの手持ちのチップはレビジョン1でした。買ったのが2年ほど前なので、発売から日が浅かったということですね。ホスト側機能のバグは、ドライバで回避可能なようなので、それで対応することにしましょう。
APPLICATION NOTE 3936にホストドライバの基本部分についてのサンプルコードと説明がありましたので、こいつを拝借することにしました。AT91SAM7S用に書き換えて、SetConfigurationするところまで動かせるようになりました。まだ、割り込みにおかしいところがあるようで、ちゃんと動作してくれないこともあります。
電話機を挿した際には、Device Descriptorと Configuraiton Descriptorが読み込まれ、次のようなログが出力されます。
![](https://blogimg.goo.ne.jp/user_image/1b/88/84324de979408b12a94623a0e078b7c5.jpg)
Config Descriptorの内容を整理すると、どうやら次のようにインタフェースが使われているようです。
インタフェース番号3は、インタラプト転送で入力になっているので、キーパッド入力に使われると思われます。LCD表示制御用には独立したEPが用意されていないようなので、別途なんらかの仕掛けがあるはずです。この点については、Linuxのドライバを読んで調べることにします。
![](https://blogimg.goo.ne.jp/user_image/45/d5/9df200c095b5741f3f4cbe419796ed72.jpg)
どうやら、USB P4-KはSetConfigurationを受けると、LCDに
改めためてデータシートを見てみると、現在のチップのリビジョンは3になっており、初期のバグがいくつか修正されているようです。REVISIONレジスタを読み出して確認してみましたが、わたしの手持ちのチップはレビジョン1でした。買ったのが2年ほど前なので、発売から日が浅かったということですね。ホスト側機能のバグは、ドライバで回避可能なようなので、それで対応することにしましょう。
APPLICATION NOTE 3936にホストドライバの基本部分についてのサンプルコードと説明がありましたので、こいつを拝借することにしました。AT91SAM7S用に書き換えて、SetConfigurationするところまで動かせるようになりました。まだ、割り込みにおかしいところがあるようで、ちゃんと動作してくれないこともあります。
電話機を挿した際には、Device Descriptorと Configuraiton Descriptorが読み込まれ、次のようなログが出力されます。
![](https://blogimg.goo.ne.jp/user_image/1b/88/84324de979408b12a94623a0e078b7c5.jpg)
Config Descriptorの内容を整理すると、どうやら次のようにインタフェースが使われているようです。
Interface | Alternate | EP (転送方式) | 用途 |
---|---|---|---|
0 | 0 | N/A | 音量制御 |
1 | 0 | N/A | マイク(非活性化時) |
1 | 1 | 2 (Iso 入力) | マイク(活性化時) |
2 | 0 | N/A | スピーカ(非活性化時) |
2 | 1 | 4 (Iso 出力) | スピーカ(活性化時) |
3 | 0 | 1 (Inter 入力) | キーパッド |
インタフェース番号3は、インタラプト転送で入力になっているので、キーパッド入力に使われると思われます。LCD表示制御用には独立したEPが用意されていないようなので、別途なんらかの仕掛けがあるはずです。この点については、Linuxのドライバを読んで調べることにします。
![](https://blogimg.goo.ne.jp/user_image/45/d5/9df200c095b5741f3f4cbe419796ed72.jpg)
どうやら、USB P4-KはSetConfigurationを受けると、LCDに
VOIP-PHONEと表示してくれるようです。マイコン側の制御で表示しているわけではありません。7セグメントでのアルファベット表示に郷愁を感じますねぇ。