※ ChatGPTを利用し、要約された質問です(原文:USBメモリを抜くと通信エラーが出る)
USBメモリを抜くと通信エラーが出る
このQ&Aのポイント
USBメモリを抜くと通信エラーが出る問題について、解決方法や回避方法を教えてください。
USBメモリを挿すときはエラーは出ないが、抜くときにエラーが発生する問題について、解決方法をご教示ください。
USBで制御する機器の開発をしている際に、USBメモリを抜くと通信エラーが発生してしまいます。解決策や回避方法があれば、教えていただけますか?
USBで制御する機器の開発をしています。
バルク転送で4KByte/秒程度のデータを装置からPCに伝送しますが、伝送の最中に、同じPCの別のUSBポートにさしてあったUSBメモリを抜くと、装置とPCとのUSB通信が停止し、エラーとなってしまいます。
・USBメモリを挿すときはエラーは出ない(抜くときだけ)
・エラーの起こる頻度は10回に1回程度
・PCに依存する。富士通FMV-5280で症状が発生。Windows-Vista SP2
・エラーが起こるときのUSB通信を詳しく調べると、複数ブロックに分割されたバルク転送、あるとき突然、PCが装置にデータを取りに来るのをやめてしまうようです。装置側ではPCがデータを取りにくるのをずっと待っています。
・装置のUSBはルネサス製のマイコン(SH2A-7285)です。
PCがデータを取りに来ないので、装置側での回避は難しいように思いますが、解決方法、もしくは回避方法があればご教示いただけますでしょうか
よろしくお願いします。
補足なんですが
USB規格は、産業用にも利用が進んでおり、ある程度信頼性が確保されたものかと思っていましたが、規格上、信頼性の確保がどの程度保障されているのか疑問に思えてきました。
どんなもんでしょう?
たとえば、
・人命にかかわるところには使ってはいけないレベル?
・無人で連続で動き続けるところには使ってはいけないレベル?
・金銭の授受に絡むところには使ってはいけないレベル?
・通信エラーが出たら、「まあしょうがないか」と装置を再起動してもらえるところ以外には使ってはいけないレベル?
なにか基準はあるのでしょうか?(IEC61508なんかに規定があるとか)
それとも、産業用ということで作られたもの(インタフェースカード、ケーブルなど)と民生用のもので信頼性が異なる、ということなんでしょうか(PCとサーバの関係のように)?
補足
ははは さま ご回答ありがとうございます。 ハンドシェイク処理が有効とのことですが、データ誤りが発生するというレベルではなく、APIが通信に失敗するという状態なのです。 エラーが起こるときは、 ・装置側:PCがいつまでたってもデータを取りに来てくれない ・PC側:read()が失敗する という状況で、こうなると、USBケーブルをいったん抜かないと通信が再開できなくなります(これも不思議です)。PC側でエラーを検知し、ソフトウェア的にUSBバスをリセットしたのち通信を再開する必要があるように思いますが、具体的にどうしたもんでしょうか? なお、装置側はUSBコンプライアンステスト準拠のテストに合格しています。