ロジックアナライザをつないで、SCL, SDAの信号を見てみました。
きちんと、ACKが返ってきています。なんで、、、って、調べたところ、1ページの128バイトを送信後のSTOP信号をきっかけに、EEPROMでページ書き込みを始めます。
書き込みを終える前に、次のアドレスを送っているので、ACKが返ってきませんでした。どこでACKがかえってこないのか、これは、ロジアナでなく、ACKエラー箇所を1つ1つ調べましたよ。
じゃあ、書き込み終わるまでWAITすると、7.5ms近く必要な感じ。MIDI-IFから来るデータを一時的に保管する領域が足りません。MIDI-IFは、0.32ms位で一文字入ってくるので、25文字近くのバッファが必要。それを送っている最中もMIDI-IFから受信するので、40文字位のバッファは必要。
今、使っているPICは16F1823で、RAMが128バイトしかないです。16F1825は1024バイトのRAMを持っているので、16F1825を使って、ページ単位でバッファリングするのが順当ですね。このまま、16F1823を使うなら、かなりの工夫(例えば、このバックアップツールでは、MIDI-IFの送受信は同時に起きないので、同じバッファを利用するとか)が必要です。
QY20のバルク送信は、時々、WAITが入るみたいなので、もう少し頑張れば、いけそうな気もしますが、QY22とかには使えない可能性があるので、どうしようかな、って感じです。