USBスピーカからFM再生するためのコードを追加して動くようになったので、そろそろ記事を書こうかと思っていたところ、問題が発生してしまいました。
どういうわけかシリアルポートが突然動かなくなってしまったのです。LPC2388基板をPCにつないでも、USBシリアルポートを認識してくれません。USB経由での電源供給はちゃんとできており、LEDが点滅してくれるのでどうやらご本尊のLPC2388は生きているようです。シリアルUSB変換を担当しているCP2102がお亡くなりになったのかもしれません。ちょっと基板を眺めただけでは、接触不良個所があるようにも見えません。
JTAGアクセスも問題無くできたので、ブート後自動的にSDカードのMP3を再生開始するようにソフトを組んでみたところ、ちゃんと動いてくれました。SDもUSBホストもちゃんと動作しているので、やはり問題があるのはシリアルポートだけの可能性が高いのではないかと想像しています。
そうは言っても、やはりシリアルポートが動いてくれないと、メッセージの表示が見えませんし、再生操作に必要なコマンドを叩くこともできません。この状況から抜け出すための方策を検討中です。今のところ、次の3つが候補です。
6/29 追記 本件解決しました。コメント欄で説明しました。
どういうわけかシリアルポートが突然動かなくなってしまったのです。LPC2388基板をPCにつないでも、USBシリアルポートを認識してくれません。USB経由での電源供給はちゃんとできており、LEDが点滅してくれるのでどうやらご本尊のLPC2388は生きているようです。シリアルUSB変換を担当しているCP2102がお亡くなりになったのかもしれません。ちょっと基板を眺めただけでは、接触不良個所があるようにも見えません。
JTAGアクセスも問題無くできたので、ブート後自動的にSDカードのMP3を再生開始するようにソフトを組んでみたところ、ちゃんと動いてくれました。SDもUSBホストもちゃんと動作しているので、やはり問題があるのはシリアルポートだけの可能性が高いのではないかと想像しています。
そうは言っても、やはりシリアルポートが動いてくれないと、メッセージの表示が見えませんし、再生操作に必要なコマンドを叩くこともできません。この状況から抜け出すための方策を検討中です。今のところ、次の3つが候補です。
- CN2から出ているRXD1, TXD1のシリアルポートを使うようにソフトを変更し、このポートに秋月のUSBシリアル変換ボードをつなぐ。
- USBデバイスポートでCDCを動かして、デバックポートとして使う。
- バックナンバーの在庫が豊富な書泉ブックタワーへ行って、5月号をもう一冊買ってくる。
6/29 追記 本件解決しました。コメント欄で説明しました。
シリアルポートがおかしくなったと思い込んでいましたが、原因はPCの方の端末ソフトのせいでした。どうやらTeraTermが正常終了せずにポートを掴んだままゾンビ状態になっていたようです。PCリブートしたら、あっさり問題解決。半日、思考錯誤したり、対応検討したりしていたのに。。
CP2102は静電気でUSB側が壊れることがありますが、湿度の高い今頃の時期は起こりにくいでしょう。CP2102のハードウェア以外にも、
- PCのデバイスドライバ、あるいはアプリのCOMポート設定などPC側の問題
- LPC2388のシリアルポートの設定
もチェックしてはいかがでしょうか。
a) USBViewでCP2102のUSBハードウェアをチェック
CP2102をPCに挿して、USBViewでデスクリプターを読み出してみます。
USBViewはMSのWin DDKやWDKに入っていますが、FTDIから直接ダウンロードできます。
USBView (FTDI Utilities ページ)
http://www.ftdichip.com/Resources/Utilities/usbview.zip
SiLabsのこのウェブページにUVCView (USBViewの改良版)でのCP2102の表示が載っていますが、USBViewでもほぼ同等の読み出しが得られます。
CP210x Troubleshooting Techniques - SiLabs MCU KB
http://portal.knowledgebase.net/article.asp?article=178010&p=4120
USBViewで上記のようにデスクリプタが読み出せていれば、CP2102のUSB側ハードウェアは問題ないでしょう。他の原因を探すことになります。
b) PortMonでPCのデバイスドライバをチェック
上記のSiLabsのページの後半で紹介されていますが、PortMonを使って、PCアプリとCP210xデバイスドライバのCOMポートを通じたやりとりをモニターできます。
PortMon (MS TechNet - SysInternals)
http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx
TeraTerm などのターミナルソフトでCP2102のCOMポートを開けて、PortMonで経過をモニターします。何かエラー(INVALID PARAMETER やTIMEOUTを含めて)が返ってくるようなら、問題の手掛かりとなります。
c) CP2102のRS232側をチェック
これまでのチェックで問題ないようなら、いよいよLPC2388とCP2102の接続に焦点が絞られてきます。
- オシロスコープやロジアナで、CP2102のRS232側(TX,RX)に信号が出ているか
- ボーレートやパリティ、データビット数は合っているか
このCP2102以外に別のUSB-シリアルチップをお持ちならば、それのRXポートをこのCP2102のTXやRXポートに引っかけて通信をモニターする、という手も使えます。なおこの場合、CP2102のRS232側はTTLレベルなので、RS232バッファを通さないで接続します。
Tsuneo
いつも助け舟を出していただきありがとうございます。コメントがすれ違いになってしまったようですが、わたしの早とちりで、PC側の問題でした。PC側で全くUSBデバイスとして見えなくなっていたので、基板側だと思い込んでしまっていました。
昨夜このページを見て、そのままページ表示を更新しないでコメントを投稿してしまいました。投稿するまで解決したことに気づきませんでした。
Tsuneo
TeraTermは、COMポートから上がってくるエラーを無視してプロセスを進めてしまうことが多いので注意が必要です。TeraTermで一見問題ないように見えても、実はCOMポートがエラーを出しているということがままあります。何か腑に落ちないことがTeraTermで起きているようなら、PortMonを併用してCOMポートのエラーをチェックする、というのが良いでしょう。
TeraTermは商用ではないので、完璧なエラー処理を求めるのは酷でしょう。エラー処理は自分でプログラムを書いていても面倒な部分ですので。
Tsuneo