SPIMemory не всегда правильно пишет
Я использую WinBond 25Q128FVIQ (Flash 128 Мбит, 3,3 В) в сочетании с библиотекой Marzogh SpiMemory на моем Arduino. Нано (также 3,3 В).
После использования примера по умолчанию я обнаружил, что прочитанное не всегда полностью соответствует тому, что я написал. Поэтому я создал несколько альтернативный пример записи 16 байтов:
#include<SPIMemory.h>
uint32_t address;
#define BAUD_RATE 115200
#define RANDPIN A0
//SPIFlash flash(SS1, &SPI1); //Используйте этот конструктор при использовании шины SPI, отличной от SPI по умолчанию. Работает только с микросхемами с более чем одной аппаратной шиной SPI.
SPIFlash flash;
bool readSerialStr(String &inputStr);
void setup() {
Serial.begin(BAUD_RATE);
#if defined (ARDUINO_SAMD_ZERO) || (__AVR_ATmega32U4__)
while (!Serial) ; // Подождите, пока откроется последовательный монитор
#endif
flash.begin();
Serial.println(F("Flash Test"));
Serial.print(F("Capacity: "));
Serial.println(flash.getCapacity());
char writeBuffer[16] = "0123456789ABCDEF";
char readBuffer[17];
for (int n = 0; n < 5; n++)
{
memset(readBuffer, 17, 0);
randomSeed(analogRead(RANDPIN));
address = random(0, flash.getCapacity() - 16);
bool err = flash.writeAnything(address, writeBuffer, true);
delay(50);
Serial.print(F("Write: "));
Serial.println(err);
for (int m = 0; m < 10; m++)
{
if (flash.readAnything(address, readBuffer, true))
{
Serial.print(m);
Serial.print(F(", read: "));
Serial.print(readBuffer);
Serial.print(F(", from address: "));
Serial.println(address);
}
delay(50);
}
}
}
void loop() {
}
//Читает строку из Serial
bool readSerialStr(String &inputStr) {
if (!Serial)
Serial.begin(115200);
while (Serial.available()) {
inputStr = Serial.readStringUntil('\n');
Serial.println(inputStr);
return true;
}
return false;
}
Краткое объяснение: 5 раз я пишу строку (шестнадцатеричные числа) и 5 раз читаю это. Результат: (один пример, каждый раз разный):
Flash Test
Capacity: 8388608
Write: 1
0, read: 0123456789ABCDEF, from address: 6252204
1, read: 0123456789ABCDEF, from address: 6252204
2, read: 0123456789ABCDEF, from address: 6252204
3, read: 0123456789ABCDEF, from address: 6252204
4, read: 0123456789ABCDEF, from address: 6252204
5, read: 0123456789ABCDEF, from address: 6252204
6, read: 0123456789ABCDEF, from address: 6252204
7, read: 0123456789ABCDEF, from address: 6252204
8, read: 0123456789ABCDEF, from address: 6252204
9, read: 0123456789ABCDEF, from address: 6252204
Write: 1
0, read: 0123456789ABCDEF, from address: 5680766
1, read: 0123456789ABCDEF, from address: 5680766
2, read: 0123456789ABCDEF, from address: 5680766
3, read: 0123456789ABCDEF, from address: 5680766
4, read: 0123456789ABCDEF, from address: 5680766
5, read: 0123456789ABCDEF, from address: 5680766
6, read: 0123456789ABCDEF, from address: 5680766
7, read: 0123456789ABCDEF, from address: 5680766
8, read: 0123456789ABCDEF, from address: 5680766
9, read: 0123456789ABCDEF, from address: 5680766
Write: 0
0, read: , from address: 5277398
1, read: , from address: 5277398
2, read: , from address: 5277398
3, read: , from address: 5277398
4, read: , from address: 5277398
5, read: , from address: 5277398
6, read: , from address: 5277398
7, read: , from address: 5277398
8, read: , from address: 5277398
9, read: , from address: 5277398
Write: 0
0, read: , from address: 4941258
1, read: , from address: 4941258
2, read: , from address: 4941258
3, read: , from address: 4941258
4, read: , from address: 4941258
5, read: , from address: 4941258
6, read: , from address: 4941258
7, read: , from address: 4941258
8, read: , from address: 4941258
9, read: , from address: 4941258
Write: 0
0, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
1, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
2, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
3, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
4, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
5, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
6, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
7, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
8, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
9, read: ⸮⸮⸮⸮⸮l⸮څ⸮w⸮r⸮0123456789ABCDEF, from address: 4689153
Вывод: похоже, проблема заключается в записи, поскольку чтение, следовательно, возвращает одно и то же значение (либо мусор, либо правильную строку).
Что я не так?
На самом деле, я даже не хочу задержку в 50 мс (и когда я ее убираю, результат тот же).
@Michel Keijzers, 👍0
1 ответ
Лучший ответ:
Я совершил глупую ошибку; Я случайно удалил следующую строку в конце приложения, которая отвечает за стирание сектора. Если это опущено, то в следующий раз действия записи завершатся ошибкой (или иногда ошибкой):
flash.eraseSector(address);
- Нужна помощь с библиотекой U8GLIB
- Использование библиотеки емкостных датчиков с мультиплексором 74HC4067
- Arduino IRremote перестает работать
- Проблема с памятью Arduino со старыми чипами дисплея HP HDSP-2000
- Как сгенерировать файлы .a и .so для добавления в проект arduino
- Проблема с Arduino Nano Every и радиопередачей с использованием RH_RF69.h
- Ошибка компиляции для Arduino Nano 33 BLE с библиотекой LiquidCrystal
- Помогите исправить эту ошибку: expected unqualified-id before 'if'|Arduino