|
|
@@ -10,6 +10,7 @@ static foc_params_t foc_params;
|
|
|
static mc_gear_config_t gear_config;
|
|
|
static mc_limit_t limiter;
|
|
|
static int _write_position = 0;
|
|
|
+#define NV_MAGIC 0x5AA5
|
|
|
|
|
|
motor_params_t *nv_get_motor_params(void) {
|
|
|
return &m_params;
|
|
|
@@ -213,11 +214,37 @@ void nv_read_motor_params(void) {
|
|
|
}
|
|
|
|
|
|
void nv_save_limit_config(void) {
|
|
|
-
|
|
|
+ u16 crc = crc16_get((u8 *)&limiter, sizeof(limiter) - 2);
|
|
|
+ limiter.magic = NV_MAGIC;
|
|
|
+ limiter.crc16 = crc;
|
|
|
+ fmc_write_data(limiter_cfg_idx_0, (u8 *)&limiter, sizeof(limiter));
|
|
|
+ fmc_write_data(limiter_cfg_idx_1, (u8 *)&limiter, sizeof(limiter));
|
|
|
}
|
|
|
|
|
|
void nv_read_limit_config(void) {
|
|
|
- nv_default_limter();
|
|
|
+ fmc_read_data(limiter_cfg_idx_0, (u8 *)&limiter, sizeof(limiter));
|
|
|
+ u16 crc16 = crc16_get((u8 *)&limiter, sizeof(limiter) - 2);
|
|
|
+ if (limiter.magic != NV_MAGIC || limiter.crc16 != crc16) {
|
|
|
+ sys_debug("lim 0 error\n");
|
|
|
+ fmc_read_data(limiter_cfg_idx_1, (u8 *)&limiter, sizeof(limiter));
|
|
|
+ crc16 = crc16_get((u8 *)&limiter, sizeof(limiter) - 2);
|
|
|
+ if (limiter.magic == NV_MAGIC && limiter.crc16 == crc16) {
|
|
|
+ fmc_write_data(limiter_cfg_idx_0, (u8 *)&limiter, sizeof(limiter));
|
|
|
+ return;
|
|
|
+ }else {
|
|
|
+ sys_debug("lim 1 error\n");
|
|
|
+ nv_default_limter();
|
|
|
+ nv_save_limit_config();
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ fmc_read_data(limiter_cfg_idx_1, (u8 *)&limiter, sizeof(limiter));
|
|
|
+ crc16 = crc16_get((u8 *)&limiter, sizeof(limiter) - 2);
|
|
|
+ if (limiter.magic != NV_MAGIC || limiter.crc16 != crc16) {
|
|
|
+ sys_debug("lim 1 error\n");
|
|
|
+ fmc_read_data(limiter_cfg_idx_0, (u8 *)&limiter, sizeof(limiter));
|
|
|
+ fmc_write_data(limiter_cfg_idx_1, (u8 *)&limiter, sizeof(limiter));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void nv_save_foc_params(void) {
|
|
|
@@ -344,7 +371,7 @@ void nv_set_throttle_vol(float min, float max) {
|
|
|
trq2dq_table_t *_trq2dq_table(int idx) {
|
|
|
trq2dq_table_t *tbl = (trq2dq_table_t *)fmc_get_addr(idx);
|
|
|
|
|
|
- if (tbl->magic != 0x5AA5) {
|
|
|
+ if (tbl->magic != NV_MAGIC) {
|
|
|
sys_error("trq tlb %d magic error, 0x%x\n", idx, tbl->magic);
|
|
|
return NULL;
|
|
|
}
|
|
|
@@ -405,7 +432,7 @@ int nv_write_trq_table_check(u8 *data, int len, int index) {
|
|
|
uint32_t size, checksum;
|
|
|
size = decode_u24(data);
|
|
|
checksum = decode_u32(data + 3);
|
|
|
- u16 magic = 0x5AA5;
|
|
|
+ u16 magic = NV_MAGIC;
|
|
|
fmc_write_trq_table_continue((u8 *)&magic, sizeof(magic));
|
|
|
fmc_write_trq_table_continue((u8 *)&checksum, sizeof(checksum));
|
|
|
fmc_write_trq_table_end();
|
|
|
@@ -481,6 +508,6 @@ void nv_storage_init(void) {
|
|
|
#endif
|
|
|
foc_params.s_maxDCVol = CONFIG_MAX_DC_VOL;
|
|
|
foc_params.s_minDCVol = CONFIG_MIN_DC_VOL;
|
|
|
- sys_debug("current band %f -- %d\n", foc_params.n_currentBand, sizeof(foc_params_t));
|
|
|
+ sys_debug("%d -- %d\n", sizeof(mc_limit_t), sizeof(foc_params_t));
|
|
|
}
|
|
|
|