データEEPROMとプログラムメモリの読み書き


【フラッシュメモリの読み書き】

PIC16F818/819では、他の最新のPICと同じように、従来のデータEEPROM
の他に、プログラムメモリ自身も読み書きができるようになっています。
この追加のため、データEEPROMの読み書きの手順で、従来の手順に追加
の設定が必要になりました。


【EECON1レジスタ】

EECON1レジスタはデータEEPROMの読み書きの際の制御レジスタですが、
この内容に一部追加があります。PIC16F81xのEECON1レジスタの内容は
下図のようになっています。
この中の最上位ビットが追加されたもので、プログラムメモリとデータEEPROM
メモリのどちらを読み書きするかを選択するビットです。
従って、まず最初にこのビットで、どちらのメモリを使うかを指定しなければ
ならなくなりました。





【データEEPROM手順例】

例えば、データEEPROMからデータを読み書きするときの手順は、下記のように
します。このように、EECON1でまずメモリの選択をする必要があります。
この手順例は、PICのデータシートに掲載されているものです。

《読み出し手順例》
 下記リストのように、まずEEPGDでデータEEPROMを選択してから読み出し
 を実行しています。




《書き込み手順》
 書きリストのように、これまでの書き込み手順を実行する直前で、EEPGDで
 データメモリを選択しています。







【プログラムメモリの読み書き】

これまでのPICに対し、プログラムメモリも、データEEPROMと同じように、
命令で読み書きできるようになっています。
このときは、アドレス指定するためのアドレスレジスタが2バイトになり
EEADRHとEEADRLの2つのレジスタで前空間をアドレス指定できるように
なっています。
そしてEECON1レジスタのEEPGDビットでプログラムメモリを選択してから
読み書きを実行します。
読み書きするデータは14ビットの幅がありますから、2つのレジスタで扱う
ことになります。これが、EEDATAとEEDATHレジスタになります。

【プログラムメモリの読み出し】

この関係を図で表すと下図のようになっています。



実際の読み出し手順は比較的簡単で、下記リストのような手順でできます。

《プログラムメモリ読み出し》





【プログラムメモリへの書き込み】

 プログラムメモリへの書き込みは、読み出しよりやや複雑です。
フラッシュメモリの特性上、一旦消去しないと上書きができません。しかも、
消去するときには一定のブロック単位でしかできないようになっています。
PIC16F81xの場合、この消去単位が、アドレスの下位5ビットが「0」で始まる
32ワード単位となっています。

 さらに書き込むときも、ブロック単位となっていて、PIC16F81xの場合には
4ワード単位のブロックとなっています。
そのため、書き込みデータは一旦ホールディングレジスタに保存され、書き込み
制御が実行された時点で、ホールディングレジスタの4ワードが同時にフラッシュ
に書き込まれます。
この関係を図で表すと下図のようになります。



 もうひとつ注意することは、書き込み完了までには、約2msecかかりますが、
この間PICはHALT状態で完全に停止した状態になるということです。

 従ってこれらの条件を満足させる書き込み手順は次のようにする必要
があります。

 ・まず32ワードのブロックをデータメモリにコピー
 ・32ワードを消去
 ・データメモリの変更部分を書き換え
 ・4ワード毎の書き込みを8回繰り返して32ワード全部を上書き


《プログラムメモリ書き込み例》
 実際の4ワードの書き込み部分のプログラム例は下記のようになります。








  目次ページに戻る