注:私はこの問題STM32のFlash自体を感じます。
STM32のリモートアップグレード最近、およびステータス情報を更新するレコードの理由もなくきれいに常にある、フラッシュに保存
最終テストは、STM32のFlash消去動作は意志必ずしも本当の明確ではないました
テストコードは、下地層は、兄弟原子、注意です:いいえ問題基礎となるプログラム。
FLASH_DATA_ADDRアドレス0x800f802
U16 ReadDat [10] = {10000,0x3031,0x3032,0x3033,0x3034,0x3035,0x3036,0x3037,0x3038,0x3038}。
U16 ReadDatata = 0。
printf(" 0000000000000000000000000の\ r \ n " ); Delay_ms(1000年); // IAPSetUpdateVersionServer( "22,222,222,222,222"); // ストアドライブバージョン STMFLASH_Write(+ FLASH_DATA_ADDR 6。 、&ReadDat [ 0 ]、1); // データ書き込み Delay_ms(1000 )。 printf(" 1111111111111111111111111111111111の\ r \ n " ); delay_ms(1000年); STMFLASH_Write(FLASH_DATA_ADDR、&ReadDatata、1。); //データの書き込み Delay_ms(1000 ); printf(" ReadDatata%= D \ R&LT \ N- "、ReadDatata); // リードデータを出力 IF(ReadDatataの== 65535)ReadDatata = 0 。 delay_ms(1000年); printf(" 222222222222222222222222の\ r \ n " ); delay_ms(1000年); STMFLASH_Write(FLASH_DATA_ADDR + 2、&ReadDatata、1。); // データ書き込み Delay_ms(1000 )。 printf(" 333333333333333333333の\ r \ n " ); delay_ms(1000年); ReadDatata = 1 。 STMFLASH_Write(FLASH_DATA_ADDR、&ReadDatata、1。); // 書き込みデータ ながら、(1。);
テストを発見し、消去動作の後、データは位置であることが判明し0xbfの
4周りのすべてを消去、操作は問題ありません!!!!!!
しかし、消去、それ後........
だから、書き込みデータはエラーになるとき
STM32のFlashの説明はバグを持っています
これはバグが発生し...ちょっとモンゴル、
この問題に対処するために、私はいくつかの変更を行いました
それが消去されているかどうかを判断するために、再度消去した後、まず、
第二に、アドレスデータは、各ページの先頭から10番目のバイトに保存されています
テストされている現在の方法は、一度10S更新手順を切り替え、すべてのオペレーションフラッシュの多くになりますたびに、私はそれが1日に実行持って、データエラーの確率を見てください。
注:実際には、最善の方法は、A、B潔問題あれば確実に、好ましくは、初期化データの領域に配置するために、前後のデータを格納するための2つの領域A、B、2つの領域に分割されています!
再取得したデータ。