USB電話機を接続するための基板を作ってみました。

「作った」といっても、基板自体はRev.2ボードの流用です。USBホスト機能を実現するためのチップとしてMAX3421Eをボード上に追加しただけです。写真右下部分が今回追加した部分であり、右下のタイプAコネクタにUSB電話機をつなげることになります。
USBホストのチップとしては、なんと言っても秋月で買えるSL811HSTが入手しやすいのですが、こいつは8bitのデータバスで接続するようになっていますので、外部メモリを使えるマイコン向けです。AT91SAM7Sでは、外部メモリを接続することができないので、GPIOで制御することになってしまい面倒です。一方、MAX3421Eは、SPIでつなぐことができるので、ほとんどのマイコンと簡単に接続できちゃいます。追加部品も、DP/DMに入れる抵抗2本とパスコン程度で済みますので工作も簡単です。動作クロックとしては12MHzが必要ですが、幸いなことにAT91SAM7SのPLLを96MHzに設定すれば(この使い方が標準ですが)、これを分周してPCK0から12MHzを出力できます。そのため水晶発振器を追加する必要もなくなりました。
このように書くと、MAX3421Eを選択したもっともらしい理由のようですが、実際のところは2年程前に、おもしろそうだと思って買っておいて死蔵したままになっていたことを思い出して、引っ張り出しただけです。当面CPUボードへのUSB給電で動かしますが、ACアダプタ用のジャックを付けてもいいかもしれません。
とりあえずは、MAX3421Eの内部レジスタを読み書きできることだけは確認できました。当初、どのレジスタを読み出しても0xFFになってしまっていて、あせりました。原因は、リセット直後はMAX3421Eは半2重のモードで動作していたこと。そのため、MISO線は使用されずにHZになっていたために、0xFFと読めたようです。まず最初にPINCTLレジスタを変更することで、全2重通信のモードにしてやる必要ありでした。

「作った」といっても、基板自体はRev.2ボードの流用です。USBホスト機能を実現するためのチップとしてMAX3421Eをボード上に追加しただけです。写真右下部分が今回追加した部分であり、右下のタイプAコネクタにUSB電話機をつなげることになります。
USBホストのチップとしては、なんと言っても秋月で買えるSL811HSTが入手しやすいのですが、こいつは8bitのデータバスで接続するようになっていますので、外部メモリを使えるマイコン向けです。AT91SAM7Sでは、外部メモリを接続することができないので、GPIOで制御することになってしまい面倒です。一方、MAX3421Eは、SPIでつなぐことができるので、ほとんどのマイコンと簡単に接続できちゃいます。追加部品も、DP/DMに入れる抵抗2本とパスコン程度で済みますので工作も簡単です。動作クロックとしては12MHzが必要ですが、幸いなことにAT91SAM7SのPLLを96MHzに設定すれば(この使い方が標準ですが)、これを分周してPCK0から12MHzを出力できます。そのため水晶発振器を追加する必要もなくなりました。
このように書くと、MAX3421Eを選択したもっともらしい理由のようですが、実際のところは2年程前に、おもしろそうだと思って買っておいて死蔵したままになっていたことを思い出して、引っ張り出しただけです。当面CPUボードへのUSB給電で動かしますが、ACアダプタ用のジャックを付けてもいいかもしれません。
とりあえずは、MAX3421Eの内部レジスタを読み書きできることだけは確認できました。当初、どのレジスタを読み出しても0xFFになってしまっていて、あせりました。原因は、リセット直後はMAX3421Eは半2重のモードで動作していたこと。そのため、MISO線は使用されずにHZになっていたために、0xFFと読めたようです。まず最初にPINCTLレジスタを変更することで、全2重通信のモードにしてやる必要ありでした。