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)