ELECTRONICS |
|
PIC16F15XX EEPROMが無い!
PICマイコンとアセンブラ
PIC16F1508
High-Endurance Flashの活用
|
■PIC16F15XX EEPROMが無い! 最新F1シリーズのPICマイコンはFVRやリニアメモリー空間、リニアに周波数を可変できるなど、魅力的な機能がついております。
今回はリニアに周波数を可変する目的があり、NCOの搭載されているPIC16F1508を使用してみました。
さて、データシートを見ていくと、どうも、EEPROMが無い。
ブロック図を見てもない。
ライターの設定を見てもない。
ということで EEPROMがあるPICのデータシートを見て位置を把握しこの辺に記載されているはずと、もう一回見直しても無い。
残念ながら無いようです。
EEPROMは機器の設定や動作条件、電源を切る前の状態記憶など、色々な用途に必要です。これが使用できないと外付けシリアルフラッシュになったりしますので、コスト、サイズ、製作の手間を考えると、どうしても必要な機能なのです。
そこで、ネットで調べてみると、どうやらプログラムフラッシュの一部を使用するみたいです。 ※今後の方針のようです。
ですが、EEPROMとプログラムフラッシュでは書き換え耐性が異なります。
EEPROMで使用するデータは書き換え頻度が高いので、できれば耐性が高い方がよいのです。
■HEF (High-Endurance Flash)
通常 書き換え上限はEEPROMで10万回以上、プログラムフラッシュでは1万回程度となっております。
ですが、PIC16F15XXではブログラムフラッシュの末端128バイトはHEFと呼ばれる特殊なフラッシュになっております。
HEFはHigh-Endurance Flashを意味し、EEPROMと同等の10万回以上の書き換え耐性をもっております。
メモリ容量は今までの256バイトに対して、HEFでは128バイトになってしまいます。
でも、今まで256バイトをフルに使用したことはありませんので、これは大きな問題ではありません。
■フラッシュ 書き換えフロー
もう一つ、面倒なのはEEPROMとフラッシュの決定的な違いとなる、書き込み手順の複雑さです。
EEPROMはバイト単位に書き込み、読み出しができますが、フラッシュはブロック単位になります。
また、上書きができず、書き込む前にはブロック単位での消去が必要になります。これがフラッシュと呼ばれる由来でもあります。
よって、書き込みのフローは次のようになります。
@フラッシュからブロック単位(32バイト)でリード
PICのRAMを32バイト準備して、ここに格納します。
ARAM上で1バイトのデータ変更を行います。
B対象となるプログラムフラッシュの1プロックを消去します。
CRAMの1ブロック分をプログラムフラッシュに書き込みします。
DRAMとプログラムフラッシュ間でベリファイを実施します。
最後のベリファイは無くても動作しますが、@〜Cは必要な手続きになります。
EEPROMと比較してとても、工程のかかる処理になります。
何回も書くのは面倒なので、EEPROMのように簡単にアクセスできるようにまとめました。
C言語ではたぶん、ライブラリーがあると思いますが、アセンブラで組まれる場合このライブラリーを使用していただければ簡単になると思い紹介しました。
フリーウェアとして公開します。
報告不要、改変自由、質問不可、ご指摘はお受けします。
■使い方
書き換えはアドレスとデータをセットして、STORAGE_SAVEをCALLするだけで処理できます。リードはアドレスをWregにセットしSTORAGE_READをCALLすると、データがWregにセットされます。
アドレスは0〜127の範囲です。データは1CALL、1バイトの処理です。
PIC16F1508用に作っておりますが、アドレスを変更することで他のPICに対応できます。
・書き換え
movlw D'03'
movwf SAVE_ADDRES,F
movlw D'AA'
movwf SAVE_DATA,F
call STORAGE_WRITE ; 1バイトの書き込み
・読み出し
movlw 0x03
call STORAGE_READ ; 1バイトのリード
movwf SAVE_DATA
EEPROMエミュレートプログラム → 「こちら」
尚、EEPROMの搭載をやめた品種は次の通りです。
PIC12F1501、PIC16F14XX、PIC16F15XX、PIC16F17XX
(注意:わかる範囲です。)
参考:マイクロチップ アプリケーションノート AN1673
■その他、注意点
・フラッシュメモリに書き込むということは、1を0に変更することをいいます。
その逆はできません。
消去後、すべてのセルは1にセットされます。
データの変更が1を0にする場面であれば、消去は不要です。
例えば、03Hに0CHを上書きすると00Hになります。
・フラッシュへの書き込み、消去時はMCUの動作が完全停止します。
・MCUのRAMを2050H〜20CFHまで使用します。
このアドレス空間は移動が可能です。他の処理で使用しない方がよいでしょう
|
|
|
|
|
|