« EEPROM、 2kバイトと4kバイトの間には壁がある (24LC16で) | トップページ | 出窓の結露対策用ヒータ制御回路 »

2021年11月27日 (土)

EEPROM I2Cのクロックを早くすると・・・

これが「Wire」ライブラリのデフォルト、100kHz
でのSDA、SCL信号波形。
6バイトのデータを書き込んでいます。
Ee003
プルアップ抵抗は2.2kΩ。
それを400kHzにすると。
Ee001
およそ4倍に増速。

2kバイトのチップなので、コマンドにアドレスの
上位3ビットを混ぜ、その後に下位アドレス8ビット
が続きます。

ch1の波形は、書き込み開始から終わりまでの時間。
ch1がHになってSCLが出てくるまでの時間が、
関数内での前処理にかかっている時間になります。

波形を拡大。まず100kHz。
Ee004
400kHzだと波形の立ち上がりが鈍って見えます。
Ee002
SDA、SCLラインのプルアップ抵抗を大きくすると
鈍りが大きくなります。
4.7kΩにした波形です。
このくらいならまだ大丈夫。
Ee000
プルアップ、1kΩだと電流を流しすぎの感じだし、
4.7kΩで400kHzだと立ち上がりの鈍りが気になります。
その中間で2.2kΩにしました。

その後、2kバイトのEEPROMから8kバイトのFRAMに交換。
「FM24C64」になると「コマンド+アドレス上位+アドレス下位」
の順で書き込みが始まり、その後にデータが続きます。

6バイトのデータを連続書き込みすると、ページ境界で分断される
ことがあるので、たまに、2回に分けて書き込みが行われます。
その時、FRAMだと「書き込み完了待ち」をしなくてすむので、
連続書き込みがスムーズに進みます。
  ※EEPROMだと4msほど待たなければならない。

あえて「書き込み完了チェック」を入れた様子がこの波形。
      (ACK、NACKの確認)
Ee101
6バイトのうち、前半で4バイト、後半で2バイトの書き込み
をしています。

FRAMなので、後半書き込み前の待ち時間が不要になります。
1回の書き込み完了確認で済んでいる様子が見えています。
   ※FRAMを使う前提ならこの待ちは不要
EEPROMだとACkが返ってくるまで4msほど待ちが続きます。

EEPROMよりFRAMのほうが便利、というところでしょうか。


|

« EEPROM、 2kバイトと4kバイトの間には壁がある (24LC16で) | トップページ | 出窓の結露対策用ヒータ制御回路 »

Arduino」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« EEPROM、 2kバイトと4kバイトの間には壁がある (24LC16で) | トップページ | 出窓の結露対策用ヒータ制御回路 »