PICのEEPROMの構造

【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



   次のページへ        目次ページへ