EEPROM I2Cのクロックを早くすると・・・
これが「Wire」ライブラリのデフォルト、100kHz
でのSDA、SCL信号波形。
6バイトのデータを書き込んでいます。
プルアップ抵抗は2.2kΩ。
それを400kHzにすると。
およそ4倍に増速。
2kバイトのチップなので、コマンドにアドレスの
上位3ビットを混ぜ、その後に下位アドレス8ビット
が続きます。
ch1の波形は、書き込み開始から終わりまでの時間。
ch1がHになってSCLが出てくるまでの時間が、
関数内での前処理にかかっている時間になります。
波形を拡大。まず100kHz。
400kHzだと波形の立ち上がりが鈍って見えます。
SDA、SCLラインのプルアップ抵抗を大きくすると
鈍りが大きくなります。
4.7kΩにした波形です。
このくらいならまだ大丈夫。
プルアップ、1kΩだと電流を流しすぎの感じだし、
4.7kΩで400kHzだと立ち上がりの鈍りが気になります。
その中間で2.2kΩにしました。
その後、2kバイトのEEPROMから8kバイトのFRAMに交換。
「FM24C64」になると「コマンド+アドレス上位+アドレス下位」
の順で書き込みが始まり、その後にデータが続きます。
6バイトのデータを連続書き込みすると、ページ境界で分断される
ことがあるので、たまに、2回に分けて書き込みが行われます。
その時、FRAMだと「書き込み完了待ち」をしなくてすむので、
連続書き込みがスムーズに進みます。
※EEPROMだと4msほど待たなければならない。
あえて「書き込み完了チェック」を入れた様子がこの波形。
(ACK、NACKの確認)
6バイトのうち、前半で4バイト、後半で2バイトの書き込み
をしています。
FRAMなので、後半書き込み前の待ち時間が不要になります。
1回の書き込み完了確認で済んでいる様子が見えています。
※FRAMを使う前提ならこの待ちは不要
EEPROMだとACkが返ってくるまで4msほど待ちが続きます。
EEPROMよりFRAMのほうが便利、というところでしょうか。
| 固定リンク
「Arduino」カテゴリの記事
- パルスジェネレータをI2C液晶で動かす(2025.01.28)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
- 1/nカウント方式とDDS方式の2相パルス発生回路(2024.10.13)
- おっと。map関数の計算桁に注意(2024.10.06)
- DDS方式の2相パルス発生回路、周波数スキャン機能を付ける(2024.10.05)
コメント