Explorar el Código

高温度,欠压配置nv保存处理

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui hace 3 años
padre
commit
6c653fbebd
Se han modificado 3 ficheros con 37 adiciones y 7 borrados
  1. 1 1
      Applications/app/app.c
  2. 32 5
      Applications/app/nv_storage.c
  3. 4 1
      Applications/app/nv_storage.h

+ 1 - 1
Applications/app/app.c

@@ -107,7 +107,7 @@ static u32 _app_report_task(void *p) {
 		//sys_debug("Slow: %d - %d\n", g_meas_MCTask.intval_time, g_meas_MCTask.exec_time);
 		//sys_debug("Fast: %d - %d, err: %d-%d-%d\n", g_meas_foc.intval_time, g_meas_foc.exec_time, g_meas_foc.intval_hi_err, g_meas_foc.intval_low_err, g_meas_foc.exec_max_error_time);
 		sys_debug("FOC time err %d %d\n", g_meas_foc.intval_time_h_error, g_meas_foc.intval_time_l_error);
-		//sys_debug("acc vol %d, mos2 %d\n", get_acc_vol(), get_mos_temp2());
+		sys_debug("acc vol %d\n", get_acc_vol());
 		//sys_debug("throttle %f\n", get_throttle_float());
 		sys_debug("ADC Vref %f, %f\n", get_adc_vref(), adc_5vref_compesion());
 		//sys_debug("target current %f\n", PMSM_FOC_Get()->in.s_targetCurrent);

+ 32 - 5
Applications/app/nv_storage.c

@@ -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));
 }
 

+ 4 - 1
Applications/app/nv_storage.h

@@ -58,7 +58,7 @@ typedef struct {
 	nv_limter_t motor[3];
 	nv_limter_t mos[3];
 	nv_limter_t vbus;
-	u8    res[2048 - 40];
+	u8    res[2048 - 46];
 	u16 crc16;
 }mc_limit_t;
 
@@ -115,6 +115,9 @@ typedef struct {
 
 #define sn_idx_back       (gear_config_idx_1 + 1)
 
+#define limiter_cfg_idx_0 (sn_idx_back + 1)
+#define limiter_cfg_idx_1 (limiter_cfg_idx_0 + 1)
+
 void nv_storage_init(void);
 motor_params_t *nv_get_motor_params(void);
 foc_params_t *nv_get_foc_params(void);