12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #include <stdint.h>
- #include "sys_hal.h"
- #include "sys_api.h"
- #include "common_config.h"
- #include "common.h"
- #include <stdio.h>
- /**
- * @brief
- */
- void SYS_ReadFromFlash(uint8_t *data, uint32_t size, uint32_t baseAddress)
- {
- for (uint32_t i = 0; i < size; i++)
- *data++ = (*(uint32_t*)baseAddress++);
- }
- /**
- * @brief
- */
- void SYS_WriteToFlash(uint8_t *data, uint32_t size, uint32_t crc)
- {
- uint32_t baseAddress = SYS_SECTOR;
- uint32_t checkCrc = 0;
- bool fAlarm = 0;
- flash_status_type status;
- uint8_t *pdata = data;
- for (uint8_t i = 0; i < 3; i++)
- {
- fAlarm = 0;
- flash_unlock();
- SYS_EraseFlashSector();
- for (uint32_t i = 0; i < size; i++) {
- if ((status = flash_byte_program(baseAddress++, *pdata++)) != FLASH_OPERATE_DONE) {
- DBG printf("FLASH_ProgramByte error: %d\r\n", status);
- break;
- }
- }
- if ((status = flash_word_program((uint32_t)SYS_CRC_ADDRESS, crc)) != FLASH_OPERATE_DONE) {
- DBG printf("FLASH_ProgramWord error: %d\r\n", status);
- }
- flash_lock();
- checkCrc = SYS_GetCRC((sys_settings_t *)SYS_SECTOR);
- // Проверяем CRC того, что было записано
- if (checkCrc == crc) {
- DBG printf("SYS write OK\r\n");
- break;
- }
- else
- fAlarm = 1; // Авария
- }
- // Произошел сбой при записи - перезагружаемся
- if (fAlarm) {
- DBG printf("Flash write error: 1%d", (uint8_t)status);;
- NVIC_SystemReset();
- }
- }
- /**
- * @brief Очистка сектора настроек
- * @retval
- */
- void SYS_EraseFlashSector(void)
- {
- flash_status_type status;
-
- if ((status = flash_sector_erase(SYS_SECTOR)) != FLASH_OPERATE_DONE) {
- printf("SYS_EraseFlashSector error: %d\r\n", status);
- }
- }
|