【EEPROMとは?】
EEPROMは他のメモリとは全く独立に備えられているデータを
格納するためのメモリで、特徴は電源がOFFになっても記憶
内容が消えることが無い不揮発性メモリになっているということ
です。従って、書き換えが出来てしかもずっと取っておきたい
パラメータなどを格納しておくのに使います。
【EEPROMの構造と動作】
EEPROMは8ビット幅のメモリで構成されており、最大256バイト
までの容量を指定出来ますが、実際に実装されているのは、
現状では64バイトです。
構造は下図のようになっていて、4個のSpecial Function Register
(SFR)の助けを借りて間接的にアクセスします。
つまり、EEADRレジスタでEEPROMのアドレスを指定し、データは
EEDATAレジスタに取り出されます。
このときのRead/Writeのタイミングをコントロールするのが
EECON1とEECON2の2つのレジスタです。
【関連SFRの詳細】
EEPROMをアクセスする時に関連するSpecial Function Register
の内容を説明します。
(1) EEADR
1バイトの読み書き可能なレジスタで、EEPROMのアドレス指定
に使います。8ビットなので結局256バイトまでのアドレスを
指定することが出来ます。
(2)EEDATA
1バイトの読み書き可能なレジスタで、EEPROMから読み出したり
書込んだりするデータそのものがこのレジスタ経由となります。
(3)EECON1
EEPROMの読み書きを制御したり、アクセス状態を監視するため
の制御用レジスタで下図の様な内容になっています。
EEIF :書込み完了割り込みフラグ
書込みが完了すると「1」になり割り込みを発生する
WRERR:書込みエラーフラグ
書込みが途中で中断されたとき「1」となる。中断要因
は、電源断やウォッチドッグタイマによるリセット
WREN :書込みイネーブル 「1」で許可 「0」で禁止
WR :書込み開始制御
「1」でスタートし終了すると自動クリアされる
RD :読み出し開始制御
「1」でスタートし終了すると自動クリアされる(4)EECON2
レジスタとして存在するものではなく、単にEEPROM書込みの
シーケンスを作るためにある。このシーケンスを作る理由は
電源のON/OFFや、変動によってEEPROMが異常に書込まれて
しまうのを避けるため。
【EEPROMからの読み出し方】
EEPROMからの読み出しかたは下記手順で行います。
まず、EEADRSにアドレスをセットしてRDを1にすれば、EEDATA
にデータが取り出されます。この読み出しは1サイクルで完了する
ので完了を確認する手続きは不要です。
MOVF E_ADRS,W ;データエリアのアドレス指定
MOVWF EEADR ;アドレスをEEADRへセット
BSF STATUS,RP0 ;PAGE1へ切替え
BSF EECON1,RD ;読み出し開始
BCF STATUS,RP0 ;PAGE0に戻る
MOVF EEDATA,W ;Wレジスタにデータ取り出し
【EEPROMへの書込み方】
EEPROMへの書込み方法は少し面倒な手続きが必要です。
しかも、書込みに要する時間は10msecと長く、しかも電源電圧や
チップにより差があります。従って書込みが完了したか確認をする
必要があります。
この手順は下記の様になります。
特に書込みのシーケンス(下記赤字の部分)は特別に順序が決
まっており、この通りの手順にする必要があります。
BCF STATUS,RP0 ;Set to page 0
MOVF E_ADRS,W ;データエリアのアドレス指定
MOVWF EEADR ;Address set
MOVF E_DATA,W ;書き込むデータセット
MOVWF EEDATA ;Data set
BSF STATUS,RP0 ;Set to Page 1
BSF EECON1,WREN ;Set WR Enable
MOVLW 55H ;Write Sequence
MOVWF EECON2 ;Start write
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR ;Go write
WR_LP ;書き込み確認待ちループ
BTFSC EECON1,WR ;Check Write end
GOTO WR_LP
BCF STATUS,RP0 ;Return to page 0