リアルメモリ(24LCxx)の使い方


はじめに

PICの工作でメモリ不足に困る事が時々あります。よく使う16F84ではデータメモリが68byte、Flashデータメモリは64byteでちょっと少ない気がします。SRAMを外付けにするのも大袈裟だし、電源を切ってもデータを保持したい場合があるので何かいい物はないかと思っていたら、丁度PICを作っているMicrochip社から8ピンのシリアルEEPROMがでてました。
読み書きに若干時間がかかりますが、I2Cインタフェースで信号線が2本で済み、PICとの相性もなかなか良さそうです。書き込みサイクルは100万回以上が保証されています。

このメモリのデータシート(英語版)がちょっと分かりにくかった事と、使うために苦労した点がいくつかあったので、このホームページをご覧頂いている方に何か参考になればとPICで利用する方法を残しておこうと思います。

パッケージ 24LC64(64kbit)、24LC256(256kbit)など

Vcc:定格電源電圧は2.5〜5.5Vです。
A0〜A2:チップアドレス(VccかVssに接続することでチップアドレスを設定するため、同一バス上に8個まで(3bit Addr)接続できます。アクセスするチップはR/Wコマンドで指定)
WP:ライトプロテクト(書き込み可=未接続またはVssに接続、プロテクト=Vcc)
SCL:シリアルクロック(データ転送クロック 最大400kHz)
SDA:シリアルデータ(オープンドレインなので、数kΩでVccにプルアップを推奨)

I2C通信

データ通信シーケンス

SCLがHiの間にSDAをLoにするとstart condition(通信開始)
SCLがHiの間にSDAをHiにするとstop condition(通信終了)
転送するデータは、start conditionに続きSCLがLoの時のみSDAをHi/Loに設定し、SCLがHiの時に処理される
転送は1バイト単位で行われ、1バイト毎にレシーバ(受信側)がACK/NACを発行する

24LCxx Read/Writeオペレーション

PICからのRead/Write

実際にメモリアクセスするためには上記プロトコル以外にデータ転送のバスタイミングやACK/NACの処理など面倒なお約束があるので、これらを考慮したPIC用インタフェースプログラムを作りました。

PICとシリアルメモリをI2Cバスで接続し、RandomRead, SequentialRead,RandomWriteを行うためのライブラリになっています。

シリアルメモリ(24LCxx)+I2cインタフェース (PIC16F84 10MHz用 I2C.ASM)


戻る