USB機器のデバイスドライバ書いてる人なら当たり前の話だとは思うんだけど、専門外の自分が調べる機会があったのでメモ。 USBの転送モードはいくつかあって、そのうちの一つにバルク転送というものがある。大容量のデータをやりとりするのに適した転送モードで、記憶装置とのデータのやりとりに使われたりする。このバルク転送を使ってPC(ホスト側)から携帯端末(デバイス側)にデータを送っていたのだけど、あるサイズのデータを送ると、デバイスが応答を停止してしまう現象が起きた。あるサイズというのは、512バイト、1024バイト、1536バイト、…つまり512バイトの倍数である。 最初は、受け取ったデータを処理をするためにデバイス側に追加した自分のコードが悪さしてるのでは?と思ったのだが、いろいろ検索してみるとどうも違うらしい。 まず、USB2.0 High Speedバルク転送のデバイスのエンドポイントのバッ
![USBバルク転送の挙動(ZLP: Zero Length Packet) - PEEE802.11](https://cdn-ak-scissors.b.st-hatena.com/image/square/a7d95cfad0e1dac0cb8952a898ccd1e771197fd3/height=288;version=1;width=512/http%3A%2F%2Fecx.images-amazon.com%2Fimages%2FI%2F51XxZK6CkEL.jpg)