2020年02月29日

Node-Redを用いたEEPROM読み込みと書き出し

前回紹介したNode-RedからのI2Cデバイス制御する方法に続いて、応用例を紹介します。

Node-Redはノードを結び付けてフローを作成してプログラミングできる他にファイルの読み込み、書き出しをすることが可能です。今回はMicrochip製のI2C接続EEPROM 24LC512USB-I2C変換アダプタを使用してメモリデータのファイルへの読み出しとファイルからの書き出しをしてみました。プログラムのforループを書き直すことで24LC64, 256にも対応可能です。また、アドレスをバンク毎で書き換えれば24LC1024にも対応できます。なお、アドレスセレクトのA0、A1、A2はすべてGNDに接続しています。


下記のようにNode-Redでコードを書いてました。

full_read.jpg

16byteずつ読み込んでcsvファイルに出力します。NodejsPortableの場合はNodeJSPortable\Dataのフォルダにmem_read.csvが生成されます。

read_csv.jpg


処理のラグが多く、24LC512の場合はすべて読み出すまでに10分程度要しました。



csvファイルから読み込んで書き込むツールも同様に作成してみました。16byte毎に0~255の数字を書き込んだcsvファイル(mem_write.csv)を用意し、Node-Redから読み込んで24LC512に書き込みます。


full_write.jpg

読み込み同様に16byte毎のcsvファイル(mem_write.csv)から8byte毎に書き込みを実行します。NodejsPortableの場合はNodeJSPortable\Dataのフォルダにcsvファイル(mem_write.csv)を配置します。シリアルI2C変換SC18IM700のバッファサイズが16byteのため、開始や終了コマンドを含めると最大10byte毎の書き込みとなりますが、キリが悪いので8byte毎に書き込みを実行しました。

write_csv.jpg

読み込み同様に書き込みには10分ほど要しました。一般的には書き込みの方が時間を要しますが、今回のシステム構成の場合は書き込みの方が若干早く処理が終わりました。この理由として読み込みの場合、Node-Redのシリアル送信処理をしてからシリアル受信するまで待機する必要があります。一方、書き込みの場合は一方的にシリアル送信処理のみなのでシリアル受信するまで待機する必要ありません。シリアル受信はOS側のFIFOやNode-Red側の割込み発生周期などが影響し、シリアル受信してもすぐに受信処理が実行されません。現在のコードは受信処理が16byte毎に発生しますが、少し大きなサイズでまとめて受信すれば、受信処理の待機時間の回数を減らせるため、全体の処理時間を短くできると思われます。


正直、実用的なバックアップ、リストアツールではありませんが、ちょっとデータを保存しておきたいといった場合や複製したいという場合には有効だと思いました。I2Cアドレスやサイズを変更すれば24LC512以外でもI2CのEEPROMであれば利用できます。今回のサンプルコードはこちらで公開しています。活用してみてください。

posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。