Alex_Golubev 0 17 января, 2022 Опубликовано 17 января, 2022 (изменено) · Жалоба Попытался реализовать расчет контрольной суммы с помощью аппаратного CRC32 флешь памяти. Скрытый текст /* crc Flash */ while(FLASH->SR1 & FLASH_SR_QW); if(READ_BIT(FLASH->CR1, FLASH_CR_LOCK) != 0U) { WRITE_REG(FLASH->KEYR1, FLASH_KEY1); WRITE_REG(FLASH->KEYR1, FLASH_KEY2); } while(READ_BIT(FLASH->CR1, FLASH_CR_LOCK)); SET_BIT(FLASH->CR1, FLASH_CR_CRC_EN); FLASH->CCR1 = 0xFEF0000; // сброс флагов записи FLASH->CRCCR1 |= FLASH_CRCCR_CRC_BURST_1 | FLASH_CRCCR_CRC_BURST_0 | FLASH_CRCCR_CLEAN_CRC | FLASH_CRCCR_CLEAN_SECT; FLASH->CRCSADD1 = 0; FLASH->CRCEADD1 = 0x7FFC; FLASH->CRCCR1 |= FLASH_CRCCR_START_CRC; while(!(FLASH->SR1 & FLASH_SR_CRCEND)); SET_BIT(FLASH->CR1, FLASH_CR_LOCK); CRC32 = FLASH->CRCDATA; в итоге получаю неверную контрольную сумму. Изменено 17 января, 2022 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 17 января, 2022 Опубликовано 17 января, 2022 · Жалоба 20 minutes ago, Alex_Golubev said: в итоге получаю неверную контрольную сумму. Остальным остается только догадываться о каком камне идет речь, вангую некий STM32 .... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 17 января, 2022 Опубликовано 17 января, 2022 · Жалоба 1 hour ago, Alex_Golubev said: в итоге получаю неверную контрольную сумму. Как вы определили, что она неверная ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 17 января, 2022 Опубликовано 17 января, 2022 · Жалоба 3 часа назад, dimka76 сказал: Как вы определили, что она неверная ? Телепатически предположу, что не совпадает с результатом подсчета утилиткой из интернета. А все потому, что она считает, что все пропущенные адреса содержат 0, в то время как в реальности там остается 0xFF от стертой флеши. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 59 17 января, 2022 Опубликовано 17 января, 2022 · Жалоба 12 minutes ago, Сергей Борщ said: утилиткой из интернета Не хватает телепатии угадать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 18 января, 2022 Опубликовано 18 января, 2022 (изменено) · Жалоба 13 часов назад, dimka76 сказал: Как вы определили, что она неверная ? Проверил следующем образом. В даташите указано что полином аппаратного CRC 0x4C11DB7. Взял функцию которая считает CRC: Скрытый текст #define BUFFER_SIZE (0x8000 - 4)/4 __IO uint32_t uwCRCValue = 0; __IO uint32_t myCRCValue1 = 0xFFFFFFFF; const uint32_t *myDataBuffer; uint32_t Crc32(uint32_t Crc, uint32_t Data) { uint8_t index; Crc = Crc ^ Data; for(index=0; index<32; index++) { if (Crc & 0x80000000) Crc = (Crc << 1) ^ 0x04C11DB7; // Polynomial used in STM32 else Crc = (Crc << 1); } return(Crc); } в main: while (myDataBufferCount--) { myCRCValue1 = Crc32(myCRCValue1, *myDataBuffer++); } значения расчетных CRC не совпали. Во как: Скрытый текст Invalid Flash memory CRC Description The CRC result might be corrupted when FLASH CRC end address register for bank 1/2 (FLASH_CRCEADD1/2R) targets last address in sector 7. Workaround Do not use the Flash memory CRC calculation feature. И че делать (. Изменено 18 января, 2022 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 18 января, 2022 Опубликовано 18 января, 2022 · Жалоба 4 hours ago, Alex_Golubev said: И че делать (. 1. Считайте на до последнего адреса сектора 7, а до предпоследнего. 2. В STM32 есть отдельный модуль вычисления CRC, попробуйте им подсчитать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 18 января, 2022 Опубликовано 18 января, 2022 · Жалоба Отдельный модуль CRC заработал. Нужно разобраться почему не работает flash CRC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 18 января, 2022 Опубликовано 18 января, 2022 · Жалоба 5 часов назад, Alex_Golubev сказал: И че делать (. Я не знаю, что там за модуль CRC, но если он позводять посчитать ЦКС для одного слова - записать в это слово 0, посчитать, сравнить. Если не совпадают - смотреть, может там инверсия входа или выхода применяется или начальное значение другое используется. Если на одном слове совпадает - посчитать на двух обнуленных словах, 16-ти, секторе. В общем искать закономерность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dead_Morose 0 19 января, 2022 Опубликовано 19 января, 2022 · Жалоба Не знаю как для STM32H743, но для STM32F1-4 надо реверсировать биты в 4-битном слове(uint32), что бы получить стандартную CRC32 если используется аппаратный CRC модуль. Это делается одной asm соммандой rbit. uint32_t reverse_32(uint32_t data) { uint32_t result=0; asm volatile ("rbit %0, %1" : "=r" (result) : "r" (data) ); return(result); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 21 января, 2022 Опубликовано 21 января, 2022 (изменено) · Жалоба Посчитал файл размерность 512 байт все данные FF. То что посчитала CRC flash: 0xbde0ce8c Не нашел закономерности расчета. Если рассчитать CRC для 4 байт FF FF FF FF То получим 0xb02cc19b Изменено 21 января, 2022 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 239 21 января, 2022 Опубликовано 21 января, 2022 · Жалоба 3 часа назад, Alex_Golubev сказал: Не нашел закономерности расчета. Открываем: http://www.zorc.breitbandkatze.de/crc.html или: https://crccalc.com/ вводим туда данные, считаем, сравниваем со своими результатами, думаем, меняем разные опции расчёта CRC, опять думаем, ... и так много раз, до результата. В результате - находим необходимую комбинацию опций, при которой имеется совпадение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecomp42 0 30 января, 2022 Опубликовано 30 января, 2022 (изменено) · Жалоба Про инициализацию начального значения CRC не забыли? Изменено 30 января, 2022 пользователем ecomp42 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться