| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include "app/nv_storage.h"
- #include "bsp/fmc_flash.h"
- #include "libs/crc16.h"
- static motor_params_t m_params;
- static foc_params_t foc_params;
- motor_params_t *nv_get_motor_params(void) {
- return &m_params;
- }
- foc_params_t *nv_get_foc_params(void) {
- return &foc_params;
- }
- void nv_save_hall_table(s32 *hall_table) {
- memcpy((char *)m_params.hall_table, (char *)hall_table, sizeof(m_params.hall_table));
- nv_save_motor_params();
- }
- void nv_save_hall_offset(s16 offset) {
- m_params.hall_offset = offset;
- nv_save_motor_params();
- }
- void nv_save_motor_params(void) {
- u16 crc = crc16_get((u8 *)&m_params, sizeof(m_params) - 2);
- m_params.crc16 = crc;
- fmc_write_data(0, (u8 *)&m_params, sizeof(m_params));
- fmc_write_data(1, (u8 *)&m_params, sizeof(m_params));
- m_params.valid = true;
- }
- void nv_read_motor_params(void) {
- fmc_read_data(0, (u8 *)&m_params, sizeof(m_params));
- u16 crc0 = crc16_get((u8 *)&m_params, sizeof(m_params) - 2);
- if (crc0 != m_params.crc16) {
- fmc_read_data(1, (u8 *)&m_params, sizeof(m_params));
- crc0 = crc16_get((u8 *)&m_params, sizeof(m_params) - 2);
- if (crc0 != m_params.crc16) {
- m_params.valid = false;
- return;
- }
- fmc_write_data(0, (u8 *)&m_params, sizeof(m_params));
- }else {
- fmc_write_data(1, (u8 *)&m_params, sizeof(m_params));
- }
- m_params.valid = true;
- }
- void nv_save_foc_params(void) {
- u16 crc = crc16_get((u8 *)&foc_params, sizeof(foc_params) - 2);
- foc_params.crc16 = crc;
- fmc_write_data(0, (u8 *)&foc_params, sizeof(foc_params));
- fmc_write_data(1, (u8 *)&foc_params, sizeof(foc_params));
- foc_params.valid = true;
- }
- void nv_read_foc_params(void) {
- fmc_read_data(0, (u8 *)&foc_params, sizeof(foc_params));
- u16 crc0 = crc16_get((u8 *)&foc_params, sizeof(foc_params) - 2);
- if (crc0 != foc_params.crc16) {
- fmc_read_data(1, (u8 *)&foc_params, sizeof(foc_params));
- crc0 = crc16_get((u8 *)&foc_params, sizeof(foc_params) - 2);
- if (crc0 != foc_params.crc16) {
- foc_params.valid = false;
- return;
- }
- fmc_write_data(0, (u8 *)&foc_params, sizeof(foc_params));
- }else {
- fmc_write_data(1, (u8 *)&foc_params, sizeof(foc_params));
- }
- foc_params.valid = true;
- }
|