STM32는 플래시에 대한 몇 가지 문제

 

참고 : 나는 문제 STM32 플래시 자체를 생각합니다.

 

최근 업그레이드 STM32 리모컨은 항상 상태 정보입니다 업데이트 아무 이유없이 청소하는 레코드하는 플래시에 저장

마지막 테스트는 STM32 플래시 지우기 작업 것 반드시 실제 명확하지 발견

테스트 코드는 기본 층 형제 원자,주의하지 : 문제 기본 프로그램.

FLASH_DATA_ADDR 주소 0x800f802

U16 ReadDat [10] = {}는 10000,0x3031,0x3032,0x3033,0x3034,0x3035,0x3036,0x3037,0x3038,0x3038;
U16 ReadDatata = 0;

    
의 printf ( " 0,000,000,000,000,000,000,000,000 R \ 및 LT \ N- ' ) Delay_ms ( 1000 ); // IAPSetUpdateVersionServer ("22,222,222,222,222 "); // 저장 드라이브 버전 STMFLASH_Write (+ FLASH_DATA_ADDR 6. , ReadDat [ 0 , 1이다. ); // 데이터 기입 Delay_ms를 ( 1,000 ) 의 printf ( " R \ 1111111111111111111111111111111111 및 LT \ N- ' ) Delay_ms ( 1000 ) STMFLASH_Write (FLASH_DATA_ADDR, 및 ReadDatata, 1이다. ); // 데이터 기입 Delay_ms를 ( 1,000) 의 printf ( " ReadDatata % = D \ R & LT \ N- ' , ReadDatata) // 판독 데이터를 출력 IF (ReadDatata == 65535 ) ReadDatata = 0 ; (Delay_ms 1,000 ) 의 printf ( " R \ 222,222,222,222,222,222,222,222 및 LT \ N- " ) Delay_ms ( 1000 ) STMFLASH_Write (FLASH_DATA_ADDR + 2 , ReadDatata, 1이다. ); // 데이터 기입 Delay_ms ( 1000 ) 의 printf ( " 333,333,333,333,333,333,333 R \을 & LT \ N- ' ) Delay_ms를 (1,000 ); ReadDatata = 1 ; STMFLASH_Write (FLASH_DATA_ADDR, 및 ReadDatata, 1 ); // 写一个数据 동안 ( 1 );

 

 

테스트보세요, 지우기 작업 후, 데이터는 위치로 밝혀졌다에서 0xBF

 

 

 

 

4 주위 지우기 작업이 아무런 문제가 없다 !!!!!!

 

 

 

 

그러나 삭제 그 후 ........

 

 

 

 

그래서 기록 데이터 오류 때

   

 

STM32는 플래시의 설명 버그를 가지고있다

이것은 버그 ... 조금 몽골어 발생

 

 

이 문제를 해결하기 위해, 나는 약간 수정 한

 

첫째, 결정하기 위해 다시 한 번 삭제 한 후에는 삭제되어 있는지 여부

 

 

 

둘째, 어드레스 데이터는 각 페이지의 시작부터 열 번째 바이트에 저장

 

 

 

테스트마다 10S 업데이트 절차 전환되는 현재의 방법은, 때마다 모두, 그것은 언젠가 실행 플래시, 나는이 작업을 많이 할 데이터 오류의 확률로 볼 것이다.

 

 

 

주 : 사실, 최적의 방법은, 또한 바람직하게는 A의 경우 초기화 데이터, B 지에 문제의 영역에 배치로 안정적 위해 앞뒤로 데이터를 저장하기위한 두 개의 영역 A, B, 두 영역으로 분할하고!

데이터를 다시 검색.

 

추천

출처www.cnblogs.com/yangfengwu/p/11730033.html