PCB で試し運転してみたら、ETROM の CHR の書き込みが安定しないどころか、USB の通信まで切れてしまう。他の W29C040 を使っているのもそこそこ悪い結果が出るのだが、顕著に悪い値が出るのは ETROM だけ。
それなりにおもいつく場所はあるのでところどころ直してみるが、ファームウェアをデバッガで追いかけられないので雲をつかむ感が大きい...
問題は2点.
compare に失敗する
たぶん、コマンド+0x100 byte 書き込み... の間に USB 割り込みが入るから書き損じが発生する。割り込みを停めると USB の通信が切れるので割り込みを停められない。
通信が切れる
write request で sending control message failed とかでるんで、割り込み処理対応が遅いとかそこらへんか、よくわからん。変なループは memcpy をいれたら早くなった(気がする)。
backtrace みてみるけど、「割り込み処理対応が遅い」なら byte programming type のデバイスでも発生すべきだが、せーへんのでわっからせん。