エラー調査

MMC5 + AM29F040B + W29C040 で charcter memory の書き込みミスと通信切れが起きる原因を考えたが、どうしてもデバイス固有の気がしない。ので MMC5 + AM29F040B + AM29F040B で作り直し。

そしたら、別条件で再現した。理由を突き止められないが2つの有力かもしれない情報を得た。

AVR 内部の RAM の使用量を減らしたら通信切れの発生率が下がった

RAM 使用率が 93% だったので、もしかしたらスタックがほかの変数を食いつぶしているかもと判断。

USB のデータ転送がおかしい

画像参照。


  • 8 byte ずれてるのが結構ある。
  • 0xff のデータがなんかよくわからんデータになってるのもある。

おもうに...

  • host 側で usb_control_msg() 側で data の型が uint8_t * なのに無理矢理 const uint8_t * を渡している
  • avr-gcc が変。割り込みのところでもあったので、コンパイラを替えるほうが吉な気がした。

なぜ MMC5 で顕著に起こるのか

MMC5 のソフトはデータ量が多くもてるので、データが多くなってきたところでいってしまう可能性大。