● 実験テーマ6
「ソフト記述による、I2C検討計画2(EEPROM)」の顛末記
■ 2010.09.08
・スレーブ側の素子を、RTCからEEPROMに変え動作確認することにした。
・RTCとの違いは?
@ スレーブアドレスが、RTCと当然異なる。
A デバイスアドレス指定が、AT24C256を使用した場合、0〜32767(0x7FFF)を上位8bit、下位8bitに
分けて送出する必要がある。
・違いを踏まえて、チェックプログラムを作成した。
チェックプログラムの内容は、EEPROMの1234番地に、0x55を、1235番地に、0xAAを書込んだ後、それを
読出し、その内容をLCDに表示するという簡単なものにした。
■ 2010.09.09
・デバッグ開始
・何回やっても、EEPROMの1234番地へのデータ書込み時、スレーブからのACK受信が出来ない状態が
続いた。
■ 2010.09.10
・何故、ACK受信できないかの原因を探った。
・EEPROM自体が悪いのかと思い、EEPROMをソケットから外し、スレーブからのACKをプログラム上で
無視するようにすれば、ACKサーチのところで永久ループしなくなるので、プログラムが最後まで走る
はずである?
→ 結果最後まで走ったが、EEPROMを外してあるので、0xFFしか読み出せない。
逆に、EEPROMが正常でACKが正しく受信できれば後は問題ないように思える。
・現在タイミング測定をするためにSCLラインにソフト・オシロ2の簡易プローブを接続しっぱなしにしてあ
るが、ひょっとしたら、そのプローブ容量の影響でSDAとのタイミングがズレ、ACKが受信できなく
書込み・読込みに失敗していると想定し、プローブを外してみたら、見事その想定は正解で指定番地
に書込んだデータがLCDに正しく表示できた。
・本番は、SCLを約100kHzに戻すが、SCLラインにプローブを接続しなければ正しく動くので今回は、
高速オシロ+正規のプローブを持ち合わせてないこともあり、これ以上追求できないので、これで本件
は一旦クローズすることにした。
・以下にこれまでの結果を示します。
<最終回路図>
・ この時点では、回路図CADを持ち合わせてなかったので、画像の貼り合わせと、オートシェープで作成してました。
尚、dsPIC(トレーニングボード)側の回路は、主要な部品のみの接続を示しています。
<最終ソース・ファイル>
・こちらから、どうぞ→ soft_i2c_eeprom_check_4013.c