- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello, Kenshow-san
Confirm to work this KBA.
Thanks,
Jenna
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Jenna-san,
Japanese translation was over.
Please check below.
Original KBA:
E2PROM - Usage Notes – KBA182882
Thanks.
==============================
タイトル: E2PROM-使用上の注意 – KBA182882
バージョン:**
質問:
E2PROMユーザーモジュールを使用する際に覚えておくべき重要な要素は何ですか?
回答:
E2PROMユーザーモジュールは、フラッシュプログラムメモリでE2PROMをエミュレートするための非常に便利なユーザーモジュールです。E2PROMユーザーモジュールを使用する際に覚えておくべきいくつかの重要なポイントがあります。
ユーザーモジュールパラメータ:
開始ブロック:これは、E2PROMが開始するフラッシュブロック番号を指定します。E2PROMは常にフラッシュの最後のブロックに配置してください。たとえば、32Kデバイスでは、256バイト(4ブロック)のE2PROMをブロック508〜511に配置する必要があります。したがって、最初のブロックは508にする必要があります。これにより、コードメモリに最大限のスペースを確保し、コードメモリとE2PROMの衝突を防ぐことができます。
- flashsecurity.txtファイルを変更し、フラッシュブロックの保護レベルを「U」または「R」に設定することを忘れないでください
w w w w w w w w w w w w w w w w ; ベースアドレス7800
w w w w w w w w w w w w u u u u ; ベースアドレス7C00
; End 32K parts
長さ:このパラメータは、E2PROMのサイズをバイト単位で設定します。上記の例では、長さパラメータは256になります。
E2PROM書き込み機能:
E2PROMにデータを書き込むには、E2PROM_bE2Write関数を使用します。関数のプロトタイプは
char E2PROM_bE2Write(WORD wAddr, BYTE *pbData, WORD wByteCount, char Temperature);
wAddr:これは、データを書き込むE2PROM内の場所です。よくある間違いは、フラッシュの場所の物理アドレスを入力することです。値は、フラッシュではなく、E2PROM内の場所を基準にする必要があります。上記の例では、E2PROMの最初の場所にデータを書き込むには、wAddrの値を0x7F00ではなく0x0000にする必要があります。
* pbData:これは、E2PROMに書き込むデータを保持するバッファへのポインタです。データがcharバッファにない場合は、タイプキャストを使用します。たとえば、構造体MyStructを作成するには、(char *)&MyStructへのポインタをタイプキャストします。
wByteCount:これはE2PROMに書き込まれるバイト数です。
Temperature:温度パラメータは、フラッシュ書き込みパルス幅を計算するためにE2PROMAPIによって使用されます。高温では、フラッシュはより小さなパルス幅で書き込む必要があり、より低い温度では、より長いパルス幅で書き込む必要があります。フラッシュが正しいパルス幅で書き込まれる場合、フラッシュは最大耐久性と書き込みサイクルを満たします。デバイスが0〜50度の温度範囲内で動作する場合は、温度として25の値を渡しても問題ありません。ただし、全温度範囲で動作させるには、FlashTempユーザーモジュールを使用して、正しいダイ温度を渡します。これを行わないと、データの保持またはフラッシュの耐久性が損なわれます。通過した温度値が動作温度より低い場合、フラッシュは必要以上に長いパルス幅で書き込まれます。これにより、フラッシュの耐久性が低下します。一方、通過した温度値が動作温度より高い場合、フラッシュは必要以上に狭いパルス幅で書き込まれます。これは耐久性には影響しませんが、データの保持期間は保証された10年未満になります。
bE2Write関数は、書き込み操作のステータスを返します。0x00の戻り値は、書き込みが成功したことを意味します。-1は書き込みエラーを意味します。これは、フラッシュが書き込み保護されていることが原因である可能性があります。-2はスタックオーバーフローを意味します。プログラムの戻り値を常にチェックして、書き込みが成功したことを確認してください。
フルブロック書き込みとパーシャル書き込み
E2PROMの書き込みは、常に64バイトのブロックで行われます。64バイト未満のデータを書き込む場合、それは部分書き込みと呼ばれます。フラッシュ書き込みAPIは、最初にフラッシュブロックからすべての64バイトをRAMに読み取り、目的のバイトを変更して、64バイトのデータをフラッシュに書き戻します。これにより、103バイトのスタックスペースを必要とする重いRAMオーバーヘッドが発生しますが、完全なブロック書き込みには32バイトのスタックしか必要ありません。RAMページが1つしかないデバイスでは、グローバル変数とスタックが256バイトを共有します。グローバルのRAM使用率が高い場合、部分的な書き込みの実行中にスタックオーバーフローエラーが発生する可能性があります。このような状況では、64バイトの書き込みを実行することを常にお勧めします。10バイトのデータを書き込んでいる場合でも、ByteCountを64に設定します。最初の10バイトが実際のデータになり、その後に後続のRAMロケーションからのデータが続きます。
データを使用したE2PROMの初期化:
E2PROMを使用して、キャリブレーションデータまたはその他のシステム関連データを保存できます。この場合、デバイスのプログラム中にE2PROMに初期値をロードします。これを実現するには、次の方法を使用します。
Cの場合:#pragmaabs_addressディレクティブを使用します。たとえば、E2PROMが32Kデバイスの最後のフラッシュブロックに配置されていて、最初の10バイトを何らかの値で初期化する場合は、次のように入力します。
#pragma abs_address 0x7FC0
const char InitialValues[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};
#pragma end_abs_address
アセンブリの場合:
area eeprom(rom, abs)
org 0x7FC0
db 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09
構造体の保存と取得
キャリブレーション構造体がE2PROMに保存、読み取り、書き込みされる実際のE2PROMの使用法を見てみましょう。
構造体のtypedefを作成します。
ypedef struct CAL_STRUCT
{
int Offset;
float Scale;
}CAL_STRUCT;
キャリブレーション値を保存するためのRAM変数
CAL_STRUCT CalValuesRam;
E2PROMを初期値で初期化します。
#pragma abs_address 0x7FC0
const CAL_STRUCT CalValuesEeprom = {
0x0023, //オフセットの初期値
- 2.5456 //スケールの初期値
};
E2PROMからRAMに値を読み取るには、E2PROM_Read関数のいずれかを使用できます。
E2PROM_E2Read(0x0000, char* &CalValuesRam, sizeof(CalValuesRam));
または:
CalValuesRam = CalValuesEeprom;
RAMからE2PROMに値を書き込むには
E2PROM_bE2Write(0x0000,(char*)&CalValuesRam, 64, 25);
==============================
16-Nov-2020