sys_hal.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include <stdint.h>
  2. #include "sys_hal.h"
  3. #include "sys_api.h"
  4. #include "common_config.h"
  5. #include "common.h"
  6. #include <stdio.h>
  7. /**
  8. * @brief
  9. */
  10. void SYS_ReadFromFlash(uint8_t *data, uint32_t size, uint32_t baseAddress)
  11. {
  12. for (uint32_t i = 0; i < size; i++)
  13. *data++ = (*(uint32_t*)baseAddress++);
  14. }
  15. /**
  16. * @brief
  17. */
  18. void SYS_WriteToFlash(uint8_t *data, uint32_t size, uint32_t crc)
  19. {
  20. uint32_t baseAddress = SYS_SECTOR;
  21. uint32_t checkCrc = 0;
  22. bool fAlarm = 0;
  23. flash_status_type status;
  24. uint8_t *pdata = data;
  25. for (uint8_t i = 0; i < 3; i++)
  26. {
  27. fAlarm = 0;
  28. flash_unlock();
  29. SYS_EraseFlashSector();
  30. for (uint32_t i = 0; i < size; i++) {
  31. if ((status = flash_byte_program(baseAddress++, *pdata++)) != FLASH_OPERATE_DONE) {
  32. DBG printf("FLASH_ProgramByte error: %d\r\n", status);
  33. break;
  34. }
  35. }
  36. if ((status = flash_word_program((uint32_t)SYS_CRC_ADDRESS, crc)) != FLASH_OPERATE_DONE) {
  37. DBG printf("FLASH_ProgramWord error: %d\r\n", status);
  38. }
  39. flash_lock();
  40. checkCrc = SYS_GetCRC((sys_settings_t *)SYS_SECTOR);
  41. // Проверяем CRC того, что было записано
  42. if (checkCrc == crc) {
  43. DBG printf("SYS write OK\r\n");
  44. break;
  45. }
  46. else
  47. fAlarm = 1; // Авария
  48. }
  49. // Произошел сбой при записи - перезагружаемся
  50. if (fAlarm) {
  51. DBG printf("Flash write error: 1%d", (uint8_t)status);;
  52. NVIC_SystemReset();
  53. }
  54. }
  55. /**
  56. * @brief Очистка сектора настроек
  57. * @retval
  58. */
  59. void SYS_EraseFlashSector(void)
  60. {
  61. flash_status_type status;
  62. if ((status = flash_sector_erase(SYS_SECTOR)) != FLASH_OPERATE_DONE) {
  63. printf("SYS_EraseFlashSector error: %d\r\n", status);
  64. }
  65. }