EEPROMを使ったシリアル受信バッファ 512kバイトに増設
備忘録として。
まだ、まとめの途中ですが「シリアルデータ記録装置」の
メモリーを512kバイトに拡張する作業を進めてます。
※回路図とスケッチはちょい待って。
・2020年3月16日:シリアルデータ記録装置を
・2020年3月17日:ICの2段重ねで容量アップ
・2020年3月20日:256kBシリアルデータ記録回路とりあえず完成
もともとは128kバイトのEEPROM、24LC1025 。
これを2段重ねにして256kバイトにして使っていたの
ですが、さらに重ねて「四重」に。
(二重×2)
そうしたら512kバイトに。
記録するデータはゆっくりと9600BPSで受け
ているのですが、取り込んだデータを吐き出す
時は「早いほうが良いぞ」ということで、
送出を115.2kBPSにスピードアップしたら
どうだという改造(ソフト的な)をしてみたのです。
SDカードへを使ってのシリアルデータの取り込み
だと、データの取り出し速度は取り込み装置とは
別のものとして切り離せます。
しかし、今回のツールでは、自分が持つメモリー
へ書き込んだデータを取り出すには、シリアル通信しか
出口がありません。
ということで、「早よせんかい!」の罵声には通信速度の
アップしか方法がないのです。
で、あれこれ試している途中なのです。
※あれこれ
・書き込みはすでにページ書き込みを実現して
いるので、取りこぼしはない。
ターゲット装置との兼ね合いで、受け速度
は9600BPSのままゆっくりで。
・取り込んだデータの吐き出しを115.2kBPSに
スピードアップしようとすると、EEPROMの読み
出し速度が問題に。
1バイト単位での読み出しだと遅いのだ。
・スピードアップにはページ読み出しでバッファリング
しながら送出ということになるのだが、Arduinoの
ライブラリの制限でまとまりは30バイトが最大。
(書き込みも同じ)
・それでも、1バイト単位での読み出しより早い。
EEPROMのページ書き込み、ページ読み出し手順の
の参考になるかと。
まず、回路図。
2段重ねの24LC1025(24FC1025)を2ブロック。
これで512kバイトで、24LC1025が使えるアドレス範囲
0x00000~07FFFFを使い切りました。
その制御スケッチ。(元がArduino UNO R3)ですんで)
ダウンロード - rxbff3a.txt
ファイル名を".ino"から".txt"に変えていますんで、
そのままエディタで読めるはず。
※改良点
・JP1をonすると、取り込んだシリアルデータを出力する
ときの通信速度を115.2kBPSにして、12倍にスピードアップ。
データ取り込み時の速度は9600BPSのまま。
・EEPROMのアクセス、ライブラリ(twi wire)を使わず、
オリジナルのルーチンに。
割り込みでの処理がないのですっきり。
・EEPROMをページアクセスするためのバッファも
その大きさを自由にできちゃう。
元のは30バイトまでという制限があった。
※参考にしてもらいたいところ
・EEPROMの書き込み、多くのサンプルプログラムが
書いて → 待つ(時間で5msあるいは「ACKポーリング」で)
をしています。
これだと、書いた後は、何もできないのでもったいない。
時間待ちは変わりませんが、
待って → 書く、あるいは読む
にしています。
書き込みの完了でタイマーをセット。
割り込みでダウンカウント。
次に読み書きする時はそのタイムアップをチェックします。
書き込み後、すぐ別の処理ができますんで、時間待ちの
無駄が無くせます。
今回のだとシリアルデータの受信処理を
この5ms間も継続実行してます。
・ページをまたいだEEPROMの読み書きも、見てもらい
ところです。
多くのサンプルプログラムが、ページの境界を知らん
ふりしています。
24LC1025(24FC1025)の場合、ページは128バイト。
連続していれば、1アクションで書き込み出来ます。
しかし、書き込みバイト数に対して、アドレスが128バイトの
境界で分断してしまうと、先と後の2回に分けて書き込み
しなくてはなりません。
例えば・・・
先頭アドレス0x01234から100バイト(0x64)書きたい。
アドレス0x01280がページの境界。
0x01234~0x0127F と0x01280~0x1297の2回に
分けて処理しなければならない。
また、読み出しでは64kバイトごとの境界も関係して
きます。
ページ数の128バイトに関係なく連続して読み出しで
きますが、16bitのアドレスを越えて読み出しすると、
同じブロックの先頭に戻ってしまいうので、書き込み
と同じように分割しての処理を考えなければなりません。
お手軽に大容量メモリーが使えるのですが、
「こんな処理で応用できるんかいな」
っというサンプルが目に付いちゃいます。
・ライブラリ、wireとtwiを使わないようにしたら
すいぶんと使用メモリーが減りました。
ROMが7094バイトが4710バイトになって2384バイトの減
RAMが1032バイトが888バイトになって144バイトの減
(読み書きバッファを68バイト増やしてるのに)
※関連
・2021年11月26日:EEPROM、 2kバイトと4kバイトの間には壁がある (24LC16で)
・2024年4月12日:I2C液晶のアクセス、割り込みで処理しないようにすると
・2021年7月2日:秋月の液晶表示器 ACM0802C-NLW-BBW-IIC、I2Cのプルアップ抵抗
・2021年11月27日:EEPROM I2Cのクロックを早くすると・・・
| 固定リンク
「電子回路工作」カテゴリの記事
- 宮内 悠介 著『ラウリ・クースクを探して』(2025.04.09)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
- 考察:提灯配線短絡箇所の発見方法(2024.11.14)
- AD620を使った計装アンプ+ノッチフィルタ(2024.11.08)
- ステッピングモータ駆動回路を24Vだけで #2(2024.10.31)
「ツール」カテゴリの記事
- マイコン型導通チェッカーの部品(2025.02.21)
- ピンセット、危うし!(2025.01.09)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
- 充電器用AC100V電源電流モニター回路(2024.12.13)
- DDS方式の2相パルス発生回路、周波数スキャン機能を付ける(2024.10.05)
「Arduino」カテゴリの記事
- Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMの例(2025.03.22)
- パルスジェネレータをI2C液晶で動かす(2025.01.28)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
- 1/nカウント方式とDDS方式の2相パルス発生回路(2024.10.13)
- おっと。map関数の計算桁に注意(2024.10.06)
コメント