diff --git a/App/Inc/encrypt.h b/App/Inc/encrypt.h new file mode 100644 index 0000000..03d9853 --- /dev/null +++ b/App/Inc/encrypt.h @@ -0,0 +1,9 @@ +#ifndef _ENCRYPT_H_ +#define _ENCRYPT_H_ +#include "comm_types.h" +#include "stm32l4xx_hal.h" +#include "inflash.h" + +uint8_t JudgeEncrypt(); + +#endif //_ENCRYPT_H_ \ No newline at end of file diff --git a/App/Inc/frt_protocol.h b/App/Inc/frt_protocol.h index 5c54207..9de0ea6 100644 --- a/App/Inc/frt_protocol.h +++ b/App/Inc/frt_protocol.h @@ -75,6 +75,14 @@ typedef enum FRT_REGISTER_MAX_WAVE_2 = 52, /* 换能器最大波形 */ FRT_REGISTER_MAX_WAVE_3 = 53, /* 换能器最大波形 */ FRT_REGISTER_MAX_WAVE_4 = 54, /* 换能器最大波形 */ + FRT_REGISTER_ID_1 = 55, /* ID16 */ + FRT_REGISTER_ID_2 = 56, /* ID32 */ + FRT_REGISTER_ID_3 = 57, /* ID48 */ + FRT_REGISTER_ID_4 = 58, /* ID64 */ + FRT_REGISTER_ENCRYPT_1 = 59, /* 密文16 */ + FRT_REGISTER_ENCRYPT_2 = 60, /* 密文32 */ + FRT_REGISTER_ENCRYPT_3 = 61, /* 密文48 */ + FRT_REGISTER_ENCRYPT_4 = 62, /* 密文64 */ }FRT_MsgRegister; #pragma pack(push,1) diff --git a/App/Inc/inflash.h b/App/Inc/inflash.h index d4a182c..6f610a3 100644 --- a/App/Inc/inflash.h +++ b/App/Inc/inflash.h @@ -37,6 +37,7 @@ typedef struct _usr_config_info{ //鍑哄巶閰嶇疆鍙傛暟 typedef struct _factory_config_info{ u_int8_t flag_head; + u_int32_t encrypt_0; /* 鍓32浣嶅瘑鏂 */ u_int16_t transducer_cfg_1R5; /* 鎹㈣兘鍣ㄥ弬鏁 */ u_int16_t transducer_cfg_4R5; /* 鎹㈣兘鍣ㄥ弬鏁 */ u_int16_t transducer_cfg_8R0; /* 鎹㈣兘鍣ㄥ弬鏁 */ @@ -55,6 +56,7 @@ typedef struct _factory_config_info{ u_int16_t linear_point_5_x; /* 绾挎ф彃鍊肩偣5X */ u_int16_t linear_point_5_y; /* 绾挎ф彃鍊肩偣5Y */ u_int16_t linear_enable; /* 绾挎ф彃鍊间娇鑳 */ + u_int32_t encrypt_1; /* 鍚32浣嶅瘑鏂 */ u_int8_t flag_end; }factory_config_info; #pragma pack(pop) diff --git a/App/Src/encrypt.c b/App/Src/encrypt.c new file mode 100644 index 0000000..d17e146 --- /dev/null +++ b/App/Src/encrypt.c @@ -0,0 +1,51 @@ +#include "encrypt.h" + +/* TEA加密算法的加密过程 */ +void tea_encrypt(uint32_t *en, uint32_t *k) +{ + uint32_t v[2]; + v[0] = *(uint32_t*)(0x1FFF7590); + v[1] = *(uint32_t*)(0x1FFF7590 + 4); + uint32_t v0 = v[0], v1 = v[1], sum = 0, i; // 初始化v0, v1, sum + uint32_t delta = 0x9e3779b9; // 初始化delta + uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // 初始化密钥k + for (i = 0; i < 32; i++) { // 执行32轮加密 + sum += delta; + v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); + v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); + } + en[0] = v0; // 返回加密结果 + en[1] = v1; + +// term_printf("%x %x", v[0], v[1]); +} + +/* TEA加密算法的解密过程 */ +void tea_decrypt(uint32_t *v, uint32_t *k) +{ + uint32_t delta = 0x9e3779b9; // 初始化delta +// uint32_t v0 = 0x93ae5ba8, v1 = 0xc5ba4e82, sum = delta << 5, i; // 初始化v0, v1, sum + uint32_t v0 = g_stConfigInfo.encrypt_0, v1 = g_stConfigInfo.encrypt_1, sum = delta << 5, i; // 初始化v0, v1, sum + uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; // 初始化密钥k + for(i = 0; i < 32; i++) { // 执行32轮解密 + v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); + v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); + sum -= delta; + } + v[0] = v0; // 返回解密结果 + v[1] = v1; + +// term_printf("%x %x", v[0], v[1]); +} + +/* + * 判断密文是否正确 + * + */ +uint8_t JudgeEncrypt() +{ + uint32_t encryptCode[2] = {0}; + uint32_t key[] = {0x509770ff, 0x29c6b369, 0x4da2c125, 0x7d729015}; //密钥可能要打散位置,不在这里定死 + tea_decrypt(encryptCode, key); + return ((*(uint32_t*)(0x1FFF7590)) == encryptCode[0] && (*(uint32_t*)(0x1FFF7590 + 4)) == encryptCode[1]); +} \ No newline at end of file diff --git a/App/Src/frt_protocol.c b/App/Src/frt_protocol.c index 0909453..6775fa3 100644 --- a/App/Src/frt_protocol.c +++ b/App/Src/frt_protocol.c @@ -71,6 +71,11 @@ static u_int16_t FRT_ReadReg_MaxWave_1(void *pMsg); static u_int16_t FRT_ReadReg_MaxWave_2(void *pMsg); static u_int16_t FRT_ReadReg_MaxWave_3(void *pMsg); static u_int16_t FRT_ReadReg_MaxWave_4(void *pMsg); +/* 璇籌D */ +static u_int16_t FRT_ReadReg_ID_1(void *pMsg); +static u_int16_t FRT_ReadReg_ID_2(void *pMsg); +static u_int16_t FRT_ReadReg_ID_3(void *pMsg); +static u_int16_t FRT_ReadReg_ID_4(void *pMsg); /* 鍐欓厤缃 */ static u_int16_t FRT_WriteRegTransducerCFG1R5(void *pMsg); static u_int16_t FRT_WriteRegTransducerCFG4R5(void *pMsg); @@ -86,6 +91,12 @@ static u_int16_t FRT_WriteRegPoint_4Y(void *pMsg); static u_int16_t FRT_WriteRegPoint_5Y(void *pMsg); static u_int16_t FRT_WriteRegLinearEnable(void *pMsg); +/* 鍐欏瘑鏂 */ +static u_int16_t FRT_WriteRegEncrypt1(void *pMsg); +static u_int16_t FRT_WriteRegEncrypt2(void *pMsg); +static u_int16_t FRT_WriteRegEncrypt3(void *pMsg); +static u_int16_t FRT_WriteRegEncrypt4(void *pMsg); + static void pdebug_mcs_info(); /* 鍔熻兘鐮佸鐞嗚〃 */ @@ -145,6 +156,10 @@ FRT_RegProcTable_s g_RegTbl[] = { FRT_REGISTER_MAX_WAVE_2, FRT_ReadReg_MaxWave_2 }, /* 娉㈠舰鏈澶у箙鍊 */ { FRT_REGISTER_MAX_WAVE_3, FRT_ReadReg_MaxWave_3 }, /* 娉㈠舰鏈澶у箙鍊 */ { FRT_REGISTER_MAX_WAVE_4, FRT_ReadReg_MaxWave_4 }, /* 娉㈠舰鏈澶у箙鍊 */ + { FRT_REGISTER_ID_1, FRT_ReadReg_ID_1 }, /* ID */ + { FRT_REGISTER_ID_2, FRT_ReadReg_ID_2 }, /* ID */ + { FRT_REGISTER_ID_3, FRT_ReadReg_ID_3 }, /* ID */ + { FRT_REGISTER_ID_4, FRT_ReadReg_ID_4 }, /* ID */ }; /* 鍐欏瘎瀛樺櫒澶勭悊琛 */ @@ -169,6 +184,10 @@ FRT_RegProcTable_s g_Write_RegTbl[] = { FRT_REGISTER_LINEAR_POINT_Y_4, FRT_WriteRegPoint_4Y }, /* 绾挎ф彃鍊兼牎鍑嗙偣4 */ { FRT_REGISTER_LINEAR_POINT_Y_5, FRT_WriteRegPoint_5Y }, /* 绾挎ф彃鍊兼牎鍑嗙偣5 */ { FRT_REGISTER_LINEAR_ENABLE, FRT_WriteRegLinearEnable }, /* 绾挎ф彃鍊间娇鑳 */ + { FRT_REGISTER_ENCRYPT_1, FRT_WriteRegEncrypt1 }, /* 瀵嗘枃1 */ + { FRT_REGISTER_ENCRYPT_2, FRT_WriteRegEncrypt2 }, /* 瀵嗘枃2 */ + { FRT_REGISTER_ENCRYPT_3, FRT_WriteRegEncrypt3 }, /* 瀵嗘枃3 */ + { FRT_REGISTER_ENCRYPT_4, FRT_WriteRegEncrypt4 }, /* 瀵嗘枃4 */ }; /** @@ -864,6 +883,50 @@ static u_int16_t FRT_ReadReg_MaxWave_4(void *pMsg) return FRT_swap_endian_16(value); } +/** + * @brief ID16 + * @param + * @retval + */ +static u_int16_t FRT_ReadReg_ID_1(void *pMsg) +{ + u_int16_t value = ((*(uint32_t*)(0x1FFF7590)) >> 16) & 0x0000FFFF; + return FRT_swap_endian_16(value); +} + +/** + * @brief ID32 + * @param + * @retval + */ +static u_int16_t FRT_ReadReg_ID_2(void *pMsg) +{ + u_int16_t value = (*(uint32_t*)(0x1FFF7590)) & 0x0000FFFF; + return FRT_swap_endian_16(value); +} + +/** + * @brief ID48 + * @param + * @retval + */ +static u_int16_t FRT_ReadReg_ID_3(void *pMsg) +{ + u_int16_t value = ((*(uint32_t*)(0x1FFF7590 + 4)) >> 16) & 0x0000FFFF; + return FRT_swap_endian_16(value); +} + +/** + * @brief ID64 + * @param + * @retval + */ +static u_int16_t FRT_ReadReg_ID_4(void *pMsg) +{ + u_int16_t value = (*(uint32_t*)(0x1FFF7590 + 4)) & 0x0000FFFF; + return FRT_swap_endian_16(value); +} + /** * @brief 鍐欐崲鑳藉櫒鍙傛暟瀵勫瓨鍣ㄥ1R5 * @param @@ -1092,6 +1155,70 @@ static u_int16_t FRT_WriteRegLinearEnable(void *pMsg) return 0; } +/** + * @brief 鍐欏乏1-16浣 + * @param + * @retval + */ +static u_int16_t FRT_WriteRegEncrypt1(void *pMsg) +{ + uint16_t *pMsgData = (uint16_t *)pMsg; + uint16_t data = *pMsgData; + + g_stConfigInfo.encrypt_0 = (g_stConfigInfo.encrypt_0 & 0x0000FFFF) | ((data << 16) & 0xFFFF0000); + save_factory_config_info(g_stConfigInfo); + + return 0; +} + +/** + * @brief 鍐欏乏17-32浣 + * @param + * @retval + */ +static u_int16_t FRT_WriteRegEncrypt2(void *pMsg) +{ + uint16_t *pMsgData = (uint16_t *)pMsg; + uint16_t data = *pMsgData; + + g_stConfigInfo.encrypt_0 = (g_stConfigInfo.encrypt_0 & 0xFFFF0000) | (data & 0x0000FFFF); + save_factory_config_info(g_stConfigInfo); + + return 0; +} + +/** + * @brief 鍐欏乏33-47浣 + * @param + * @retval + */ +static u_int16_t FRT_WriteRegEncrypt3(void *pMsg) +{ + uint16_t *pMsgData = (uint16_t *)pMsg; + uint16_t data = *pMsgData; + + g_stConfigInfo.encrypt_1 = (g_stConfigInfo.encrypt_1 & 0x0000FFFF) | ((data << 16) & 0xFFFF0000); + save_factory_config_info(g_stConfigInfo); + + return 0; +} + +/** + * @brief 鍐欏乏48-64浣 + * @param + * @retval + */ +static u_int16_t FRT_WriteRegEncrypt4(void *pMsg) +{ + uint16_t *pMsgData = (uint16_t *)pMsg; + uint16_t data = *pMsgData; + + g_stConfigInfo.encrypt_1 = (g_stConfigInfo.encrypt_1 & 0xFFFF0000) | (data & 0x0000FFFF); + save_factory_config_info(g_stConfigInfo); + + return 0; +} + /** * @brief 灏佽鍗忚鍙戦 @@ -1173,7 +1300,7 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg) start_reg_addr < 0x00 ||\ (start_reg_addr > FRT_REGISTER_PRESSURE && start_reg_addr < FRT_REGISTER_DEVICE_ADDR) ||\ (start_reg_addr > FRT_REGISTER_TEMPHUM_UPDATE_TIME && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\ - start_reg_addr > FRT_REGISTER_MAX_WAVE_4 \ + start_reg_addr > FRT_REGISTER_ID_4 \ ) { @@ -1185,7 +1312,7 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg) reg_num < 0x01 ||\ (((reg_num + start_reg_addr - 1) > FRT_REGISTER_PRESSURE) && ((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR)) ||\ (((reg_num + start_reg_addr -1) > FRT_REGISTER_TEMPHUM_UPDATE_TIME) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\ - ((reg_num + start_reg_addr -1) > FRT_REGISTER_MAX_WAVE_4) \ + ((reg_num + start_reg_addr -1) > FRT_REGISTER_ID_4) \ ) { @@ -1237,8 +1364,9 @@ void FRT_MsgProc_WriteRegister(device_handle device, void *pMsg) if (start_reg_addr < FRT_REGISTER_DEVICE_ADDR ||\ (start_reg_addr > FRT_REGISTER_REST_DEFAULT_SETTING && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\ (start_reg_addr > FRT_REGISTER_DISTANCE_WE && start_reg_addr < FRT_REGISTER_LINEAR_POINT_Y_1) ||\ - (start_reg_addr > FRT_REGISTER_LINEAR_POINT_Y_5) \ - ) + (start_reg_addr > FRT_REGISTER_LINEAR_POINT_Y_5) && (start_reg_addr < FRT_REGISTER_ENCRYPT_1) ||\ + (start_reg_addr > FRT_REGISTER_ENCRYPT_4) + ) { term_printf("start_reg_addr error:%d", start_reg_addr); return; @@ -1246,8 +1374,9 @@ void FRT_MsgProc_WriteRegister(device_handle device, void *pMsg) if (reg_num < 0x01 ||\ ((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR) ||\ (((reg_num + start_reg_addr -1) > FRT_REGISTER_REST_DEFAULT_SETTING) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\ - (((reg_num + start_reg_addr -1) > FRT_REGISTER_DISTANCE_WE) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_LINEAR_POINT_Y_1)) ||\ - ((reg_num + start_reg_addr -1) > FRT_REGISTER_LINEAR_POINT_Y_5) \ + (((reg_num + start_reg_addr -1) > FRT_REGISTER_DISTANCE_WE) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_LINEAR_POINT_Y_1)) ||\ + (((reg_num + start_reg_addr -1) > FRT_REGISTER_LINEAR_POINT_Y_5) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_ENCRYPT_1)) ||\ + ((reg_num + start_reg_addr -1) > FRT_REGISTER_ENCRYPT_4) ) { term_printf("reg_num error:%d", reg_num); diff --git a/App/Src/inflash.c b/App/Src/inflash.c index 26d7be4..4393da6 100644 --- a/App/Src/inflash.c +++ b/App/Src/inflash.c @@ -41,6 +41,8 @@ factory_config_info g_stConfigInfo={ .linear_point_5_x = 0, /* 线性插值点5 */ .linear_point_5_y = 0, /* 线性插值点5 */ .linear_enable = 0, /* 线性插值使能 */ + .encrypt_0 = 0, /* 密文 */ + .encrypt_1 = 0, /* 密文 */ .flag_end = FLAG_SAVE_INFLASH_END, }; diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index 0067694..3522549 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -32,6 +32,7 @@ void task_shell_term_main_loop(void const * argument); #include "frt_protocol.h" #include "inflash.h" #include "hp203b.h" +#include "encrypt.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ diff --git a/Core/Src/main.c b/Core/Src/main.c index a67c83f..3c1f1cd 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -125,10 +125,8 @@ void Flash_EnableReadProtection(void) { /* USER CODE BEGIN 1 */ - //远程升级时读保护 -#ifdef REMOTE_UPDATE - Flash_EnableReadProtection();//读保护 -#endif + ///远程升级时读保护 + ///Flash_EnableReadProtection();//读保护 /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ @@ -174,7 +172,6 @@ void Flash_EnableReadProtection(void) term_printf("Version 1.0.0 Build: %s %s\r\n",__DATE__,__TIME__); HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED); sht30_init(); - /* USER CODE END 2 */ /* Call init function for freertos objects (in cmsis_os2.c) */ diff --git a/EWARM/micro_climate.ewp b/EWARM/micro_climate.ewp index f86853b..4e95e6e 100644 --- a/EWARM/micro_climate.ewp +++ b/EWARM/micro_climate.ewp @@ -701,7 +701,7 @@ - 88 + 1 inputOutputBased @@ -2245,6 +2245,9 @@ $PROJ_DIR$\..\App\Inc\comm_types.h + + $PROJ_DIR$\..\App\Inc\encrypt.h + $PROJ_DIR$\..\App\Inc\frt_protocol.h @@ -2266,6 +2269,9 @@ $PROJ_DIR$\..\App\Src\anemometer_dev.c + + $PROJ_DIR$\..\App\Src\encrypt.c + $PROJ_DIR$\..\App\Src\frt_protocol.c diff --git a/EWARM/micro_climate.ewt b/EWARM/micro_climate.ewt index e59bc61..408c6e9 100644 --- a/EWARM/micro_climate.ewt +++ b/EWARM/micro_climate.ewt @@ -1426,6 +1426,1431 @@ + + REMOTE_UPDATE + + ARM + + 1 + + C-STAT + 517 + + 517 + + 0 + + 1 + 600 + 1 + 8 + 0 + 1 + 100 + REMOTE_UPDATE/C-STAT + + + 2.5.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RuntimeChecking + 0 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + Application @@ -1449,6 +2874,9 @@ $PROJ_DIR$\..\App\Inc\comm_types.h + + $PROJ_DIR$\..\App\Inc\encrypt.h + $PROJ_DIR$\..\App\Inc\frt_protocol.h @@ -1470,6 +2898,9 @@ $PROJ_DIR$\..\App\Src\anemometer_dev.c + + $PROJ_DIR$\..\App\Src\encrypt.c + $PROJ_DIR$\..\App\Src\frt_protocol.c