I'm encountering an issue with my Arduino setup where I successfully read SSID and password from a QSPI Flash memory upon power-up, and then use this information to connect to WiFi using WiFi.begin(). However, after reading the data, when the SetUpWiFi method starts, I receive the following error message in the serial monitor:
"Failed to mount the filesystem containing the WiFi firmware.
Usually that means that the WiFi firmware has not been installed yet or was overwritten with another firmware."
This is my code:
void storeAndReadCred(){
// Deinizializzazione del dispositivo
uint8_t myCred[] = {69, 77, 95, 71, 85, 69, 83, 84, 32, 101, 109, 95, 103, 117, 101, 115, 116};
bd_size_t program_size = bd.get_program_size();
size_t buffer_size = 17;
writeBlockDevice(myCred,buffer_size,0);
uint8_t* buffer = new uint8_t[buffer_size];
readBlockDevice(buffer,buffer_size,0);
printStoredData(reinterpret_cast<char*>(buffer), buffer_size);
bd.deinit();
delete[] buffer;
}
void writeBlockDevice(uint8_t* data, size_t data_size, size_t offset) {
bd_size_t erase_size = bd.get_erase_size();
size_t buffer_size =data_size + bd.get_program_size() - 1;
buffer_size = buffer_size - (buffer_size % bd.get_program_size());
uint8_t* buffer = new uint8_t[buffer_size];
memset(buffer, 0, buffer_size);
memcpy(buffer, data, data_size);
for(int i=0; i<16; i++){
Serial.print(buffer[i]);
Serial.print(" ");
}
Serial.println("---");
int err=bd.erase(0,erase_size);
Serial.println(err);
Serial.print("bd.program(buffer, ");
Serial.print(", ");
Serial.print(buffer_size);
Serial.println(")");
err = bd.program(buffer, 0, buffer_size);
Serial.print("bd.program -> ");
if (err == 0){
Serial.println("Scrittura eseguita con successo");
}
delete[] buffer;
}
void readBlockDevice(uint8_t* buffer, size_t buffer_size, size_t offset) {
int err = bd.read(buffer, offset, buffer_size);
Serial.print("bd.read -> ");
if(err==0){
Serial.println("lettura esguita con successo");
}
for (int i=0;i<buffer_size;i++){
Serial.print(buffer[i]);
Serial.print(", ");
}
//non so per quale motivo ma ogni volta scrive il penultimo carattere errato al posto di s scrive w
Serial.println(" ");
}
void printStoredData(const char* buffer, size_t buffer_size) {
Serial.println("--- Stored data ---");
for(int i=0; i<buffer_size; i++){
Serial.print(buffer[i]);
}
Serial.println();
for(int i=0; i<buffer_size; i++){
Serial.print(buffer[i], HEX);
Serial.print(", ");
}
for(int i=0; i<8; i++){
ssid[i]=buffer[i];
}
for(int i=0; i<8; i++){
pass[i] = buffer[buffer_size - 8 + i ];
}
Serial.println("\n---");
Serial.print("Ssid:");
Serial.println(ssid);
Serial.print("Password:");
Serial.println(pass);
SetUpWiFi();
}
I have already tried to load WiFiFirmwareUpdater from the STM32H747_System library, but without success. Additionally, I attempted to use WiFiFirmwareUpdate from the GigaWifiSolver library, as suggested in another thread, but it also did not work.
Could anyone help me figure out how to successfully integrate QSPI Flash memory and WiFi together?
If you need more information, please let me know.