突然USB通信がおかしくなってしまった。ほぼ一日中格闘したが、結局直せず…。
 最初の問題は、バルクOUT転送でエラーが起こるというもの。ディスクリプタを確認していくと、エンドポイントのパケットサイズに間違いがあった。この前、パケットサイズを32バイトから62バイトに増やしたのだけど、そのときに間違って数字の小さいマクロ定数を使ってしまったようだ。
 マクロ定数を直してやると、転送エラーは起こらなくなった。これで解決かと思いきや、今度は別の問題が起こった。
 パソコンから同じくバルクOUT転送で送信したデータがマイコンに正しく伝わっていないらしい。コントロール転送とインタラプトIN転送には異常が無いので、インタラプト転送を利用して送信データをループバックして確認した。すると、パソコンから送信した32バイトのデータのうち、9バイト目から後が正しく伝わっていない。マイコン側のファームウェアでFIFOから取り出した時点で異常な値になっている。
 はっきりしたことは言えないが、FIFOには送信しただけのバイト数が届いていることから、おそらく受信側(マイコン)のエンドポイントに問題があるのだろう。
 

 そんなこんなでちょっと残業していたのだけど、途中でお茶を入れに給湯室に行ったときに同僚と雑談になり。そのまま夜中まで話し込んでしまった。彼はいつも深夜まで残業する人ではあるが、それでも午前2時というのはやり過ぎた。