YAMAHA QY20のデータバックアップ回路(6)「クロックが送出されない!!」

2022/08/30

YAMAHA QY20 バックアップツール 電子回路

 MIDI-IF送受信のデータバッファは、同じものを使うように大幅に修正。

送受信のバッファリング部分を共通化するとともに、割り込み処理で行う場合もあるため、間接アドレスを使う部分はバックアップするのと、割り込みと通常処理がバッティングしないように、排他処理の見直し。

一時間くらいで修正完了。バッファは40バイト確保できたので、なんとか大丈夫。取りこぼし(バッファオーバーフロー)は起こしていません。

I2C通信でのEEPROMへ書き込む処理も一応、できました。

続いて、読み取り処理なので、作成したことがあるので、大体のフローはわかっています。そんなに時間は、かからないと始めたのですが、不可解な現象に悩まされています。

すでに5時間くらいかなぁ。。。。

EEPROMからデータ送信しないので、プロトコルやPIC側の設定を何度も見直しているのですが、ロジアナで見ると、恐ろしいことが、、、

以下が、マスタ受信の手順

  1. START信号(SEN)
  2. コントロールデータ(0xA8)送信:EEPROMからACK応答あり
  3. アドレス2バイト送信:EEPROMからそれぞれACK応答あり
  4. RESTART信号(RSEN)
  5. コントロールデータ(0xA9)送信:EEPROMからACK応答あり
  6. 受信開始(RCEN)
  7. BFが1になったら、SSP1BUFからデータ取得
  8. ACK応答して次のデータ受信処理、またはNACK応答してSTOP処理(PEN)
不可解な現象は、6の段階で、SCLからクロックが出ないのです。なので、当然、EEPROMも、クロックに同期させたデータを返せないです。そう、PIC側の問題。

多分、何か暗黙の設定が必要なのでしょう。SCL/SDA(RC0/RC1)は、受信ポートにしてデジタルポートにしています。I2Cのイネーブルにしています。すでに、送信はできているので、受信に関してなにか設定(呪文)があるのかな。。。。

I2C割り込みフラグ、各種有効化ビット、エラーフラグ(コリジョン、オーバーフロー)なども見直しています。バッファの空読みをしても変わりません。

クロックが出ないってどういうこと!?

<追記>
クロックストレッチと言って、スレーブ側がデータ転送を遅延させるために、SCLをLOWに保持させることができるようです。うーん、これが起きているのか!?

QooQ