Reputation: 31
I write a Arduino program in WeMos D1 board and try to write and read the data to SPIFFS flash memory. I can write to flash but i can not read the data from Flash. Below is the write method program:
void writeToFlash(char ssid[], char pwd[]) {
const uint32_t addrstart = 0x3FA000; //定義開始的flash記憶體位址
const uint32_t addrend = 0x3FB000; //定義結束的flash記憶體位址
char ssidbuff[ sizeof(ssid) ];
char pwdbuff[ sizeof(pwd) ];
//ERASE 必須先抹除記憶體,addrstart是4169728除以2的12次方得出第1018個磁區位置,1019是EEPROM的磁區位置
if ( !ESP.flashEraseSector( addrstart >> 12 ) ) {
Serial.println( "\n\nErase error\n");
return;
} else {
Serial.println( "\n\nErase OK\n----------------");
}
// WRITE
uint32_t flash_address;
int i = 0;
int j = 1;
//處理SSID
flash_address = addrstart + i * 64;
if ( !ESP.flashWrite( flash_address, (uint32_t*)ssid, sizeof(ssid) - 1 ) ) {
Serial.printf( "%2d: [error] write addr: %p\n", i, flash_address );
} else Serial.printf( "%2d: addr: %p write [%s] OK\n", i, flash_address, ssid );
//將buff指向的記憶體設置為0
memset( ssidbuff, '\0', sizeof( ssidbuff ) );
if ( !ESP.flashRead( flash_address, (uint32_t*)ssidbuff, sizeof(ssid) - 1 ) ) {
printf( "%2d: [error] read addr: %p\n", i, flash_address );
} else Serial.printf( "%2d: addr: %p read [%s] OK\n", i, flash_address, ssidbuff );
if ( memcmp( ssid, ssidbuff, sizeof( ssidbuff ) ) != 0 ) {
printf( "%2d: addr: %p, In != Out\n", i, flash_address );
} else Serial.printf( "%2d: addr: %p compare OK\n", i, flash_address );
Serial.print("讀取記憶體的值: ");
Serial.println(ssidbuff);
below is the Serial port message:
Erase OK
----------------
0: addr: 0x3fa000 write [Raden-External] OK
0: [error] read addr: 0x3fa000
0: addr: 0x3fa000, In != Out
讀取記憶體的值:
1: addr: 0x3fa040 write [+23277176+] OK
1: [error] read addr: 0x3fa040
1: addr: 0x3fa040, In != Out
讀取記憶體的值:
I have no idea why i can not read successfully? Could anyone can help?
Upvotes: 0
Views: 146