nv_storage.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "app/nv_storage.h"
  2. #include "bsp/fmc_flash.h"
  3. #include "libs/crc16.h"
  4. static void mc_config_default(void);
  5. static mc_config_t g_config;
  6. void config_set_hall_offset(s16 offset) {
  7. g_config.hall_offset = offset;
  8. }
  9. mc_config_t *mc_config_get(void) {
  10. return &g_config;
  11. }
  12. void store_config(void) {
  13. u16 crc = crc16_get((u8 *)&g_config, sizeof(g_config) - 2);
  14. g_config.crc16 = crc;
  15. fmc_write_data(0, (u8 *)&g_config, sizeof(g_config));
  16. fmc_write_data(1, (u8 *)&g_config, sizeof(g_config));
  17. }
  18. void restore_config(void) {
  19. fmc_read_data(0, (u8 *)&g_config, sizeof(g_config));
  20. u16 crc0 = crc16_get((u8 *)&g_config, sizeof(g_config) - 2);
  21. if (crc0 != g_config.crc16) {
  22. fmc_read_data(1, (u8 *)&g_config, sizeof(g_config));
  23. crc0 = crc16_get((u8 *)&g_config, sizeof(g_config) - 2);
  24. if (crc0 != g_config.crc16) {
  25. mc_config_default();
  26. return;
  27. }
  28. fmc_write_data(0, (u8 *)&g_config, sizeof(g_config));
  29. }else {
  30. fmc_write_data(1, (u8 *)&g_config, sizeof(g_config));
  31. }
  32. }
  33. static void mc_config_default(void) {
  34. g_config.hall_offset = 0;
  35. for (int i = 0; i < 3; i++) {
  36. g_config.phase_op[i].op_i_k = 1;
  37. g_config.phase_op[i].op_i_offset = 0;;
  38. }
  39. }