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重通信のモードにしてやる必要ありでした。
回路構成はPIC16LF877AとMAX3421Eで、開発環境はMPLABv8.00とICD2です。
半二重はクリヤしましたが、特定のレジスタの書込読み出しが変なのです。手動でステップ実行するとうまくいくのに、一気にRUNするとレジスタの受信データが変になります。バッファフルステータスビットは確認してから次のステップに進めています。一気にRUNしたときにゴミを受信しているような気がします。スコープメーターで見てもあまり良くわかりません。何かヒントがありましたらご指導願えますでしょうか?。
MAX3421Eはホスト・モードとペリフェラル・モードでレジスタの見え方が変わりますが、ステップ実行すれば問題無いということですので、モードの設定は正しくできているのでしょうね。
そうすると/SS信号の動作に関連しているのかもしれません。もしPICのソフトで/SS信号を生成しているのであれば、ステップ動作かRUN動作かでtCSSとtCSWの時間が変わってくると思います。tCSWは200ns必要となっていますので、連続してMAX3421Eのレジスタにアクセスしているのであれば、この時間が取れていない可能性はないでしょうか?
これからが問題です。コンフィグレーションがうまくいくかどうかがカギです。ターゲットは携帯電話機です。
USBを扱うのは始めてで新しい用語を理解するまではまだ時間がかかりそうです。何度も資料を繰り返し読んでいるうちに少しずつ進んでいきます。
コメントが遅くなってすみませんでした。今後ともご指導をよろしくお願い致します。
レジスタ読み書き動作自体は、SPIのクロックで動作できると思われますが、48MHzを必要とするUSBシリアル動作はPLLが安定するまでは動作が保証されないということではないでしょうか?
次はデバイス・ディスクリプタの読み込みですね。ターゲットの携帯をCDCで制御するのでしょうか?またの報告を楽しみにしております。
私は今58才です。USBの挑戦は無謀だったかもしれませんが、新しい製品の完成を待っている人が沢山居ますから、重い腰をあげました。そして、このブログから唯一夢を実現するための勇気を頂きました。ありがとうございました。
経過は都度このページにご報告致します。
製品化を目指しての開発とは素敵ですね。今後の進展も楽しみにしております。
今、プログラムは停止せずに動作し続けております。今後は製品に組込の作業にかかります。
ところで、FOMA携帯をシリアルATコマンドで使えるボードを販売したとすると売れると思いますか?
色々と参考となる資料有り難うございました。製品に組み込んだらURLのご案内をさせて頂きます。
W-SIMを購入する前は、FOMAをノートPCにUSB接続してモバイルしていました。個人的にはモデム通信だけならUSB接続でも事足りていました。音声通話の発着信制御や電話帳操作とかに使えるのであれば何か応用ができるかもしれませんね。
歳をとってもマイコンは楽しいですね。しかも製品を待ち望んでいる方がいたり、エールを頂くとなおさらです。これからもどうかよろしくお願い申し上げます。
わたしも、もう少し完成度の高いものを作れるようになりたいものです。来年は、プリント基板を作ることも覚えようかとか考えております。