Итак... Я разобрался с QSPI, с работой алгоритма.
Все у меня замечательно стирается и прошивается. Но на одном и том же адресе проверки 0x200 выдает ошибку проверки.
Проверяю вот так:
Код: Выделить всё
unsigned long Verify (unsigned long adr, unsigned long sz, unsigned char *buf) {
uint32_t StartAddresse = 0x90000000;
uint32_t VerifiedData = 0;
sz*=4;
QUADSPI_MappedMode();
while (sz>VerifiedData)
{
if ( *(uint8_t*)adr++ != *((uint8_t*)buf + VerifiedData))
{
sprintf((char *)str, "ADDRESS= 0x%08X, DATA=0x%02X, MUST BE= 0x%02X, ERROR ERROR ERROR ERROR ERROR ERROR \r\n",adr-1 + VerifiedData, *(uint8_t*)(adr-1), *((uint8_t*)buf + VerifiedData));
HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000);
return (adr-1 + VerifiedData);
}
else
{
sprintf((char *)str, "ADDRESS= 0x%08X, DATA=0x%02X, MUST BE= 0x%02X, OK \r\n",adr-1 + VerifiedData, *(uint8_t*)(adr-1), *((uint8_t*)buf + VerifiedData));
HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000);
}
VerifiedData++;
}
/* Add your Code */
return (0); // Finished without Errors
}
В терминале получаю

ДАнные в этом месте действительно должны быть равны 0x00 - но почему-то IDE сравнивает с 0x49.....
Ковырял по всякому.
В частности - прошив флешку, получив сообщение об ошибке проверки, я запустил обычный проект, прочел содержимое записанного, вывел в терминал, сверил - записано все верно. Глючит проверяльщика.....
Куда копать?... Может с функцией Verify что-то не так?
А с ней явно что-то не так....
1. Размер буфера, переданный IDE, умножается на 4. По факту проверка идет по одной странице, по 256 байт - параметр sz, который IDE передает в функцию, равен 256
2. Адреса идут через один, хотя в каждом цикле идет однократное увеличение адреса (adr++).



