diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx index 45c2405..70f6442 100644 --- a/checher_slave.uvoptx +++ b/checher_slave.uvoptx @@ -1158,8 +1158,8 @@ 0 0 0 - .\source\elec_det\elec_det.c - elec_det.c + .\source\elec_det\test\EW_TestUsartApp.c + EW_TestUsartApp.c 0 0 @@ -1170,11 +1170,71 @@ 0 0 0 + .\source\elec_det\test\EWCheckerTest.c + EWCheckerTest.c + 0 + 0 + + + 6 + 56 + 1 + 0 + 0 + 0 + .\source\elec_det\test\Test.c + Test.c + 0 + 0 + + + 6 + 57 + 1 + 0 + 0 + 0 + .\source\elec_det\test\XTCheckerTest.c + XTCheckerTest.c + 0 + 0 + + + 6 + 58 + 1 + 0 + 0 + 0 .\source\elec_det\elec_cmd.c elec_cmd.c 0 0 + + 6 + 59 + 1 + 0 + 0 + 0 + .\source\elec_det\elec_det.c + elec_det.c + 0 + 0 + + + 6 + 60 + 1 + 0 + 0 + 0 + .\source\elec_det\elec_io.c + elec_io.c + 0 + 0 + @@ -1185,7 +1245,7 @@ 0 7 - 56 + 61 1 0 0 @@ -1197,7 +1257,7 @@ 7 - 57 + 62 1 0 0 @@ -1217,7 +1277,7 @@ 0 8 - 58 + 63 1 0 0 @@ -1229,7 +1289,7 @@ 8 - 59 + 64 1 0 0 @@ -1241,7 +1301,7 @@ 8 - 60 + 65 1 0 0 @@ -1253,7 +1313,7 @@ 8 - 61 + 66 1 0 0 @@ -1265,7 +1325,7 @@ 8 - 62 + 67 1 0 0 @@ -1277,7 +1337,7 @@ 8 - 63 + 68 1 0 0 @@ -1289,7 +1349,7 @@ 8 - 64 + 69 1 0 0 @@ -1301,7 +1361,7 @@ 8 - 65 + 70 1 0 0 @@ -1313,7 +1373,7 @@ 8 - 66 + 71 1 0 0 @@ -1325,7 +1385,7 @@ 8 - 67 + 72 1 0 0 @@ -1337,7 +1397,7 @@ 8 - 68 + 73 1 0 0 @@ -1349,7 +1409,7 @@ 8 - 69 + 74 1 0 0 @@ -1361,7 +1421,7 @@ 8 - 70 + 75 1 0 0 @@ -1373,7 +1433,7 @@ 8 - 71 + 76 1 0 0 @@ -1385,7 +1445,7 @@ 8 - 72 + 77 1 0 0 @@ -1397,7 +1457,7 @@ 8 - 73 + 78 1 0 0 @@ -1409,7 +1469,7 @@ 8 - 74 + 79 1 0 0 @@ -1421,7 +1481,7 @@ 8 - 75 + 80 1 0 0 @@ -1433,7 +1493,7 @@ 8 - 76 + 81 2 0 0 @@ -1453,7 +1513,7 @@ 0 9 - 77 + 82 1 0 0 @@ -1465,7 +1525,7 @@ 9 - 78 + 83 1 0 0 @@ -1477,7 +1537,7 @@ 9 - 79 + 84 1 0 0 @@ -1489,7 +1549,7 @@ 9 - 80 + 85 1 0 0 @@ -1501,7 +1561,7 @@ 9 - 81 + 86 1 0 0 @@ -1513,7 +1573,7 @@ 9 - 82 + 87 1 0 0 @@ -1525,7 +1585,7 @@ 9 - 83 + 88 1 0 0 @@ -1537,7 +1597,7 @@ 9 - 84 + 89 1 0 0 @@ -1549,7 +1609,7 @@ 9 - 85 + 90 1 0 0 @@ -1561,7 +1621,7 @@ 9 - 86 + 91 1 0 0 @@ -1573,7 +1633,7 @@ 9 - 87 + 92 1 0 0 @@ -1593,7 +1653,7 @@ 0 10 - 88 + 93 1 0 0 @@ -1605,7 +1665,7 @@ 10 - 89 + 94 1 0 0 @@ -1617,7 +1677,7 @@ 10 - 90 + 95 1 0 0 @@ -1629,7 +1689,7 @@ 10 - 91 + 96 1 0 0 @@ -1641,7 +1701,7 @@ 10 - 92 + 97 1 0 0 @@ -1661,7 +1721,7 @@ 0 11 - 93 + 98 1 0 0 @@ -1681,7 +1741,7 @@ 0 12 - 94 + 99 1 0 0 @@ -1693,7 +1753,7 @@ 12 - 95 + 100 1 0 0 @@ -1705,7 +1765,7 @@ 12 - 96 + 101 1 0 0 @@ -1717,7 +1777,7 @@ 12 - 97 + 102 1 0 0 @@ -1729,7 +1789,7 @@ 12 - 98 + 103 1 0 0 @@ -1741,7 +1801,7 @@ 12 - 99 + 104 1 0 0 @@ -1761,7 +1821,7 @@ 0 13 - 100 + 105 5 0 0 @@ -1781,7 +1841,7 @@ 0 14 - 101 + 106 5 0 0 @@ -1793,7 +1853,7 @@ 14 - 102 + 107 5 0 0 diff --git a/checher_slave.uvprojx b/checher_slave.uvprojx index bacb51a..36dac77 100644 --- a/checher_slave.uvprojx +++ b/checher_slave.uvprojx @@ -724,15 +724,244 @@ .\source\elec_det\interface\EWChecker.c - elec_det.c + EW_TestUsartApp.c 1 - .\source\elec_det\elec_det.c + .\source\elec_det\test\EW_TestUsartApp.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + EWCheckerTest.c + 1 + .\source\elec_det\test\EWCheckerTest.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + Test.c + 1 + .\source\elec_det\test\Test.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + XTCheckerTest.c + 1 + .\source\elec_det\test\XTCheckerTest.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + elec_cmd.c 1 .\source\elec_det\elec_cmd.c + + elec_det.c + 1 + .\source\elec_det\elec_det.c + + + elec_io.c + 1 + .\source\elec_det\elec_io.c + @@ -1952,15 +2181,40 @@ .\source\elec_det\interface\EWChecker.c - elec_det.c + EW_TestUsartApp.c 1 - .\source\elec_det\elec_det.c + .\source\elec_det\test\EW_TestUsartApp.c + + + EWCheckerTest.c + 1 + .\source\elec_det\test\EWCheckerTest.c + + + Test.c + 1 + .\source\elec_det\test\Test.c + + + XTCheckerTest.c + 1 + .\source\elec_det\test\XTCheckerTest.c elec_cmd.c 1 .\source\elec_det\elec_cmd.c + + elec_det.c + 1 + .\source\elec_det\elec_det.c + + + elec_io.c + 1 + .\source\elec_det\elec_io.c + diff --git a/python/protmcu.py b/python/protmcu.py index 6a34ee6..b3ff0ba 100644 --- a/python/protmcu.py +++ b/python/protmcu.py @@ -136,8 +136,9 @@ u=protm("com7") # u.wait() u.addr=0 u.host_addr=0 -u.cmd=0x13 -print(u.encode(bytearray()).hex(" ")) -u.cmd=0x0c -print(u.encode(bytearray()).hex(" ")) +u.cmd=0x19 +data=bytearray([0x11,0x22,0x33,0x44]) +crc=crc8(data) +data=bytes([4,crc])+data +print(u.encode(data).hex(" ")) diff --git a/source/ReadMe.txt b/source/ReadMe.txt index c8cf938..b1dba71 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -203,4 +203,9 @@ prot_uc 最多接收消息数量上限是10 ,防止主机消息轰炸 prot_uc 处理命令的时间如果距离接收时间超过100ms时视为过期,不处理过期消息 bootloader 在升级之前会进行校验,如果不是slave的程序则不会升级 - 使用赋码仪主板 app升级,方案升级验证通过 \ No newline at end of file + 使用赋码仪主板 app升级,方案升级验证通过 +2023.10.12 + 移植Test命令,验证成功 + EJ EX 写工厂信息验证成功 + + diff --git a/source/elec_det/.gitignore b/source/elec_det/.gitignore new file mode 100644 index 0000000..5a2a074 --- /dev/null +++ b/source/elec_det/.gitignore @@ -0,0 +1 @@ +compar/ diff --git a/source/elec_det/driver/EWDriver.c b/source/elec_det/driver/EWDriver.c index ff0697c..047fe19 100644 --- a/source/elec_det/driver/EWDriver.c +++ b/source/elec_det/driver/EWDriver.c @@ -17,7 +17,6 @@ static volatile CurrentSample_Range_eu buscurrent_range = Current_Max; #endif #define SMod_Read_Idle_Filter 90 -// 根据反码电流改变 #define DMod_Read_Idle_Filter 50 volatile uint16_t* EW_Read_AD_V = FireBus_ADC_Buf; @@ -746,7 +745,7 @@ static void DMod_SendBytesSelf(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t r EW_DIFF_MOD_L; } __enable_irq(); - delay_ms(3);//保障芯片总线空闲监听退出 + delay_ms(5);//保障芯片总线空闲监听退出 } @@ -814,12 +813,11 @@ void DMod_ReadInspect_Data(uint16_t count,uint8_t* buf) while(index < count) { data = *(buf+(index >> 3)); - if( DMod_ReadBit(300) > 0) + if( DMod_ReadBit(400) > 0) { data |= (0x01 << (index & 0x07)); - }; - EW_DIFF_MOD_L - delay_us(800); + } + delay_us(1200); *(buf+(index >> 3)) = data; index++; } diff --git a/source/elec_det/driver/EWDriver.h b/source/elec_det/driver/EWDriver.h index 0e1ca48..7cf1ff9 100644 --- a/source/elec_det/driver/EWDriver.h +++ b/source/elec_det/driver/EWDriver.h @@ -152,6 +152,14 @@ void DMod_SendBytes(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t rw_flag); void DMod_SendBytesXor(uint8_t* buf, uint8_t len, uint8_t rw_flag); uint8_t DMod_ReadBytesXor(uint8_t* buf, uint8_t len,uint16_t retry_times); + +/* +@brief 差分模式读取为应答 +@param count 读取的数量 +@param 接收数据缓存 +*/ +void DMod_ReadInspect_Data(uint16_t count,uint8_t* buf); + /* @breif 通信测试 */ @@ -328,6 +336,13 @@ uint8_t EW_ReadRunCfgVersion(uint16_t addr,uint8_t* run_cfg,uint16_t* version); @param fac_addr 分配因子 */ uint8_t EW_AutoSetAddr(uint16_t max_addr,uint16_t fac_addr); +/* +@brief 读校准值 +@param addr 通信地址 +@param UID数据 +*/ +uint8_t EW_ReadUID(uint16_t addr,uint8_t* uid,uint8_t uid_len); + #endif diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c index eb07dda..32b3391 100644 --- a/source/elec_det/elec_det.c +++ b/source/elec_det/elec_det.c @@ -1,6 +1,7 @@ #include "board.h" #include "bytearray.h" #include "mystdlib.h" +#include "mystring.h" #include "debug.h" #include "stdlib.h" #include "dev_flash.h" @@ -185,10 +186,30 @@ array_def *elec_write_resistor_cbv(int cbv) board_st.resistor_diff=cbv; array_def *r=arr_creat(); arr_append(r,0); - return 0; + return arr_temp(r); } +// 写缓存 +array_def *elec_write_fat_buff(array_def *d) +{ + int ret=0; + int num=arr_length(d); + if(num=CHECKER_MAXID_COUNT){ - DBG_WARN("tiskid out of bound."); + DBG_WARN("taskid=%d out of bound.",taskid); break; } task_par= s->task_info_array[task_index]; @@ -333,6 +354,7 @@ array_def *elec_check_with_scheme(array_def *uid_psw) break; checker_runcfg.rtv_index-=checker_runcfg.rtv_count; } + DBG_LOG("task_index:%d,taskid:%d,ret=%d.",task_index,taskid,checker_runcfg.excue_rtv); // 找寻下一个任务 if((checker_runcfg.excue_rtv != 0) diff --git a/source/elec_det/elec_det.h b/source/elec_det/elec_det.h index 37e51cc..184bedb 100644 --- a/source/elec_det/elec_det.h +++ b/source/elec_det/elec_det.h @@ -24,6 +24,8 @@ array_def *elec_write_hardversion(int version); array_def *elec_write_resistor_cbv(int cbv); +array_def *elec_write_fat_buff(array_def *d); + array_def *elec_check_resistor(void); array_def *elec_check_with_scheme(array_def *uid_psw); diff --git a/source/elec_det/elec_io.c b/source/elec_det/elec_io.c new file mode 100644 index 0000000..cee0124 --- /dev/null +++ b/source/elec_det/elec_io.c @@ -0,0 +1,65 @@ + +#include "base/delay.h" +#include "base/utility.h" +#include "hardware/adc_cfg.h" +#include "hardware/dac_cfg.h" +#include "hardware/gpio_cfg.h" +#include "hardware/jw3425iic.h" +#include "hardware/power.h" +#include "hardware/timer_cfg.h" +#include "driver/EWDriver.h" +#include "driver/JQDriver.h" +#include "driver/XTDriver.h" +#include "interface/BaseChecker.h" +#include "interface/JQChecker.h" +#include "interface/XTChecker.h" +#include "interface/EWChecker.h" + +#include "elec_det.h" +#include "dev_flash.h" +#include "mystring.h" +#include "elec_io.h" + +// 此文件实现elec模块的输入输出接口 + + + +int ConsoleUsart_send_bytes(uint8_t *d,int len) +{ + return 0; +} + + +int SaveBoardInfo(void) +{ + sys_param_def *spar=0; + spar=calloc(1,sizeof(sys_param_def)); + memcpy(spar,sys_param(),sizeof(sys_param_def)); + spar->hard_version=boardinfo_un.boardinfo.hard_v; + spar->resistor_diff=boardinfo_un.boardinfo.resistor_diff; + flash_save_param(spar); + free(spar); + return 0; +} + + +int LoadBoardInfo(void) +{ + boardinfo_un.boardinfo.bootflag=1; + boardinfo_un.boardinfo.hard_v=sys_param()->hard_version; + boardinfo_un.boardinfo.resistor_diff=sys_param()->resistor_diff; + return 0; +} + + + +void Ye_RunPlanCheckTest(void) +{ + array_def *data=arr_creat(); + array_def *r=elec_check_with_scheme(data); + arr_delete(data); +} + + + + diff --git a/source/elec_det/elec_io.h b/source/elec_det/elec_io.h new file mode 100644 index 0000000..35839bb --- /dev/null +++ b/source/elec_det/elec_io.h @@ -0,0 +1,64 @@ + + +#ifndef elec_io_h__ +#define elec_io_h__ + +// 此文件实现elec模块的输入输出接口 +// 引用时,此文件一定要最后包含 + +#include "stdint.h" +#include "commend.h" +#include "list.h" + +#ifdef printf +#undef printf +#endif +#ifdef rt_kprintf +#undef rt_kprintf +#endif +#ifdef MSH_CMD_EXPORT_ALIAS +#undef MSH_CMD_EXPORT_ALIAS +#endif + + +// 定义最大参数个数 +#define MSH_CMD_PARAM_MAX_NUM 50 + + +#define printf cmd_print +#define rt_kprintf cmd_print + +#define MSH_CMD_EXPORT_ALIAS(fun_,cmd_,desc)\ + static int __msh_##fun_(list_def *argv /* str */)\ + {\ + char *s[MSH_CMD_PARAM_MAX_NUM]={0};\ + int num=list_length(argv);\ + int ret=0;\ + for(int i=0;iabus_v+10)||(abus_v>hbus_v+10)){ + abus_v=500; + } + return abus_v; } @@ -446,7 +456,10 @@ void PowerSetVoltage(PowerInfo_st* info_st) C_H_DAC_Set(info_st->V_LAH_DAC); C_M_DAC_Set(info_st->V_LAM_DAC); POWER_ON; - + //? 验证电压失调 + delay_ms(5); + C_H_DAC_Set(info_st->V_LAH_DAC); + C_M_DAC_Set(info_st->V_LAM_DAC); } //获取当前电压配置值 void PowerGetSet(PowerInfo_st* info_st) diff --git a/source/elec_det/interface/BaseChecker.c b/source/elec_det/interface/BaseChecker.c index 297a66a..673f4dd 100644 --- a/source/elec_det/interface/BaseChecker.c +++ b/source/elec_det/interface/BaseChecker.c @@ -213,4 +213,21 @@ uint8_t Checker_FunIsValid(CheckerTask* taskArray,uint16_t run_index) } return 0; } - +/* +@brief 缓存空间检测 +@rtv 1 失败 0 成功 +*/ +uint8_t Checker_FacBufCheck() +{ + uint8_t uc_len = Checker_FacBuf[0]; + uint8_t uc_crc = Checker_FacBuf[1]; + if(uc_len > (CHECKER_FAC_BUF_LEN-2) || uc_len == 0) + { + return 1; + } + if(uc_crc != CheckCRC_8(Checker_FacBuf+2,uc_len)) + { + return 1; + } + return 0; +} diff --git a/source/elec_det/interface/BaseChecker.h b/source/elec_det/interface/BaseChecker.h index ca597d2..9835ea7 100644 --- a/source/elec_det/interface/BaseChecker.h +++ b/source/elec_det/interface/BaseChecker.h @@ -98,4 +98,9 @@ uint8_t JQXT_Test_IsNeedBind(void); 检测执行函数是否正常 */ uint8_t Checker_FunIsValid(CheckerTask* taskArray,uint16_t run_index); +/* +@brief 缓存空间检测 +@rtv 1 失败 0 成功 +*/ +uint8_t Checker_FacBufCheck(void); #endif diff --git a/source/elec_det/interface/JQChecker.c b/source/elec_det/interface/JQChecker.c index 6ec197f..d2c0442 100644 --- a/source/elec_det/interface/JQChecker.c +++ b/source/elec_det/interface/JQChecker.c @@ -1058,6 +1058,107 @@ void JQ_Test_ReadVersion(void) Checker_SetRtv(&us_temp,checker_runcfg.rtv_count); } +/* +@brief 写入OTP数据 +@param0 OTP起始地址 +@param1 缓存首地址 +@param2 写入长度 +*/ +void JQ_Test_WriteFacBuff(void) +{ + uint8_t uc_rtv = 0; + uint8_t uc_ack; + uint8_t uc_otpAddr = checker_runcfg.params[0]; + uint8_t uc_bufIndex = checker_runcfg.params[1]; + uint8_t uc_writeCount = checker_runcfg.params[2]; + uint8_t uc_count = 0; + uint8_t uc_wcount ; + uint8_t ul_temp[4]; + //Checker_FacBuf 验证合法性 + if(0 != Checker_FacBufCheck()) + { + uc_rtv = 1; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; + } + JQ_EnWOTP(); + JQ_EnWOTP(); + for(uc_count = 0; uc_count < uc_writeCount;uc_count++,uc_otpAddr++,uc_bufIndex++) + { + uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpAddr,1,ul_temp); + if(uc_ack < 1) + { + uc_rtv = 2; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; + } + if(Checker_FacBuf[uc_bufIndex+2] == ul_temp[0]) + { + continue; + } + if(ul_temp[0] != 0) + { + if((ul_temp[0] & Checker_FacBuf[uc_bufIndex+2]) != ul_temp[0])//OTP不能由1变成0 + { + uc_rtv = 3; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; + } + } + + uc_wcount = JQ_WriteOTP(uc_otpAddr,1,&Checker_FacBuf[uc_bufIndex+2]); + if(uc_wcount != 1) + { + uc_rtv = 4; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; + } + + } + uc_rtv = 0; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; +} + +/* +@brief 验证OTP内部与缓存比较 +@param0 OTP起始地址 +@param1 缓存首地址 +@param2 验证长度 +*/ +void JQ_Test_VerifyFacBuff(void) +{ + uint8_t uc_rtv = 0; + uint8_t uc_ack; + uint8_t uc_otpAddr = checker_runcfg.params[0]; + uint8_t uc_bufIndex = checker_runcfg.params[1]; + uint8_t uc_verifyCount = checker_runcfg.params[2]; + uint8_t uc_count = 0; + uint8_t ul_temp[4]; + if(0 != Checker_FacBufCheck()) + { + uc_rtv = 1; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; + } + for(uc_count = 0; uc_count < uc_verifyCount;uc_count++) + { + uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpAddr,1,ul_temp); + if((uc_ack < 1) || (Checker_FacBuf[uc_bufIndex+2] != ul_temp[0])) + { + uc_rtv = 2; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; + } + uc_bufIndex++; + uc_otpAddr++; + } + uc_rtv = 0; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; +} + + CheckerTask jqtaskArray[CHECKER_MAXID_COUNT] ={ Checker_PowerPrapare, //0 电源准备 JQ_Test_PowerOn, //1 上电充能 @@ -1094,6 +1195,8 @@ Checker_ResistorSample,//31 测量桥丝阻值 JQ_Test_EnOTPW ,//32 使能OTP写 JQ_Test_WriteVersion ,//33 写模块版本 JQ_Test_ReadVersion ,//34 读取版本号 +JQ_Test_WriteFacBuff ,//35 写缓存数据 +JQ_Test_VerifyFacBuff ,//36 验证缓存数据 (void*)0 //数组结束 }; diff --git a/source/elec_det/interface/JQChecker.h b/source/elec_det/interface/JQChecker.h index 904ce5a..1687425 100644 --- a/source/elec_det/interface/JQChecker.h +++ b/source/elec_det/interface/JQChecker.h @@ -215,4 +215,18 @@ void JQ_Test_ReadVersion(void); @param0 模块版本号 */ void JQ_Test_WriteVersion(void); +/* +@brief 写入OTP数据 +@param0 OTP起始地址 +@param1 缓存首地址 +@param2 写入长度 +*/ +void JQ_Test_WriteFacBuff(void); +/* +@brief 验证OTP内部与缓存比较 +@param0 OTP起始地址 +@param1 缓存首地址 +@param2 验证长度 +*/ +void JQ_Test_VerifyFacBuff(void); #endif diff --git a/source/elec_det/interface/XTChecker.c b/source/elec_det/interface/XTChecker.c index f639666..67e4c77 100644 --- a/source/elec_det/interface/XTChecker.c +++ b/source/elec_det/interface/XTChecker.c @@ -480,34 +480,22 @@ void XT_Test_WriteShell(void) { uint8_t uc_rtv = 0; uint8_t uc_count = 0; - if((checker_runcfg.params[0] + checker_runcfg.params[1] > CHECKER_WRITE_BUF)) + if(0 != Checker_FacBufCheck()) { uc_rtv = 1; Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); return; } - if(CheckCRC_8(&Checker_FacBuf[2],Checker_FacBuf[0]) != Checker_FacBuf[1]) + //管壳号最长 13个字节 + if((checker_runcfg.params[0] + checker_runcfg.params[1] > CHECKER_WRITE_BUF) || checker_runcfg.params[1] > 13) { - uc_rtv = 1; + uc_rtv = 2; Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); return; } memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); memcpy(XT_RunBuf,&Checker_FacBuf[2]+checker_runcfg.params[0],checker_runcfg.params[1]); uc_rtv |= XT_Write_Shell(XT_RunBuf); - if(checker_runcfg.uid_len > 0) - { - uc_rtv |= XT_Read_Shell(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf+16); - }else{ - uc_rtv |= XT_Read_Shell_All(XT_RunBuf+16); - } - for(uc_count = 0; uc_count < 13;uc_count++) - { - if(XT_RunBuf[uc_count] != XT_RunBuf[13+uc_count]) - { - uc_rtv |= 0x01; - } - } Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); } @@ -1237,7 +1225,49 @@ void XT_CurMonitor(void) Checker_MaskResult(0,checker_runcfg.task_info.runindex); } - +/* +@brief 验证壳码 如果测试器有uid,将采用uid方式通信 +@param 命令缓存参数的起始 +@param 验证数据长度 +*/ +void XT_Test_VerfyShell(void) +{ + uint8_t uc_rtv = 0; + uint8_t uc_count = 0; + uint8_t uc_index = 0; + if(0 != Checker_FacBufCheck()) + { + uc_rtv = 1; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; + } + //管壳号最长 13个字节 + if((checker_runcfg.params[0] + checker_runcfg.params[1] > CHECKER_WRITE_BUF) || checker_runcfg.params[1] > 13) + { + uc_rtv = 2; + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); + return; + } + memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); + if(checker_runcfg.uid_len > 0) + { + uc_rtv=XT_Read_Shell(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf); + if(uc_rtv) uc_rtv =3; + }else{ + uc_rtv=XT_Read_Shell_All(XT_RunBuf); + if(uc_rtv) uc_rtv =4; + } + uc_index = checker_runcfg.params[0]+2; + for(uc_count = 0; uc_count < checker_runcfg.params[1];uc_count++) + { + if(Checker_FacBuf[uc_index++] != XT_RunBuf[uc_count]) + { + uc_rtv =5; + break; + } + } + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); +} CheckerTask xttaskArray[CHECKER_MAXID_COUNT] ={ Checker_PowerPrapare, //0 电源准备 @@ -1278,6 +1308,7 @@ Checker_ResistorSample,//34 桥丝电阻测试 XT_Test_UID_PWD_Bind ,//35 检测过程中注码 XT_Test_UID_PWD_Verify,//36 验证注码 XT_OnLine_SCAN ,//37 模块在线检测 +XT_Test_VerfyShell ,//38 验证管壳码 (void*)0 //数组结束 }; diff --git a/source/elec_det/interface/XTChecker.h b/source/elec_det/interface/XTChecker.h index c492f1d..ac4c42c 100644 --- a/source/elec_det/interface/XTChecker.h +++ b/source/elec_det/interface/XTChecker.h @@ -240,6 +240,12 @@ void XT_OnLine_SCAN(void); void XT_OFFLine_SCAN(void); /* +@brief 验证壳码 如果测试器有uid,将采用uid方式通信 +@param 命令缓存参数的起始 +@param 验证数据长度 +*/ +void XT_Test_VerfyShell(void); +/* @brief 芯片离线检测 @param0 充电使能 @param1 采样周期 10ms @@ -247,4 +253,5 @@ void XT_OFFLine_SCAN(void); */ void XT_CurMonitor(void); + #endif diff --git a/source/elec_det/test/EWCheckerTest.c b/source/elec_det/test/EWCheckerTest.c new file mode 100644 index 0000000..e86a242 --- /dev/null +++ b/source/elec_det/test/EWCheckerTest.c @@ -0,0 +1,379 @@ +#include "base/define.h" +#include "stdlib.h" +#include "hardware/gpio_cfg.h" +#include "base/delay.h" +#include "hardware/adc_cfg.h" +#include "hardware/power.h" +#include "base/utility.h" +//#include "usartapp.h" +//#include "database.h" +#include "interface/BaseChecker.h" +#include "hardware/jw3425iic.h" +#include "driver/EWDriver.h" +#include "elec_io.h" +static void MCCheckerTest(int argc, char**argv) +{ + uint16_t us_array[20]; + uint8_t* puc_buf; + uint16_t us_temp; + rt_memset(&checker_runcfg.params,0,sizeof(checker_runcfg.params)); + rt_memset(&checker_runcfg.Task_Result,0,sizeof(checker_runcfg.Task_Result)); + checker_runcfg.excue_rtv = 0; + checker_runcfg.param_count = 0; + checker_runcfg.rtv_count = 0; + checker_runcfg.rtv_index = 0; + checker_runcfg.task_info.runindex = 0; + if(argc > 2) + { + checker_runcfg.param_count = argc-2; + us_temp = 0; + while(us_temp < checker_runcfg.param_count) + { + checker_runcfg.params[us_temp] = atoi(argv[us_temp+2]); + us_temp++; + } + } + if (argc < 2) + { + goto MC_help_label_; + }else if(!rt_strcmp(argv[1], "SDAOut")){ + SDA_OUT(); + if(checker_runcfg.params[0] == 0) + { + IIC_SDA(0); + }else{ + IIC_SDA(1); + } + }else if(!rt_strcmp(argv[1], "SDAIn")){ + SDA_IN(); + rt_kprintf("SDAIn %1\n",READ_SDA); + }else if(!rt_strcmp(argv[1], "SCLOut")){ + if(checker_runcfg.params[0] == 0) + { + IIC_SCL(0); + }else{ + IIC_SCL(1); + } + }else if(!rt_strcmp(argv[1], "CodeCrc")){ + printf("CodeCrc %X\n",boardinfo_un.boardinfo.mc_ICodeCrc32); + } + else if(!rt_strcmp(argv[1], "VrefTrim")){ + MC_VrefTrim(); + printf("VrefTrim Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "IrefTrim")){ + MC_IrefTrim(); + printf("IrefTrim Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "RC4MTrim")){ + MC_RC4MTrim(); + printf("RC4MTrim Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "RC128KTrim")){ + MC_RC128KTrim(); + printf("RC128KTrim Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "SetMTPVol")){ + MC_SetMTPVol(); + printf("SetMTPVol Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "EraseMTP")){ + MC_EraseMTP(); + printf("EraseMTP Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "IICWriteMTP")){ + MC_IICWriteMTP(); + printf("IICWriteMTP Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "IICEnMTP")){ + MC_IICEnMTP(); + printf("IICEnMTP Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "IICReadMTP")){ + checker_runcfg.rtv_count = (checker_runcfg.params[1]+1)/2; + MC_IICReadMTP(); + printf("IICMTPState Excute %d\n",checker_runcfg.Task_Result[0]); + us_temp = 0; + while(us_temp < checker_runcfg.rtv_count) + { + if((us_temp+1) % 4 == 0) + { + printf("\n"); + } + printf("%02X %02X ",(checker_runcfg.Test_Rtv[us_temp] & 0xFF) ,((checker_runcfg.Test_Rtv[us_temp] >> 8) & 0xFF)); + us_temp++; + + } + printf("\n"); + }else if(!rt_strcmp(argv[1], "IICMTPState")){ + checker_runcfg.rtv_count = 1; + MC_IICCheckMTPState(); + printf("IICMTPState Excute %d state %x \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0] & 0x0FF); + }else if(!rt_strcmp(argv[1], "IICUpdateMTP")){ + checker_runcfg.rtv_count = 1; + POWER_ON + delay_ms(50); + MC_IICUpdateMTP(); + POWER_OFF; + printf("IICMTPState Excute %d Error Code %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0] & 0x0FF); + } + + else{ + MC_help_label_: + rt_kprintf("SDAOut [0/1] gpio out\n"); + rt_kprintf("SDAIn read gpio pin\n"); + rt_kprintf("SCLOut [0/1] gpio out\n"); + rt_kprintf("VrefTrim [En_update] [trim_value]\n"); + rt_kprintf("IrefTrim [Iref1En_update] [Iref2En_update] [Iref1_value] [Iref2_value]\n"); + rt_kprintf("RC4MTrim [En_update] [trim_value] \n"); + rt_kprintf("RC128KTrim [En_update] [trim_value] \n"); + rt_kprintf("SetMTPVol [L_V_Class] [H_V_Class] \n"); + rt_kprintf("EraseMTP [Addr] [Erase_Type] \n"); + rt_kprintf("IICWriteMTP [N datas len < 11] \n"); + rt_kprintf("IICReadMTP [read len] \n"); + rt_kprintf("IICMTPState read MTP status \n"); + } +} + +MSH_CMD_EXPORT_ALIAS(MCCheckerTest ,MCI, EW IIC CMD ); + +static void EWDriverTest(int argc, char**argv) +{ + uint16_t us_array[20]; + uint8_t* puc_buf; + uint16_t us_temp; + uint32_t ul_temp,ul_temp2; + RunCfg_un runcfg; + rt_memset(&checker_runcfg.params,0,sizeof(checker_runcfg.params)); + rt_memset(&checker_runcfg.Task_Result,0,sizeof(checker_runcfg.Task_Result)); + checker_runcfg.excue_rtv = 0; + checker_runcfg.param_count = 0; + checker_runcfg.rtv_count = 0; + checker_runcfg.rtv_index = 0; + checker_runcfg.task_info.runindex = 0; + if(argc > 2) + { + checker_runcfg.param_count = argc-2; + us_temp = 0; + while(us_temp < checker_runcfg.param_count) + { + checker_runcfg.params[us_temp] = atoi(argv[us_temp+2]); + us_temp++; + } + } + if (argc < 2) + { + goto EW_help_label_; + }else if(!rt_strcmp(argv[1], "BUS_H")){ + EW_DIFF_MOD_H + }else if(!rt_strcmp(argv[1], "BUS_L")){ + + EW_DIFF_MOD_L + + }else if(!rt_strcmp(argv[1], "BUS_M")){ + EW_DIFF_MOD_M + + }else if(!rt_strcmp(argv[1], "BUS_OFF")){ + HMOS_SWITCH_OFF + + }else if(!rt_strcmp(argv[1], "BUS_ON")){ + HMOS_SWITCH_ON + + } + else if(!rt_strcmp(argv[1], "BUS_CUR")){ + printf("BUS_CUR %d \r\n",Power_GetCurrent()); + } + else if(!rt_strcmp(argv[1], "SetV")){ + us_temp = PowerCalibration_set(checker_runcfg.params[0],checker_runcfg.params[1]); + printf("SetV Excute %d\n",us_temp); + }else if(!rt_strcmp(argv[1], "DModSend")){ + HexStrings2Byte(argv+4,argc-4,(uint8_t*)us_array,20); + DMod_SendBytes((uint8_t*)us_array,checker_runcfg.params[0],checker_runcfg.params[1],1); + } + else if(!rt_strcmp(argv[1], "CommTest")){ + memcpy(us_array,"1234567890ABC",4); + if(checker_runcfg.params[0] < 200) + { + checker_runcfg.params[0] = 200; + } + puc_buf = (uint8_t*)us_array; + us_temp = EW_CommTest(puc_buf,4,checker_runcfg.params[0]); + puc_buf[5+1] = '\0'; + printf("CommTest Excute %d %s\n",us_temp,puc_buf+2); + }else if(!rt_strcmp(argv[1], "EnWriteMTP")){ + us_temp = EW_EnWriteMTP(checker_runcfg.params[0],checker_runcfg.params[1]); + printf("EnWriteMTP Excute %d\n",us_temp); + }else if(!rt_strcmp(argv[1], "WriteMTP")){ + HexStrings2Byte(argv+5,argc-5,(uint8_t*)us_array,sizeof(us_array)); + us_temp = EW_WriteMTP(checker_runcfg.params[0],checker_runcfg.params[1],(uint8_t*)us_array,checker_runcfg.params[3]); + printf("WriteMTP Excute %d\n",us_temp); + }else if(!rt_strcmp(argv[1], "ReadMTP")){ + puc_buf = (uint8_t*)us_array; + us_temp = EW_ReadMTP(checker_runcfg.params[0],checker_runcfg.params[1],puc_buf,checker_runcfg.params[2]); + printf("ReadMTP Excute %d \n",us_temp); + for(us_temp = 0; us_temp < checker_runcfg.params[2]; us_temp++) + { + printf("%02X ",puc_buf[us_temp]); + if((us_temp + 1) %8 == 0) + { + printf("\n"); + } + } + if((us_temp + 1) %8 != 0) + { + printf("\n"); + } + }else if(!rt_strcmp(argv[1], "Boot")){ + us_temp = EW_RunBootLoader(checker_runcfg.params[0],checker_runcfg.params[1]); + printf("Boot Excute %d\n",us_temp); + }else if(!rt_strcmp(argv[1], "WriteRunCfg")){ + runcfg.runcfg_st.fire_mos_sw = checker_runcfg.params[1]; + runcfg.runcfg_st.vbus_rx_sg = 3; + runcfg.runcfg_st.vbus_mode = 1; + runcfg.runcfg_st.reset_run_step = checker_runcfg.params[2]; + runcfg.runcfg_st.uid_len = checker_runcfg.params[3]; + runcfg.runcfg_st.pwd_len = checker_runcfg.params[4]; + runcfg.runcfg_st.version = checker_runcfg.params[5]; + us_temp = EW_WriteRunCfg(checker_runcfg.params[0],&runcfg); + printf("WriteRunCfg Excute %d\n",us_temp); + }else if(!rt_strcmp(argv[1], "SetAddr")){ + puc_buf = (uint8_t*)us_array; + memcpy(argv[3],puc_buf,strlen(argv[3])); + us_temp = EW_SetAddrByUID(checker_runcfg.params[0],puc_buf,strlen(argv[3])-1,(uint8_t*)checker_runcfg.Test_Rtv); + printf("SetAddr Excute %d delay %d state %04X\n",us_temp,checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1]); + }else if(!rt_strcmp(argv[1], "FastSet")){ + puc_buf = (uint8_t*)us_array; + memcpy(argv[5],puc_buf,strlen(argv[5])); + us_temp = EW_FastSetByUID(checker_runcfg.params[0],checker_runcfg.params[1],checker_runcfg.params[2],puc_buf,strlen(argv[5])-1,(uint8_t*)checker_runcfg.Test_Rtv); + printf("FastSet Excute %d delay %d state %04X\n",us_temp,checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1]); + }else if(!rt_strcmp(argv[1], "SetDelay")){ + us_temp = EW_SetDelay(checker_runcfg.params[0],checker_runcfg.params[1]); + printf("SetDelay Excute %d \n",us_temp); + }else if(!rt_strcmp(argv[1], "VerfyPWD")){ + puc_buf = (uint8_t*)us_array; + memcpy(argv[3],puc_buf,strlen(argv[3])); + us_temp = EW_VerfyPWD(checker_runcfg.params[0],puc_buf,strlen(argv[3])-1); + printf("VerfyPWD Excute %d \n",us_temp); + }else if(!rt_strcmp(argv[1], "Boom")){ + us_temp = EW_Boom(checker_runcfg.params[0],checker_runcfg.params[1]); + printf("Boom Excute %d \n",us_temp); + }else if(!rt_strcmp(argv[1], "Charge")){ + us_temp = EW_Charge(checker_runcfg.params[0],checker_runcfg.params[1],checker_runcfg.params[2]); + printf("Charge Excute %d \n",us_temp); + }else if(!rt_strcmp(argv[1], "DisCharge")){ + us_temp = EW_DisCharge(checker_runcfg.params[0]); + printf("DisCharge Excute %d \n",us_temp); + }else if(!rt_strcmp(argv[1], "ReadState")){ + ul_temp = 0; + us_temp = EW_ReadState(checker_runcfg.params[0],(uint8_t*)&ul_temp); + printf("ReadState Excute %d state %08X\n",us_temp,ul_temp); + }else if(!rt_strcmp(argv[1], "ClkAmend")){ + us_temp = EW_ClkAmend(checker_runcfg.params[0],checker_runcfg.params[1],checker_runcfg.params[2]); + printf("ClkAmend Excute %d\n",us_temp); + }else if(!rt_strcmp(argv[1], "Inspect")){ + puc_buf = (uint8_t*)us_array; + us_temp = EW_Inspect(checker_runcfg.params[0],checker_runcfg.params[1],checker_runcfg.params[2],puc_buf); + printf("Inspect Excute %d\n",us_temp); + us_temp = (checker_runcfg.params[1] - checker_runcfg.params[0] + 7)/8; + for(ul_temp = 0; ul_temp< us_temp;ul_temp++) + { + printf("%02X ",puc_buf[us_temp]); + if((us_temp + 1) %8 == 0) + { + printf("\n"); + } + } + if((us_temp + 1) %8 != 0) + { + printf("\n"); + } + } + else if(!rt_strcmp(argv[1], "ClkAmend")){ + us_temp = EW_ClkAmend(checker_runcfg.params[0],checker_runcfg.params[1],checker_runcfg.params[2]); + printf("ClkAmend Excute %d\n",us_temp); + } else if(!rt_strcmp(argv[1], "CheckRunCfg")){ + ul_temp = HexStrings2UInt(argv[3]); + ul_temp2 = HexStrings2UInt(argv[4]); + us_temp = EW_CheckRunCfg(checker_runcfg.params[0],ul_temp,ul_temp2,(uint8_t*)us_array); + printf("CheckRunCfg Excute %d Checke_Flag %d\n",us_temp,us_array[0]); + }else if(!rt_strcmp(argv[1], "ChecSelf")){ + us_array[0] = 0; + us_temp = EW_ChecSelf(checker_runcfg.params[0],checker_runcfg.params[1],(uint8_t*)us_array); + printf("ChecSelf Excute %d SelfCheck Result %d \n",us_temp,us_array[0]); + } else if(!rt_strcmp(argv[1], "SaveFireInfo")){ + us_temp = EW_SaveFireInfo(checker_runcfg.params[0]); + printf("SaveFireInfo Excute %d \n",us_temp); + } else if(!rt_strcmp(argv[1], "ReadDelayState")){ + us_array[0] = 0; + us_temp = EW_ReadDelay(checker_runcfg.params[0],us_array); + printf("SaveFireInfo Excute %d delay %d \n",us_temp,us_array[0]); + }else if(!rt_strcmp(argv[1], "SetReportCfg")){ + us_temp = EW_SetReportCfg(checker_runcfg.params[0],checker_runcfg.params[1]); + printf("SetReportCfg Excute %d \n",us_temp); + } else if(!rt_strcmp(argv[1], "UpdateCommAddr")){ + us_temp = EW_UpdateCommAddr(checker_runcfg.params[0],checker_runcfg.params[1]); + printf("UpdateCommAddr Excute %d \n",us_temp); + }else if(!rt_strcmp(argv[1], "ReadClkAmend")){ + us_temp = EW_ReadClkAmend(checker_runcfg.params[0],&ul_temp); + printf("ReadClkAmend Excute %d amendValue %d\n",us_temp,ul_temp); + }else if(!rt_strcmp(argv[1], "ReadCfgVer")){ + ul_temp2 = 0; + ul_temp = 0; + us_temp = EW_ReadRunCfgVersion(checker_runcfg.params[0],(uint8_t*)&ul_temp,(uint16_t*)&ul_temp2); + printf("ReadCfgVer Excute %d RunCfg %08X Version %04X\n",us_temp,ul_temp,ul_temp2); + }else if(!rt_strcmp(argv[1], "AutoSetAddr")){ + us_temp = EW_AutoSetAddr(checker_runcfg.params[0],checker_runcfg.params[1]); + printf("AutoSetAddr Excute %d \n",us_temp); + }else if(!rt_strcmp(argv[1], "EW_ReadUID")){ + puc_buf = (uint8_t*)us_array; + us_temp = EW_ReadUID(checker_runcfg.params[0],puc_buf,checker_runcfg.params[1]); + printf("EW_ReadUID Excute %d ",us_temp); + us_temp = checker_runcfg.params[1]; + for(ul_temp = 0; ul_temp< us_temp;ul_temp++) + { + printf("%02X ",puc_buf[ul_temp]); + if((ul_temp + 1) %8 == 0) + { + printf("\n"); + } + } + if((ul_temp + 1) %8 != 0) + { + printf("\n"); + } + + } + + + + else{ + EW_help_label_: + rt_kprintf("BUS_H Out High Voltage"); + rt_kprintf("BUS_M Out Midle Voltage\n"); + rt_kprintf("BUS_L Out High Voltage other side\n"); + rt_kprintf("BUS_OFF Close Bus\n"); + rt_kprintf("BUS_ON Open Bus\n"); + rt_kprintf("BUS_CUR Get Bus Current\n"); + rt_kprintf("SetV [Hight_V] [Midle_V]\n"); + rt_kprintf("CommTest [Cycle]VBusD Transport Test \n"); + rt_kprintf("EnWriteMTP [addr][en_flag] Enable or Disable MTP Written \n"); + rt_kprintf("WriteMTP [addr][mtp_addr][dataSize][HexData] Write data to MTP \n"); + rt_kprintf("ReadMTP [addr][mtp_addr][read_len] Read data from MTP \n"); + rt_kprintf("Boot Jump to BootLoader \n"); + rt_kprintf("WriteRunCfg [addr][mos_sw][reset_run_flg][uid_len][pwd_len][version] \n"); + rt_kprintf("SetDelay [addr][delay]\n"); + rt_kprintf("SetAddr [commaddr][UID] Update CommAddr by UID\n"); + rt_kprintf("FastSet [commaddr][delay][pwd_flag][UID] Fast Set Delay and CommAddr By UID\n"); + rt_kprintf("VerfyPWD [addr][pwd] Verfy PWD\n"); + rt_kprintf("Boom [addr][delay] \n"); + rt_kprintf("Charge [addr][voltage_class][group] voltage_class 0 bypass 1 16V 2 20V 3 3.5V addr > group*4 \n"); + rt_kprintf("DisCharge [addr]\n"); + rt_kprintf("ReadState [addr] read delay and state\n"); + rt_kprintf("Inspect [bgaddr] [endaddr] [state_mask]\n"); + rt_kprintf("ClkAmend [addr] [Cycle] [PlusCount]\n"); + rt_kprintf("CheckRunCfg [addr] [Cfg_mask_hex] [Cfg_state_hex]\n"); + rt_kprintf("ChecSelf [addr] [Checke_Mode] [Result]\n"); + rt_kprintf("SaveFireInfo [addr]\n"); + rt_kprintf("ReadDelayState [addr]\n"); + rt_kprintf("SetReportCfg [speed][cur]\n"); + rt_kprintf("UpdateCommAddr [addr][new_addr]\n"); + rt_kprintf("ReadClkAmend [addr]\n"); + rt_kprintf("ReadCfgVer [addr]\n"); + rt_kprintf("AutoSetAddr [addr][addr_fac]\n"); + rt_kprintf("EW_ReadUID [addr][uid_len]\n"); + + } +} +MSH_CMD_EXPORT_ALIAS(EWDriverTest ,EW, EWPro Driver ); diff --git a/source/elec_det/test/EW_TestUsartApp.c b/source/elec_det/test/EW_TestUsartApp.c new file mode 100644 index 0000000..298fd83 --- /dev/null +++ b/source/elec_det/test/EW_TestUsartApp.c @@ -0,0 +1,302 @@ +#include "driver/ewdriver.h" +#include "base/define.h" +#include "base/delay.h" +//#include "console_usart.h" +#include "base/utility.h" +//#include "usartapp.h" +//#include "arrayfifo.h" +//#include "YeCommProtocol.h" +#include "hardware/power.h" +#include "elec_io.h" + +#pragma pack(1) +typedef struct{ +uint8_t head[2];//̶ͷ豸 +uint16_t frame_len;//֡ȣCRC +uint8_t src_addr;//Դַ +uint8_t dist_addr;//Ŀĵַ +uint8_t cmd;// +uint16_t sq;//ˮ +}EwCmd_st; + +typedef struct{ +EwCmd_st head; +uint8_t oper_cmd; +uint16_t h_v; +uint16_t m_v; +}EwBusCmd_st; + +typedef struct{ +EwCmd_st head; +uint8_t oper_cmd; +uint16_t h_v; +uint16_t m_v; +uint16_t bus_v; +uint32_t cur; +uint8_t crc; +}EwHartBeatCmd_st; + +typedef struct{ +EwCmd_st head; +uint16_t r_len; +uint16_t w_len; +uint16_t reate; +uint8_t cmd_delay; +uint8_t buf[64]; +}EwBusRW_st; + +typedef struct{ +EwCmd_st head; +uint8_t ack; +uint8_t buf[96]; +}EwBusRWAck_st; + +typedef struct{ +EwCmd_st head; +uint16_t w_len; +uint16_t cycle; +uint16_t count; +uint16_t reate; +uint8_t cmd_delay; +uint8_t buf[64]; +}EwClkAmend_st; + +typedef struct{ +EwCmd_st head; +uint16_t reate; +uint8_t w_len; +uint8_t cmd_delay; +uint16_t bitcount; +uint8_t buf[64]; +}EwInspect_st; + +typedef union{ + EwCmd_st head; + EwBusCmd_st busoper01; + EwHartBeatCmd_st heartbeat02; + EwBusRW_st busrw03; + EwBusRWAck_st busrwack03; + EwClkAmend_st clkamend04; + EwInspect_st inspect05; + uint8_t buf[128]; + +}EWCmd_un; +#pragma pack() +EWCmd_un ewcmd_nu; +EwHartBeatCmd_st ew_beat_ack; +volatile uint8_t ew_app_rec_flag = 0; +volatile uint8_t heard_beat_flag = 0; +struct rt_event ew_usart0_rx_event; + +//Ӧ +static void EW_AckCmd(EWCmd_un* cmd_un) +{ + uint8_t uc_temp = cmd_un->head.src_addr; + uint8_t uc_last_dist = cmd_un->head.dist_addr; + uint8_t uc_crc = 0; + cmd_un->head.frame_len++;//ȰCRC + cmd_un->head.src_addr = Gpio_GetDeivceAddr();//cmd_un->head.src_addr; + cmd_un->head.dist_addr = uc_temp; + uc_crc = CheckCRC_8(cmd_un->buf,cmd_un->head.frame_len-1); + cmd_un->buf[cmd_un->head.frame_len-1] = uc_crc; + ConsoleUsart_send_bytes(cmd_un->buf,cmd_un->head.frame_len); + //ConsoleUsart0DMA_send_bytes(cmd_un->yecmdbuf,cmd_un->head.frame_len,10); +} + +static void EW_BusCmd01(EWCmd_un* cmd_un) +{ + if(cmd_un->busoper01.oper_cmd == 1) + { + PowerCalibration_set(cmd_un->busoper01.h_v,cmd_un->busoper01.m_v); + EW_DIFF_MOD_H; + }else{ + + PowerCalibration_set(POWER_DEF_V,POWER_DEF_V-10); + EW_BUS_OFF + } + cmd_un->head.frame_len = sizeof(EwCmd_st); + cmd_un->buf[cmd_un->head.frame_len] = 0; + cmd_un->head.frame_len++; + EW_AckCmd(cmd_un); +} +static void EW_HeartBeatCmd02(EWCmd_un* cmd_un) +{ + heard_beat_flag = cmd_un->heartbeat02.oper_cmd; + memcpy(&ew_beat_ack,cmd_un,sizeof(EwCmd_st)); + cmd_un->head.frame_len = sizeof(EwCmd_st); + cmd_un->buf[cmd_un->head.frame_len] = 0; + cmd_un->head.frame_len++; + EW_AckCmd(cmd_un); +} +extern uint16_t EW_DMOD_READ_Timeout; +static void EW_RWCmd03(EWCmd_un* cmd_un) +{ + uint8_t auc_ew_head[2]; + uint8_t uc_ack = 0; + uint16_t ul_readlen = cmd_un->busrw03.r_len; + auc_ew_head[0] = cmd_un->busrw03.buf[0]; + auc_ew_head[1] = cmd_un->busrw03.buf[1]; + if(cmd_un->busrw03.w_len > 0) + { + __disable_irq(); + DMod_SendBytes(cmd_un->busrw03.buf,cmd_un->busrw03.w_len, cmd_un->busrw03.reate,ul_readlen); + __enable_irq(); + } + delay_ms(cmd_un->busrw03.cmd_delay); + if(ul_readlen > 0) + { + __disable_irq(); + uc_ack = DMod_FireBusReadDatasV2(cmd_un->busrwack03.buf,ul_readlen,EW_DMOD_READ_Timeout); + __enable_irq(); + if(ul_readlen == 2 && uc_ack == 0) + { + + if(auc_ew_head[0] != cmd_un->busrwack03.buf[0] || auc_ew_head[1] != cmd_un->busrwack03.buf[1]) + { + uc_ack = 10; + } + }else if(ul_readlen > 2 && uc_ack == 0) + { + if(cmd_un->busrwack03.buf[ul_readlen-1] != CheckCRC_8(cmd_un->busrwack03.buf,ul_readlen-1)) + { + uc_ack = 11; + } + } + } + cmd_un->busrwack03.ack = uc_ack; + cmd_un->busrwack03.head.frame_len = sizeof(EwCmd_st) +1+ ul_readlen; + EW_AckCmd(cmd_un); +} + +static void EW_ClkAmendCmd04(EWCmd_un* cmd_un) +{ + uint16_t us_cycle = cmd_un->clkamend04.cycle; + + __disable_irq(); + DMod_SendBytes(cmd_un->clkamend04.buf,cmd_un->clkamend04.w_len, cmd_un->clkamend04.reate,0); + __enable_irq(); + delay_ms(cmd_un->clkamend04.cmd_delay); + EW_SendTrimSquare(us_cycle,us_cycle>>1,cmd_un->clkamend04.count); + cmd_un->busrwack03.ack = 0; + cmd_un->busrwack03.head.frame_len = sizeof(EwCmd_st) +1; + EW_AckCmd(cmd_un); + +} + +static void EW_InspectCmd05(EWCmd_un* cmd_un) +{ + uint16_t us_cycle = cmd_un->clkamend04.cycle; + uint16_t us_count = 0; + us_count = cmd_un->inspect05.bitcount; + __disable_irq(); + DMod_SendBytes(cmd_un->inspect05.buf,cmd_un->inspect05.w_len, cmd_un->inspect05.reate,1); + __enable_irq(); + delay_ms(cmd_un->inspect05.cmd_delay); + cmd_un->busrwack03.ack = 0; + DMod_ReadInspect_Data(us_count,cmd_un->busrwack03.buf); + cmd_un->busrwack03.head.frame_len = sizeof(EwCmd_st) +((us_count+7)>>3)+1; + EW_AckCmd(cmd_un); + +} + +void EW_DoCmd(EWCmd_un* cmd_un) +{ + switch(cmd_un->head.cmd) + { + case 0x01: EW_BusCmd01(cmd_un);break; + case 0x02: EW_HeartBeatCmd02(cmd_un);break; + case 0x03: EW_RWCmd03(cmd_un); break; + case 0x04: EW_ClkAmendCmd04(cmd_un);break; + case 0x05: EW_InspectCmd05(cmd_un);break; + } +} + + +static void DoHeartBeat() +{ + uint8_t uc_crc; + ew_beat_ack.oper_cmd = 1; + ew_beat_ack.h_v = Power_GetHPowerV(); + ew_beat_ack.m_v = Power_GetMPowerV(); + ew_beat_ack.bus_v = Power_GetBousV(); + ew_beat_ack.cur = Power_GetCurrent(); + ew_beat_ack.head.frame_len = sizeof(EwHartBeatCmd_st); + uc_crc = CheckCRC_8((uint8_t*)&ew_beat_ack,ew_beat_ack.head.frame_len-1); + ew_beat_ack.crc = uc_crc; + ConsoleUsart_send_bytes((uint8_t*)&ew_beat_ack,ew_beat_ack.head.frame_len); + +} + +void EWUsartApp_Task(void* param) +{ + rt_uint32_t event; + uint32_t idle_count = 0; + UNUSED(param); + rt_event_init(&ew_usart0_rx_event, "ew_usart_rx_e", RT_IPC_FLAG_PRIO); + ew_app_rec_flag = 0; + + while(1) + { + if(idle_count > 9) + { + idle_count = 0; + if(heard_beat_flag > 0) + { + DoHeartBeat(); + } + } + + if(rt_event_recv(&ew_usart0_rx_event, UART_MC_FRAME_EVENT,RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,100, &event) != RT_EOK) + { + idle_count++; + continue; + } + + if((event & UART_MC_FRAME_EVENT) > 0) + { + ConsoleRxDisable(); + if(ewcmd_nu.buf[0]=='E' && ewcmd_nu.buf[1] == 'w') + { + + if(ewcmd_nu.buf[ewcmd_nu.head.frame_len-1] == CheckCRC_8(ewcmd_nu.buf,ewcmd_nu.head.frame_len-1)) + { + + EW_DoCmd(&ewcmd_nu); + } + + } + ConsoleRxEnable(); + ew_app_rec_flag = 0; + } + + } + + + } + + +/* +@brief ͨ֡ +@param buf Դݻռ +@paran len ݵij +@rtv +*/ +void EW_UsartApp_Push_Cmd(uint8_t* buf, uint16_t len) +{ + if(ew_app_rec_flag > 0) + { + return; + } + + if(len > sizeof(EWCmd_un)) + { + len = sizeof(EWCmd_un); + } + rt_memcpy((void*)&ewcmd_nu,buf,len); + rt_event_send(&ew_usart0_rx_event,UART_MC_FRAME_EVENT);//ʹݽ¼ + ew_app_rec_flag = 1; +} + + + + diff --git a/source/elec_det/test/Test.c b/source/elec_det/test/Test.c new file mode 100644 index 0000000..5732aed --- /dev/null +++ b/source/elec_det/test/Test.c @@ -0,0 +1,597 @@ +#include "base/define.h" +#include "stdlib.h" +#include "hardware/gpio_cfg.h" +#include "base/delay.h" +#include "hardware/adc_cfg.h" +#include "hardware/power.h" +#include "base/utility.h" +//#include "usartapp.h" +#include "driver/jqdriver.h" +#include "interface/jqchecker.h" +//#include "database.h" +#include "driver/XTDriver.h" +#include "interface/Basechecker.h" +#include "elec_io.h" + + + +volatile uint16_t jq_adc_test_buf[2048]; + +static void OutGroup1(uint32_t count,uint32_t delay,uint32_t cycle) +{ + __disable_irq(); + while(count > 0) + { + PCout(OUTBH_Pin_Nu) = 1; + PBout(OUTAH_Pin_Nu) = 1; + delay_us(delay); + PBout(OUTBL_Pin_Nu) = 0; + PBout(OUTAL_Pin_Nu) = 0; + delay_us(cycle); + PCout(OUTBH_Pin_Nu) = 0; + PBout(OUTAH_Pin_Nu) = 0; + delay_us(delay); + PBout(OUTBL_Pin_Nu) = 1; + PBout(OUTAL_Pin_Nu) = 1; + delay_us(cycle); + count--; + } + __enable_irq(); +} +static void GpioTest(int argc, char**argv) +{ + uint32_t io_value = 0; + uint32_t count = 0,delay,cycle; + if (argc < 3) + { + goto IO_help_label_; + } + if(argc == 3) + { + io_value = atoi(argv[2]); + } + + if (!rt_strcmp(argv[1], "LAVC_M")) + { + PAout(LAVC_M_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "SEG0")) + { + rt_kprintf("Read SEG4 value = %d \n",PCin(SEG0_Pin_Nu)); + }else if(!rt_strcmp(argv[1], "R10_ON")) + { + PBout(R10_ON_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "R510_ON")){ + PBout(R510_ON_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "LED1")){ + PBout(LED1_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "IO_APD12")){ + PBout(IO_APD12_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "LED2")){ + PBout(LED2_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "OUTAL")) + { + PBout(OUTAL_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "OUTBL")) + { + PBout(OUTBL_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "OUTAH")) + { + PBout(OUTAH_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "R100_ON")) + { + PCout(R100_ON_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "OUTBH")) + { + PCout(OUTBH_Pin_Nu) = io_value; + } + else if(!rt_strcmp(argv[1], "Power_ON")) + { + PCout(POWER_ON_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "SEG4")) + { + rt_kprintf("Read SEG4 value = %d \n",PCin(SEG4_Pin_Nu)); + }else if(!rt_strcmp(argv[1], "SEG3")) + { + rt_kprintf("Read SEG4 value = %d \n",PCin(SEG3_Pin_Nu)); + }else if(!rt_strcmp(argv[1], "SEG1")) + { + rt_kprintf("Read SEG4 value = %d \n",PCin(SEG1_Pin_Nu)); + }else if(!rt_strcmp(argv[1], "SEG2")) + { + rt_kprintf("Read SEG4 value = %d \n",PCin(SEG2_Pin_Nu)); + }else if(!rt_strcmp(argv[1], "IO_APD22")) + { + PCout(IO_APD22_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "IO_APD21")) + { + PCout(IO_APD21_Pin_Nu) = io_value; + }else if(!rt_strcmp(argv[1], "IO_APD11")) + { + PCout(IO_APD11_Pin_Nu) = io_value; + } + + else if(!rt_strcmp(argv[1], "Group1")) + { + + count = atoi(argv[2]); + delay = atoi(argv[3]); + cycle = atoi(argv[4]); + OutGroup1(count,delay,cycle); + } + else + { + IO_help_label_: + rt_kprintf("IO [IO_name] 0/1/R \n"); + rt_kprintf("IO Group[number] count delay cycle \n"); + + } +} +MSH_CMD_EXPORT_ALIAS(GpioTest,IO,I/O Input Output test); + +static void DACTest(int argc, char**argv) +{ + uint32_t da_value = 0; + if (argc < 3) + { + goto DAC_help_label_; + } + if(argc == 3) + { + da_value = atoi(argv[2]); + } + + if(!rt_strcmp(argv[1], "C_H_DAC")) + { + if(da_value < 125) + { + rt_kprintf("C_H_DAC Min value 1400"); + }else{ + C_H_DAC_Set(da_value); + } + + }else if(!rt_strcmp(argv[1], "C_M_DAC")) + { + C_M_DAC_Set(da_value); + }else{ + DAC_help_label_: + rt_kprintf("DA [C_H_DAC/C_M_DAC] Value(0~4096) \n"); + } + +} +MSH_CMD_EXPORT_ALIAS(DACTest,DA,Out DA Voltage); +static void ADCTest(int argc, char**argv) +{ + uint16_t adv; + uint16_t ul_count = 0; + if (argc < 2) + { + goto ADC_help_label_; + }else if(!rt_strcmp(argv[1], "V_LA_M")) + { + GetADC1_Value(V_LA_M_CH,&adv,1); + rt_kprintf("V_LA_M = %d \n",adv); + }else if(!rt_strcmp(argv[1], "V_LA_H")) + { + GetADC1_Value(V_LA_H_CH,&adv,1); + rt_kprintf("V_LA_H = %d \n",adv); + }else if(!rt_strcmp(argv[1], "VCC_2V5")) + { + GetADC1_Value(VCC_2V5_CH,&adv,1); + rt_kprintf("VCC_2V5 = %d \n",adv); + }else if(!rt_strcmp(argv[1], "VCC_1V25")) + { + GetADC1_Value(VCC_1V25_CH,&adv,1); + rt_kprintf("VCC_1V25 = %d \n",adv); + }else if(!rt_strcmp(argv[1], "RAD_01")) + { + GetADC1_Value(RAD_01_CH,&adv,1); + rt_kprintf("RAD_01 = %d \n",adv); + }else if(!rt_strcmp(argv[1], "AD_OUTA")) + { + GetADC1_Value(AD_OUTA_CH,&adv,1); + rt_kprintf("AD_OUTA = %d \n",adv); + } + else if(!rt_strcmp(argv[1], "AD_OUTB")) + { + GetADC1_Value(AD_OUTB_CH,&adv,1); + rt_kprintf("AD_OUTB = %d \n",adv); + } + else if(!rt_strcmp(argv[1], "V_BASE")) + { + GetADC1_Value(ADC_Channel_17,&adv,1); + rt_kprintf("V_BASE = %d \n",adv); + }else if(!rt_strcmp(argv[1], "TEMP")) + { + GetADC1_Value(ADC_Channel_16,&adv,1); + rt_kprintf("TEMP = %d \n",adv); + } + else if(!rt_strcmp(argv[1], "AN_UA")) + { + StartADC2Channel(AN_UA_CH,ADC_SPEED_MIDLE); + rt_kprintf("AN_UA = %d \n",GetADC1_Fast()); + }else if(!rt_strcmp(argv[1], "AN_MAL")) + { + StartADC2Channel(AN_MAL_CH,ADC_SPEED_MIDLE); + rt_kprintf("AN_MAL = %d \n",GetADC1_Fast()); + } + else if(!rt_strcmp(argv[1], "FMA")) + { + JQBUS_OFF; + rt_kprintf("Close Bus \n"); + delay_ms(1000); + rt_kprintf("Open Bus \n"); + POWER_ON; + StartADC2Channel(AN_MAL_CH,ADC_SPEED_HIGH); + Power_SetSampleCurrentRange(R100_0p2mA_3mA_MC); + JQBUS_ON; + delay_ms(1); + ul_count = 0; + while(ul_count < 2048) + { + jq_adc_test_buf[ul_count++] = GetADC1_Fast(); + } + ul_count = 0; + rt_kprintf("Sample data \n"); + while(ul_count < 2048) + { + rt_kprintf("%d\t%d\t%d\t%d\n",jq_adc_test_buf[ul_count],jq_adc_test_buf[ul_count+1],jq_adc_test_buf[ul_count+2],jq_adc_test_buf[ul_count+3]); + ul_count +=4; + } + } + else if(!rt_strcmp(argv[1], "FUA")) + { + JQBUS_OFF; + rt_kprintf("Close Bus \n"); + delay_ms(1000); + rt_kprintf("Open Bus \n"); + StartADC2Channel(AN_UA_CH,ADC_SPEED_HIGH); + POWER_ON; + Power_SetSampleCurrentRange(R10_0p1mA_1p6mA_UC); + JQBUS_ON; + delay_ms(1); + ul_count = 0; + while(ul_count < 2048) + { + jq_adc_test_buf[ul_count++] = GetADC1_Fast(); + } + ul_count = 0; + rt_kprintf("Sample data \n"); + while(ul_count < 2048) + { + rt_kprintf("%d\t%d\t%d\t%d\n",jq_adc_test_buf[ul_count],jq_adc_test_buf[ul_count+1],jq_adc_test_buf[ul_count+2],jq_adc_test_buf[ul_count+3]); + ul_count +=4; + } + } + else{ + ADC_help_label_: + rt_kprintf("AD [ChannelName] \n"); + rt_kprintf("AD FUA / FMA \n"); + } + +} +MSH_CMD_EXPORT_ALIAS(ADCTest,AD,Get AD Value); + + + +static void PowerTest(int argc, char**argv) +{ + PowerInfo_st infos_st; + if (argc < 2) + { + goto FB_help_label_; + }else if(!rt_strcmp(argv[1], "ON")) + { + POWER_ON + }else if(!rt_strcmp(argv[1], "OFF")) + { + POWER_OFF + } + else if(!rt_strcmp(argv[1], "HV")) + { + + rt_kprintf("POWER HV(10) %d \n" , Power_GetHPowerV()); + }else if(!rt_strcmp(argv[1], "MV")) + { + rt_kprintf("POWER MV(10) %d \n" , Power_GetMPowerV()); + }else if(!rt_strcmp(argv[1], "CURRENT")){ + rt_kprintf("CURRENT 0.1uA %d \n" , Power_GetCurrent()); + }else if(!rt_strcmp(argv[1], "SET")) + { + infos_st.V_LAH = atoi(argv[2]); + infos_st.V_LAM = atoi(argv[3]); + infos_st.V_LAH_DAC = 0; + infos_st.V_LAM_DAC = 0; + PowerCalibration(&infos_st); + if( infos_st.V_LAH_DAC > 0) + PowerSetVoltage(&infos_st); + + } + else{ + FB_help_label_: + rt_kprintf("POWER [ ON |HV | MV | CURRENT] \n"); + rt_kprintf("POWER [SET] [HV max 260] [MV ] \n"); + } +} +MSH_CMD_EXPORT_ALIAS(PowerTest ,POWER, BUS POWER ); + + +extern Checker_RunCfg_st checker_runcfg; +static void CheckerTest(int argc, char**argv) +{ + uint32_t h_power,m_power; + uint16_t us_array[20]; + uint8_t* puc_buf; + uint16_t us_temp; + rt_memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st)); + if(argc > 2) + { + checker_runcfg.param_count = argc-2; + us_temp = 0; + while(us_temp < checker_runcfg.param_count) + { + checker_runcfg.params[us_temp] = atoi(argv[us_temp+2]); + us_temp++; + } + } + if (argc < 2) + { + goto CH_help_label_; + }else if(!rt_strcmp(argv[1], "ON")){ + JQBUS_ON + }else if(!rt_strcmp(argv[1], "OFF")){ + JQBUS_OFF + } + else if(!rt_strcmp(argv[1], "H")){ + JQBUS_W_1 + + }else if(!rt_strcmp(argv[1], "L")){ + JQBUS_W_0 + }else if(!rt_strcmp(argv[1], "CURRENT")){ + + }else if(!rt_strcmp(argv[1], "PowerPrapare")){ + + Checker_PowerPrapare(); + rt_kprintf("PowerPrapare Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "PowerOn")){ + checker_runcfg.rtv_count = 2; + JQ_Test_PowerOn(); + rt_kprintf("PowerOn Excute %d BusV %d Energy %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1] ); + }else if(!rt_strcmp(argv[1], "SetBusV")){ + checker_runcfg.rtv_count = 1; + JQ_Test_SetBusV(); + rt_kprintf("SetBusV Excute %d BusV %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0] ); + }else if(!rt_strcmp(argv[1], "BaseCur")){ + checker_runcfg.rtv_count = 2; + JQ_Test_BaseCur(); + rt_kprintf("BaseCur Excute %d BusCur1 %d BusCur2 %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1] ); + } + else if(!rt_strcmp(argv[1], "ScanUID")){ + checker_runcfg.rtv_count = 8; + JQ_Test_ScanUID(); + rt_kprintf("ScanUID excute %d, max_cur %d, max_time %d, min_cur %d, min_time %d UID\t",\ + checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1],checker_runcfg.Test_Rtv[2],checker_runcfg.Test_Rtv[3]); + us_temp = 0; + while(us_temp < 4) + { + printf("%02x ",(checker_runcfg.Test_Rtv[us_temp+4]) & 0x0FF); + printf("%02x ",(checker_runcfg.Test_Rtv[us_temp+4]>>8) & 0x0FF); + us_temp++; + } + printf("\n"); + }else if(!rt_strcmp(argv[1], "ReadChipID")){ + checker_runcfg.rtv_count = 1; + JQ_Test_ReadChipID(); + printf("ReadChipID Excute %d ChipID %04x \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "PWCheck")){ + JQ_Test_PWCheck(); + printf("PWCheck Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "OTPCheck")){ + JQ_Test_OTPCheck(); + printf("OTPCheck Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "FTCheck")){ + JQ_Test_FTCheck(); + printf("FTCheck Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "ReadState")){ + checker_runcfg.rtv_count = 1; + JQ_Test_ReadState(); + printf("ReadState Excute %d State %02x\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "WriteUserInfo")){ + JQ_Test_WriteUserInfo(); + printf("WriteUserInfo Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "ChgEnergy")){ + checker_runcfg.rtv_count = 4; + JQ_Test_ChgEnergy(); + printf("ReadState Excute %d Energy_0.1ms %d ",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + printf("EndCur_0.1uA %d ",checker_runcfg.Test_Rtv[1]); + printf("MaxCur_0.1mA %d ",checker_runcfg.Test_Rtv[2]); + printf("ShakeADV %d \n",checker_runcfg.Test_Rtv[3]); + }else if(!rt_strcmp(argv[1], "CheckDAC")){ + checker_runcfg.rtv_count = 1; + JQ_Test_CheckDAC(); + printf("CheckDAC Excute %d End_DAC %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "WaitDelay")){ + checker_runcfg.rtv_count = 1; + Checker_WaitDelay(); + printf("CheckDAC Excute %d End_DAC %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "SetDelay")){ + JQ_Test_SetDelay(); + printf("SetDelay Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "ReadDelay")){ + checker_runcfg.rtv_count = 1; + JQ_Test_ReadDelay(); + printf("ReadDelay Excute %d Delay %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "ClkTrim")){ + JQ_Test_ClkTrim(); + printf("ClkTrim Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "Discharge")){ + JQ_Test_Discharge(); + printf("Discharge Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "Reset")){ + JQ_Test_Reset(); + printf("Reset Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "BootEn")){ + JQ_Test_BootEn(); + printf("BootEn Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "ClearBoom")){ + JQ_Test_ClearBoom(); + printf("ClearBoom Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "BoomEnergy")){ + checker_runcfg.rtv_count = 4; + JQ_Test_BoomEnergy(); + printf("BoomEnergy Excute %d Energy_0.1ms %d ",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + printf("PlusShakeADV %d ",checker_runcfg.Test_Rtv[1]); + printf("MaxChgCur_0.1mA %d ",checker_runcfg.Test_Rtv[2]); + printf("ChgShakeADV %d \n",checker_runcfg.Test_Rtv[3]); + + + }else if(!rt_strcmp(argv[1], "EnCommEndCur")){ + JQ_Test_EnCommEndCur(); + printf("BootEn Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "GetCommEndCur")){ + checker_runcfg.rtv_count = 1; + JQ_Test_GetCommEndCur(); + printf("GetCommEndCur Excute %d CommCur %d\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "PowerOff")){ + JQ_Test_PowerOff(); + printf("PowerOff Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "WriteOTP")){ + HexStrings2Byte(argv+4,argc-4,(uint8_t*)(&checker_runcfg.params[2]),8); + JQ_Test_WriteOTP(); + printf("WriteOTP Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "ReadOTP")){ + us_temp = checker_runcfg.params[1]; + checker_runcfg.rtv_count = (us_temp + 1)/2; + JQ_Test_ReadOTP(); + printf("ReadOTP Excute %d ReadDatas ",checker_runcfg.Task_Result[0]); + puc_buf = (uint8_t*)checker_runcfg.Test_Rtv; + while(us_temp > 0) + { + printf("%02x ",*puc_buf++); + us_temp--; + } + printf("\n"); + }else if(!rt_strcmp(argv[1], "WriteBuf2OTP")){ + JQ_Test_WriteBuf2OTP(); + printf("WriteBuf2OTP Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "BindUIDPWD")){ + + memcpy(us_array,argv[2],strlen(argv[2])); + UidCode_YM2JQ(checker_runcfg.writeuid,(uint8_t*)us_array); + m_power = GetPasswordByUidCode((uint8_t*)us_array); + memcpy(checker_runcfg.writepwd,(uint8_t*)&m_power ,4); + checker_runcfg.pwd_len = 4; + checker_runcfg.uid_len = 8; + JQ_UID_PWD_Bind(); + printf("BindUIDPWD Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "VerifyUIDPWD")){ + JQ_Verify_UID_PWD(); + printf("VerifyUIDPWD Excute %d \n",checker_runcfg.Task_Result[0]); + } + + else if(!rt_strcmp(argv[1], "SetHardVer")){ + HexStrings2Byte(argv+2,argc-2,(uint8_t*)(&boardinfo_un.boardinfo.hard_v),2); + SaveBoardInfo(); + printf("SetHardVer %04x\n",boardinfo_un.boardinfo.hard_v); + }else if(!rt_strcmp(argv[1], "SetRsisDiff")){ + boardinfo_un.boardinfo.resistor_diff = checker_runcfg.params[0]; + SaveBoardInfo(); + printf("SetRsisDiff %d\n",boardinfo_un.boardinfo.resistor_diff); + }else if(!rt_strcmp(argv[1], "ReadBoard")){ + LoadBoardInfo(); + printf("BootFlag %08x HardVersion %02x RsistorDiff %d\n",\ + boardinfo_un.boardinfo.bootflag,boardinfo_un.boardinfo.hard_v,boardinfo_un.boardinfo.resistor_diff); + }else if(!rt_strcmp(argv[1], "ExcuePlan")){ + Ye_RunPlanCheckTest(); + } + else if(!rt_strcmp(argv[1], "SetWriteBuf")){ + HexStrings2Byte(argv+2,argc-2,Checker_FacBuf+2,CHECKER_FAC_BUF_LEN-2); + if(argc > CHECKER_FAC_BUF_LEN) + { + Checker_FacBuf[0] = CHECKER_FAC_BUF_LEN-2; + }else{ + Checker_FacBuf[0] = argc-2; + } + Checker_FacBuf[1] = CheckCRC_8(Checker_FacBuf+2,Checker_FacBuf[0]); + printf("SetWriteBuf Excute 0 \n"); + }else if(!rt_strcmp(argv[1], "ResistorSample")){ + checker_runcfg.rtv_count = 1; + Checker_ResistorSample(); + printf("CheckPWD Excute %d Res(0.01) %d\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "CapVoltage")){ + checker_runcfg.rtv_count = 1; + JQ_Test_CapVoltage(); + printf("CheckPWD Excute %d Res(0.01) %d\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "EnOTPW")){ + JQ_Test_EnOTPW(); + printf("EnOTPW Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "WriteVersion")){ + JQ_Test_WriteVersion(); + printf("WriteVersion Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "ReadVersion")){ + checker_runcfg.rtv_count = 1; + JQ_Test_ReadVersion(); + printf("ReadVersion Excute %d Ver %d\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "WriteFacBuff")){ + JQ_Test_WriteFacBuff(); + printf("WriteFacBuff Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "VerifyFacBuff")){ + JQ_Test_VerifyFacBuff(); + printf("VerifyFacBuff Excute %d ",checker_runcfg.Task_Result[0]); + } + + else{ + CH_help_label_: + rt_kprintf("CH [ON | OFF | H | L ] \n"); + rt_kprintf("PowerPrapare [V1,V2,V3...V10] \n"); + rt_kprintf("PowerOn [Voltage] [TimeOut] [End_ADC_V] \n"); + rt_kprintf("SetBusV [Voltage] \n"); + rt_kprintf("BaseCur \n"); + rt_kprintf("ScanUID [EN_CommCur] [E_UID_Equal_0] \n"); + rt_kprintf("PWCheck [EN_PW_0] \n"); + rt_kprintf("ReadChipID \n"); + rt_kprintf("OTPCheck [EN_UID_PWD_0] [EN_Delay_Re_0] [EN_Factory_0]\n"); + rt_kprintf("FTCheck \n"); + rt_kprintf("ReadState [State_Mask] \n"); + rt_kprintf("WriteUserInfo [2bytes] [2bytes]\n"); + rt_kprintf("ChgEnergy [End_ADV] [Sample_timeout] [End_Cur_0.1] [Wait_Timeout] [Chg_Hold]\n"); + rt_kprintf("CheckDAC [Bg_DAC] [End_DAC]\n"); + rt_kprintf("WaitDelay [Delay_0.1S] [En_Monitor] \n"); + rt_kprintf("SetDelay [Delay] \n"); + rt_kprintf("ReadDelay \n"); + rt_kprintf("ClkTrim [Cycle_us] [Pluse_count] \n"); + rt_kprintf("Discharge \n"); + rt_kprintf("Reset \n"); + rt_kprintf("BoomEnergy [End_ADV] [Plus_Count] [DelaySample_ms]\n"); + rt_kprintf("BootEn \n"); + rt_kprintf("ClearBoom \n"); + rt_kprintf("EnCommEndCur \n"); + rt_kprintf("GetCommEndCur \n"); + rt_kprintf("PowerOff \n"); + rt_kprintf("WriteOTP [OTP_Addr] [Write_Len] [DATA ...]\n"); + rt_kprintf("ReadOTP [OTP_Addr] [Read_Len] \n"); + rt_kprintf("WriteBuf2OTP [OTP_Addr] [Buffer_Addr] [WriteLen] \n"); + rt_kprintf("BindUIDPWD [uid_str] \n"); + rt_kprintf("VerifyUIDPWD \n"); + + rt_kprintf("SetHardVer [HardVersion 2Bytes] \n"); + rt_kprintf("SetRsisDiff [RsistorDiff *100] \n"); + rt_kprintf("ReadBoardInfo \n"); + rt_kprintf("ExcuePlan \n"); + rt_kprintf("SetWriteBuf [HexData...]\n"); + rt_kprintf("ResistorSample [Test_Modle]\n"); + rt_kprintf("CapVoltage [WaitTime 0.1S]\n"); + rt_kprintf("EnOTPW \n"); + rt_kprintf("WriteVersion [Product Ver] \n"); + rt_kprintf("ReadVersion \n"); + rt_kprintf("WriteFacBuff [otp_addr][buf_bg][w_len] \n"); + rt_kprintf("VerifyFacBuff [otp_addr][buf_bg][r_len] \n"); + + } + +} +MSH_CMD_EXPORT_ALIAS(CheckerTest ,JCH, BUS POWER ); + + + + + diff --git a/source/elec_det/test/XTCheckerTest.c b/source/elec_det/test/XTCheckerTest.c new file mode 100644 index 0000000..ba47f1e --- /dev/null +++ b/source/elec_det/test/XTCheckerTest.c @@ -0,0 +1,303 @@ +#include "base/define.h" +#include "stdlib.h" +#include "hardware/gpio_cfg.h" +#include "base/delay.h" +#include "hardware/adc_cfg.h" +#include "hardware/power.h" +#include "base/utility.h" +//#include "usartapp.h" +//#include "database.h" +#include "driver/XTDriver.h" +#include "interface/BaseChecker.h" +#include "interface/XTChecker.h" +#include "elec_io.h" + +//volatile uint16_t jq_adc_test_buf[2048]; +static void XTCheckerTest(int argc, char**argv) +{ + uint32_t h_power,m_power; + uint16_t us_array[20]; + uint8_t* puc_buf; + uint16_t us_temp; + rt_memset(&checker_runcfg.params,0,sizeof(checker_runcfg.params)); + rt_memset(&checker_runcfg.Task_Result,0,sizeof(checker_runcfg.Task_Result)); + checker_runcfg.excue_rtv = 0; + checker_runcfg.param_count = 0; + checker_runcfg.rtv_count = 0; + checker_runcfg.rtv_index = 0; + checker_runcfg.task_info.runindex = 0; + + if(argc > 2) + { + checker_runcfg.param_count = argc-2; + us_temp = 0; + while(us_temp < checker_runcfg.param_count) + { + checker_runcfg.params[us_temp] = atoi(argv[us_temp+2]); + us_temp++; + } + } + if (argc < 2) + { + goto CH_help_label_; + }else if(!rt_strcmp(argv[1], "ON")){ + XTBUS_ON + }else if(!rt_strcmp(argv[1], "OFF")){ + XTBUS_OFF + } + else if(!rt_strcmp(argv[1], "H")){ + XTBUS_W_1 + + }else if(!rt_strcmp(argv[1], "L")){ + XTBUS_W_0 + }else if(!rt_strcmp(argv[1], "CURRENT")){ + rt_kprintf("Bus Cur %d 0.1uA \n",Power_GetCurrent()); + + }else if(!rt_strcmp(argv[1], "PowerPrapare")){ + + Checker_PowerPrapare(); + rt_kprintf("PowerPrapare Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "PowerOn")){ + checker_runcfg.rtv_count = 2; + XT_Test_PowerOn(); + rt_kprintf("PowerOn Excute %d BusV %d Energy %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1] ); + }else if(!rt_strcmp(argv[1], "SetBusV")){ + checker_runcfg.rtv_count = 1; + XT_Test_SetBusV(); + rt_kprintf("SetBusV Excute %d BusV %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0] ); + }else if(!rt_strcmp(argv[1], "BaseCur")){ + checker_runcfg.rtv_count = 2; + XT_Test_BaseCur(); + rt_kprintf("BaseCur Excute %d BusCur1 %d BusCur2 %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1] ); + } + else if(!rt_strcmp(argv[1], "ScanUID")){ + checker_runcfg.rtv_count = (checker_runcfg.params[0]+8+1)/2; + XT_Test_ScanUID(); + rt_kprintf("ScanUID excute %d \t",checker_runcfg.Task_Result[0]); + us_temp = 0; + while(us_temp < checker_runcfg.rtv_count) + { + printf("%02x ",(checker_runcfg.Test_Rtv[us_temp]) & 0x0FF); + printf("%02x ",(checker_runcfg.Test_Rtv[us_temp]>>8) & 0x0FF); + us_temp++; + } + printf("\n"); + }else if(!rt_strcmp(argv[1], "WriteChipCfg")){ + XT_Test_WriteChipCfg(); + printf("WriteChipCfg Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "CheckChipCfg")){ + XT_Test_CheckChipCfg(); + printf("CheckChipCfg Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "BindTestCode")){ + XT_Test_BindTestCode(); + printf("BindTestCode Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "ChgEnergy")){ + checker_runcfg.rtv_count = 4; + XT_Test_ChgEnergy(); + printf("ReadState Excute %d Energy_0.1ms %d ",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + printf("EndCur_0.1uA %d ",checker_runcfg.Test_Rtv[1]); + printf("MaxCur_0.1mA %d ",checker_runcfg.Test_Rtv[2]); + printf("ShakeADV %d \n",checker_runcfg.Test_Rtv[3]); + } else if(!rt_strcmp(argv[1], "WriteRunField")){ + XT_Test_WriteRunField(); + printf("WriteRunField Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "CheckRunField")){ + checker_runcfg.rtv_count = 4; + XT_Test_CheckRunField(); + printf("ReadState Excute %d MaxCur %d MaxTime %d MinCur %d MinTime %d\n",checker_runcfg.Task_Result[0],\ + checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1],checker_runcfg.Test_Rtv[2],checker_runcfg.Test_Rtv[3]); + }else if(!rt_strcmp(argv[1], "Resister")){ + checker_runcfg.rtv_count = 1; + XT_Test_Resister(); + printf("Resister Excute %d R_adc %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "Cap")){ + checker_runcfg.rtv_count = 1; + XT_Test_Cap(); + printf("Cap Excute %d Cap %d 0.1uf\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "WaitDelay")){ + Checker_WaitDelay(); + printf("Cap Excute %d C\n",checker_runcfg.Task_Result[0]); + } + else if(!rt_strcmp(argv[1], "WriteShell")){ + XT_Test_WriteShell(); + printf("WriteShell Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "WriteUID")){ + XT_Test_WriteUID(); + printf("WriteUID Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "WritePWD")){ + XT_Test_WritePWD(); + printf("WritePWD Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "CheckBackFlag")){ + XT_Test_CheckBackFlag(); + printf("CheckBackFlag Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "ReadBackFlag")){ + checker_runcfg.rtv_count = 2; + XT_Test_ReadBackFlag(); + printf("Discharge Excute %d BackBytes %04X %04X\n ",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1]); + }else if(!rt_strcmp(argv[1], "Trim")){ + XT_Test_Trim(); + printf("Trim Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "Discharge")){ + XT_Test_Discharge(); + printf("Discharge Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "EnCommEndCur")){ + XT_Test_EnCommEndCur(); + printf("EnCommEndCur Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "GetCommEndCur")){ + checker_runcfg.rtv_count = 1; + XT_Test_GetCommEndCur(); + printf("GetCommEndCur Excute %d Cur_ADC %d ",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + + }else if(!rt_strcmp(argv[1], "OneLineCheck")){ + XT_Test_OneLineCheck(); + printf("OneLineCheck Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "CheckState")){ + checker_runcfg.rtv_count = 1; + XT_Test_CheckState(); + printf("CheckState Excute %d CommCur %d\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "Boom")){ + checker_runcfg.rtv_count = 2; + XT_Test_Boom(); + printf("Boom Excute %d delay %d 0.1ms net_id %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[1],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "Reset")){ + XT_Test_Reset(); + printf("Reset Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "PowerOFF")){ + XT_Test_PowerOFF(); + printf("PowerOFF Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "LockCmdC")){ + XT_Test_LockCmdC(); + printf("LockCmdC Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "CodeBindEn")){ + XT_Test_CodeBindEn(); + printf("LockCmdC Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "SetWriteBuf")){ + Checker_FacBuf[0] = strlen(argv[2]); + memcpy(Checker_FacBuf+2,argv[2],Checker_FacBuf[0]); + Checker_FacBuf[1] = CheckCRC_8(Checker_FacBuf+2,Checker_FacBuf[0]); + printf("SetWriteBuf Excute 0 \n"); + }else if(!rt_strcmp(argv[1], "SetWriteBufHex")){ + HexStrings2Byte(argv+2,argc-2,Checker_FacBuf+2,48); + Checker_FacBuf[0] = argc-2; + Checker_FacBuf[1] = CheckCRC_8(Checker_FacBuf+2,Checker_FacBuf[0]); + printf("SetWriteBufHex Excute 0 \n"); + }else if(!rt_strcmp(argv[1], "InputCheck")){ + checker_runcfg.rtv_count = 1; + XT_Test_InputCheck(); + printf("InputCheck Excute %d BusVoltage %d \n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "CheckPWD")){ + XT_Test_CheckPWD(); + printf("CheckPWD Excute %d \n",checker_runcfg.Task_Result[0]); + + }else if(!rt_strcmp(argv[1], "UID_PWD_Bind")){ + + printf("UID_PWD_Bind Excute %d \n",XT_UID_PWD_Bind()); + }else if(!rt_strcmp(argv[1], "ResistorSample")){ + checker_runcfg.rtv_count = 1; + Checker_ResistorSample(); + printf("ResistorSample Excute %d Res(0.01) %d\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + } + else if(!rt_strcmp(argv[1], "LoadChipCfg")){ + checker_runcfg.rtv_count = 4; + XT_Test_LoadChipCfg(); + printf("LoadChipCfg Excute %d UID_LEN %d PWD_LEN %d CUR_CLASS %d Ver %d\n",\ + checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0],checker_runcfg.Test_Rtv[1],checker_runcfg.Test_Rtv[3],checker_runcfg.Test_Rtv[2]); + } + else if(!rt_strcmp(argv[1], "CapVoltage")){ + checker_runcfg.rtv_count = 1; + XT_Test_CapVoltage(); + printf("CheckPWD Excute %d Res(0.01) %d\n",checker_runcfg.Task_Result[0],checker_runcfg.Test_Rtv[0]); + }else if(!rt_strcmp(argv[1], "BindUIDPWD")){ + + memcpy(us_array,argv[2],strlen(argv[2])); + UidCode_YM2JQ(checker_runcfg.writeuid,(uint8_t*)us_array); + + m_power = GetPasswordByUidCode((uint8_t*)us_array); + memcpy(checker_runcfg.writepwd,(uint8_t*)&m_power ,4); + + checker_runcfg.pwd_len = 4; + checker_runcfg.uid_len = 8; + XT_Test_UID_PWD_Bind(); + printf("BindUIDPWD Excute %d \n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "VerifyUIDPWD")){ + XT_Test_UID_PWD_Verify(); + printf("VerifyUIDPWD Excute %d \n",checker_runcfg.Task_Result[0]); + } + + + else if(!rt_strcmp(argv[1], "SetHardVer")){ + HexStrings2Byte(argv+2,argc-2,(uint8_t*)(&boardinfo_un.boardinfo.hard_v),2); + SaveBoardInfo(); + printf("SetHardVer %04x\n",boardinfo_un.boardinfo.hard_v); + }else if(!rt_strcmp(argv[1], "SetRsisDiff")){ + boardinfo_un.boardinfo.resistor_diff = checker_runcfg.params[0]; + SaveBoardInfo(); + printf("SetRsisDiff %d\n",boardinfo_un.boardinfo.resistor_diff); + }else if(!rt_strcmp(argv[1], "ReadBoard")){ + LoadBoardInfo(); + printf("BootFlag %08x HardVersion %02x RsistorDiff %d\n PlanID " ,\ + boardinfo_un.boardinfo.bootflag,boardinfo_un.boardinfo.hard_v,boardinfo_un.boardinfo.resistor_diff); + }else if(!rt_strcmp(argv[1], "ExcuePlan")){ + Ye_RunPlanCheckTest(); + }else if(!rt_strcmp(argv[1], "CurMonitor")){ + XT_CurMonitor(); + printf("CurMonitor Excute %d\n",checker_runcfg.Task_Result[0]); + }else if(!rt_strcmp(argv[1], "VerfyShell")){ + XT_Test_VerfyShell(); + printf("VerfyShell Excute %d\n",checker_runcfg.Task_Result[0]); + } + + else{ + CH_help_label_: + rt_kprintf("CH [ON | OFF | H | L ] \n"); + rt_kprintf("PowerPrapare [V1,V2,V3...V10] \n"); + rt_kprintf("PowerOn [Voltage] [TimeOut] [End_ADC_V] \n"); + rt_kprintf("SetBusV [Voltage] \n"); + rt_kprintf("BaseCur \n"); + rt_kprintf("ScanUID [UID_LEN] [E_UID_Equal_0]\n"); + rt_kprintf("WriteChipCfg [UID_LEN] [PWD_LEN] [FreeBack_Class] [Ver] \n"); + rt_kprintf("CheckChipCfg [UID_LEN] [PWD_LEN] [FreeBack_Class] [Ver] \n"); + rt_kprintf("BindTestCode \n"); + rt_kprintf("ChgEnergy [Vol_Class] [End_ADV] [End_Cur_0.1] [Wait_Timeout] [Chg_Hold]\n"); + rt_kprintf("WriteRunField [Net_ID] [Delay] [Local_Num]\n"); + rt_kprintf("CheckRunField [Net_ID] [Delay] [Local_Num] [En_Freebakc_0]\n"); + rt_kprintf("Resister \n"); + rt_kprintf("Cap [Chg_Class][Measure_Time]\n"); + rt_kprintf("WriteShell [Buf_Bg] [Len] \n"); + rt_kprintf("WaitDelay [Delay_0.1S] [En_Monitor] \n"); + rt_kprintf("WriteUID [Buf_Bg] [Len] \n"); + rt_kprintf("WritePWD [Buf_Bg] [Len]\n"); + rt_kprintf("CheckBackFlag [EN_1Checke_0Write] [2BytesMask] [2BytesData]\n"); + rt_kprintf("ReadBackFlag \n"); + rt_kprintf("Trim [Trim_Mode][Cycle][Count]\n"); + rt_kprintf("Discharge \n"); + rt_kprintf("EnCommEndCur \n"); + rt_kprintf("GetCommEndCur \n"); + rt_kprintf("OneLineCheck [NetID] [MaxNetId]\n"); + rt_kprintf("CheckState [StateMask] \n"); + rt_kprintf("Boom [Monitor_time]\n"); + rt_kprintf("Reset \n"); + rt_kprintf("PowerOFF \n"); + rt_kprintf("LockCmdC \n"); + rt_kprintf("CodeBindEn \n"); + rt_kprintf("InputCheck [BusVoltage][TimeOut_1ms]\n"); + rt_kprintf("CheckPWD \n"); + rt_kprintf("SetHardVer [HardVersion 2Bytes] \n"); + rt_kprintf("SetRsisDiff [RsistorDiff *100] \n"); + rt_kprintf("ReadBoardInfo \n"); + rt_kprintf("SetWriteBuf [HexData...]\n"); + rt_kprintf("ResistorSample [Test_Modle]\n"); + rt_kprintf("CapVoltage [WaitTime 0.1S]\n"); + rt_kprintf("BindUIDPWD [uid_str] \n"); + rt_kprintf("VerifyUIDPWD \n"); + rt_kprintf("OnlineScan [BusV][TimeOUt][UIDLen] \n"); + rt_kprintf("VerfyShell [buf_bg][len] \n"); + rt_kprintf("ExcuePlan \n"); + + + } + +} +MSH_CMD_EXPORT_ALIAS(XTCheckerTest ,XCH, XT CHecker ); + + diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index 76534ed..2f54d70 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-10-11 17:33:01" +#define BUILD_DATE "2023-10-12 18:40:51" #define SOFT_VERSION "0.03" diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c index 8079ad1..d357e72 100644 --- a/source/task/tran_for_slave.c +++ b/source/task/tran_for_slave.c @@ -494,5 +494,22 @@ transmit_export(ym_slave,0x13,bootinfo) +// 写缓存 +static int write_fatbuf_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str) +{ + emit tran_reply_signal(u->p,arr_temp(elec_write_fat_buff(data))); + return 0; +} +static ucport_def *write_fatbuf(tran_def *t, uint8_t cmd,array_def *data) +{ + int ret=0; + slave_def *u=slave_creat(); + u->u.p=t; + u->u.del=slave_del; + u->u.dolater=write_fatbuf_dolater; + u->u.dolater(&u->u,cmd,data,"ok"); + return (ucport_def *)u; +} +transmit_export(ym_slave,0x19,write_fatbuf)