マイコン工作実験日記

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

問題発生

2009-06-28 22:18:32 | Weblog
USBスピーカからFM再生するためのコードを追加して動くようになったので、そろそろ記事を書こうかと思っていたところ、問題が発生してしまいました。

どういうわけかシリアルポートが突然動かなくなってしまったのです。LPC2388基板をPCにつないでも、USBシリアルポートを認識してくれません。USB経由での電源供給はちゃんとできており、LEDが点滅してくれるのでどうやらご本尊のLPC2388は生きているようです。シリアルUSB変換を担当しているCP2102がお亡くなりになったのかもしれません。ちょっと基板を眺めただけでは、接触不良個所があるようにも見えません。

JTAGアクセスも問題無くできたので、ブート後自動的にSDカードのMP3を再生開始するようにソフトを組んでみたところ、ちゃんと動いてくれました。SDもUSBホストもちゃんと動作しているので、やはり問題があるのはシリアルポートだけの可能性が高いのではないかと想像しています。

そうは言っても、やはりシリアルポートが動いてくれないと、メッセージの表示が見えませんし、再生操作に必要なコマンドを叩くこともできません。この状況から抜け出すための方策を検討中です。今のところ、次の3つが候補です。
  1. CN2から出ているRXD1, TXD1のシリアルポートを使うようにソフトを変更し、このポートに秋月のUSBシリアル変換ボードをつなぐ。
  2. USBデバイスポートでCDCを動かして、デバックポートとして使う。
  3. バックナンバーの在庫が豊富な書泉ブックタワーへ行って、5月号をもう一冊買ってくる。
2番目の方策が一番スマートなのですが、ちょっと作業が面倒。1番は手持ちの材料で対応できそうですが、3番が一番安直な方策でもあります。さぁ、どうしようかなぁ。

6/29 追記 本件解決しました。コメント欄で説明しました。

最新の画像もっと見る

5 コメント

コメント日が  古い順  |   新しい順
はやとちり (sirius506)
2009-06-29 01:39:04
はやとちりしてしまいました。

シリアルポートがおかしくなったと思い込んでいましたが、原因はPCの方の端末ソフトのせいでした。どうやらTeraTermが正常終了せずにポートを掴んだままゾンビ状態になっていたようです。PCリブートしたら、あっさり問題解決。半日、思考錯誤したり、対応検討したりしていたのに。。
Unknown (Tsuneo)
2009-06-29 10:59:00
> シリアルUSB変換を担当しているCP2102がお亡くなりになったのかもしれません。

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
Re: Unknown (sirius506)
2009-06-29 11:20:34
Tuneoさん、

いつも助け舟を出していただきありがとうございます。コメントがすれ違いになってしまったようですが、わたしの早とちりで、PC側の問題でした。PC側で全くUSBデバイスとして見えなくなっていたので、基板側だと思い込んでしまっていました。

Unknown (Tsuneo)
2009-06-29 11:21:00
ああ、CP2102の件はもう解決したんですね。おめでとうございます。

昨夜このページを見て、そのままページ表示を更新しないでコメントを投稿してしまいました。投稿するまで解決したことに気づきませんでした。

Tsuneo
Unknown (Tsuneo)
2009-06-29 11:47:48
> どうやらTeraTermが正常終了せずにポートを掴んだままゾンビ状態になっていたようです。

TeraTermは、COMポートから上がってくるエラーを無視してプロセスを進めてしまうことが多いので注意が必要です。TeraTermで一見問題ないように見えても、実はCOMポートがエラーを出しているということがままあります。何か腑に落ちないことがTeraTermで起きているようなら、PortMonを併用してCOMポートのエラーをチェックする、というのが良いでしょう。

TeraTermは商用ではないので、完璧なエラー処理を求めるのは酷でしょう。エラー処理は自分でプログラムを書いていても面倒な部分ですので。

Tsuneo

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。