diff --git a/checher_slave.uvoptx b/coder_2channel.uvoptx similarity index 88% rename from checher_slave.uvoptx rename to coder_2channel.uvoptx index a38ef89..d0daa00 100644 --- a/checher_slave.uvoptx +++ b/coder_2channel.uvoptx @@ -103,7 +103,7 @@ 1 0 0 - 0 + 4 @@ -114,18 +114,18 @@ - BIN\UL2CM3.DLL + Segger\JL2CM3.dll 0 UL2CM3 - UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM) + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_512 -FL080000 -FS08000000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM) 0 JL2CM3 - -U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM) + -U69655983 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM) 0 @@ -499,7 +499,7 @@ core - 0 + 1 0 0 0 @@ -891,18 +891,6 @@ 0 0 - - 4 - 33 - 1 - 0 - 0 - 0 - .\source\interface\if_can.c - if_can.c - 0 - 0 - @@ -913,7 +901,7 @@ 0 5 - 34 + 33 1 0 0 @@ -925,7 +913,7 @@ 5 - 35 + 34 1 0 0 @@ -937,7 +925,7 @@ 5 - 36 + 35 1 0 0 @@ -949,218 +937,6 @@ - - elec_det - 1 - 0 - 0 - 0 - - 6 - 37 - 1 - 0 - 0 - 0 - .\source\elec_det\base\delay.c - delay.c - 0 - 0 - - - 6 - 38 - 1 - 0 - 0 - 0 - .\source\elec_det\base\utility.c - utility.c - 0 - 0 - - - 6 - 39 - 1 - 0 - 0 - 0 - .\source\elec_det\hardware\adc_cfg.c - adc_cfg.c - 0 - 0 - - - 6 - 40 - 1 - 0 - 0 - 0 - .\source\elec_det\hardware\dac_cfg.c - dac_cfg.c - 0 - 0 - - - 6 - 41 - 1 - 0 - 0 - 0 - .\source\elec_det\hardware\gpio_cfg.c - gpio_cfg.c - 0 - 0 - - - 6 - 42 - 1 - 0 - 0 - 0 - .\source\elec_det\hardware\hardware.c - hardware.c - 0 - 0 - - - 6 - 43 - 1 - 0 - 0 - 0 - .\source\elec_det\hardware\jw3425iic.c - jw3425iic.c - 0 - 0 - - - 6 - 44 - 1 - 0 - 0 - 0 - .\source\elec_det\hardware\power.c - power.c - 0 - 0 - - - 6 - 45 - 1 - 0 - 0 - 0 - .\source\elec_det\hardware\timer_cfg.c - timer_cfg.c - 0 - 0 - - - 6 - 46 - 1 - 0 - 0 - 0 - .\source\elec_det\driver\EWDriver.c - EWDriver.c - 0 - 0 - - - 6 - 47 - 1 - 0 - 0 - 0 - .\source\elec_det\driver\JQDriver.c - JQDriver.c - 0 - 0 - - - 6 - 48 - 1 - 0 - 0 - 0 - .\source\elec_det\driver\LGDriver.c - LGDriver.c - 0 - 0 - - - 6 - 49 - 1 - 0 - 0 - 0 - .\source\elec_det\driver\XTDriver.c - XTDriver.c - 0 - 0 - - - 6 - 50 - 1 - 0 - 0 - 0 - .\source\elec_det\interface\BaseChecker.c - BaseChecker.c - 0 - 0 - - - 6 - 51 - 1 - 0 - 0 - 0 - .\source\elec_det\interface\JQChecker.c - JQChecker.c - 0 - 0 - - - 6 - 52 - 1 - 0 - 0 - 0 - .\source\elec_det\interface\XTChecker.c - XTChecker.c - 0 - 0 - - - 6 - 53 - 1 - 0 - 0 - 0 - .\source\elec_det\elec_det.c - elec_det.c - 0 - 0 - - - rtt 0 @@ -1168,8 +944,8 @@ 0 0 - 7 - 54 + 6 + 36 1 0 0 @@ -1180,8 +956,8 @@ 0 - 7 - 55 + 6 + 37 1 0 0 @@ -1200,8 +976,8 @@ 0 0 - 8 - 56 + 7 + 38 1 0 0 @@ -1212,8 +988,8 @@ 0 - 8 - 57 + 7 + 39 1 0 0 @@ -1224,8 +1000,8 @@ 0 - 8 - 58 + 7 + 40 1 0 0 @@ -1236,8 +1012,8 @@ 0 - 8 - 59 + 7 + 41 1 0 0 @@ -1248,8 +1024,8 @@ 0 - 8 - 60 + 7 + 42 1 0 0 @@ -1260,8 +1036,8 @@ 0 - 8 - 61 + 7 + 43 1 0 0 @@ -1272,8 +1048,8 @@ 0 - 8 - 62 + 7 + 44 1 0 0 @@ -1284,8 +1060,8 @@ 0 - 8 - 63 + 7 + 45 1 0 0 @@ -1296,8 +1072,8 @@ 0 - 8 - 64 + 7 + 46 1 0 0 @@ -1308,8 +1084,8 @@ 0 - 8 - 65 + 7 + 47 1 0 0 @@ -1320,8 +1096,8 @@ 0 - 8 - 66 + 7 + 48 1 0 0 @@ -1332,8 +1108,8 @@ 0 - 8 - 67 + 7 + 49 1 0 0 @@ -1344,8 +1120,8 @@ 0 - 8 - 68 + 7 + 50 1 0 0 @@ -1356,8 +1132,8 @@ 0 - 8 - 69 + 7 + 51 1 0 0 @@ -1368,8 +1144,8 @@ 0 - 8 - 70 + 7 + 52 1 0 0 @@ -1380,8 +1156,8 @@ 0 - 8 - 71 + 7 + 53 1 0 0 @@ -1392,8 +1168,8 @@ 0 - 8 - 72 + 7 + 54 1 0 0 @@ -1404,8 +1180,8 @@ 0 - 8 - 73 + 7 + 55 1 0 0 @@ -1416,8 +1192,8 @@ 0 - 8 - 74 + 7 + 56 2 0 0 @@ -1431,13 +1207,13 @@ soft - 0 + 1 0 0 0 - 9 - 75 + 8 + 57 1 0 0 @@ -1448,8 +1224,8 @@ 0 - 9 - 76 + 8 + 58 1 0 0 @@ -1460,8 +1236,8 @@ 0 - 9 - 77 + 8 + 59 1 0 0 @@ -1472,8 +1248,8 @@ 0 - 9 - 78 + 8 + 60 1 0 0 @@ -1484,8 +1260,8 @@ 0 - 9 - 79 + 8 + 61 1 0 0 @@ -1496,8 +1272,8 @@ 0 - 9 - 80 + 8 + 62 1 0 0 @@ -1508,8 +1284,8 @@ 0 - 9 - 81 + 8 + 63 1 0 0 @@ -1520,8 +1296,8 @@ 0 - 9 - 82 + 8 + 64 1 0 0 @@ -1532,8 +1308,8 @@ 0 - 9 - 83 + 8 + 65 1 0 0 @@ -1544,8 +1320,8 @@ 0 - 9 - 84 + 8 + 66 1 0 0 @@ -1556,8 +1332,8 @@ 0 - 9 - 85 + 8 + 67 1 0 0 @@ -1576,8 +1352,20 @@ 0 0 - 10 - 86 + 9 + 68 + 1 + 0 + 0 + 0 + .\source\task\prot_mcu.c + prot_mcu.c + 0 + 0 + + + 9 + 69 1 0 0 @@ -1588,8 +1376,20 @@ 0 - 10 - 87 + 9 + 70 + 1 + 0 + 0 + 0 + .\source\task\moter.c + moter.c + 0 + 0 + + + 9 + 71 1 0 0 @@ -1600,8 +1400,8 @@ 0 - 10 - 88 + 9 + 72 1 0 0 @@ -1612,8 +1412,32 @@ 0 - 10 - 89 + 9 + 73 + 1 + 0 + 0 + 0 + .\source\task\tran_for_checker.c + tran_for_checker.c + 0 + 0 + + + 9 + 74 + 1 + 0 + 0 + 0 + .\source\task\tran_for_coder2.c + tran_for_coder2.c + 0 + 0 + + + 9 + 75 1 0 0 @@ -1624,8 +1448,44 @@ 0 - 10 - 90 + 9 + 76 + 1 + 0 + 0 + 0 + .\source\task\handle.c + handle.c + 0 + 0 + + + 9 + 77 + 1 + 0 + 0 + 0 + .\source\task\handle_for_checker.c + handle_for_checker.c + 0 + 0 + + + 9 + 78 + 1 + 0 + 0 + 0 + .\source\task\handle_for_coder.c + handle_for_coder.c + 0 + 0 + + + 9 + 79 1 0 0 @@ -1636,14 +1496,26 @@ 0 - 10 - 91 + 9 + 80 1 0 0 0 - .\source\task\tran_for_slave.c - tran_for_slave.c + .\source\task\process.c + process.c + 0 + 0 + + + 9 + 81 + 1 + 0 + 0 + 0 + .\source\task\input.c + input.c 0 0 @@ -1656,8 +1528,8 @@ 0 0 - 11 - 92 + 10 + 82 1 0 0 @@ -1671,13 +1543,13 @@ coder - 0 + 1 0 0 0 - 12 - 93 + 11 + 83 1 0 0 @@ -1688,8 +1560,8 @@ 0 - 12 - 94 + 11 + 84 1 0 0 @@ -1700,8 +1572,8 @@ 0 - 12 - 95 + 11 + 85 1 0 0 @@ -1712,8 +1584,8 @@ 0 - 12 - 96 + 11 + 86 1 0 0 @@ -1724,8 +1596,8 @@ 0 - 12 - 97 + 11 + 87 1 0 0 @@ -1736,8 +1608,8 @@ 0 - 12 - 98 + 11 + 88 1 0 0 @@ -1756,8 +1628,8 @@ 0 0 - 13 - 99 + 12 + 89 5 0 0 @@ -1776,8 +1648,8 @@ 0 0 - 14 - 100 + 13 + 90 5 0 0 @@ -1788,8 +1660,8 @@ 0 - 14 - 101 + 13 + 91 5 0 0 diff --git a/checher_slave.uvprojx b/coder_2channel.uvprojx similarity index 90% rename from checher_slave.uvprojx rename to coder_2channel.uvprojx index e8a35b5..3c1a6d4 100644 --- a/checher_slave.uvprojx +++ b/coder_2channel.uvprojx @@ -10,20 +10,20 @@ app 0x4 ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC 0 - STM32F103RC + STM32F103RE STMicroelectronics Keil.STM32F1xx_DFP.2.1.0 http://www.keil.com/pack/ - IRAM(0x20000000,0xC000) IROM(0x08000000,0x40000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE + IRAM(0x20000000,0x10000) IROM(0x08000000,0x80000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM)) + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103RE$Flash\STM32F10x_512.FLM)) 0 - $$Device:STM32F103RC$Device\Include\stm32f10x.h + $$Device:STM32F103RE$Device\Include\stm32f10x.h @@ -33,7 +33,7 @@ - $$Device:STM32F103RC$SVD\STM32F103xx.svd + $$Device:STM32F103RE$SVD\STM32F103xx.svd 0 0 @@ -49,7 +49,7 @@ 1 .\Objects\app\ - checker_slave_app + coder_2channel_app 1 0 1 @@ -138,7 +138,7 @@ 1 BIN\UL2CM3.DLL - + "" () @@ -185,7 +185,6 @@ 0 0 0 - 0 0 0 8 @@ -246,12 +245,12 @@ 0 0x20000000 - 0xc000 + 0x10000 1 0x8000000 - 0x40000 + 0x80000 0 @@ -276,7 +275,7 @@ 1 0x8004000 - 0x40000 + 0x80000 1 @@ -301,7 +300,7 @@ 0 0x20000020 - 0xc000 + 0x10000 0 @@ -339,7 +338,7 @@ --diag_suppress=550,177 --locale=english STM32F10X_HD,USE_STDPERIPH_DRIVER,RT_THREAD - .\source\interface;.\source\core;.\source\stm32lib\inc;.\source\main;.\source\RTT;.\source\rt_thread\include;.\source\rt_thread;.\source\soft;.\source\task;.\source\dev;.\source\codec;.\source\coder;.\source\elec_det + .\source\interface;.\source\core;.\source\stm32lib\inc;.\source\main;.\source\RTT;.\source\rt_thread\include;.\source\rt_thread;.\source\soft;.\source\task;.\source\dev;.\source\codec;.\source\coder @@ -352,7 +351,7 @@ 0 0 0 - 4 + 0 @@ -558,11 +557,6 @@ 1 .\source\interface\if_gpioout.c - - if_can.c - 1 - .\source\interface\if_can.c - @@ -585,147 +579,6 @@ - - elec_det - - - delay.c - 1 - .\source\elec_det\base\delay.c - - - utility.c - 1 - .\source\elec_det\base\utility.c - - - adc_cfg.c - 1 - .\source\elec_det\hardware\adc_cfg.c - - - dac_cfg.c - 1 - .\source\elec_det\hardware\dac_cfg.c - - - gpio_cfg.c - 1 - .\source\elec_det\hardware\gpio_cfg.c - - - hardware.c - 1 - .\source\elec_det\hardware\hardware.c - - - jw3425iic.c - 1 - .\source\elec_det\hardware\jw3425iic.c - - - power.c - 1 - .\source\elec_det\hardware\power.c - - - timer_cfg.c - 1 - .\source\elec_det\hardware\timer_cfg.c - - - EWDriver.c - 1 - .\source\elec_det\driver\EWDriver.c - - - JQDriver.c - 1 - .\source\elec_det\driver\JQDriver.c - - - LGDriver.c - 1 - .\source\elec_det\driver\LGDriver.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 - - - - - - - - - - - - XTDriver.c - 1 - .\source\elec_det\driver\XTDriver.c - - - BaseChecker.c - 1 - .\source\elec_det\interface\BaseChecker.c - - - JQChecker.c - 1 - .\source\elec_det\interface\JQChecker.c - - - XTChecker.c - 1 - .\source\elec_det\interface\XTChecker.c - - - elec_det.c - 1 - .\source\elec_det\elec_det.c - - - rtt @@ -904,11 +757,21 @@ task + + prot_mcu.c + 1 + .\source\task\prot_mcu.c + prot_uc.c 1 .\source\task\prot_uc.c + + moter.c + 1 + .\source\task\moter.c + commend.c 1 @@ -919,20 +782,50 @@ 1 .\source\task\transmit.c + + tran_for_checker.c + 1 + .\source\task\tran_for_checker.c + + + tran_for_coder2.c + 1 + .\source\task\tran_for_coder2.c + tran_for_coder2ch.c 1 .\source\task\tran_for_coder2ch.c + + handle.c + 1 + .\source\task\handle.c + + + handle_for_checker.c + 1 + .\source\task\handle_for_checker.c + + + handle_for_coder.c + 1 + .\source\task\handle_for_coder.c + mod_signals.c 1 .\source\task\mod_signals.c - tran_for_slave.c + process.c 1 - .\source\task\tran_for_slave.c + .\source\task\process.c + + + input.c + 1 + .\source\task\input.c @@ -1063,7 +956,7 @@ boot 0x4 ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC 0 @@ -1102,7 +995,7 @@ 1 .\Objects\boot\ - checker_slave_boot + coder_2channel_boot 1 0 1 @@ -1238,7 +1131,6 @@ 0 0 0 - 0 0 0 8 @@ -1405,7 +1297,7 @@ 0 0 0 - 4 + 0 @@ -1713,62 +1605,6 @@ 1 .\source\interface\if_gpioout.c - - if_can.c - 1 - .\source\interface\if_can.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 - - - - - - - - - - @@ -1791,165 +1627,6 @@ - - elec_det - - - 0 - 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 - - - - - - - - - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - - - - - - - - - - - - delay.c - 1 - .\source\elec_det\base\delay.c - - - utility.c - 1 - .\source\elec_det\base\utility.c - - - adc_cfg.c - 1 - .\source\elec_det\hardware\adc_cfg.c - - - dac_cfg.c - 1 - .\source\elec_det\hardware\dac_cfg.c - - - gpio_cfg.c - 1 - .\source\elec_det\hardware\gpio_cfg.c - - - hardware.c - 1 - .\source\elec_det\hardware\hardware.c - - - jw3425iic.c - 1 - .\source\elec_det\hardware\jw3425iic.c - - - power.c - 1 - .\source\elec_det\hardware\power.c - - - timer_cfg.c - 1 - .\source\elec_det\hardware\timer_cfg.c - - - EWDriver.c - 1 - .\source\elec_det\driver\EWDriver.c - - - JQDriver.c - 1 - .\source\elec_det\driver\JQDriver.c - - - LGDriver.c - 1 - .\source\elec_det\driver\LGDriver.c - - - XTDriver.c - 1 - .\source\elec_det\driver\XTDriver.c - - - BaseChecker.c - 1 - .\source\elec_det\interface\BaseChecker.c - - - JQChecker.c - 1 - .\source\elec_det\interface\JQChecker.c - - - XTChecker.c - 1 - .\source\elec_det\interface\XTChecker.c - - - elec_det.c - 1 - .\source\elec_det\elec_det.c - - - rtt @@ -2906,7 +2583,7 @@ 2 2 2 - 0 + 2 @@ -3448,7 +3125,7 @@ 2 2 2 - 0 + 2 @@ -3459,11 +3136,21 @@ + + prot_mcu.c + 1 + .\source\task\prot_mcu.c + prot_uc.c 1 .\source\task\prot_uc.c + + moter.c + 1 + .\source\task\moter.c + commend.c 1 @@ -3474,20 +3161,50 @@ 1 .\source\task\transmit.c + + tran_for_checker.c + 1 + .\source\task\tran_for_checker.c + + + tran_for_coder2.c + 1 + .\source\task\tran_for_coder2.c + tran_for_coder2ch.c 1 .\source\task\tran_for_coder2ch.c + + handle.c + 1 + .\source\task\handle.c + + + handle_for_checker.c + 1 + .\source\task\handle_for_checker.c + + + handle_for_coder.c + 1 + .\source\task\handle_for_coder.c + mod_signals.c 1 .\source\task\mod_signals.c - tran_for_slave.c + process.c 1 - .\source\task\tran_for_slave.c + .\source\task\process.c + + + input.c + 1 + .\source\task\input.c @@ -3552,7 +3269,7 @@ 2 2 2 - 0 + 2 @@ -3631,7 +3348,7 @@ 2 2 2 - 0 + 2 @@ -3709,13 +3426,4 @@ - - - - checher_slave - 1 - - - - diff --git a/source/ReadMe.txt b/source/ReadMe.txt index ce794f3..33258f4 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -177,7 +177,6 @@ 心跳数据在收到回复之后也会继续发送 芯片异常时不检测电容 str_is_print_str 函数中,len为0时返回0 -2023.10.6 - 移植与雷管通信相关代码,编译通过 + \ No newline at end of file diff --git a/source/codec/codec.c b/source/codec/codec.c index b8e2bdd..5fea64b 100644 --- a/source/codec/codec.c +++ b/source/codec/codec.c @@ -12,7 +12,6 @@ #include "crc.h" #include "dev_flash.h" #include "codec.h" -#include "elec_det.h" @@ -200,76 +199,6 @@ protuc_codec_export(ym_coder,protu_decode2,protu_encode2); -// 小板协议解码 -array_def *protm_decode(protu_def *p,array_def *data) -{ - array_def *r=arr_creat(); - param_check(r); - str_set(p->str_err,"ok"); - if(arr_length(data)<10) - { - DBG_WARN("recv data len too less."); - DBG_WARN("data=%s",str_temp(arr_string(data))); - str_set(p->str_err,"recv data len too less."); - return r; - } - uint8_t src=arr_get(data,4); - uint8_t dst=arr_get(data,5); - if((src!=0)||(dst!=elec_local_addr())){ - DBG_WARN("src_addr/dst_addr not allowed."); - DBG_WARN("data=%s",str_temp(arr_string(data))); - str_set(p->str_err,"src_addr/dst_addr not allowed."); - return r; - } - uint16_t len=arr_get(data,2)|(arr_get(data,3)<<8); - uint8_t crc=crc_crc8(arr_data(data),arr_length(data)-1); - if(len!=arr_length(data)) - { - // 如果长度不相等则产生了数据丢失 - DBG_WARN("recv data have lossed."); - str_set(p->str_err,"recv data have lossed."); - return r; - } - uint16_t no=arr_get(data,7)|(arr_get(data,8)<<8); - uint16_t h_no=p->cmd_no; - if(no!=h_no) - { - // 发送一条指令等待其返回,此时流水号应相同 - //DBG_WARN("slave_addr=%d cmd_no error:h_no=%d,no=%d.",src,h_no,no); - //str_set(p->str_err,"cmd no err."); - //return r; - } - if(crc!=arr_get(data,-1)) - { - DBG_WARN("recv data crc check error:%02x,%02x.",crc,arr_get(data,-1)); - str_set(p->str_err,"crc check err."); - } - p->cmd=arr_get(data,6); - arr_delete(r); - return arr_mid(data,9,len-10); -} -// 编码 -array_def *protm_encode(protu_def *p,array_def *data) -{ - array_def *t=arr_creat(); - param_check(t); - uint16_t len=arr_length(data)+10; - arr_append(t,'Y'); - arr_append(t,'e'); - arr_append(t,len&0xff); - arr_append(t,len>>8); - arr_append(t,elec_local_addr());// 源地址 - arr_append(t,0);// 目标地址 - arr_append(t,p->cmd);// 命令码 - arr_append(t,p->cmd_no&0xff); - arr_append(t,p->cmd_no>>8); - arr_appends_from(t,data); - arr_append(t,crc_crc8(arr_data(t),arr_length(t))); - return t; -} - -protuc_codec_export(ym_slave,protm_decode,protm_encode); - diff --git a/source/dev/dev_flash.c b/source/dev/dev_flash.c index e060b43..79823ed 100644 --- a/source/dev/dev_flash.c +++ b/source/dev/dev_flash.c @@ -37,6 +37,8 @@ scheme 109~110 #define FLASH_APP_SECTOR_NUM (50) #define FLASH_BUFF_SECTOR (58) #define FLASH_BUFF_SECTOR_NUM (50) +#define FLASH_BUFF_SECTOR (58) +#define FLASH_BUFF_SECTOR_NUM (50) #define FLASH_PARAM_SECTOR (108) #define FLASH_PARAM_SECTOR_NUM (1) #define FLASH_SCHEME_SECTOR (109) diff --git a/source/elec_det/base/define.h b/source/elec_det/base/define.h deleted file mode 100644 index 8e9feae..0000000 --- a/source/elec_det/base/define.h +++ /dev/null @@ -1,139 +0,0 @@ -#ifndef DEFINE_H_ -#define DEFINE_H_ -#include -#include -#include -#include -#include "stm32f10x.h" -#include "misc.h" -#include "stm32f10x_adc.h" -#include "stm32f10x_dma.h" -#include "stm32f10x_gpio.h" -#include "stm32f10x_usart.h" -#include "stm32f10x_rcc.h" -#include "stm32f10x_tim.h" -#include "stm32f10x_dac.h" -#include "stm32f10x_i2c.h" -#define UNUSED(X) (void)X - -#define SoftVersion 0x000D - - -#if __IF_PORT_UART -//是否使用通信缓存 -#define APP_COMM_USE_FIFO 0 -//命令通信接口 -#define APP_COMD_CAN 0 -#define APP_COMD_USART 1 - -#else - -//是否使用通信缓存 -#define APP_COMM_USE_FIFO 1 -//命令通信接口 -#define APP_COMD_CAN 1 -#define APP_COMD_USART 1 - -#endif - - -typedef enum{ - FUN_E = ((uint8_t)0),//使能 - FUN_D = ((uint8_t)1) //失能 -}FUNState_e; - -typedef union{ -uint32_t ul_data; -uint16_t us_data; -uint8_t uc_data; -uint16_t us_buf[2]; -uint8_t uc_buf[4]; -}Seq_Buf_En; - - - - - - -#define APP_BEG_ADDR 0x8004000 -#define APP_END_ADDR 0x8024000 - -//#define APP_TEST_BOARD_CFG 0x803E800 -#define MC_CODE_ADDR 0x803B000 -#define APP_TEST_PLAN_ADDR 0x803F000 -#define APP_TEST_BOOTFLAG_ADDR 0x803F800 - -#define FCM_END_ADDR 0x8040000 -#define FMC_PAGE_SIZE ((uint16_t)0x800U) - -#define APP_TEST_PLANINFO_SIZE 2048 - - - -//系统事件定义 -#define U1_RX_FRAME_EVENT 0x01 -#define UART_MC_FRAME_EVENT 0x02 -#define CAN_MC_FRAME_EVENT 0x04 -#define TRANS_FRAME_EVENT 0x08 - -#define UART_TX_END_EVENT 1 - -#define EP1_CMD_FRAME_EVENT 1 -#define EPJ_CMD_FRAME_EVENT 1 -#define EP2_CMD_FRAME_EVENT 1 - -#define USART_APP_EXCE_EVENT 1 -#define EP_HEARTBEAD_EVENT 5 - - -/******************总线电压倍率*****/ -#define VH_Mutli 21 -#define VM_Mutli 21 -#define BOAED_SEQ_NUM_SIZE 20 -extern struct rt_event usart1_rx_event; -#pragma pack(1) -typedef struct { -uint32_t bootflag; //更新标志 -uint16_t resistor_diff;// -uint16_t hard_v; -uint32_t mc_ICodeCrc32; -uint8_t sqNum[BOAED_SEQ_NUM_SIZE]; -}BoardInfo_st; - -typedef union{ -BoardInfo_st boardinfo; -uint32_t ul_buf[32]; -}BoardInfo_un; - -typedef struct { - - uint8_t app_run_flag; - uint8_t device_id; - uint16_t chip_temp; - uint16_t v2p5_adc; - uint16_t v1p25_adc; - uint16_t adc_shake; - uint16_t bus_5p5v; - uint16_t bus_26v; - uint16_t hard_v; - uint16_t soft_v; - uint16_t resistor_diff; - uint32_t plan_id; - -}BoartCheck_st; - -#pragma pack() - -extern BoartCheck_st board_st; -extern BoardInfo_un boardinfo_un; - -//检测小板初始化 -void Ye_BoardInit(void); -/* - 测试小板上电自检 -*/ -void Ye_BoardCheck(void); -// -uint8_t UidCode_YM2JQ(uint8_t* pstJQUID, uint8_t* pstYMUID); - uint32_t GetPasswordByUidCode(uint8_t* uidcode); -#endif diff --git a/source/elec_det/base/delay.c b/source/elec_det/base/delay.c deleted file mode 100644 index 1834262..0000000 --- a/source/elec_det/base/delay.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "base/delay.h" -#include "stdbool.h" -#include "rtthread.h" - - - -//此函数已在别处实现 -//void delay_us(uint32_t nus) -//{ -//} - -void delay_ms(uint32_t nms) -{ - while(nms > 0) - { - nms--; - delay_us(1000); //普通方式延时,此时ucos无法启动调度. - } - -} -void delay_nop(uint32_t nop) -{ - while(nop > 0) - { - nop--; - __NOP(); - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/elec_det/base/delay.h b/source/elec_det/base/delay.h deleted file mode 100644 index 28ec8b1..0000000 --- a/source/elec_det/base/delay.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef __DELAY_H_ -#define __DELAY_H_ -#include "base/define.h" -#include - - -void Systick_init(uint32_t tick); -void delay_ms(uint32_t nms); -void delay_us(uint32_t nus); -void delay_nop(uint32_t nop); -#define delay_os_ms(ms) rt_thread_delay(ms) -#endif - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/elec_det/base/utility.c b/source/elec_det/base/utility.c deleted file mode 100644 index 3d812a1..0000000 --- a/source/elec_det/base/utility.c +++ /dev/null @@ -1,458 +0,0 @@ - - -#include "utility.h" -float myatof(const char* str) -{ - - uint32_t int_nu = 0; - uint32_t flot_nu = 0; - float val; - float f_count = 1; - while((*str != 0) && (*str != '.')) - { - if(*str > '9' && *str < '0') - { - str++; - continue; - } - int_nu = int_nu*10+(*str - 48); - str++; - } - - if(*str == 0) - { - val = int_nu; - return val; - } - str++; - while(*str != 0) - { - if(*str > '9' && *str < '0') - { - str++; - continue; - } - flot_nu = flot_nu*10+(*str - 48); - f_count *= 10; - str++; - } - val = flot_nu; - val = val / f_count + int_nu; - return val; -} - -/** -*@brief string to uint16_t -*@param str:src string, base: -*@return num:convert result -*/ -uint16_t atoi16(const char* str,uint16_t base) -{ - unsigned int num = 0; - while (*str !=0) - num = num * base + c2d(*str++); - return num; -} - -/** -*@brief string to uint32 -*@param str:src string, base: -*@return num:convert result -*/ -uint32_t atoi32(const char* str,uint16_t base) -{ - uint32_t num = 0; - while (*str !=0) - num = num * base + c2d(*str++); - return num; -} - -/** -*@brief uint16 data to string -*@param n:src num, str[5]:string buffer len:string size -*@return void -*/ -void itoa(uint16_t n,uint8_t str[5], uint8_t len) -{ - - uint8_t i=len-1; - - memset(str,0x20,len); - do{ - str[i--]=n%10+'0'; - - }while((n/=10)>0); - - return; -} - - -/** -*@brief dec or hex string convert to uint32_t -*@param str:src string, ret: the pointer of result -*@return success = 1, fail = 0 -*/ -int validatoi(const char* str, int base,uint32_t* ret) -{ - int c; - const char* tstr = str; - if(str == 0 || *str == '\0') - { - return 0; - } - while(*tstr != '\0') - { - c = c2d(*tstr); - if( (c >= 0) && (c < base)) - { - tstr++; - } - else - { - return 0; - } - } - - *ret = atoi32(str,base); - return 1; -} - -/** -*@brief new char to replace the old char -*@param str:src string,oldchar:dst char,newchar:src char -*@return void -*/ -void replacetochar(char * str, char oldchar,char newchar) -{ - int x; - for (x = 0; str[x]; x++) - if (str[x] == oldchar) str[x] = newchar; -} - -/** -*@brief char to num -*@param c:src char -*@return convert result -*/ -char c2d(const uint8_t c) -{ - if (c >= '0' && c <= '9') - return c - '0'; - if (c >= 'a' && c <= 'f') - return 10 + c -'a'; - if (c >= 'A' && c <= 'F') - return 10 + c -'A'; - - return (char)0; -} -/** -*@brief num to char -*@param c:src num -*@return convert result -*/ -char d2c(const uint8_t c) -{ - if ( c <= 9) - { - return c + '0'; - } - if (c >= 0x0a && c <= 0x0f) - { - return c + 'a' - 10; - } - return 0; -} - -/** -*@brief 2bytes swap -*@param i:src num -*@return convert result -*/ -uint16_t swaps(uint16_t i) -{ - uint16_t ret=0; - ret = (i & 0xFF) << 8; - ret |= ((i >> 8)& 0xFF); - return ret; -} -/** -*@brief 4 bytes swap, bytes order 4 3 2 1 convert to 1 2 3 4 -*@param i:src num -*@return convert result -*/ -uint32_t swapl(uint32_t l) -{ - uint32_t ret=0; - ret = (l & 0xFF) << 24; - ret |= ((l >> 8) & 0xFF) << 16; - ret |= ((l >> 16) & 0xFF) << 8; - ret |= ((l >> 24) & 0xFF); - return ret; -} - -/** -*@brief get substring -*@param src:src string s1: target begin s2: target end sub: result pointer -*@return void -*/ -void mid(const char* src, const char* s1, const char* s2, char* sub) -{ - char* sub1; - char* sub2; - uint16_t n; - - sub1=strstr(src,s1); - sub1+=strlen(s1); - sub2=strstr(sub1,s2); - n=sub2-sub1; - strncpy(sub,sub1,n); - sub[n]=0; -} -/** -*@brief bytes array conver to string -*@param *data: ponit src bytes len: array length str: resuter string pointer -*@return void -*/ - -void bytes2hexString(const char* data, uint32_t len, char* str) -{ - char c_temp; - while(len > 0) - { - c_temp = ((*data) &0xF0) >> 4; - if(c_temp < 10) - { - *str = c_temp + '0'; - } - else - { - *str = (c_temp - 10) + 'A'; - } - - c_temp = ((*data) &0x0F); - str++; - if(c_temp < 10) - { - *str = c_temp + '0'; - } - else - { - *str = (c_temp - 10)+ 'A'; - } - str++; - data++; - len--; - } - *(str++) = '\0'; - -} -/* -Hex Datas to Bytes -*/ -uint8_t HexStrings2Byte(char**strs,uint16_t size,uint8_t* buf,uint16_t buf_size) -{ - char* str; - uint8_t data = 0; - uint16_t count = 0; - while((size > 0) && (count < buf_size)) - { - str = strs[count++]; - size--; - data = 0; - while(*str != '\0') - { - - if(*str == '0') - { - if((*(str+1) == 'X') || (*(str+1) == 'x')) - { - str+=2; - continue; - } - } - data <<=4; - data |=c2d(*str); - str++; - } - *buf = data; - buf++; - } - return count; -} - - -/* -Hex Datas to uint32_t -*/ -uint32_t HexStrings2UInt(char*str) -{ - - uint32_t data = 0; - uint16_t count = 0; - data = 0; - while(*str != '\0' && count < 10) - { - - if(*str == '0') - { - if((*(str+1) == 'X') || (*(str+1) == 'x')) - { - str+=2; - continue; - } - } - data <<=4; - data |=c2d(*str); - str++; - count++; - } - return data; -} - -//冒泡排序16位数据 -void Bubble_Sort_u16(uint16_t* buf,uint32_t len) -{ - uint32_t ul_temp1 = 0; - uint32_t ul_temp2 = 0; - uint16_t us_temp; - if(len < 2) - return; - for(ul_temp2 = 0; ul_temp2 < len-1; ul_temp2++) - { - for(ul_temp1 = 0; ul_temp1 < len-1-ul_temp2; ul_temp1++) - { - if(buf[ul_temp1] > buf[ul_temp1+1]) - { - us_temp = buf[ul_temp1]; - buf[ul_temp1] = buf[ul_temp1 + 1]; - buf[ul_temp1 + 1] = us_temp; - } - } - } - -} -//数据左移 -void BufMoveLeft(uint8_t* srcbuf,uint16_t offset,uint16_t data_len) -{ - uint8_t index = 0; - while(data_len > 0) - { - srcbuf[index] = srcbuf[index+offset]; - data_len--; - index++; - } -} -//数据右移 -void BufMoveRight(uint8_t* srcbuf,uint16_t offset,uint16_t data_len) -{ - while(data_len > 0) - { - data_len--; - srcbuf[data_len+offset] = srcbuf[data_len] ; - } -} - - -//@brief 计算数组的CRC8值 -//@param *srcbuf 数据源指针 -//@param len 数据源长度 -//@rtvl 返回计算结果 -uint8_t CheckXOR_8(uint8_t* srcbuf,uint16_t len) -{ - uint8_t crc = 0x00; - while(len--) - { - crc ^= *srcbuf++; - } - return crc; -} - - -//@brief 计算数组异或校验值 -//@param *Ptr 数据源 -//@param num 计算长度 -//@rtvl 返回计算结果 -uint8_t CheckCRC_8(uint8_t* Ptr,uint16_t num) -{ - uint8_t crc = 0; - uint16_t j,i; - - for (j = 0; j < num; j++) - { - crc ^= *(Ptr+j); - for ( i = 0; i < 8; i++) - { - if ((crc & 0x01) != 0) - { - crc >>= 1; - crc ^= 0x8c; - } - else - { - crc >>= 1; - } - } - } - return crc; -} - //@brief 计算CRC32 -//@param *srcbuf 数据源 -//@param len 计算长度 -//@rtvl 返回计算结果 -uint32_t Crc32Calu(uint32_t* buf, uint32_t len) -{ - uint32_t temp,crc = 0xFFFFFFFF; - - uint32_t i,j; - i = 0; - if(((uint32_t)buf %4) != 0) - { - return 1; - } - while(i 0) - { - if(*us_max < *aus_buf) - { - *us_max = *aus_buf; - } - if(*us_min > *aus_buf) - { - *us_min = *aus_buf; - } - aus_buf++; - us_size--; - } -} diff --git a/source/elec_det/base/utility.h b/source/elec_det/base/utility.h deleted file mode 100644 index f4cad87..0000000 --- a/source/elec_det/base/utility.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef _UTILITY_H -#define _UTILITY_H -#include -#include -#include "stm32f10x.h" - -float myatof(const char* str); -uint16_t atoi16(const char* str,uint16_t base); /* Convert a string to integer number */ -uint32_t atoi32(const char* str,uint16_t base); /* Convert a string to integer number */ -void itoa(uint16_t n,uint8_t* str, uint8_t len); -int validatoi(const char* str, int base, uint32_t* ret); /* Verify character string and Convert it to (hexa-)decimal. */ -char c2d(uint8_t c); -char d2c(uint8_t c); -uint16_t swaps(uint16_t i); -uint32_t swapl(uint32_t l); - -void replacetochar(char * str, char oldchar, char newchar); - -void mid(const char* src, const char* s1, const char* s2, char* sub); - -void bytes2hexString(const char* data, uint32_t len, char* str); -//冒泡排序16位数据 -void Bubble_Sort_u16(uint16_t* buf,uint32_t len); -//数据左移 -void BufMoveLeft(uint8_t* srcbuf,uint16_t offset,uint16_t data_len); -//数据右移 -void BufMoveRight(uint8_t* srcbuf,uint16_t offset,uint16_t data_len); -/* -Hex Datas to Bytes -*/ -uint8_t HexStrings2Byte(char**strs,uint16_t size,uint8_t* buf,uint16_t buf_size); -/* -Hex Datas to uint32_t -*/ -uint32_t HexStrings2UInt(char*str); -//@brief 计算数组异或校验值 -//@param *srcbuf 数据源 -//@param len 计算长度 -//@rtvl 返回计算结果 -uint8_t CheckCRC_8(uint8_t* Ptr,uint16_t num); - //@brief 计算CRC32 -//@param *srcbuf 数据源 -//@param len 计算长度 -//@rtvl 返回计算结果 -uint32_t Crc32Calu(uint32_t* buf, uint32_t len); -/* -@brief 获取数组中的最大值和最小值 -@param *aus_buf 缓存数组 -@param us_size 数组长度 -@param *us_max 最大值 -@param *us_min 最小值 -*/ - -void GetMaxAndMinValue(uint16_t* aus_buf,uint16_t us_size,uint16_t* us_max,uint16_t* us_min); -//@brief 计算数组的CRC8值 -//@param *srcbuf 数据源指针 -//@param len 数据源长度 -//@rtvl 返回计算结果 -uint8_t CheckXOR_8(uint8_t* srcbuf,uint16_t len); -#endif diff --git a/source/elec_det/driver/EWDriver.c b/source/elec_det/driver/EWDriver.c deleted file mode 100644 index aa35916..0000000 --- a/source/elec_det/driver/EWDriver.c +++ /dev/null @@ -1,1530 +0,0 @@ -#include "EWDriver.h" -#include "base/delay.h" -#include "base/utility.h" -#include "hardware/gpio_cfg.h" -#include "base/utility.h" -#include "hardware/adc_cfg.h" -#include "hardware/power.h" -#include "ewdriver.h" -#include "hardware/timer_cfg.h" - -static volatile EWBus_Mod_en bus_mod = OFF_MOD; -static volatile CurrentSample_Range_eu buscurrent_range = Current_Max; -#define FB_Read_AD_Sample_C 30 -#if FIREBUS_ADC_BUF_LEN < FB_Read_AD_Sample_C -#error "EWDriver ADC define error" -#endif - -#define SMod_Read_Idle_Filter 90 -#define DMod_Read_Idle_Filter 80 - -volatile uint16_t* EW_Read_AD_V = FireBus_ADC_Buf; -static volatile uint16_t SMod_Read_Idle_C; -static uint16_t firebus_idle_diff = SMod_Read_Idle_Filter; - -const static uint16_t data2bit_signal[]={200,234,275,323,380,446}; -static uint16_t datapulus[6][2]; -//发送起始信号 -#define SMod_Begin_Plus() SMod_2Bit_Plus(4) -//发送结束信号 -#define SMod_End_Plus() SMod_2Bit_Plus(5) -uint8_t EW_CommBuf[EW_DMODE_FRAME_SIZE]; -uint16_t EW_DMOD_Peroid = 300; -uint16_t EW_DMOD_READ_Timeout = 6000; -//发送唤醒信号 -static void SMod_Wake_Plus(void) -{ - EW_SINGLE_MOD_M; - delay_us(200); - EW_SINGLE_MOD_H; - delay_us(600); - -} -//发送2Bit数据信号 -static void SMod_2Bit_Plus(uint8_t data) -{ - if(data > 5) - return; - EW_SINGLE_MOD_M; - delay_us(datapulus[data][0]); - EW_SINGLE_MOD_H; - delay_us(datapulus[data][1]); -} - -//读取1bit数据 -static uint8_t SMod_ReadBit(uint16_t wait_us) -{ - uint32_t ul_temp = 0; - ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE); - EW_SINGLE_MOD_M; - delay_us(wait_us); - while(ul_temp < FB_Read_AD_Sample_C) - { - EW_Read_AD_V[ul_temp++] = ADC_GetCurADCFast(); - } - EW_SINGLE_MOD_H; - Bubble_Sort_u16((uint16_t*)EW_Read_AD_V,FB_Read_AD_Sample_C); - ul_temp = EW_Read_AD_V[FB_Read_AD_Sample_C - 6]; - ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 7]; - ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 8]; - ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 9]; - ul_temp >>= 2; - if(ul_temp > SMod_Read_Idle_C) - { - LED1_Out_On; - return 1; - } - LED1_Out_Off; - return 0; -} - -static uint8_t DMod_ReadBit(uint16_t wait_us) -{ - uint32_t ul_temp = 0; - ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE); - EW_DIFF_MOD_M; - delay_us(wait_us); - while(ul_temp < FB_Read_AD_Sample_C) - { - EW_Read_AD_V[ul_temp++] = ADC_GetCurADCFast(); - } - EW_DIFF_MOD_L; - Bubble_Sort_u16((uint16_t*)EW_Read_AD_V,FB_Read_AD_Sample_C); - ul_temp = EW_Read_AD_V[FB_Read_AD_Sample_C - 6]; - ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 7]; - ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 8]; - ul_temp += EW_Read_AD_V[FB_Read_AD_Sample_C - 9]; - ul_temp >>= 2; - if(ul_temp > SMod_Read_Idle_C) - { - LED1_Out_On ; - return 1; - } - LED1_Out_Off; - return 0; -} -/* -@brief 读取模块ACK -@param 超时 0.1ms -*/ -static uint8_t DMod_ReadAck(uint16_t time_out) -{ - uint32_t ul_temp = 0; - uint32_t ul_temp2 = 0; - uint16_t us_count = 0; - ul_temp = time_out*10; - ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE); - EW_DIFF_MOD_M; - Get10usCount(); - while((ul_temp2 < ul_temp) && (us_count < 10)) - { - if(ADC_GetCurADCFast() > SMod_Read_Idle_C) - { - us_count++; - }else{ - us_count = 0; - } - ul_temp2 += Get10usCount(); - } - if(us_count < 10) - { - EW_DIFF_MOD_H; - return 0; - } - delay_ms(20); - EW_DIFF_MOD_H - return 1; - -} - -//从AD采样缓存总,计算空闲电流 -static uint16_t FireBus_UpdataIdeV(void) -{ - SMod_Read_Idle_C = 0; - SMod_Read_Idle_C = (uint32_t)(EW_Read_AD_V[FB_Read_AD_Sample_C - 6]); - SMod_Read_Idle_C += (uint32_t)(EW_Read_AD_V[FB_Read_AD_Sample_C - 7]*3); - SMod_Read_Idle_C += (uint32_t)(EW_Read_AD_V[FB_Read_AD_Sample_C - 8]*4); - SMod_Read_Idle_C += (uint32_t)(EW_Read_AD_V[FB_Read_AD_Sample_C - 9]*2); - SMod_Read_Idle_C /= 10; - SMod_Read_Idle_C += firebus_idle_diff; - return SMod_Read_Idle_C; -} -//采集空闲电流 -static uint16_t SMod_GetIdleV(void) -{ - firebus_idle_diff = SMod_Read_Idle_Filter; - SMod_ReadBit(80);//获取采样电流 - return FireBus_UpdataIdeV(); -} -static uint16_t DMod_GetIdleV(void) -{ - firebus_idle_diff = DMod_Read_Idle_Filter; - DMod_ReadBit(300);//获取采样电流 - return FireBus_UpdataIdeV(); -} -static uint16_t SMod_GetIdle2V(void) -{ - uint32_t ul_temp = 0; - firebus_idle_diff = SMod_Read_Idle_Filter; - while(ul_temp < FB_Read_AD_Sample_C) - { - EW_Read_AD_V[ul_temp++] = ADC_GetCurADCFast(); - } - return FireBus_UpdataIdeV(); -} - -static uint16_t DMod_GetIdle2V(void) -{ - uint32_t ul_temp = 0; - firebus_idle_diff = DMod_Read_Idle_Filter; - while(ul_temp < FB_Read_AD_Sample_C) - { - EW_Read_AD_V[ul_temp++] = ADC_GetCurADCFast(); - } - return FireBus_UpdataIdeV(); -} - - - -//采集到应答信号返0 否则返1 -static uint8_t SMod_WaitAck(uint16_t time_out) -{ - - while(time_out > 0) - { - time_out--; - if(SMod_ReadBit(80) > 0) - { - delay_us(350); - return 0; - } - delay_us(350); - } - return 1; - -} - - -void EW_BusDef_Init(void) -{ - uint16_t us_temp = 80; - uint8_t count = 0; - for(count = 0; count < 6;count++) - { - datapulus[count][0] = us_temp; - datapulus[count][1] = data2bit_signal[count] - us_temp-12;//-4为延时偏移,实测。 - } -} - - -/* -@brief 单端发送4Bytes 数据 -@param *buf 4字节数据缓存指针 -@param type 数据帧类型 -@param bg_count 起始信号个数 -@param end_count 结束信号个数 -*/ -void SMod_FireBusSend4BytesFrame(uint8_t* buf,EW_SINGLE_FRAME_TYPE_en type ,uint8_t bg_count,uint8_t end_count) -{ - uint8_t uc_plus_type[17]; - uint8_t uc_data; - uint32_t ul_count1 = 0; - uint32_t ul_count2 = 0; - uc_plus_type[ul_count1++] = (uint8_t)type; - while(ul_count1 < 17) - { - ul_count2 = 0; - uc_data = *buf; - while(ul_count2 < 4) - { - uc_plus_type[ul_count1++] = (uc_data & 0xC0)>>6; - uc_data <<= 2; - ul_count2++; - } - buf++; - } - SMod_Wake_Plus(); - /******************/ - while(bg_count > 0) - { - bg_count --; - SMod_Begin_Plus(); - } - for(ul_count1 = 0; ul_count1 < 17; ul_count1++) - { - SMod_2Bit_Plus(uc_plus_type[ul_count1]); - } - while(end_count > 0) - { - end_count --; - SMod_End_Plus(); - } -} -/* -@brief 单端模式发送数据 -@param *buf 数据缓存指针 -@param bg_count 起始信号个数 -@param end_count 结束信号个数 -*/ -uint8_t SMod_SendData(uint8_t* buf, uint16_t len,uint8_t bg_count,uint8_t end_count) -{ - uint16_t us_count = 0; - uint8_t* databuf = (uint8_t*)rt_malloc(len+4); - uint8_t crc = 0; - if(databuf == RT_NULL) - { - - return 1; - } - len--; - rt_memcpy(databuf,buf,len); - while((len % 4) != 3) - { - databuf[len++] = 0; - } - databuf[len] = CheckXOR_8(databuf,len); - len++; - if(len == 4) - { - SMod_FireBusSend4BytesFrame(databuf,COMPLETE_FRAME,bg_count,end_count); - goto SMod_Data_Send_End; - } - SMod_FireBusSend4BytesFrame(databuf,BEGIN_FRAME,bg_count,end_count); - us_count += 4; - while(us_count < (len-4)) - { - delay_ms(40); - SMod_FireBusSend4BytesFrame(databuf+us_count,DATA_FRAME,bg_count,end_count); - us_count += 4; - } - delay_ms(40); - SMod_FireBusSend4BytesFrame(databuf+us_count,END_FRAME,bg_count,end_count); -SMod_Data_Send_End: - rt_free(databuf); - return 0; -} - -/* -@brief 单端接收数据 -@param *buf 数据缓存指针 -@param len 读取数据长度 -@param time_out 应答信号超时个数 -*/ -uint8_t SMod_FireBusReadDatas(uint8_t* buf, uint8_t len, uint16_t time_out) -{ - uint32_t ul_temp = 0; - uint8_t uc_data; - CurrentSample_Range_eu range = buscurrent_range;//档位保存 - Power_SetSampleCurrentRange(R10_2mA_30mA_MC); - ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE); - delay_ms(1); - - //采集空闲电流 - SMod_GetIdleV(); - delay_us(350); - SMod_GetIdleV(); - delay_us(350); - if(SMod_WaitAck(time_out) > 0) - { - Power_SetSampleCurrentRange(range); - return 1; - } - while(len > 0) - { - ul_temp = 0; - uc_data = 0; - len--; - while(ul_temp < 8) - { - uc_data <<= 1; - uc_data += SMod_ReadBit(80); - delay_us(500); - ul_temp++; - } - *buf = uc_data; - buf++; - } - Power_SetSampleCurrentRange(range); - return 0; -} - -/* -@brief 获取巡检数据 -@param count 巡检脉冲数 -@param buf 数据缓存区 -@rtv 无 -*/ -void FireBus_ReadInspect_Data(uint16_t count,uint8_t* buf) -{ - uint16_t index; - uint8_t data; - CurrentSample_Range_eu range = buscurrent_range;//档位保存 - Power_SetSampleCurrentRange(R10_2mA_30mA_MC);//采样电阻全开,快速放电 - ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_MIDLE); - //delay_us(500); - //总线跳转到中电平 - EW_SINGLE_MOD_M; - //延时等待电流稳定 - //COM_PH2_Out = 0; - delay_us(240); - //获取中电平电流 - SMod_GetIdle2V(); - EW_SINGLE_MOD_H - delay_us(700); - rt_memset(buf,0,((count+7 ) >> 3)); - index = 0; - while(index < count) - { - data = *(buf+(index >> 3)); - if( SMod_ReadBit(80) > 0) - { - data |= (0x01 << (index & 0x07)); - }; - EW_SINGLE_MOD_H - delay_us(800); - *(buf+(index >> 3)) = data; - index++; - } - Power_SetSampleCurrentRange(range); -} - -/*************************************************************/ -static uint8_t SMod_FireBusReadPlus(uint16_t* plus_h, uint16_t* plus_t,uint16_t time_out,uint16_t ad_line,uint16_t* max_ad) -{ - uint32_t ul_ad_sample; - uint32_t ul_index = 0; - uint16_t us_adc_buf[6]; - uint32_t ul_count = 0; - uint32_t uc_step = 0; - uint32_t ul_h_count = 0,ul_l_count = 0; - *max_ad = 0; - for(ul_count =0; ul_count < 5; ul_count++) - { - us_adc_buf[ul_count++] = ADC_GetCurADCFast(); - } - //数据发送时,以高脉冲在先,然后是低电平, - do{ - time_out--; - ul_ad_sample = ADC_GetCurADCFast(); - if(ul_ad_sample > *max_ad) - *max_ad = ul_ad_sample; -// if(ul_ad_sample > ad_line) -// { -// PBout(I2IC_SCL_Pin_Nu) = 1 ; -// }else{ -// PBout(I2IC_SCL_Pin_Nu) = 0; -// } - us_adc_buf[ul_count++] = ul_ad_sample; - ul_count %= 0x06; - ul_h_count = 0; - ul_l_count = 0; - for(ul_index =0; ul_index < 6; ul_index++) - { - if(us_adc_buf[ul_index] > ad_line) - { - ul_h_count++; - }else{ - ul_l_count++; - } - } - if(uc_step == 0 && ul_h_count > 5)//启动周期计数 - { - (*plus_h)++; - (*plus_t)++; - uc_step = 1; - }else if(uc_step == 0){ - continue;//未启动 - } - if(uc_step == 1) - { - if(ul_h_count > 5) - { - PBout(I2IC_SCL_Pin_Nu) = 1 ; - (*plus_h)++; - uc_step = 1; - }else if(ul_l_count > 5) //由高变低 - { - PBout(I2IC_SCL_Pin_Nu) = 0; - uc_step = 2; - } - } - else if(uc_step == 2 && ul_h_count > 5)//由低变高 - { - PBout(I2IC_SCL_Pin_Nu) = 1 ; - break; - } - (*plus_t)++; - - }while(time_out > 0); - if(time_out < 1)//等待起始信号超时 - { - return 1; - } - return 0; -} -/* -@brief 单端第二版,差分接收数据 -@param *buf 数据缓存指针 -@param len 读取数据长度 -@param time_out 超时脉冲数(约1bit数据时间) -@rtv 0 成功 否则失败 -*/ -static uint16_t us_plus_H,us_plus_H2;//高电平采用次数 -static uint16_t us_plus_T,us_plus_T2;//采样周期 -uint16_t idle_line = 0; -uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out) -{ - uint32_t ul_ad_sample; - uint32_t ul_check_falg; //奇校验 - uint32_t us_time_out = time_out; - uint32_t ul_data = 0; - uint32_t us_dataT_Or;//数据周期 - uint32_t us_temp1,us_temp2; - uint16_t ad_max = 0,ad_max_temp = 0; - CurrentSample_Range_eu range = buscurrent_range;//档位保存 - Power_SetSampleCurrentRange(R10_2mA_30mA_MC); - ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_HIGH); - delay_us(2000); - //总线跳转到中电平 - EW_DIFF_MOD_M; - //延时等待电流稳定 - delay_us(800); - //COM_PH2_Out = 0; - PBout(I2IC_SCL_Pin_Nu) = 0; - delay_us(200); - //获取中电平电流 - PBout(I2IC_SCL_Pin_Nu) = 1 ; - DMod_GetIdle2V(); - PBout(I2IC_SCL_Pin_Nu) = 0 ; - //读取指定长度数据 - //读取单字节数据 - ul_data = 0; - //等待起始信号唤醒信号 - us_plus_H = 0; - us_plus_T = 0; - us_time_out = 2000 + time_out; - do{ - - ul_ad_sample = ADC_GetCurADCFast(); - if(ad_max < ul_ad_sample) - ad_max = ul_ad_sample; - if(ul_ad_sample > SMod_Read_Idle_C) - { - us_plus_H++; - }else{ - us_plus_H = 0; - } - delay_us(2); - us_time_out--; - } - while((us_plus_H < 4) && (us_time_out > 0)); - if(us_time_out < 1)//等待起始信号超时 - { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 1; - } - - while(len > 0) - { - //等待数据帧起始信号 - us_time_out = 10; - us_plus_T2 = 0xFFFF; - us_plus_H2 = 0; - while(us_time_out > 0) - { - us_plus_H = 0; - us_plus_T = 0; - idle_line = SMod_Read_Idle_C; -// idle_line = ad_max - SMod_Read_Idle_C; -// idle_line = (idle_line>>1)+ (idle_line>>4)+ SMod_Read_Idle_C; - if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0) - { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 2; - } - if(us_plus_H2 > (us_plus_T2- us_plus_H2)) - { - us_temp1 = us_plus_T << 1; //2倍 - us_temp2 = us_plus_T + (us_plus_T >> 1);//1.5倍 - if((us_plus_T2 > us_temp2) && (us_plus_T2 < us_temp1)) - { - break; - } - } - us_plus_T2 = us_plus_T; - us_plus_H2 = us_plus_H; - us_time_out--; - } - //采集8bit数据+1位校验 - ul_data = 0; - ul_check_falg = 0; - us_time_out = 0; - us_plus_T2 = 0; - us_dataT_Or = us_plus_T;//保存数据周期 - do{ - ul_data <<= 1; - if(us_plus_H > (us_plus_T- us_plus_H)) //高电平时间大于低电平 1 - { - ul_data |= 0x01; - ul_check_falg ^= 0x01; - }else{//检测是否是结束信号 0 - us_temp1 = us_plus_T2 << 1; //2倍 - us_temp2 = us_plus_T2 + (us_plus_T2 >> 1);//1.5倍 - if((us_plus_T > us_temp2) && (us_plus_T < us_temp1)) - { - break; - } - } - //约束数据周期范围 -// if(((us_dataT_Or+4) < us_plus_T) -// || ((us_dataT_Or - 4) > us_plus_T)) -// { -// SetSampleCurrentRange(range); -// EW_SINGLE_MOD_H; -// return 3; -// } - us_plus_T2 = us_plus_T; - us_plus_H2 = us_plus_H; - us_plus_H = 0; - us_plus_T = 0; - //idle_line = ad_max - SMod_Read_Idle_C; - //idle_line = (idle_line>>1)+ (idle_line>>4)+ SMod_Read_Idle_C; - idle_line = SMod_Read_Idle_C; - if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0) - { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 4; - } - ad_max = (uint16_t)(ad_max * 0.7f + ad_max_temp*0.3f); - us_time_out++; - }while(us_time_out < 13); - if(ul_check_falg == 0) - { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 5; - } - if(us_time_out != 9) - { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 6; - } - ul_data >>= 2; - *buf = (uint8_t)ul_data; - buf++; - len--; - } - delay_us(time_out >> 1); - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 0; -} - - -/* -@brief 差分模式数据发送 -@param buf 发送数据缓存 -@param len 发送长度 -@param pre 数据脉冲周期 - -*/ -static void DMod_SendBytesSelf(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t rw_flag, - uint8_t (*crc_fun)(uint8_t *,uint16_t)) -{ - uint16_t us_count = 0; - uint8_t uc_checkc_flag = 0; - uint8_t uc_datatemp = 0; - uint16_t beg_send_pre,beg_H_plus,end_H_plus,data1_H_plus,data0_H_plus; - beg_send_pre = pre+(pre >> 1)+(pre >> 2);//1.75倍数据周期 - beg_H_plus = (uint16_t)(beg_send_pre * 0.65f)+1; - end_H_plus = (uint16_t)(beg_send_pre * 0.35f)+1; - data1_H_plus = (uint16_t)(pre * 0.65f); - data0_H_plus = (uint16_t)(pre * 0.35f); - //buf[len] = CheckCRC_8(buf,len); - buf[len] = crc_fun(buf,len); - len++; - /* - 1.发送3个结束信号用作芯片唤醒 - 2.循环发送缓存数据中的数据 - 2-1 发送1个起始信号 - 2-2 发送8bit数据信号 - 2-3 发送1bit校验信号 - 2-4 发送1个结束信号 - 2-5 调整循环变量,满足循环从2-1再次执行,否则退出 - 3 补发送一个结束信号 - */ - //发送唤醒脉冲 - __disable_irq(); - while(us_count < 3) - { - EW_DIFF_MOD_L; - delay_us( beg_send_pre - end_H_plus); - EW_DIFF_MOD_H; - delay_us(end_H_plus); - us_count++; - } - while(len > 0) - { - us_count = 0; - uc_checkc_flag = 0; - len--; - //发送起始信号 - EW_DIFF_MOD_L; - delay_us(beg_H_plus); - EW_DIFF_MOD_H; - delay_us( beg_send_pre - beg_H_plus); - uc_datatemp = *buf; - //8bit数据信号+1bit校验 - while(us_count < 9) - { - if((uc_datatemp & 0x80) > 0) - { - EW_DIFF_MOD_L; - delay_us(data1_H_plus); - EW_DIFF_MOD_H; - delay_us( pre - data1_H_plus); - uc_checkc_flag ^= 0x01; - }else{ - EW_DIFF_MOD_L; - delay_us(data0_H_plus); - EW_DIFF_MOD_H; - delay_us( pre - data0_H_plus); - } - uc_datatemp <<= 1; - us_count++; - if(us_count == 8) - { - uc_checkc_flag ^= 0x01; - uc_datatemp &= 0x7F; - uc_datatemp |= (uc_checkc_flag << 7); - } - } - buf++; - //发结束始信号 - EW_DIFF_MOD_L; - delay_us(end_H_plus); - EW_DIFF_MOD_H; - delay_us( beg_send_pre - end_H_plus); - } - //补发结束信号 - EW_DIFF_MOD_L; - delay_us(end_H_plus); - EW_DIFF_MOD_H; - delay_us( beg_send_pre - end_H_plus); - if(rw_flag > 0) - { - EW_DIFF_MOD_L; - } - __enable_irq(); - delay_ms(3);//保障芯片总线空闲监听退出 -} - - - -void DMod_SendBytes(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t rw_flag) -{ - DMod_SendBytesSelf(buf,len,pre,rw_flag,CheckCRC_8); -} - - -/* -* 函数会在 buf[len] 的位置添加一个校验数据 -* 所以传入的buf的实际长度要求至少比len长1 -*/ -void DMod_SendBytesXor(uint8_t* buf, uint8_t len, uint8_t rw_flag) -{ - DMod_SendBytesSelf(buf,len,EW_DMOD_Peroid,rw_flag,CheckXOR_8); -} - - -uint8_t DMod_ReadBytesXor(uint8_t* buf, uint8_t len,uint16_t retry_times) -{ - uint8_t ret; -// for(int i=0;i> 3)); - index = 0; - while(index < count) - { - data = *(buf+(index >> 3)); - if( DMod_ReadBit(300) > 0) - { - data |= (0x01 << (index & 0x07)); - }; - EW_DIFF_MOD_L - delay_us(800); - *(buf+(index >> 3)) = data; - index++; - } - Power_SetSampleCurrentRange(range); - delay_ms(1); - EW_DIFF_MOD_H; -} - - -/***********************************************************/ - - -volatile uint8_t EW_Trim_Flag = 0; -static void EW_TrimPlusCallback(uint8_t flag) -{ - if(flag == 1) - { - EW_DIFF_MOD_L; - }else if(flag > 1){ - EW_DIFF_MOD_H; - } - EW_Trim_Flag = flag; -} -static void EW_SendTrimSquare(uint16_t cycle,uint16_t duty, uint32_t count) -{ - FireBus_ClkAmend(cycle,duty,count,EW_TrimPlusCallback); - EW_Trim_Flag = 0; - while(EW_Trim_Flag != 3) - { - delay_ms(20); - } - delay_ms(1); - EW_DIFF_MOD_H -} - -/* -@breif 通信测试 -*/ -uint8_t EW_CommTest(uint8_t* buf,uint16_t len,uint16_t cycle) -{ - uint8_t auc_buf[16]; - uint16_t us_head = 1; - us_head = (us_head << 6)& 0xFFC0; - us_head += EW_COMM_TEST; - auc_buf[0] = us_head & 0xFF; - auc_buf[1] = (us_head >> 8) & 0xFF; - if(len > 13) - { - len = 13; - } - memcpy(auc_buf+2,buf,len); - len += 2; - DMod_SendBytes(auc_buf,len,cycle,1); - memset(buf,0,len); - delay_ms(2); - return DMod_FireBusReadDatasV2(buf,len+1,500); -} -/* -@brief 使能MTP写 -@param addr 通信地址 -@param 使能开关 -@rtv 执行结果 -*/ -uint8_t EW_EnWriteMTP(uint16_t addr ,uint8_t en_flag) -{ - uint8_t uc_ack = 0; - uint8_t uc_readflag = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 40; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - EW_CommBuf[2] = en_flag; - DMod_SendBytes((uint8_t*)EW_CommBuf,3,EW_DMOD_Peroid,uc_readflag); - if(uc_readflag == 0) - { - return 0; - } - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout); - if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3]) - { - return 1; - } - return uc_ack; -} -/* -@brief 读MTP -@param addr 通信地址 -@param mtpaddr MTP地址/4 -@param buf 写入数据的缓存 -@param len 数据长度 -*/ -uint8_t EW_WriteMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len) -{ - uint8_t uc_ack = 0; - uint8_t uc_readflag = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 63; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - EW_CommBuf[2] = mtpaddr; - if(len > 10) - { - len = 10; - } - EW_CommBuf[3] = len; - memcpy((void*)(EW_CommBuf+4),buf,len); - DMod_SendBytes((uint8_t*)EW_CommBuf,len+4,EW_DMOD_Peroid,uc_readflag); - if(uc_readflag == 0) - { - return 0; - } - len = (len>>2)*8+4; - delay_ms(len); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)(EW_CommBuf+2),2,EW_DMOD_READ_Timeout); - if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3]) - { - return 1; - } - return uc_ack; -} -/* -@brief 读MTP -@param addr 通信地址 -@param mtpaddr MTP地址/4 -@param buf 读出数据的缓存 -@param len 数据长度 -*/ -uint8_t EW_ReadMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len) -{ - uint8_t uc_ack = 0; - uint8_t uc_readflag = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 62; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - EW_CommBuf[2] = mtpaddr; - if(len > 10) - { - len = 10; - } - EW_CommBuf[3] = len; - memcpy((void*)(EW_CommBuf+4),buf,len); - DMod_SendBytes((uint8_t*)EW_CommBuf,len+4,EW_DMOD_Peroid,uc_readflag); - if(uc_readflag == 0) - { - return 1; - } - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)buf,len+1,EW_DMOD_READ_Timeout); - if(buf[len] != CheckCRC_8(buf,len)) - { - return 1; - } - return uc_ack; -} -/* -@brief 运行BootLoader程序 -@param addr 通信地址 -@param reboot 仅重启标准 1 有效 -@rtv 返回执行结果 0 成功 -*/ -uint8_t EW_RunBootLoader(uint16_t addr,uint8_t reboot) -{ - uint32_t ul_bootflag = 0x55AA6699; - addr<<=6; - addr = (addr & 0xFFC0) | 61; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - if(reboot == 1) - { - ul_bootflag = 0x9966AA55; - } - memcpy((void*)(EW_CommBuf+2),&ul_bootflag,4); - DMod_SendBytes((uint8_t*)EW_CommBuf,6,EW_DMOD_Peroid,0); - return 0; -} -/* -@brief 写运行配置,写入MTP中 -@param addr 通信地址 -@param runcfg 配置结构体 -@rtv 返回执行结果 -*/ -uint8_t EW_WriteRunCfg(uint16_t addr,RunCfg_un* runcfg) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 20; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - memcpy((void*)(EW_CommBuf+2),&runcfg,3); - DMod_SendBytes((uint8_t*)EW_CommBuf,6,EW_DMOD_Peroid,uc_readflag); - if(uc_readflag == 0) - { - return 0; - } - delay_ms(4); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout); - if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3]) - { - return 1; - } - return uc_ack; -} - -/* -@brief 快速分配通信地址 -@param 通信地址 -@param UID -@param uid_len UID长度 -@param ack_data 应答数据 包括2bytes延时和2bytes状态 -@rtv 执行结果 -*/ - -uint8_t EW_SetAddrByUID(uint16_t addr,uint8_t* uid,uint8_t uid_len,uint8_t* ack_data) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 21; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - memcpy((void*)(EW_CommBuf+2),uid,uid_len); - DMod_SendBytes((uint8_t*)EW_CommBuf,uid_len+2,EW_DMOD_Peroid,uc_readflag); - if(uc_readflag == 0) - { - return 0; - } - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout); - if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3]) - { - return 1; - } - return uc_ack; -} - - -/* -@brief 快速分配通信地址 -@param 通信地址 -@param 设置延时 -@param UID -@param UID长度 -@param 应答数据 包括2bytes延时和2bytes状态 -@rtv 执行结果 -*/ - -uint8_t EW_FastSetByUID(uint16_t addr,uint16_t delay, uint8_t pwd_flag,uint8_t* uid,uint8_t uid_len,uint8_t* ack_data) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 22; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - EW_CommBuf[2] = pwd_flag; - memcpy(((void*)(EW_CommBuf+3)),&delay,2); - memcpy((void*)(EW_CommBuf+5),uid,uid_len); - uid_len +=5; - DMod_SendBytes(((uint8_t*)(EW_CommBuf)),uid_len,EW_DMOD_Peroid,uc_readflag); - if(uc_readflag == 0) - { - return 0; - } - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2(ack_data,5,EW_DMOD_READ_Timeout); - if(ack_data[4] != CheckCRC_8(ack_data,4)) - { - return 1; - } - return uc_ack; -} - - -/* -@brief 设置延时 -@param addr 通信地址 -@param 延期时间 -@rtv 返回执行结果 -*/ -uint8_t EW_SetDelay(uint16_t addr,uint16_t delay) -{ - uint8_t uc_ack; - addr<<=6; - addr = (addr & 0xFFC0) | 23; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - memcpy((void*)(EW_CommBuf+2),&delay,2); - DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,0); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout); - if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3]) - { - return 1; - } - return uc_ack; -} - -/* -@brief 密码验证 -@param addr 通信地址 -@param 密码数据 -@param 密码长度 -@rtv 返回执行结果 -*/ -uint8_t EW_VerfyPWD(uint16_t addr,uint8_t* pwd,uint8_t pwd_len) -{ - - addr<<=6; - addr = (addr & 0xFFC0) | 24; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - memcpy((void*)(EW_CommBuf+2),pwd,pwd_len); - pwd_len += 2; - DMod_SendBytes((uint8_t*)EW_CommBuf,pwd_len,EW_DMOD_Peroid,0); - return 0; -} - -/* -@brief 密码验证 -@param addr 通信地址 -@param 延迟起爆时间*50ms -@rtv 返回执行结果 -*/ -uint8_t EW_Boom(uint16_t addr,uint8_t delay_count) -{ - - addr<<=6; - addr = (addr & 0xFFC0) | 25; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - EW_CommBuf[2] = delay_count; - DMod_SendBytes((uint8_t*)EW_CommBuf,3,EW_DMOD_Peroid,0); - return 0; -} - - -/* -@brief 分组充电 -@param addr 通信地址 -@param 充电挡位 0:直通 1 :16V 2:20V 3:2.5V -@param 分组挡位 addr = group*4 大于addr的可以充电 -@rtv 返回执行结果 -*/ -uint8_t EW_Charge(uint16_t addr,uint8_t chg_class,uint8_t group) -{ - - addr<<=6; - addr = (addr & 0xFFC0) | 26; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - EW_CommBuf[2] = chg_class; - EW_CommBuf[3] = group; - DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,0); - return 0; -} - - -/* -@brief 放电 -@param addr 通信地址 -*/ -uint8_t EW_DisCharge(uint16_t addr) -{ - - addr<<=6; - addr = (addr & 0xFFC0) | 27; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,0); - return 0; -} - -/* -@brief 读状态信息 -@param addr 通信地址 -@param *state 返回状态码 -@param len 数据长度 -*/ -uint8_t EW_ReadState(uint16_t addr,uint8_t* state) -{ - uint8_t uc_ack = 0; - uint8_t uc_readflag = 0; - if(addr == 0) - { - return 1; - } - uc_readflag = 1; - addr<<=6; - addr = (addr & 0xFFC0) | 28; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag); - if(uc_readflag == 0) - { - return 1; - } - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,5,EW_DMOD_READ_Timeout); - if(EW_CommBuf[5] != CheckCRC_8((uint8_t*)EW_CommBuf,5)) - { - return 1; - }else{ - memcpy(state,((uint8_t*)EW_CommBuf),4); - } - return uc_ack; -} - -/* -@brief 校准地址 -@param addr 通信地址 -@param cycle 校准周期 us -@param plus_count 脉冲个数 -*/ -uint8_t EW_ClkAmend(uint16_t addr ,uint16_t cycle,uint16_t plus_count) -{ - addr<<=6; - addr = (addr & 0xFFC0) | 29; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,0); - delay_ms(5); - EW_SendTrimSquare(cycle,cycle>>1,plus_count); - return 0; -} - -/* -@brief 巡检 -@param addr 通信地址 -@param cycle 校准周期 us -@param plus_count 脉冲个数 -*/ -uint8_t EW_Inspect(uint16_t bgaddr ,uint16_t endaddr,uint16_t state,uint8_t* buf) -{ - - uint16_t addr = 0; - addr<<=6; - addr = (addr & 0xFFC0) | 30; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - memcpy((uint8_t*)&EW_CommBuf[2],&bgaddr,2); - memcpy((uint8_t*)&EW_CommBuf[4],&endaddr,2); - memcpy((uint8_t*)&EW_CommBuf[6],&state,2); - DMod_SendBytes((uint8_t*)EW_CommBuf,8,EW_DMOD_Peroid,1); - delay_ms(5); - DMod_ReadInspect_Data(endaddr-bgaddr,buf); - return 0; -} - -/* -@brief 配置验证 -@param addr 通信地址 -@param cfg_mask 源掩码信息 -@param 比较信息 (EW_Cfg & cfg_mask) == cfg_state -@param 反码状态 0 比较通过不反码 1 比较通过反码 -@param -*/ -uint8_t EW_CheckRunCfg(uint16_t addr,uint32_t cfg_mask ,uint16_t cfg_state,uint8_t* rtv) -{ - addr<<=6; - addr = (addr & 0xFFC0) | 31; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - memcpy((uint8_t*)&EW_CommBuf[2],&cfg_mask,3); - memcpy((uint8_t*)&EW_CommBuf[5],&cfg_state,2); - EW_CommBuf[8] = *rtv; - DMod_SendBytes((uint8_t*)EW_CommBuf,9,EW_DMOD_Peroid,1); - delay_ms(5); - *rtv = DMod_ReadAck(50); - return 0; -} - -/* -@brief 配置验证 -@param addr 通信地址 -@param check_class 检测模式 0 基本自检 1 起爆开关检测 2 电容检测 4 读电容检测时间 -@param *buf 读出测试结果 -*/ -uint8_t EW_ChecSelf(uint16_t addr,uint8_t check_class,uint8_t* buf) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(check_class == 4) - { - uc_readflag = 1; - } - if(buf == NULL && check_class ==4) - { - return 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 32; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - EW_CommBuf[2] = check_class; - DMod_SendBytes((uint8_t*)EW_CommBuf,9,EW_DMOD_Peroid,uc_readflag); - if( uc_readflag == 0) - { - return 0; - } - delay_ms(5); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,5,EW_DMOD_READ_Timeout); - if(EW_CommBuf[4] == CheckCRC_8((uint8_t*)EW_CommBuf,4)) - { - memcpy(buf,(uint8_t*)EW_CommBuf,4); - }else{ - uc_ack = 1; - } - return uc_ack; -} - -/* -@brief 保持起爆配置信息和使能起爆 -*/ -uint8_t EW_SaveFireInfo(uint16_t addr) -{ - addr<<=6; - addr = (addr & 0xFFC0) | 33; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,0); - return 0; -} - -/* -@brief 读延时和状态值 -@param addr 通信地址 -@param delay 返回延时 -*/ -uint8_t EW_ReadDelay(uint16_t addr,uint16_t* delay) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 34; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag); - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,3,EW_DMOD_READ_Timeout); - if(EW_CommBuf[2] == CheckCRC_8((uint8_t*)EW_CommBuf,2)) - { - memcpy(delay,(uint8_t*)EW_CommBuf,2); - }else{ - uc_ack = 1; - } - - return uc_ack; -} - -/* -@brief 通信反码配置 -@param addr 通信地址 -@param speed 通信挡位 0:10K 1:7K 2:5K 3:4.5K 4: 4K 4+n:4-0.5*n -@param cur 电流挡位 0:1mA 1:2mA 2:4mA 3:8mA -*/ -uint8_t EW_SetReportCfg(uint8_t speed,uint8_t cur) -{ - uint16_t addr = 0; - addr<<=6; - addr = (addr & 0xFFC0) | 35; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - EW_CommBuf[2] = speed; - EW_CommBuf[3] = cur; - DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,0); - return 0; -} - -/* -@brief 更新网络地址 -@param addr 通信地址 -@param new_addr 新地址 -*/ -uint8_t EW_UpdateCommAddr(uint8_t addr,uint16_t new_addr) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 36; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - memcpy((void*)(EW_CommBuf+2),&new_addr,2); - DMod_SendBytes((uint8_t*)EW_CommBuf,4,EW_DMOD_Peroid,uc_readflag); - if(uc_readflag == 0) - { - return 0; - } - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf+2,2,EW_DMOD_READ_Timeout); - if(EW_CommBuf[0] != EW_CommBuf[2] || EW_CommBuf[1] != EW_CommBuf[3]) - { - return 1; - } - return uc_ack; -} -/* -@brief 读校准值 -@param addr 通信地址 -@param clk_amend 校准信息 -*/ -uint8_t EW_ReadClkAmend(uint16_t addr,uint32_t* clk_amend) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 37; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag); - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,5,EW_DMOD_READ_Timeout); - if(EW_CommBuf[4] == CheckCRC_8((uint8_t*)EW_CommBuf,4)) - { - memcpy(clk_amend,(uint8_t*)EW_CommBuf,4); - }else{ - uc_ack = 1; - } - - return uc_ack; -} -/* -@brief 读校准值 -@param addr 通信地址 -@param clk_amend 校准信息 -*/ -uint8_t EW_ReadRunCfgVersion(uint16_t addr,uint8_t* run_cfg,uint16_t* version) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 38; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag); - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,6,EW_DMOD_READ_Timeout); - if(EW_CommBuf[5] == CheckCRC_8((uint8_t*)EW_CommBuf,5)) - { - memcpy(run_cfg,(uint8_t*)EW_CommBuf,3); - memcpy(version,(uint8_t*)EW_CommBuf+3,2); - }else{ - uc_ack = 1; - } - return uc_ack; -} - -/* -@brief 自动分配地址 -@param max_addr 分配的最大地址 -@param fac_addr 分配因子 -*/ -uint8_t EW_AutoSetAddr(uint16_t max_addr,uint16_t fac_addr) -{ - uint16_t addr = 0; - addr<<=6; - addr = (addr & 0xFFC0) | 39; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - memcpy((uint8_t*)EW_CommBuf+2,&max_addr,2); - memcpy((uint8_t*)EW_CommBuf+4,&max_addr,2); - DMod_SendBytes((uint8_t*)EW_CommBuf,6,EW_DMOD_Peroid,0); - return 0; -} -/* -@brief 读校准值 -@param addr 通信地址 -@param UID数据 -*/ -uint8_t EW_ReadUID(uint16_t addr,uint8_t* uid,uint8_t uid_len) -{ - uint8_t uc_readflag = 0; - uint8_t uc_ack = 0; - if(addr > 0) - { - uc_readflag = 1; - } - addr<<=6; - addr = (addr & 0xFFC0) | 41; - EW_CommBuf[0] = addr&0xFF; - EW_CommBuf[1] = (addr >> 8)&0xFF; - DMod_SendBytes((uint8_t*)EW_CommBuf,2,EW_DMOD_Peroid,uc_readflag); - delay_ms(2); - uc_ack = DMod_FireBusReadDatasV2((uint8_t*)EW_CommBuf,uid_len+1,EW_DMOD_READ_Timeout); - if(EW_CommBuf[uid_len] == CheckCRC_8((uint8_t*)EW_CommBuf,uid_len)) - { - memcpy(uid,(uint8_t*)EW_CommBuf,uid_len); - }else{ - uc_ack = 1; - } - return uc_ack; -} - - diff --git a/source/elec_det/driver/EWDriver.h b/source/elec_det/driver/EWDriver.h deleted file mode 100644 index 0049cb6..0000000 --- a/source/elec_det/driver/EWDriver.h +++ /dev/null @@ -1,326 +0,0 @@ -#ifndef EWDRIVER_H -#define EWDRIVER_H -#include "base/define.h" - -#define EW_DMODE_FRAME_SIZE 16 - -# -typedef enum { - SINGLE_MOD = (uint8_t)0, - DIFF_MOD = (uint8_t)1, - OFF_MOD = (uint8_t)2, -} EWBus_Mod_en; - - -typedef enum{ - BEGIN_FRAME = (uint8_t)0, - END_FRAME = (uint8_t)1, - DATA_FRAME = (uint8_t)2, - COMPLETE_FRAME = (uint8_t)3, -}EW_SINGLE_FRAME_TYPE_en; -#pragma pack(1) -//系统运行时配置 -typedef union { -struct{ -uint8_t fire_mos_sw : 2;//起爆mos开关选择 0 内部 1 外部 (默认0) -uint8_t vbus_rx_sg : 2;//接收数据信号 1 vbuss_rxh 2 vbuss_rxl 3 vbusd_rx (默认 3) -uint8_t vbus_mode : 2;//通讯类型判断 01 差分 10 单端。00 11 根据总线电压判断 (默认 01) -uint8_t reserve01 : 2;//保留 -uint8_t reset_run_step : 3;//打点周期 0 不打点 1 5ms 2 10ms 3 20ms 4 50ms 5 100ms 6 150ms 7 200ms(默认 0) -uint8_t uid_len : 3;//uid长度 uid_len + 7(默认 1) -uint8_t pwd_len : 2;//密码长度 pwd_len + 4(默认0) -uint8_t version : 5;//模块版本 -uint8_t reserve02 : 3;//保留 -uint8_t crc8 : 8;//校验位 -} runcfg_st; -uint32_t run_param; -uint8_t run_cfg_buf[4]; -}RunCfg_un; - -typedef union{ -//系统状态标志结构体 -volatile struct -{ - - uint8_t timeramend_flag : 1; //时钟校准标志 0 - uint8_t saveinfo_flag : 1; //保存延时设置信息 1 - uint8_t pswd_flag : 1; //密码验证完成标志 2 - uint8_t delay_time : 1; //延时设置完成标志 3 - - uint8_t addr_set : 1; //网络地址已设置 - uint8_t set_super_t : 1; //开启软件复位 5 - uint8_t erprom_error : 1; //系统存储错误 6 - uint8_t sys_error : 1; //系统运行异常 7 - - - uint8_t charge_8v : 1; //充电电压大于8V 8 - uint8_t charge_16V : 1; //充电电压大于16V标志 9 - uint8_t charge_20v : 1; //充电电压大于20V 10 - uint8_t fireline_flag : 1; //桥丝检测 11 - - - uint8_t charge_ctrl_flag : 1; //充放电开关检测 12 - uint8_t mosfet_flag : 1; //MOS开关检测标志 13 - uint8_t charge_cmd : 1; //已经发送充电命令 14 - uint8_t fire_flag : 1; //已点火 15 - - - uint8_t comm_frame : 1; //通讯帧结束标志 - uint8_t factory_check : 1; //工厂自检 - uint8_t comm_mode : 1; //通讯模式 - uint8_t vbusd_invert : 1; //VBUSD 的极性 - - - uint8_t comm_timeout : 1; //通信超时 - uint8_t reserve10 : 1; - uint8_t reserve09 : 1; - uint8_t reserve08 : 1; - - uint8_t reserve07 : 1; - uint8_t reserve06 : 1; - uint8_t reserve05 : 1; - uint8_t reserve04 : 1; - - uint8_t reserve03 : 1; - uint8_t reserve02 : 1; - uint8_t reserve01 : 1; - uint8_t reserve00 : 1; -} State_st; - - - volatile uint32_t data; - volatile uint16_t us_data[2]; - volatile uint8_t datas[4]; -}System_State_un; - -#pragma pack() - -#define EW_WA_CFG_WRITE 20 //写配置寄存器(掉电不保存) -#define EW_WA_SET_COMMADDR 21 //设置网络地址 -#define EW_WA_FAST_CFG 22 //快速配置地址,延时,密码验证 -#define EW_WA_SET_DELAY 23 //设置延时 -#define EW_RA_VERIFY_PWD 24 //密码验证 -#define EW_W_ON_FIRE 25 //起爆 -#define EW_W_CHARGE 26 //充电 -#define EW_W_DISCHARGE 27 //放电 -#define EW_RA_GET_STATE 28 //读状态 -#define EW_W_AMEND 29 //时钟校准 -#define EW_RA_INSPECT 30 //巡检 -#define EW_RA_CHECK_CFG 31 //配置区验证 -#define EW_R_ELECT_TEST 32 //电性能检测 -#define EW_W_SAVE_FIRE_SET 33 //保存起爆测试 -#define EW_RA_READ_DELAY 34 //读延时 -#define EW_R_TX_CFG 35 //反码配置 -#define EW_WR_UPDATE_ADDR 36 //更新网络地址 -#define EW_RA_AMEND_VALUE 37 //读校准值 -#define EW_RA_CFG_INFO 38 //读配置信息 -#define EW_W_AUTO_ADDR 39 //自动分配地址 -#define EW_EN_MTP 40 //使失能MTP -#define EW_RA_UID 41 //读UID - -#define EW_COMM_TEST 60 //通信测试没问题 -#define EW_BOOTLOADER_RUN 61 //运行bootloader -#define EW_RA_REGISTER 62 //读MTP -#define EW_WA_REGISTER 63 //写MTP - -/* -@brief 单端第二版,差分接收数据 -@param *buf 数据缓存指针 -@param len 读取数据长度 -@param time_out 超时脉冲数(约1bit数据时间) -@rtv 0 成功 否则失败 -*/ - - -uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out); - -/* -@brief 差分模式数据发送 -@param buf 发送数据缓存 -@param len 发送长度 -@param pre 数据脉冲周期 - -*/ -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); - -/* -@breif 通信测试 -*/ -uint8_t EW_CommTest(uint8_t* buf,uint16_t len,uint16_t cycle); -/* -@brief 使能MTP写 -@param addr 通信地址 -@param 使能开关 -@rtv 执行结果 -*/ -uint8_t EW_EnWriteMTP(uint16_t addr ,uint8_t en_flag); -/* -@brief 读MTP -@param addr 通信地址 -@param mtpaddr MTP地址/4 -@param buf 写入数据的缓存 -@param len 数据长度 -*/ -uint8_t EW_WriteMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len); -/* -@brief 读MTP -@param addr 通信地址 -@param mtpaddr MTP地址/4 -@param buf 读出数据的缓存 -@param len 数据长度 -*/ -uint8_t EW_ReadMTP(uint16_t addr,uint8_t mtpaddr,uint8_t* buf,uint8_t len); -/* -@brief 运行BootLoader程序 -@param addr 通信地址 -@param reboot 仅重启标准 1 有效 -@rtv 返回执行结果 0 成功 -*/ -uint8_t EW_RunBootLoader(uint16_t addr,uint8_t reboot); -/* -@brief 写运行配置,写入MTP中 -@param addr 通信地址 -@param runcfg 配置结构体 -@rtv 返回执行结果 -*/ -uint8_t EW_WriteRunCfg(uint16_t addr,RunCfg_un* runcfg); -/* -@brief 快速分配通信地址 -@param 通信地址 -@param UID -@param uid_len UID长度 -@param ack_data 应答数据 包括2bytes延时和2bytes状态 -@rtv 执行结果 -*/ - -uint8_t EW_SetAddrByUID(uint16_t addr,uint8_t* uid,uint8_t uid_len,uint8_t* ack_data); -/* -@brief 快速分配通信地址 -@param 通信地址 -@param 设置延时 -@param UID -@param UID长度 -@param 应答数据 包括2bytes延时和2bytes状态 -@rtv 执行结果 -*/ - -uint8_t EW_FastSetByUID(uint16_t addr,uint16_t delay, uint8_t pwd_flag,uint8_t* uid,uint8_t uid_len,uint8_t* ack_data); -/* -@brief 设置延时 -@param addr 通信地址 -@param 延期时间 -@rtv 返回执行结果 -*/ -uint8_t EW_SetDelay(uint16_t addr,uint16_t delay); -/* -@brief 密码验证 -@param addr 通信地址 -@param 密码数据 -@param 密码长度 -@rtv 返回执行结果 -*/ -uint8_t EW_VerfyPWD(uint16_t addr,uint8_t* pwd,uint8_t pwd_len); -/* -@brief 密码验证 -@param addr 通信地址 -@param 延迟起爆时间*50ms -@rtv 返回执行结果 -*/ -uint8_t EW_Boom(uint16_t addr,uint8_t delay_count); -/* -@brief 分组充电 -@param addr 通信地址 -@param 充电挡位 0:直通 1 :16V 2:20V 3:2.5V -@param 分组挡位 addr = group*4 大于addr的可以充电 -@rtv 返回执行结果 -*/ -uint8_t EW_Charge(uint16_t addr,uint8_t chg_class,uint8_t group); -/* -@brief 放电 -@param addr 通信地址 -*/ -uint8_t EW_DisCharge(uint16_t addr); -/* -@brief 读状态信息 -@param addr 通信地址 -@param *delay 返回延时数据 -@param *state 返回状态码 -@param len 数据长度 -*/ -uint8_t EW_ReadState(uint16_t addr,uint8_t* state); -/* -@brief 校准地址 -@param addr 通信地址 -@param cycle 校准周期 us -@param plus_count 脉冲个数 -*/ -uint8_t EW_ClkAmend(uint16_t addr ,uint16_t cycle,uint16_t plus_count); -/* -@brief 巡检 -@param addr 通信地址 -@param cycle 校准周期 us -@param plus_count 脉冲个数 -*/ -uint8_t EW_Inspect(uint16_t bgaddr ,uint16_t endaddr,uint16_t state,uint8_t* buf); -/* -@brief 配置验证 -@param addr 通信地址 -@param cfg_mask 源掩码信息 -@param 比较信息 (EW_Cfg & cfg_mask) == cfg_state -@param 反码状态 0 比较通过不反码 1 比较通过反码 -@param -*/ -uint8_t EW_CheckRunCfg(uint16_t addr,uint32_t cfg_mask ,uint16_t cfg_state,uint8_t* rtv); -/* -@brief 配置验证 -@param addr 通信地址 -@param check_class 检测模式 0 基本自检 1 起爆开关检测 2 电容检测 4 读电容检测时间 -@param *buf 读出测试结果 -*/ -uint8_t EW_ChecSelf(uint16_t addr,uint8_t check_class,uint8_t* buf); -/* -@brief 保持起爆配置信息和使能起爆 -*/ -uint8_t EW_SaveFireInfo(uint16_t addr); -/* -@brief 读延时和状态值 -@param addr 通信地址 -@param delay 返回延时 -*/ -uint8_t EW_ReadDelay(uint16_t addr,uint16_t* delay); -/* -@brief 通信反码配置 -@param addr 通信地址 -@param speed 通信挡位 0:10K 1:7K 2:5K 3:4.5K 4: 4K 4+n:4-0.5*n -@param cur 电流挡位 0:1mA 1:2mA 2:4mA 3:8mA -*/ -uint8_t EW_SetReportCfg(uint8_t speed,uint8_t cur); -/* -@brief 更新网络地址 -@param addr 通信地址 -@param new_addr 新地址 -*/ -uint8_t EW_UpdateCommAddr(uint8_t addr,uint16_t new_addr); -/* -@brief 读校准值 -@param addr 通信地址 -@param clk_amend 校准信息 -*/ -uint8_t EW_ReadClkAmend(uint16_t addr,uint32_t* clk_amend); -/* -@brief 读校准值 -@param addr 通信地址 -@param clk_amend 校准信息 -*/ -uint8_t EW_ReadRunCfgVersion(uint16_t addr,uint8_t* run_cfg,uint16_t* version); -/* -@brief 自动分配地址 -@param max_addr 分配的最大地址 -@param fac_addr 分配因子 -*/ -uint8_t EW_AutoSetAddr(uint16_t max_addr,uint16_t fac_addr); -#endif - - diff --git a/source/elec_det/driver/JQDriver.c b/source/elec_det/driver/JQDriver.c deleted file mode 100644 index 74a74b7..0000000 --- a/source/elec_det/driver/JQDriver.c +++ /dev/null @@ -1,642 +0,0 @@ -#include "JQDriver.h" -#include "base/delay.h" -#include "hardware/adc_cfg.h" -#include "base/utility.h" -#include "hardware/power.h" -#include "hardware/timer_cfg.h" -#include "hardware/power.h" -static uint16_t jq_idle_current; - -#define JQ_IDLE_NOISE 100 - -#if JQ_Read_AD_Sample_C > FIREBUS_ADC_BUF_LEN -#error "JQDriver.c Firbus AD Sample BUFFER SIZE LIMIT" -#else -volatile uint16_t* JQ_Read_AD_V = FireBus_ADC_Buf; -#endif -static uint16_t jq_ad_last_sample; -static volatile CurrentSample_Range_eu buscurrent_range = Current_Max; - -uint16_t JQ_FreeBack_MaxCur; -uint16_t JQ_FreeBack_MaxTime; -uint16_t JQ_FreeBack_MinCur; -uint16_t JQ_FreeBack_MinTime; - -uint16_t JQ_CommEnd_MaxCur = 0; -uint8_t JQ_CommEnd_CurEn = 0; - - -uint16_t JQ_EnFreeBack_Test = 0; - -static void JQ_CommBegin() -{ - CurrentSampleR_Def; - WaitDelayEnd(200);//20ms -} -static void JQ_CommEnd() -{ - uint16_t us_temp; - StartDelayTime(); - if(JQ_CommEnd_CurEn > 0) - { - delay_os_ms(10); - us_temp = ADC_Comm1p6mA_EndCur(); - if(us_temp > JQ_CommEnd_MaxCur) - { - JQ_CommEnd_MaxCur = us_temp; - } - } - CurrentSampleR_Def; -} - -/* -@brief 采样总线反馈数据 -@param sample_count 采样次数 -*/ - -static void JQ_Sample(uint16_t sample_count) -{ - uint16_t us_adv = 0; - uint16_t ul_count = 0; - jq_ad_last_sample = GetADC_Fast(ADC_CURR_DE); - for(ul_count = 0;ul_count < sample_count; ul_count++) - { - us_adv = GetADC_Fast(ADC_CURR_DE); - JQ_Read_AD_V[ul_count] = us_adv; - jq_ad_last_sample = us_adv; - } -} - -/* -@brief 通信反码信息初始化 -*/ -void JQ_FreeBack_Prapare(uint8_t enable_flag) -{ - JQ_FreeBack_MaxCur = 0; - JQ_FreeBack_MaxTime = 0; - JQ_FreeBack_MinCur = 0xFFFF; - JQ_FreeBack_MinTime = 0xFFFF; - JQ_EnFreeBack_Test = enable_flag; -} - -//@brief 采样空闲电流 -void JQ_SampleIdleCurrent() -{ - uint16_t sample_count; - uint32_t ul_adc_v = 0; - JQBUS_W_1; - delay_ms(1); - JQ_Sample(JQ_Read_AD_Sample_C_IDLE); - Bubble_Sort_u16((uint16_t*)JQ_Read_AD_V,JQ_Read_AD_Sample_C_IDLE); - sample_count = 15; - while(sample_count < 25) - { - ul_adc_v +=JQ_Read_AD_V[sample_count++]; - } - jq_idle_current = ul_adc_v/10 + JQ_IDLE_NOISE; - delay_us(200); - JQBUS_W_0 - delay_us(2000); -} -/* -@brief 读取1bit数据 -@rtv 返回读取结果 -*/ -uint16_t JQDriver_SAMPLE_Time; - -uint8_t JQ_ReadBit(void) -{ - uint16_t sample_count = 0; - uint32_t ul_adv_sum = 0; - uint8_t uc_bit = 0; - uint16_t uc_mincur_index = 0; - JQBUS_W_1; - delay_us(150); - Get1usCount(); - JQ_Sample(JQ_Read_AD_Sample_C); - JQDriver_SAMPLE_Time = Get1usCount(); - JQBUS_W_0; - - while(sample_count < JQ_Read_AD_Sample_C) - { - if(JQ_Read_AD_V[sample_count] > jq_idle_current ) - { - uc_bit++; - ul_adv_sum += JQ_Read_AD_V[sample_count] ; - }else if(uc_bit < 2)//连续两个大于2启动检测 - { - uc_bit = 0; - ul_adv_sum = 0; - } - sample_count++; - } - if(uc_bit > 10) - { - - /***************记录反码信息*************************/ - ul_adv_sum = ul_adv_sum / uc_bit; - if( JQ_EnFreeBack_Test > 0 ) - { - if(JQ_FreeBack_MaxCur == 0) - { - JQ_FreeBack_MaxCur = JQ_FreeBack_MinCur = ul_adv_sum; - }else if(ul_adv_sum > JQ_FreeBack_MaxCur){ - JQ_FreeBack_MaxCur = ul_adv_sum; - }else if(ul_adv_sum < JQ_FreeBack_MinCur){ - JQ_FreeBack_MinCur = ul_adv_sum; - - } - - if(JQ_FreeBack_MaxTime == 0) - { - JQ_FreeBack_MaxTime = JQ_FreeBack_MinTime = uc_bit; - }else if(uc_bit > JQ_FreeBack_MaxTime) - { - JQ_FreeBack_MaxTime = uc_bit; - }else if(uc_bit < JQ_FreeBack_MinCur){ - JQ_FreeBack_MinTime = uc_bit; - } - - } - delay_us(1100); - return 1; - }else{ - delay_us(350); - return 0; - } -} -/* -@brief 发送不读反馈信号的命令 -@param buf 命令字节缓存区 -@param len 缓存区数据长度 - -*/ -void JQ_SendBroadCast(uint8_t* buf,uint16_t len) -{ - uint8_t uc_data; - uint8_t uc_bitcount; - JQ_CommBegin(); - JQBUS_W_0; - delay_ms(2); - while(len > 0) - { - - uc_bitcount = 0; - uc_data = *buf; - while(uc_bitcount < 8){ - if((uc_data & 0x80) > 0) - { - JQBUS_W_1; - delay_us(JQBUS_H_PLUS); - JQBUS_W_0; - delay_us(JQBUS_L_PLUS); - }else{ - JQBUS_W_1; - delay_us(JQBUS_L_PLUS); - JQBUS_W_0; - delay_us(JQBUS_H_PLUS); - } - uc_bitcount++; - uc_data <<= 1; - } - len--; - buf++; - } - JQBUS_IDLE; - JQ_CommEnd(); -} -//@breif 发送读取命令 -static void JQ_SendReadCmd(uint8_t* cmd_buf,uint16_t w_len) -{ - uint8_t uc_data; - uint8_t uc_bitcount; - JQBUS_W_0; - delay_ms(2); - while(w_len > 0) - { - - uc_bitcount = 0; - uc_data = *cmd_buf; - while(uc_bitcount < 8){ - if((uc_data & 0x80) > 0) - { - JQBUS_W_1; - delay_us(JQBUS_H_PLUS); - JQBUS_W_0; - delay_us(JQBUS_L_PLUS); - }else{ - JQBUS_W_1; - delay_us(JQBUS_L_PLUS); - JQBUS_W_0; - delay_us(JQBUS_H_PLUS); - } - uc_bitcount++; - uc_data <<= 1; - } - w_len--; - cmd_buf++; - } - JQBUS_RWIDLE; -} -/* -@brief 发送待反馈的命令 -@param cmd_buf 命令数据缓存区 -@param read_buf 数据反馈缓存区 -@param w_len 发送缓冲区数据长度 -@param r_len =0 读取1bit应答信号 > 0,读取数据长度 -@rtv 应答ACK -*/ -uint8_t JQ_SendRead(uint8_t* cmd_buf, uint8_t* read_buf,uint16_t w_len,uint16_t r_len) -{ - uint8_t uc_data; - uint8_t ack = 0; - uint8_t uc_bitcount; - JQ_CommBegin(); - if(w_len > 0) - { - JQ_SendReadCmd(cmd_buf,w_len); - } - Power_SetSampleRange_Seep(JQDriver_Sample_R,ADC_SPEED_HIGH); - JQ_SampleIdleCurrent(); - while(r_len > 0) - { - uc_data = 0; - uc_bitcount = 0; - while(uc_bitcount < 8) - { - uc_data <<= 1; - uc_data |= (JQ_ReadBit() & 0x01); - uc_bitcount++; - } - *read_buf = uc_data; - r_len--; - read_buf++; - } - ack = JQ_ReadBit(); - JQBUS_IDLE; - Power_SetSampleCurrentRange(Current_Max); - JQ_CommEnd(); - return ack; -} - -/* -@breif 起爆命令 -@param cmd_count 起爆命令发送次数 -@param read_buf 读取ACK数据,1bit代表一个网络号 -@param run_type 0 不读取应答信号 =1 读取应答信号 >1 读取应答信号,且强制反馈收到应答 -*/ - -void JQ_BoomCmd(uint8_t cmd_count,uint8_t* read_buf,uint8_t run_type) -{ - static uint8_t JQBoomcmd[2]={0xA9,0xB5}; - static uint8_t JQBoomEnCmd[2] = {0x7A,0xB7}; - uint16_t us_pluscount = 0; - uint8_t uc_data,uc_bitcount,send_count; - send_count = 0; - while(send_count < cmd_count) - { - JQ_SendBroadCast(JQBoomEnCmd,2); - delay_os_ms(20); - send_count++; - } - if(run_type == 0) - { - while(cmd_count > 0) - { - //JQ_SendBroadCast(JQBoomcmd,2); - delay_os_ms(20); - JQ_SendRead(JQBoomcmd,&uc_data,2,0); - cmd_count--; - } - us_pluscount = 0; - while(us_pluscount < 680) - { - JQBUS_W_1 - delay_us(1000); - JQBUS_W_0 - delay_us(400); - us_pluscount++; - } - }else{ - while(cmd_count > 0) - { - delay_os_ms(20); - JQ_SendRead(JQBoomcmd,&uc_data,2,0); - cmd_count--; - } - Power_SetSampleRange_Seep(JQDriver_Sample_R,ADC_SPEED_HIGH); - JQ_SampleIdleCurrent(); - while(us_pluscount < 680) - { - uc_data = 0; - uc_bitcount = 0; - while(uc_bitcount < 8) - { - uc_data <<= 1; - uc_data |= (JQ_ReadBit() & 0x01); - if((run_type > 1) && (uc_data& 0x01) < 1) - { - delay_us(750); - } - uc_bitcount++; - us_pluscount++; - } - *read_buf = uc_data; - read_buf++; - - } - } - Power_SetSampleCurrentRange(Current_Max); - JQBUS_IDLE; - JQ_CommEnd(); -} - -/* -@breif 起爆使能 -*/ - - -void JQ_CheckerEnBoomCmd() -{ - static uint8_t JQBoomEnCmd[2] = {0x7A,0xB7}; - JQ_SendBroadCast(JQBoomEnCmd,2); -} - -/* -@breif 起爆命令 -@param plus_count 巡检脉冲个数 -@rtv 巡检应答Ack 的脉冲个数 - -*/ - -uint16_t JQ_CheckerBoomCmd(uint16_t plus_count,uint16_t* us_shake) -{ - static uint8_t JQBoomcmd[2]={0xA9,0xB5}; - uint16_t us_pluscount = 0; - uint16_t us_ack_plus = 0; - uint16_t sample_count = 0; - uint16_t us_bitcount = 0; - uint16_t us_temp_shake; - uint16_t us_max,us_min; - JQ_CheckerEnBoomCmd(); - delay_ms(20); - JQ_SendBroadCast(JQBoomcmd,2); - Power_SetSampleRange_Seep(JQDriver_Sample_R,ADC_SPEED_HIGH); - JQ_SampleIdleCurrent(); - *us_shake = JQ_Read_AD_V[JQ_Read_AD_Sample_C_IDLE-2] - JQ_Read_AD_V[2]; - while(us_pluscount < plus_count) - { - JQBUS_W_1; - delay_us(100); - //700us 延时 - JQ_Sample(JQ_Read_AD_Sample_C); - GetMaxAndMinValue((uint16_t*)JQ_Read_AD_V,JQ_Read_AD_Sample_C,&us_max,&us_min); - us_min = us_max - us_min; - JQBUS_W_0; - sample_count = 0; - while(sample_count < JQ_Read_AD_Sample_C) - { - if(JQ_Read_AD_V[sample_count] > jq_idle_current ) - { - us_bitcount++; - }else if(us_bitcount < 2) - { - us_bitcount = 0; - } - sample_count++; - } - if(us_bitcount > 6) - { - if(us_ack_plus == 0) - { - us_ack_plus = us_pluscount; - } - else{ - us_ack_plus = ~0; - } - delay_us(50); - us_bitcount = 3; - - }else{ - if(us_min > *us_shake) - { - *us_shake = us_min; - } - delay_us(100); - us_bitcount = 3; - } - while(us_bitcount > 0) - { - JQ_Sample(JQ_Read_AD_Sample_C>>1); - GetMaxAndMinValue((uint16_t*)JQ_Read_AD_V,JQ_Read_AD_Sample_C>>1,&us_max,&us_min); - - us_min = us_max - us_min; - if(us_min > *us_shake) - { - *us_shake = us_min; - } - us_bitcount--; - } - us_pluscount++; - } - JQBUS_IDLE; - JQ_CommEnd(); - return us_ack_plus; -} - -static uint16_t amend_endflag = 0; -//@brief 总线波形翻转 -void JQ_TriggerPlus(uint8_t flag) -{ - if(flag == 1) - { - JQBUS_W_0; - }else if(flag > 1){ - JQBUS_W_1; - } - amend_endflag = flag; - -} -//@brief 时钟校准 -void JQ_TimeAmend(uint16_t cycle,uint16_t delayMs) -{ - static uint8_t cmd_buf = 0x34; - JQ_SendBroadCast(&cmd_buf,1); - delay_os_ms(2); - FireBus_ClkAmend(cycle, cycle/2, delayMs+100,JQ_TriggerPlus); - while(amend_endflag != 3) - { - delay_ms(10); - } - JQBUS_IDLE; - delay_os_ms(20); -} -//@breif 巡检 -void JQ_Inspect(uint16_t maxcount,uint8_t* buf,uint8_t state) -{ - static uint8_t cmd_buf[]={0x97,0x00,0x00,0x00}; - cmd_buf[3] = state; - JQ_SendRead(cmd_buf,buf,4,(maxcount+7)/8); -} -//@brief 启动UID扫描 -void JQ_ScanUIDBegin() -{ - static uint8_t start_readuid_cmd = 0x54; - JQ_SendBroadCast(&start_readuid_cmd,1); -} -//@brief 扫描模式读取UID -uint8_t JQ_ScanReadUID(uint16_t begnet,uint8_t* uidbuf) -{ - - static uint8_t scan_uid_cmd[]={0x59,0x00,0x00}; - uint8_t time_out = 3; - uint8_t*p_buf = uidbuf; - uint8_t ack; - rt_memset(p_buf,0,8); - while(time_out > 0) - { - scan_uid_cmd[1] = (begnet >> 8); - scan_uid_cmd[2] = begnet, - ack = JQ_SendRead(scan_uid_cmd,p_buf,3,8); - if(ack > 0) - { - return ack; - }else{ - delay_os_ms(20); - time_out--; - } - } - return 0; -} -//@brief 读延时 -uint8_t JQ_ReadDelay(uint16_t netid,uint16_t* delaybuf) -{ - static uint8_t cmd_buf[3]={0x63,0x00,0x00}; - cmd_buf[1] = (netid >> 8); - cmd_buf[2] = netid; - return JQ_SendRead(cmd_buf,(uint8_t*)delaybuf,3,2); -} -//@brief 写延时 -void JQ_WriteDelay(uint16_t netid,uint16_t delay) -{ - static uint8_t cmd_buf[5]={0x68}; - cmd_buf[1] = (netid >> 8); - cmd_buf[2] = netid; - cmd_buf[3] = (delay >> 8); - cmd_buf[4] = delay; - JQ_SendBroadCast(cmd_buf,5); -} -//@brief 验证密码 -void JQ_VerifyPWD(uint8_t* pwd) -{ - static uint8_t cmd_buf[5] = {0x76}; - rt_memcpy(&cmd_buf[1],pwd,4); - JQ_SendBroadCast(cmd_buf,5); -} -//@brief 使能起爆 -void JQ_BoomActive(void) -{ - static uint8_t cmd_buf[] = {0x7A,0xB7}; - JQ_SendBroadCast(cmd_buf,2); -} -//@brief 设置充电检测判线 -void JQ_ChargJudge(uint8_t dac) -{ - static uint8_t cmd_buf[] = {0x82,0x00}; - cmd_buf[1] = dac; - JQ_SendBroadCast(cmd_buf,2); -} -//@brief 充电 -void JQ_Chage(uint16_t bgnet) -{ - static uint8_t cmd_buf[3] = {0x89}; - cmd_buf[1] = bgnet>>8; - cmd_buf[2] = bgnet; - JQ_SendBroadCast(cmd_buf,3); -} -//@brief 放电 -void JQ_DisChage(void) -{ - static uint8_t cmd_buf[1] = {0x8A}; - JQ_SendBroadCast(cmd_buf,1); -} -//@brief 快速放电 -void JQ_FastDisChage(uint8_t sw) -{ - static uint8_t cmd_buf[2] = {0x8B}; - cmd_buf[1] = sw; - JQ_SendBroadCast(cmd_buf,2); -} -//@brief 复位 -void JQ_Reset(void) -{ - static uint8_t cmd_buf[2] = {0x55,0xAA}; - JQ_SendBroadCast(cmd_buf,2); -} -//@breif 读芯片ID -uint8_t JQ_ReadChipID(uint16_t netid,uint16_t* chipid) -{ - static uint8_t cmd_buf[3] = {0x23}; - cmd_buf[1] = netid>>8; - cmd_buf[2] = netid; - return JQ_SendRead(cmd_buf,(uint8_t*)chipid,3,2); -} -//@brief 读OTP -uint8_t JQ_ReadOTP(uint16_t netid,uint8_t otp_bgaddr,uint8_t read_count,uint8_t* readbuf) -{ - static uint8_t cmd_buf[4] = {0x2A}; - uint8_t otp_endaddr = otp_bgaddr+ read_count; - cmd_buf[1] = netid>>8; - cmd_buf[2] = netid; - cmd_buf[3] = otp_bgaddr; - while(otp_bgaddr < otp_endaddr) - { - cmd_buf[3] = otp_bgaddr; - if(JQ_SendRead(cmd_buf,readbuf,4,1) == 0) - { - break; - } - delay_os_ms(20); - readbuf++; - otp_bgaddr++; - } - return read_count - (otp_endaddr - otp_bgaddr); -} -//@brief 写OTP - -uint8_t JQ_WriteOTP(uint8_t otp_bgaddr,uint8_t write_count,uint8_t* writebuf) -{ - static uint8_t cmd_buf[3] = {0x1A}; - uint8_t otp_endaddr = otp_bgaddr+ write_count; - - while(otp_bgaddr < otp_endaddr) - { - cmd_buf[1] = otp_bgaddr; - cmd_buf[2] = *writebuf; - JQ_SendBroadCast(cmd_buf,3); - delay_os_ms(20); - writebuf++; - otp_bgaddr++; - } - return write_count - (otp_endaddr - otp_bgaddr); -} - -//写OTP使能 -void JQ_EnWOTP(void) -{ - static uint8_t cmd_buf[2] = {0x1E,0xC9}; - JQ_SendBroadCast(cmd_buf,2); -} -//@breif 读取单发状态 -uint8_t JQ_ReadState(uint16_t netid,uint8_t* state) -{ - static uint8_t cmd_buf[3] = {0x91}; - cmd_buf[1] = netid>>8; - cmd_buf[2] = netid; - return JQ_SendRead(cmd_buf,state,3,1); -} -//@braief 设置通信电压模式 -uint8_t JQ_SetPowerMode(uint16_t h_vol,uint16_t m_vol) -{ - return 0; -} diff --git a/source/elec_det/driver/JQDriver.h b/source/elec_det/driver/JQDriver.h deleted file mode 100644 index 5f6e834..0000000 --- a/source/elec_det/driver/JQDriver.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef JQDRIVER_H_ -#define JQDRIVER_H_ - -#include "base/define.h" -#include "hardware/gpio_cfg.h" -#include "hardware/adc_cfg.h" -#include "base/delay.h" - - -#define JQBUS_IDLE JQBUS_W_1 -#define JQBUS_RWIDLE JQBUS_W_1 - - -#define JQBUS_H_PLUS 300 -#define JQBUS_L_PLUS 700 -#define JQ_Read_AD_Sample_C 140 -#define JQ_Read_AD_Sample_C_IDLE 80 - -extern uint16_t JQ_FreeBack_MaxCur; -extern uint16_t JQ_FreeBack_MaxTime; -extern uint16_t JQ_FreeBack_MinCur; -extern uint16_t JQ_FreeBack_MinTime; -extern uint16_t JQ_CommEnd_MaxCur ; -extern uint8_t JQ_CommEnd_CurEn ; - - -//@brief 读OTP -uint8_t JQ_ReadOTP(uint16_t netid,uint8_t otp_bgaddr,uint8_t read_count,uint8_t* readbuf); -//@breif 读取单发状态 -uint8_t JQ_ReadState(uint16_t netid,uint8_t* state); -//@brief 写延时 -void JQ_WriteDelay(uint16_t netid,uint16_t delay); -//@brief 读延时 -uint8_t JQ_ReadDelay(uint16_t netid,uint16_t* delaybuf); -//@brief 启动UID扫描 -void JQ_ScanUIDBegin(void); -//@brief 扫描模式读取UID -uint8_t JQ_ScanReadUID(uint16_t begnet,uint8_t* uidbuf); -//@brief 充电 -void JQ_Chage(uint16_t bgnet); -//@brief 放电 -void JQ_DisChage(void); -//@brief 复位 -void JQ_Reset(void); -//@brief 使能起爆 -void JQ_BoomActive(void); -//@brief 时钟校准 -void JQ_TimeAmend(uint16_t cycle,uint16_t delay_ms); -//写OTP使能 -void JQ_EnWOTP(void); -//@brief 写OTP - -uint8_t JQ_WriteOTP(uint8_t otp_bgaddr,uint8_t write_count,uint8_t* writebuf); -/* -@breif 起爆命令 -@param cmd_count 起爆命令发送次数 -@param read_buf 读取ACK数据,1bit代表一个网络号 -@param run_type 0 不读取应答信号 =1 读取应答信号 >1 读取应答信号,且强制反馈收到应答 -*/ - -void JQ_BoomCmd(uint8_t cmd_count,uint8_t* read_buf,uint8_t run_type); -/* -@breif 起爆命令 -@param plus_count 巡检脉冲个数 -@rtv 巡检应答Ack 的脉冲个数 -*/ -uint16_t JQ_CheckerBoomCmd(uint16_t plus_count,uint16_t* us_shake); -//@breif 巡检 -void JQ_Inspect(uint16_t maxcount,uint8_t* buf,uint8_t state); -//@brief 设置充电检测判线 -void JQ_ChargJudge(uint8_t dac); -//@brief 验证密码 -void JQ_VerifyPWD(uint8_t* pwd); -//@breif 读芯片ID -uint8_t JQ_ReadChipID(uint16_t netid,uint16_t* chipid); -//@brief 快速放电 -void JQ_FastDisChage(uint8_t sw); -/* -@brief 通信反码信息初始化 -*/ -void JQ_FreeBack_Prapare(uint8_t enable_flag); -#endif diff --git a/source/elec_det/driver/LGDriver.c b/source/elec_det/driver/LGDriver.c deleted file mode 100644 index 99c9226..0000000 --- a/source/elec_det/driver/LGDriver.c +++ /dev/null @@ -1,356 +0,0 @@ -//------------------------------------------------------------------------------------------------------- -//本文件是雷管驱动的底层程序,不对外 -//------------------------------------------------------------------------------------------------------- - -#include "LGDriverAPI.h" -#include "LGDriver.h" -#include "board.h" - - - -#define Long_Time 650 -#define Short_Time 400 - - -//============================================================================ -//接收波形转换 -//============================================================================ -static void LG_Receive_Switch(void) -{ - LGDRV_PHA_H(); - Lib_delay_us(1000); - LGDRV_PHA_L(); - Lib_delay_us(1000); -} - - -static u8 LG_ReceiveBit() //扫描用接收位 -{ - u8 ReturnBit = 0, ValueCnt = 0; - u16 OffsetTime = 0; - - LGDRV_PHA_H(); - - ValueCnt = Lib_CountFeedBackData(&OffsetTime); - - LGDRV_PHA_L(); //这个放到了Lib_CountFeedBackData里面了 - - if(ValueCnt > 0) - { - ReturnBit = 1; - PA11_1(); - -// if(950 > OffsetTime) -// Lib_delay_us(950 - OffsetTime); -// else -// Lib_delay_us(950); - - Lib_delay_us(950); - - PA11_0(); - - } - else - { - ReturnBit = 0; - -// if(500 > OffsetTime) -// Lib_delay_us(500 - OffsetTime); -// else -// Lib_delay_us(500); - Lib_delay_us(500); - - } - - return ReturnBit; -} - -//============================================================================ -//发送一个字节 -//输入参数:要发送的数据 -//============================================================================ -static void LG_SendByte(u8 dat) -{ - u8 i; - u16 time_h, time_l; - - for(i = 0; i < 8; i++) - { - if(dat & 0x80) - { - time_h = Short_Time; - - time_l = Long_Time; - } - else - { - time_h = Long_Time; - - time_l = Short_Time; - } - - LGDRV_PHA_H(); - Lib_delay_us(time_h); - LGDRV_PHA_L(); - Lib_delay_us(time_l); - - dat <<= 1; - } -} - -//============================================================================ -//发送一个字节 校时专用,仅高低时间和通用发送有差异 -//输入参数:要发送的数据 -//============================================================================ -static void LG_SendByte_CaliTime(u16 dat) -{ - u16 i; - //u16 time_h = 496 - Close_Pmos_Delay * 2, time_l = 496 - Open_Pmos_Delay * 2; //150ms=150ms 1000=1000.07 12000=12000.70 - - for(i = 0; i < dat; i++) - { - LGDRV_PHA_H(); - Lib_delay_us(496); - LGDRV_PHA_L(); - Lib_delay_us(Lib_SetDelayData(Lib_CaliTime)); - - Lib_ResetWdg(); - } -} - -//============================================================================ -//接收一个字节 -//返回值:接收到的数据 -//============================================================================ -static u8 LG_ReceiveByte(void) -{ - u8 BitValue, ReturnData = 0, i; - - for (i = 0; i < 8; i++) - { - BitValue = LG_ReceiveBit(); - ReturnData <<= 1; - ReturnData += BitValue; - } - return ReturnData; -} - - -//============================================================================ -//接收参数 -//返回值:接收到的数据 -//============================================================================ -u8 LG_ReceiveParameter(u8 *Parameter, u8 Length) -{ - u8 i = 0; - u8 ret = 0; - - //OUTA输出高低电压标志 1:输出电压 0:输出高电压 - Lib_SetPowerOutAhSwitch(1); - //接收转换 - LG_Receive_Switch(); - - for(i = 0; i < Length; i++) - { - Parameter[i] = LG_ReceiveByte(); - } - - ret = LG_ReceiveBit(); - - //OUTA输出高低电压标志 1:输出电压 0:输出高电压 - Lib_SetPowerOutAhSwitch(0); - - LGDRV_PHA_H(); - - return ret; -} - -//接收单bitAck -u8 LG_ReceiveAck(void) -{ - u8 ret = 0; - u8 i; - - //OUTA输出高低电压标志 1:输出电压 0:输出高电压 - Lib_SetPowerOutAhSwitch(1); - //接收转换 - LG_Receive_Switch(); - - for(i = 0; i < 1; i++) - { - ret += LG_ReceiveBit(); - } - - //OUTA输出高低电压标志 1:输出电压 0:输出高电压 - Lib_SetPowerOutAhSwitch(0); - - LGDRV_PHA_H(); - - return ret; -} - -//接收单bit数据 -u16 LG_ReceiveSingleBit(u8 *Parameter, u16 Length, u8 bit) -{ - u16 i; - u8 j = 0; - u16 ret = 0; - - //OUTA输出高低电压标志 1:输出电压 0:输出高电压 - Lib_SetPowerOutAhSwitch(1); - //接收转换 - LG_Receive_Switch(); - - for(i = 0; i < Length; i++) - { - j = LG_ReceiveBit(); - - if(j > 0) - { - Parameter[i] |= bit; - ret++; - } - else - { - Parameter[i] &= ~bit; - } - } - - //OUTA输出高低电压标志 1:输出电压 0:输出高电压 - Lib_SetPowerOutAhSwitch(0); - - LGDRV_PHA_H(); - - return ret; -} - -//延时起爆波形:总计发送660个波形,雷管数量状态位+补发波形 总计660个波形 雷管累计到652个波形会起爆 -u16 LG_ReceiveDetBomming(u8 *pStatus, u16 Length, u8 allow) -{ - u16 j = 0; - u16 i = 0; - u16 ret = 0, tmp = 0; - - //OUTA输出高低电压标志 1:输出电压 0:输出高电压 - Lib_SetPowerOutAhSwitch(0); - //接收转换 - LG_Receive_Switch(); - - //按实际雷管数据接收数据位 - for(i = 0; i < (Length + 1); i++) - { - j = LG_ReceiveBit(); - - if(j > 0) - { - tmp++; - - //记录起爆反馈状态 - pStatus[i] |= 0x04; //cBoomStatus - } - else - { - //记录起爆反馈状态 - pStatus[i] &= ~0x04; //~cBoomStatus - } - } - - //存储实际雷管数量 - ret = tmp; - - //OUTA输出高低电压标志 1:输出电压 0:输出高电压 - Lib_SetPowerOutAhSwitch(0); - - //起爆数量不对 且 不允许起爆,JQ版本 -#if 0 - //直接起爆,不判断数量,YM版本 - if((Length > tmp) && ((Length - tmp) > allow)) - { - //中止起爆,主循环查询更新状态 - LGDRV_PHA_H(); - return ret; - } -#endif - - //预留2 0:正常模式,真实对码,真实起爆;1:真实对码,模拟起爆;2:全0对码,真实起爆;3:全0对码,模拟起爆 - if((1 == ConfigData.Reserved2) || (3 == ConfigData.Reserved2)) - { - if(0xFF == allow) - { - LGDRV_PHA_H(); - return ret; - } - } - - - for(i = 0; i < (660 - (Length + 1)); i++) //必爆651 发送660 - { - LGDRV_PHA_H(); - Lib_delay_us(600); - LGDRV_PHA_L(); - Lib_delay_us(400); - - Lib_ResetWdg(); - } - - LGDRV_PHA_H(); - - return ret; -} - -//发送延时起爆用来清除波形计数--接收1个bit -void LG_CleanWave_Receive(void) -{ - //接收转换 - LG_Receive_Switch(); - - LG_ReceiveBit(); -} - -//============================================================================ -//发送功能指令 -//输入参数:要发送的功能码数据 -//============================================================================ -void LG_SendCommand(u8 Function, u8 *Parameter, u8 Length) -{ - u8 i = 0; - - LGDRV_PHA_H(); - Lib_delay_ms(11); - - /*******开始信号********/ - LGDRV_PHA_L(); - Lib_delay_us(1500); - LGDRV_PHA_H(); - /***********************/ - - - LG_SendByte(Function);//发送指令 - - for(i = 0; i < Length; i++) - { - LG_SendByte(Parameter[i]);//发送参数 - } - - LGDRV_PHA_H(); -} - - - -//校时指令 -void LG_SendCorrectTimeCommand(u8 Function, u16 time) -{ - LGDRV_PHA_H(); - Lib_delay_ms(11); - LGDRV_PHA_L(); - Lib_delay_us(1500); - LGDRV_PHA_H(); - - LG_SendByte(Function); - - time += 100; - - LG_SendByte_CaliTime(time); - - LGDRV_PHA_H(); -} diff --git a/source/elec_det/driver/LGDriver.h b/source/elec_det/driver/LGDriver.h deleted file mode 100644 index 8d1f3e7..0000000 --- a/source/elec_det/driver/LGDriver.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __LGDRIVER_H -#define __LGDRIVER_H - -//--------------------static------------------------------------ -void LG_Receive_Switch(void); -u8 LG_ReceiveBit(void); -void LG_SendByte(u8 dat); -void LG_SendByte_CaliTime(u16 dat); -u8 LG_ReceiveByte(void); -//--------------------static------------------------------------ - -//接收单bitAck -u8 LG_ReceiveAck(void); -u8 LG_ReceiveParameter(u8 *Parameter, u8 Length); //接收参数 -u16 LG_ReceiveSingleBit(u8 *Parameter, u16 Length, u8 bit); //接收单bit数据 -u16 LG_ReceiveDetBomming(u8 *pStatus, u16 Length, u8 allow); //延时放电 -void LG_SendCommand(u8 Function, u8 *Parameter, u8 Length); //发送功能指令 -void LG_SendCorrectTimeCommand(u8 Function, u16 time); //校时指令 -//发送延时起爆用来清除波形计数--接收1个bit -void LG_CleanWave_Receive(void); -#endif diff --git a/source/elec_det/driver/XTDriver.c b/source/elec_det/driver/XTDriver.c deleted file mode 100644 index 553a925..0000000 --- a/source/elec_det/driver/XTDriver.c +++ /dev/null @@ -1,1268 +0,0 @@ -#include "XTDriver.h" -#include "hardware/adc_cfg.h" -#include "hardware/timer_cfg.h" -uint32_t XT_SquareCount = 0; //发送载波个数 -uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur; -uint8_t XT_EnFreeBack_Test,XT_CommEnd_CurEn; -volatile uint8_t XT_SendSquareFlag = 1; //发送方波标志 -volatile uint8_t XT_ReadUIDFlag = 1; //扫描标志 - - - - -#if XT_Read_AD_Sample_C > FIREBUS_ADC_BUF_LEN -#error "JQDriver.c Firbus AD Sample BUFFER SIZE LIMIT" -#else -volatile uint16_t* XT_ADC_Buf = FireBus_ADC_Buf;//AD采样缓存区 -#endif - -volatile uint8_t XT_ADCCollectStartFlag = 1; //ADC采集标志 - -uint32_t XT_ADC_BaseValue = 0; //ADC采集最低电压 -uint32_t XT_ADC_CollectValue_sum = 0; //ADC采集电压和 -#define XT_FreeBack_Noise 800 - -//static uint32_t XT_ADCCollectIncrementValue = XTCollectIncrementValue; -//static uint32_t XT_ADCCollectSumValue = XTCollectSumValue; -//static uint32_t XT_TIMCollectTimerOverflowUs = XTCollectTimerOverflowUs; - -//static uint32_t XT_ADCSingleCollectAckValue = XTSingleCollectAckValue; - -//static CurrentSample_Range_eu XT_CollectResistance = XTCollectResistance; - -/* -@brief 通信反码信息初始化 -*/ -void XT_FreeBack_Prapare(uint8_t enable_flag) -{ - XT_FreeBackMaxCur = 0; - XT_FreeBackMaxTime = 0; - XT_FreeBackMinCur = 0xFFFF; - XT_FreeBackMinTime = 0xFFFF; - XT_EnFreeBack_Test = enable_flag; -} - -static void XT_CommBegin() -{ - CurrentSampleR_Def; - WaitDelayEnd(50);//5ms -} -static void XT_CommEnd() -{ - uint16_t us_temp; - StartDelayTime(); - if(XT_CommEnd_CurEn > 0) - { - delay_os_ms(10); - us_temp = ADC_Comm1p6mA_EndCur(); - if(us_temp > XT_CommEndMaxCur) - { - XT_CommEndMaxCur = us_temp; - } - } - CurrentSampleR_Def; -} - -static void XT_SendBit(uint8_t bit) -{ - uint8_t i; - if( bit == XTBIT0 ) - { - - for(i=0;i<5;i++) - { - XTBUS_W_0; - delay_us(XT_DAT_PLUS_T); - XTBUS_W_1; - delay_us(XT_DAT_PLUS_T); - } - delay_us(XT_BIT_DELAY); //位结束符 - } - else if( bit == XTBIT1) - { - for(i=0;i<3;i++) - { - XTBUS_W_0; - delay_us(XT_DAT_PLUS_T); - XTBUS_W_1; - delay_us(XT_DAT_PLUS_T); - } - - delay_us(XT_BIT_DELAY); //位结束符 - } -} - -static void XT_SendData(uint8_t *DownData, uint8_t DownLength) -{ - uint8_t temp,i,j; - XT_CommBegin(); - //发送数据 - for(i=0;i> 7) & 0x01 ); - temp <<= 1; - } - } -} - - -volatile uint8_t XT_Trim_Flag = 0; -static void XT_TrimPlusCallback(uint8_t flag) -{ - if(flag == 1) - { - XTBUS_W_0; - }else if(flag > 1){ - XTBUS_W_1; - } - XT_Trim_Flag = flag; -} - -static void XT_SendTrimSquare(uint16_t cycle,uint16_t duty, uint32_t count) -{ - delay_us(XTCmdAndSquareUs); - FireBus_ClkAmend(cycle,duty,count,XT_TrimPlusCallback); - XT_Trim_Flag = 0; - while(XT_Trim_Flag != 3) - { - delay_ms(20); - } - -} - -/* -@brief 直接反馈模式 -@param timeoutcnt 回读超时时间 单位0.1ms -@param ConfirmAckCount ADC 采样确认个数 -@param *executiontime -*/ -static uint8_t XT_Get_Ack(uint32_t timeoutcnt, uint8_t ConfirmAckCount,uint32_t *executiontime) -{ - uint32_t FeekValue=0,count=0; - uint32_t ul_readtime = 0,ul_runtime = 0; - uint8_t rtv = 1; - LED1_Out_On; - TimerCount_Init(); - Get100usCount(); - Power_SetSampleRange_Seep(XTDriver_Sample_R,ADC_SPEED_HFAST); - //延时700us - delay_us(XTCmdAndSquareUs); -// XT_ADC_BaseValue = 0; -// while(us_temp < 64) -// { -// XT_ADC_BaseValue += ADC_GetCurADCFast(); -// } -// XT_ADC_BaseValue = (XT_ADC_BaseValue>>6) + XT_FreeBack_Noise; - XT_ADC_BaseValue = XT_FreeBack_Noise; - while(ul_runtime < timeoutcnt) - { - FeekValue = ADC_GetCurADCFast(); - if(FeekValue >= XT_ADC_BaseValue) - { - count++; - } - else - { - count=0; - } - if(count>=ConfirmAckCount) - { - *executiontime = ul_readtime + GetCountTimerCnt(); - rtv = 0; - break; - } - ul_runtime = GetCountTimerCnt(); - if(ul_runtime > 60000) - { - ul_readtime += Get100usCount(); - ul_runtime = 0; - } - ul_runtime = ul_readtime+ul_runtime; - - } - LED1_Out_Off; - XTBUS_IDLE; - Power_SetSampleCurrentRange(Current_Max); - XT_CommEnd(); - return rtv; -} - - - - - -static void XT_ReceiveData(uint8_t *UpData, uint32_t ReceiveBitLength) -{ - uint8_t uc_data; - uint32_t ul_readcount,ul_adv_sum; - uint16_t us_adccount ,us_index,us_ack_count; - XTBUS_RWIDLE; - delay_us(XTCmdAndSquareUs); - - Power_SetSampleRange_Seep(XTDriver_Sample_R,ADC_SPEED_HIGH); - - UpData[0] = 0; - XTBUS_WR_0; - delay_us(500); - ul_readcount = 0; - while( ul_readcount < ReceiveBitLength) - { - if((ul_readcount & 0x07) == 0) - { - uc_data = 0; - } - XTBUS_WR_1; - delay_us(120); - for(us_adccount = 0; us_adccount < XT_Read_AD_Sample_C; us_adccount++) - { - XT_ADC_Buf[us_adccount] = ADC_GetCurADCFast(); - } - XTBUS_WR_0; - - for(us_index = 3; us_index < us_adccount; us_index ++) - { - if((XT_ADC_Buf[us_index] < XT_FreeBack_Noise) && (XT_ADC_Buf[us_index-1] < XT_FreeBack_Noise)) - { - break; - } - if((XT_ADC_Buf[us_index] < XT_ADC_Buf[us_index-2] ) && (XT_ADC_Buf[us_index-1] < XT_ADC_Buf[us_index-3])) - { - break; - } - } - if(us_index >= us_adccount) - { - delay_us(450); - continue; - } - us_ack_count = 0; - ul_adv_sum = 0; - while(us_index < us_adccount) - { - if(XT_ADC_Buf[us_index] > XT_FreeBack_Noise) - { - ul_adv_sum += XT_ADC_Buf[us_index]; - us_ack_count++; - }else if(us_ack_count < 2)//连续两个大于2启动检测 - { - ul_adv_sum = 0; - us_ack_count = 0; - } - us_index++; - } - - if(us_ack_count > 10) - { - - ul_adv_sum = ul_adv_sum / us_ack_count; - if( XT_EnFreeBack_Test > 0 ) - { - if(XT_FreeBackMaxCur == 0) - { - XT_FreeBackMaxCur = XT_FreeBackMinCur = ul_adv_sum; - }else if(ul_adv_sum > XT_FreeBackMaxCur){ - XT_FreeBackMaxCur = ul_adv_sum; - }else if(ul_adv_sum < XT_FreeBackMinCur){ - XT_FreeBackMinCur = ul_adv_sum; - - } - if(XT_FreeBackMaxTime == 0) - { - XT_FreeBackMaxTime = XT_FreeBackMinTime = us_ack_count; - }else if(us_ack_count > XT_FreeBackMaxTime) - { - XT_FreeBackMaxTime = us_ack_count; - }else if(us_ack_count < XT_FreeBackMinTime){ - XT_FreeBackMinTime = us_ack_count; - } - - } - uc_data |= (0x80 >> (ul_readcount & 0x07)); - } - UpData[ul_readcount>>3] = uc_data; - ul_readcount++; - delay_us(300); - - } - XTBUS_RWIDLE - XT_CommEnd(); -} - - -static void XT_ScanUID(uint8_t *UpData, uint32_t ReceiveBitLength) -{ - uint8_t uc_data; - uint32_t ul_readcount; - - uint16_t us_adccount,us_index2,us_index3; - uint16_t us_ack_count; - uint16_t us_sum1,us_sum2,us_minSum = 0xFFFF; - XTBUS_RWIDLE; - delay_us(XTCmdAndSquareUs); - - Power_SetSampleRange_Seep(XTDriver_Sample_R,ADC_SPEED_HFAST); - - UpData[0] = 0; - XTBUS_WR_0; - delay_us(500); - ul_readcount = 0; - while( ul_readcount < ReceiveBitLength) - { - if((ul_readcount & 0x07) == 0) - { - uc_data = 0; - } - XTBUS_WR_1; - delay_us(120); - us_sum1 = 0; - us_sum2 = 0; - for(us_adccount = 0; us_adccount < 8; us_adccount++) - { - XT_ADC_Buf[us_adccount] = ADC_GetCurADCFast(); - if(us_adccount < 4) - { - us_sum1 += XT_ADC_Buf[us_adccount]; - us_index2 = us_adccount; - }else{ - us_sum2 += XT_ADC_Buf[us_adccount]; - us_index3 = us_adccount; - } - } - - us_ack_count = 0; - - while(us_adccount < 160 && us_ack_count < 5) - { - if(us_sum1 < us_minSum) - { - us_minSum = us_sum1; - } - if(us_sum2 > (us_minSum + (XT_FreeBack_Noise << 2))) - { - us_ack_count++; - }else{ - us_ack_count = 0; - } - us_sum1 -= XT_ADC_Buf[(us_index2-3)&0x07]; - us_sum2 -= XT_ADC_Buf[(us_index3-3)&0x07]; - us_adccount++; - XT_ADC_Buf[us_adccount & 0x07] = ADC_GetCurADCFast(); - us_index2++; - us_index3++; - us_sum1 += XT_ADC_Buf[us_index2&0x07]; - us_sum2 += XT_ADC_Buf[us_index3&0x07]; - - } - if(us_ack_count < 5) - { - delay_us(600); - XTBUS_WR_0; - delay_us(300); - }else{ - XTBUS_WR_0; - delay_us(800); - uc_data |= (0x80 >> (ul_readcount & 0x07)); - } - UpData[ul_readcount>>3] = uc_data; - ul_readcount++; - } - XTBUS_RWIDLE - XT_CommEnd(); -} - -static uint8_t XT_CalCRC(uint8_t data[], uint8_t length) -{ - uint8_t c=0,temp,crc[8] = {0},nextcrc[8] = {0}; - uint8_t i,j,k; - for(i=0;i> (7-j)) & 0x1; - nextcrc[0] = temp ^ crc[7]; - nextcrc[1] = temp ^ crc[0] ^ crc[7]; - nextcrc[2] = temp ^ crc[1] ^ crc[7]; - nextcrc[3] = crc[2]; - nextcrc[4] = crc[3]; - nextcrc[5] = crc[4]; - nextcrc[6] = crc[5]; - nextcrc[7] = crc[6]; - for(k=0;k<8;k++) - { - crc[k] = nextcrc[k]; - } - } - } - for(i=0;i<8;i++) - { - c += crc[i]<>6); - *(adcvalue+1) = (RData[6]<<4) + (RData[7]>>4); - *(adcvalue+2) = (RData[7]<<6) + (RData[8]>>2); - - return 0; -} - - -//函数名称:测量储能电容 -//函数参数: -//函数功能:UID正确且CRC校验通过时,将电容电压比较器档位设定为LEVEL指定的档位, -// 并打开恒流源开关,关闭放电开关进行充电。充电完成时发出反馈,并关闭恒流源开关,打开放电开关。 -//函数返回:充电时间 -uint8_t XT_Measure_Cap(uint8_t *uid, uint8_t uidlen, uint8_t level, uint32_t *chargetime) -{ - uint8_t SData[16]; - - SData[0] = XT_CMDA_MEASURE_CAP; - memcpy(SData+1,uid,uidlen); - SData[uidlen+1] = level; - SData[uidlen+2] = XT_CalCRC(SData,uidlen+2); - XT_SendData(SData,uidlen+3); - - return XT_Get_Ack(*chargetime, XTConfirmAckCount, chargetime); -} - - -//函数名称:单发充电 -//函数参数: -//函数功能:UID正确且CRC校验通过时,将电容电压比较器档位设定为LEVEL指定的档位, -// 将当前充满电标志位复位,并打开充电开关,关闭放电开关进行充电。充电完成时发出反馈,并将曾充满电标志位、当前充满电标志位置位。 -// LEVEL:0x11-1V、0x22-4V、0x33-6V、0x44-10V、0x55-12V、0x66-14V、0x77-18V、0x88-22V、0x99-26V -//函数返回:是否充满 -uint8_t XT_Charge_One(uint8_t *uid,uint8_t uidlen, uint8_t level,uint16_t busvoltage, uint8_t isgetack) -{ - uint8_t SData[16]; - uint32_t chargetime=0; - uint8_t chargeresult =1; - - SData[0] = XT_CMDA_CHARGE; - memcpy(SData+1,uid,uidlen); - SData[uidlen+1] = level; - SData[uidlen+2] = XT_CalCRC(SData,uidlen+2); - XT_SendData(SData,uidlen+3); - - PowerCalibration_set(busvoltage,XTCOMMMEDIUMVOLTAGE); //修改总线电压 - - if(!isgetack || level == 0x00) - { - return 0; - } - - //XT_GetAckInit(); - - chargeresult = XT_Get_Ack(XTSingleCollectAckTimerOverflowCnt, XTConfirmAckCount, &chargetime); - - return chargeresult; -} - - -/****************************************** -* -* B类指令(广播指令) -* -*******************************************/ - - -//函数名称:清除已读状态 -//函数参数: -//函数功能:UID已读标志位复位。 -//函数返回: -void XT_Clear_Read(void) -{ - uint8_t SData[2]; - - SData[0] = XT_CMDB_CLEAR_READH; - SData[1] = XT_CMDB_CLEAR_READL; - XT_SendData(SData,2); -} - - -//函数名称:起爆 -//函数参数: -//函数功能:若起爆密码验证通过标志位、延期标定完成标志位、曾充满电标志位均为1, -// 则设置电容电压比较器档位为最低档位,并进入延期状态。延期倒计时归零时,进行起爆前反馈,然后逐位翻转起爆控制信号。之后进行起爆后反馈。若上述标志位不均为1,则对芯片进行复位,效果同软件复位指令相同 -//函数返回: -void XT_Fire() -{ - uint8_t SData[2]; - - SData[0] = XT_CMDB_FIREH; - SData[1] = XT_CMDB_FIREL; - XT_SendData(SData,2); -} - - -uint8_t XT_FireandCheck(uint8_t *delay) //delay 3字节 最大的延期时间 -{ - uint8_t SData[2]; - uint8_t fireresult = 1; - uint32_t timeout=0; - uint32_t delay_max=0; - - delay_max = (*delay<<16) + (*(delay+1)<<8) + (*(delay+2)); - - timeout = delay_max*10+5000; - - SData[0] = XT_CMDB_FIREH; - SData[1] = XT_CMDB_FIREL; - XT_SendData(SData,2); - - fireresult = XT_Get_Ack(timeout, 2, &delay_max); - return fireresult; -} - -uint8_t XT_MeasureFire(uint32_t *delay) -{ - uint8_t SData[2]; - uint8_t fireresult = 1; - uint32_t timeout=0; - uint32_t delay_max=0; - - delay_max = *delay+2; - - timeout = delay_max*10+5000; - - SData[0] = XT_CMDB_FIREH; - SData[1] = XT_CMDB_FIREL; - XT_SendData(SData,2); - - fireresult = XT_Get_Ack(timeout, 2, delay); - return fireresult; -} - -//函数名称:初始化 -//函数参数: -//函数功能:初始化寄存器。 -//函数返回: -void XT_Init(uint8_t regdata) -{ - uint8_t SData[3]; - - SData[0] = XT_CMDB_INITH; - SData[1] = XT_CMDB_INITL; - SData[2] = regdata; - XT_SendData(SData,3); -} - - -//函数名称:软件复位 -//函数参数: -//函数功能:对芯片进行复位,2,000时钟周期后可以继续接收指令。 -//函数返回: -void XT_Reset() -{ - uint8_t SData[2]; - - SData[0] = XT_CMDB_RESETH; - SData[1] = XT_CMDB_RESETL; - XT_SendData(SData,2); -} - - -//函数名称:扫描 -//函数参数: -//函数功能:读出UID、编号值、延期值、孔位值、状态字节。使用防冲突机制,当重复发送该指令时,所有在线的雷管会按照UID顺序从大到小依次反馈。 -// 指令码长度为2字节,UID长度为7~13字节,编号值长度为2字节,延期值长度为3字节,孔位值长度为2字节,状态字节长度为1字节 -//函数返回:UID、编号值、延期值、孔位值、状态字节 -uint8_t XT_Read_Uid(uint8_t *uid, uint8_t uidlen) -{ - uint8_t SData[2]; - - SData[0] = XT_CMDB_READ_UIDH; - SData[1] = XT_CMDB_READ_UIDL; - XT_SendData(SData,2); - //XT_ReceiveData(uid,((uint32_t)uidlen<<3)+66); - XT_ScanUID(uid,((uint32_t)uidlen<<3)+66); - - if(*(uid+uidlen+8) & 0x80) - return 0; - else - return 1; -} - - -//函数名称:快速延期标定 -//函数参数: -//函数功能:翻转信号接收模块的识别极性,起爆器会以正常通信相反的极性发送该指令,以控制极性识别错误的雷管恢复正确极性。 -//函数返回: -void XT_Trim_Fast(void) -{ - XT_Trim_Faset_Cycle(1000,500); -} -void XT_Trim_Faset_Cycle(uint16_t cycle,uint16_t duty) -{ - uint8_t SData[2]; - - SData[0] = XT_CMDB_TRIM_FASTH; - SData[1] = XT_CMDB_TRIM_FASTL; - XT_SendData(SData,2); - - XT_SendTrimSquare(cycle,duty,1026); -} - -//函数名称:完整延期标定 -//函数参数: -//函数功能:标定第1个方波下降沿至第(DELAY+1)个方波下降沿所对应的时钟周期数,并写入TIMER模块的计数器中。标定完成标志位置位。 -//函数返回: -void XT_Trim_Complete(uint32_t delay_max) -{ - XT_Trim_Complete_Cycle(1000,500,delay_max); -} -void XT_Trim_Complete_Cycle(uint16_t cycle,uint16_t duty, uint32_t delay_max) -{ - uint8_t SData[2]; - - SData[0] = XT_CMDB_TRIM_COMPLETEH; - SData[1] = XT_CMDB_TRIM_COMPLETEL; - XT_SendData(SData,2); - - XT_SendTrimSquare(cycle,duty,delay_max); -} - - -//函数名称:在线检测 -//函数参数: -//函数功能:指令后发送数量等于最大编号值的方波,每发雷管对方波进行计数,在计数到自己的编号值所对应的方波时,反馈1 -//函数返回: -uint8_t XT_Check_Online(uint16_t index_max, uint8_t *online) -{ - uint8_t SData[2]; - - SData[0] = XT_CMDB_CHECK_ONLINEH; - SData[1] = XT_CMDB_CHECK_ONLINEL; - XT_SendData(SData,2); - XT_ReceiveData(online, index_max+8); - - return 0; -} - - -//函数名称:验证起爆密码 -//函数参数: -//函数功能:验证起爆密码。验证正确时反馈并将起爆密码验证通过标志位置位,否则不反馈 -//函数返回: -uint8_t XT_Check_Bmid(uint8_t *bmid, uint8_t bmidlen) -{ - uint8_t SData[10],RData[1]={0}; - - SData[0] = XT_CMDB_CHECK_BMIDH; - SData[1] = XT_CMDB_CHECK_BMIDL; - - memcpy(SData+2,bmid,bmidlen); - XT_SendData(SData,2+bmidlen); - - XT_ReceiveData(RData, 1); - - if(*RData & 0x80) - return 0; - else - return 1; -} - - -//函数名称:获取全部验证状态 -//函数参数: -//函数功能:若曾充满电标志位、延期标定完成标志位、起爆密码验证通过标志位均为1则不反馈,否则反馈 -//函数返回: -uint8_t XT_Check_Fire_All(void) -{ - uint8_t SData[2],RData[1]={0}; - - SData[0] = XT_CMDB_CHECK_FIRE_ALLH; - SData[1] = XT_CMDB_CHECK_FIRE_ALLL; - XT_SendData(SData,2); - - XT_ReceiveData(RData, 1); - - if(*RData & 0x80) - return 1; - else - return 0; -} - - -//函数名称:逐发获取验证状态 -//函数参数: -//函数功能:指令后发送数量等于最大编号值的方波。 -// 每发雷管对方波进行计数,在计数到自己的编号值所对应的方波时, -// 若当前充满电标志位、延期标定完成标志位、起爆密码验证通过标志位均为1则反馈,否则不反馈 -//函数返回: -uint8_t XT_Check_Fire_Each(uint32_t index_max, uint8_t *check) -{ - uint8_t SData[2]; - - SData[0] = XT_CMDB_CHECK_FIRE_EACHH; - SData[1] = XT_CMDB_CHECK_FIRE_EACHL; - XT_SendData(SData,2); - XT_ReceiveData(check, index_max); - - return 0; -} - - -//函数名称:设置反馈电流大小 -//函数参数: -//函数功能:CRC校验通过时,将SETTING常驻寄存器的[3:2]位改为LEVEL所指定的档位。不改变EEPROM。若要改变EEPROM,应使用写配置区指令。 -//函数返回: -void XT_Set_Current(uint8_t level) -{ - uint8_t SData[3]; - - SData[0] = XT_CMDB_SET_CURRENTH; - SData[1] = level; - SData[2] = XT_CalCRC(SData,2); - XT_SendData(SData,3); -} - - -//函数名称:广播充电 -//函数参数: -//函数功能:CRC校验通过时,将电容电压比较器档位设定为LEVEL指定的档位,将当前充满电标志位复位, -// 并打开充电开关,关闭放电开关进行充电。充电完成时将曾充满电标志位、当前充满电标志位置位。 -// LEVEL:0x11-1V、0x22-4V、0x33-6V、0x44-10V、0x55-12V、0x66-14V、0x77-18V、0x88-22V、0x99-26V -//函数返回: -void XT_Charge_All(uint8_t level) -{ - uint8_t SData[3]; - - SData[0] = XT_CMDB_CHARGE; - SData[1] = level; - SData[2] = XT_CalCRC(SData,2); - XT_SendData(SData,3); -} - -//函数名称:检查配置区 -//函数参数: -//函数功能:CRC校验通过时,若配置区中的UID/起爆密码长度及版本号两个字段同指令中的值相同则不反馈,否则反馈 -//函数返回: -uint8_t XT_Check_Config(uint8_t *config) -{ - uint8_t SData[4],RData[1]={0}; - - SData[0] = XT_CMDB_CHECK_CONFIG; - SData[1] = *(config); - SData[2] = *(config+1); - SData[3] = XT_CalCRC(SData,3); - XT_SendData(SData,4); - - XT_ReceiveData(RData, 1); - - if(*RData & 0x80) - return 1; - else - return 0; -} - - -/****************************************** -* -* C类指令(测试指令) -* -*******************************************/ - -//函数名称:写UID -//函数参数: -//函数功能:将UID写入EEPROM。写入完成后有反馈 -//函数返回: -uint8_t XT_Write_Uid(uint8_t *uid, uint8_t uidlen) -{ - uint8_t SData[14]; - uint32_t writetime=0; - - SData[0] = XT_CMDC_WRITE_UID; - memcpy(SData+1,uid,uidlen); - XT_SendData(SData,uidlen+1); - - return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime); -} - - -//函数名称:写起爆密码 -//函数参数: -//函数功能:将起爆密码写入EEPROM。写入完成后有反馈 -//函数返回: -uint8_t XT_Write_Bmid(uint8_t *bmid, uint8_t bmidlen) -{ - uint8_t SData[9]; - uint32_t writetime=0; - - SData[0] = XT_CMDC_WRITE_BMID; - memcpy(SData+1,bmid,bmidlen); - XT_SendData(SData,bmidlen+1); - return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime); -} - - -//函数名称:写管壳码 -//函数参数: -//函数功能:将管壳码写入EEPROM。写入完成后有反馈 -//函数返回: -uint8_t XT_Write_Shell(uint8_t *shell) -{ - uint8_t SData[14]; - uint32_t writetime=0; - - SData[0] = XT_CMDC_WRITE_SHELL; - memcpy(SData+1,shell,13); - - XT_SendData(SData,14); - - return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime); -} - - -//函数名称:写现场值_C -//函数参数: -//函数功能:将编号值、延期值、孔位值写入EEPROM。写入完成后有反馈。编号值长度为2字节,延期值长度为3字节,孔位值长度为2字节 -//函数返回: -uint8_t XT_Write_Field_All(uint8_t *field) -{ - uint8_t SData[8]; - uint32_t writetime=0; - - SData[0] = XT_CMDC_WRITE_FIELD; - - memcpy(SData+1,field,13); - - XT_SendData(SData,8); - - return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime); -} - - -//函数名称:写配置区 -//函数参数: -//函数功能:将LEN、SETTING、REV写入EEPROM及相应的常驻寄存器。写入完成后有反馈 -//函数返回: -uint8_t XT_Write_Config(uint8_t *config) -{ - uint8_t SData[4]; - uint32_t writetime=0; - - SData[0] = XT_CMDC_WRITE_CONFIG; - memcpy(SData+1,config,3); - XT_SendData(SData,4); - - return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime); -} - - -//函数名称:写测量参数值 -//函数参数: -//函数功能:将CCSC、AMP、R1、Rdson写入EEPROM。写入完成后有反馈 -//函数返回: -uint8_t XT_Write_Param(uint8_t *param) -{ - uint8_t i,SData[5]; - uint32_t writetime=0; - - SData[0] = XT_CMDC_WRITE_PARAM; - - for(i=0;i<4;i++) - { - SData[i+1] = *(param+i); - } - memcpy(SData+1,param,4); - - XT_SendData(SData,5); - - return XT_Get_Ack(XTWriteBitTimerOverflowCnt, XTConfirmAckCount, &writetime); -} - - -//函数名称:测量储能电容C -//函数参数: -//函数功能:UID正确且CRC校验通过时,将电容电压比较器档位设定为LEVEL指定的档位,并打开恒流源开关,关闭放电开关进行充电。充电完成时发出反馈,并关闭恒流源开关,打开放电开关。 -//函数返回:充电时间 -uint8_t XT_Measure_Cap_All(uint8_t level, uint32_t *chargetime) -{ - uint8_t SData[2]; - - SData[0] = XT_CMDC_MEASURE_CAP; - SData[1] = level; - XT_SendData(SData,2); - return XT_Get_Ack(*chargetime, XTConfirmAckCount, chargetime); -} - - -//函数名称:锁定 -//函数参数: -//函数功能:向EEPROM中LOCK字段写入0x8B,锁定标志位置位。写入完成后有反馈。锁定后C类指令不再识别,仅可写入现场值 -//函数返回: -void XT_Lock(void) -{ - uint8_t SData[1]; - - SData[0] = XT_CMDC_LOCK; - XT_SendData(SData,1); - delay_us(700); - XTBUS_W_0; - delay_us(500); - XTBUS_W_1; - delay_os_ms(50); -} - - -//函数名称:读测量参数值_C -//函数参数: -//函数功能:读出CCSC、AMP、R1、Rdson -//函数返回: -uint8_t XT_Read_Param_All(uint8_t *param) -{ - uint8_t SData[1]; - - SData[0] = XT_CMDC_READ_PARAM; - XT_SendData(SData,1); - XT_ReceiveData(param, 34); - - if(*(param+4) & 0x80) - return 0; - else - return 1; -} - - -//函数名称:读配置区 -//函数参数: -//函数功能:读出CKCFG、LEN、SETTING、REV -//函数返回: -uint8_t XT_Read_Config(uint8_t *config) -{ - uint8_t SData[1]; - - SData[0] = XT_CMDC_READ_CONFIG; - XT_SendData(SData,1); - XT_ReceiveData(config, 34); - - if(*(config+4) & 0x80) - return 0; - else - return 1; -} - - -//函数名称:读管壳码_C -//函数参数: -//函数功能:读出管壳码。管壳码长度为13字节。反馈完成后会继续反馈一位1作为结束符 -//函数返回: -uint8_t XT_Read_Shell_All(uint8_t *shell) -{ - uint8_t SData[1]; - - SData[0] = XT_CMDC_READ_SHELL; - XT_SendData(SData,1); - XT_ReceiveData(shell, 106); - - if(*(shell+13) & 0x80) - return 0; - else - return 1; -} - - -//函数名称:测量药头电阻_C -//函数参数: -//函数功能:收到指令时打开药头电阻测量电路开关。等待40个载波后,发出ADC复位信号,再经过1个载波后,发出开始ADC采样信号,随后的8个载波中反馈ADC采样的值。然后再发出ADC复位信号,如上重复三次 -//函数返回: -uint8_t XT_Measure_Res_All(uint8_t *adcvalue) -{ - uint8_t SData[1],RData[9]={0}; - - SData[0] = XT_CMDC_MEASURE_RES; - XT_SendData(SData,1); - XT_ReceiveData(RData, 70); - - *adcvalue = (RData[5]<<2) + (RData[6]>>6); - *(adcvalue+1) = (RData[6]<<4) + (RData[7]>>4); - *(adcvalue+2) = (RData[7]<<6) + (RData[8]>>2); - - return 0; -} - - -uint8_t XT_Get_UID_R(uint8_t *uid, uint8_t uidlen) //算桥丝电阻 -{ - uint8_t adcvalue[3]; - uint16_t qsadc=0,count=1; - - XT_Measure_Res(uid,uidlen,adcvalue); - - qsadc = adcvalue[1]; - if(adcvalue[0]>0x00 && adcvalue[0]<0xF0) - { - qsadc += adcvalue[0]; - count++; - } - if(adcvalue[2]>0x00 && adcvalue[2]<0xF0) - { - qsadc += adcvalue[2]; - count++; - } - qsadc = qsadc / count; - return (qsadc & 0xFF); -// if(qsadc < 0xF0) -// return 0; -// else -// return 1; -} - - -uint8_t XT_Get_R() //算桥丝电阻 -{ - uint8_t adcvalue[3]; - uint16_t qsadc=0,count=1; - - XT_Measure_Res_All(adcvalue); - - qsadc = adcvalue[1]; - if(adcvalue[0]>0x00 && adcvalue[0]<0xF0) - { - qsadc += adcvalue[0]; - count++; - } - if(adcvalue[2]>0x00 && adcvalue[2]<0xF0) - { - qsadc += adcvalue[2]; - count++; - } - qsadc = qsadc / count; - return (qsadc & 0xFF); -// if(qsadc < 0xF0) -// return 0; -// else -// return 1; -} - -uint8_t XT_Get_UID_C(uint8_t *uid, uint8_t uidlen, uint8_t level, uint32_t time_out,float *CapacitanceValue) //算储能电容 -{ - uint8_t exeresult=1; - uint32_t chargetime=time_out; - uint8_t param[5]={0}; - float CSCC=0; - - exeresult = XT_Measure_Cap(uid, uidlen, level, &chargetime); - if(exeresult) - { - return 1; - } - - __disable_irq(); - delay_ms(10); - __enable_irq(); - - exeresult = XT_Read_Param(uid,uidlen, param); - if(exeresult) - { - return 1; - } - - CSCC = 0.390625f * param[0] + 120; - - if(level == 0x11) - { - *CapacitanceValue = CSCC * chargetime /10000.0f; - } - else if(level == 0x22) - { - *CapacitanceValue = CSCC * chargetime / 40000.0f; - } - else if(level == 0x33) - { - *CapacitanceValue = CSCC * chargetime / 100000.0f; - } - - return 0; -} - -uint8_t XT_Get_C(uint8_t level,uint32_t time_out ,float *CapacitanceValue) //算储能电容 -{ - uint8_t exeresult=1; - uint32_t chargetime=time_out; - uint8_t param[5]={0}; - float CSCC=0; - - exeresult = XT_Measure_Cap_All(level, &chargetime); - if(exeresult) - { - return 1; - } - - delay_os_ms(20); - - exeresult = XT_Read_Param_All(param); - if(exeresult) - { - return 1; - } - - CSCC = 0.390625f * param[0] + 120; - - if(level == 0x11) - { - *CapacitanceValue = CSCC * chargetime /10000.0f; - } - else if(level == 0x22) - { - *CapacitanceValue = CSCC * chargetime / 40000.0f; - } - else if(level == 0x33) - { - *CapacitanceValue = CSCC * chargetime / 100000.0f; - } - - return 0; -} - diff --git a/source/elec_det/driver/XTDriver.h b/source/elec_det/driver/XTDriver.h deleted file mode 100644 index d8ccd84..0000000 --- a/source/elec_det/driver/XTDriver.h +++ /dev/null @@ -1,187 +0,0 @@ -#ifndef XTDRIVER_H -#define XTDRIVER_H - -#include "base/define.h" -#include "hardware/gpio_cfg.h" -#include "hardware/adc_cfg.h" -#include "base/delay.h" -#include "hardware/power.h" -#include - - - -#define XTBUS_IDLE XTBUS_W_1 -#define XTBUS_RWIDLE XTBUS_WR_1 - -#define XT_Read_AD_Sample_C 120 - -#define XT_ADC_SAMPLE_TIME 589u //采样 XT_Read_AD_Sample_C 所需时间 - - - -#define XTREGISTERVOLTAGE 80 -#define XTCOMMHIGHVOLTAGE 100 //10V 1200米干线可以,1400米干线电压不够 -#define XTCHARGEINSTRUCTIONVOLTAGE 160 -#define XTCOMMMEDIUMVOLTAGE 80 -#define XTCHARGEVOLTAGE 260 //充电20V 1200米电压不够, 充电18V 1200米分档充能充满 - -#define XTBIT0 0 -#define XTBIT1 1 - -#define XTFIRSTDELAY 138 -#define XTFIRSTCYCLE 108 -#define XTSECONDDELAY 128 -#define XTSECONDCYCLE 118 -#define XTTHRIDDELAY 123 -#define XTTHRIDCYCLE 118 -#define XTOTHERDELAY 123 -#define XTOTHERCYCLE 113 - - -#define XT_DAT_PLUS_T 100 -#define XT_BIT_DELAY 180 - -#define XT_TRIM_DELAY 293 -#define XTTRIMCYCLE 693 - -//#define XTFIRSTDELAY 140 //1200米低温可能芯片识别不出来指令 -//#define XTFIRSTCYCLE 140 -//#define XTSECONDDELAY 110 -//#define XTSECONDCYCLE 110 -//#define XTTHRIDDELAY 110 -//#define XTTHRIDCYCLE 110 -//#define XTOTHERDELAY 110 -//#define XTOTHERCYCLE 110 -//#define XTBITDELAY 180 -//#define XTTRIMDELAY 293 -//#define XTTRIMCYCLE 693 - - -#define XTCmdAndSquareUs 700 //指令与方波的时间间隔 -#define XTTimOverflowUs 100 //TIM定时器溢出时间 -#define XTSquareLowTimNum 12 //方波低电平TIM溢出数 这个时间让电容充电 100us后才会开始充电 //原值7 越长反馈幅度越大,最大15 -#define XTSquareCollectTimNum 1 //方波高电平内采样TIM溢出数 -#define XTSquareHighTimNum 7 //方波高电平TIM溢出数 确保比芯片反馈完多100us,最小7,最大15,短点好 - -#define XTCollectResistance 2 //2 - R10_4ma_54ma_MC 3-R1_33ma_540ma_MC -#define XTCollectADCChannel AN_MAL_CH //AN_UA_CH AN_MAL_CH - -#define XTCollectIncrementValue 150 //最小200mV 低温下扫描间隔长一点70ms,300ms一个,短了电压会不够 抢反馈 -#define XTCollectSumValue 1500 -#define XTSingleCollectAckValue 800 //单发检测 -#define XTConfirmAckCount 10 - -#define XTCollectTimerPrescaler 72 //1us -#define XTCollectTimerOverflowUs 600 //600us //450us //要将反馈全部包进去,反馈开始时间最晚在边沿后350us -#define XTSingleCollectTimerPrescaler 7200 //0.1ms -#define XTSingleCollectTimerOverflowMs 500 //50ms -#define XTSingleCollectAckTimerOverflowCnt 20000 //2s //单发充电完成 -#define XTWriteBitTimerOverflowCnt 500 //50ms 指令应答超时 - -#define XT_ADC_BUF_LEN 140 - -//************************************************************************// -#define XT_CMDA_WRITE_FIELD 0xEC //写现场值 -#define XT_CMDA_READ_FIELD 0xEF //读现场值 -#define XT_CMDA_READ_SHELL 0xF4 //读管壳码 -#define XT_CMDA_READ_PARAM 0xF1 //读测量参数值 -#define XT_CMDA_MEASURE_RES 0xF8 //测量药头电阻 -#define XT_CMDA_MEASURE_CAP 0xDB //测量储能电容 -#define XT_CMDA_CHARGE 0xDD //单发充电 - -#define XT_CMDB_CLEAR_READH 0x1F //清除已读状态高8位 -#define XT_CMDB_CLEAR_READL 0x2A //清除已读状态低8位 -#define XT_CMDB_FIREH 0x3C //起爆高8位 -#define XT_CMDB_FIREL 0xC8 //起爆低8位 -#define XT_CMDB_INITH 0x1A //初始化寄存器高8位 -#define XT_CMDB_INITL 0x61 //初始化寄存器低8位 -#define XT_CMDB_RESETH 0x19 //软件复位高8位 -#define XT_CMDB_RESETL 0x66 //软件复位低8位 -#define XT_CMDB_READ_UIDH 0x33 //扫描高8位 -#define XT_CMDB_READ_UIDL 0x34 //扫描低8位 -#define XT_CMDB_TRIM_FASTH 0x2E //快速延期标定高8位 -#define XT_CMDB_TRIM_FASTL 0x2D //快速延期标定低8位 -#define XT_CMDB_TRIM_COMPLETEH 0x2D //完整延期标定高8位 -#define XT_CMDB_TRIM_COMPLETEL 0x33 //完整延期标定低8位 -#define XT_CMDB_CHECK_ONLINEH 0x2B //在线检测高8位 -#define XT_CMDB_CHECK_ONLINEL 0x4B //在线检测低8位 -#define XT_CMDB_CHECK_BMIDH 0x28 //验证起爆密码高8位 -#define XT_CMDB_CHECK_BMIDL 0x7F //验证起爆密码低8位 -#define XT_CMDB_CHECK_FIRE_ALLH 0x27 //获取全部验证状态高8位 -#define XT_CMDB_CHECK_FIRE_ALLL 0x52 //获取全部验证状态低8位 -#define XT_CMDB_CHECK_FIRE_EACHH 0x24 //获取逐发验证状态高8位 -#define XT_CMDB_CHECK_FIRE_EACHL 0x55 //获取逐发验证状态低8位 -#define XT_CMDB_SET_CURRENTH 0x42 //设置反馈电流大小 -#define XT_CMDB_CHARGE 0x41 //广播充电 -#define XT_CMDB_CHECK_CONFIG 0x70 //检查配置区 - -#define XT_CMDC_WRITE_UID 0x1E //写UID -#define XT_CMDC_WRITE_BMID 0x1D //写起爆密码 -#define XT_CMDC_WRITE_SHELL 0x1B //写管壳码 -#define XT_CMDC_WRITE_FIELD 0x18 //写现场值_C -#define XT_CMDC_WRITE_CONFIG 0x14 //写配置区 -#define XT_CMDC_WRITE_PARAM 0x12 //写测量参数值 -#define XT_CMDC_MEASURE_CAP 0x11 //测量储能电容_C -#define XT_CMDC_LOCK 0x3E //锁定 -#define XT_CMDC_READ_PARAM 0x37 //读测量参数值_C -#define XT_CMDC_READ_CONFIG 0x34 //读配置区 -#define XT_CMDC_READ_SHELL 0x2C //读管壳码_C -#define XT_CMDC_MEASURE_RES 0x2F //测量药头电阻_C - - -extern uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur; -extern uint8_t XT_EnFreeBack_Test,XT_CommEnd_CurEn; - -//************************************************************************// -/* -@brief 通信反码信息初始化 -*/ -void XT_FreeBack_Prapare(uint8_t enable_flag); -void XT_SendSquare(uint32_t num); -uint8_t XT_Power_Init(void); -void XT_BUS_CTRL( uint8_t NewState ); -uint8_t XT_Write_Field(uint8_t *uid, uint8_t uidlen, uint8_t *field); -uint8_t XT_Read_Field(uint8_t *uid, uint8_t uidlen, uint8_t *field); -uint8_t XT_Read_Shell(uint8_t *uid, uint8_t uidlen, uint8_t *shell); -uint8_t XT_Read_Param(uint8_t *uid, uint8_t uidlen, uint8_t *param); -uint8_t XT_Measure_Res(uint8_t *uid, uint8_t uidlen, uint8_t *adcvalue); -uint8_t XT_Measure_Cap(uint8_t *uid, uint8_t uidlen, uint8_t level, uint32_t *chargetime); - -uint8_t XT_Charge_One(uint8_t *uid,uint8_t uidlen, uint8_t level,uint16_t busvoltage, uint8_t isgetack); -void XT_Clear_Read(void); -void XT_Fire(void); -uint8_t XT_FireandCheck(uint8_t *delay); -uint8_t XT_MeasureFire(uint32_t *delay) ; -void XT_Init(uint8_t regdata); -void XT_Reset(void); -uint8_t XT_Read_Uid(uint8_t *uid, uint8_t uidlen); -void XT_Trim_Fast(void); -void XT_Trim_Faset_Cycle(uint16_t cycle,uint16_t duty); -void XT_Trim_Complete(uint32_t delay_max); -void XT_Trim_Complete_Cycle(uint16_t cycle,uint16_t duty, uint32_t delay_max); -uint8_t XT_Check_Online(uint16_t index_max, uint8_t *online); -uint8_t XT_Check_Bmid(uint8_t *bmid, uint8_t bmidlen); -uint8_t XT_Check_Fire_All(void); -uint8_t XT_Check_Fire_Each(uint32_t index_max, uint8_t *check); -void XT_Set_Current(uint8_t level); -void XT_Charge_All(uint8_t level); -uint8_t XT_Check_Config(uint8_t *config); -uint8_t XT_Write_Uid(uint8_t *uid, uint8_t uidlen); -uint8_t XT_Write_Bmid(uint8_t *bmid, uint8_t bmidlen); -uint8_t XT_Write_Shell(uint8_t *shell); -uint8_t XT_Write_Field_All(uint8_t *field); -uint8_t XT_Write_Config(uint8_t *config); -uint8_t XT_Write_Param(uint8_t *param); -uint8_t XT_Measure_Cap_All(uint8_t level, uint32_t *chargetime); -void XT_Lock(void); -uint8_t XT_Read_Param_All(uint8_t *param); -uint8_t XT_Read_Config(uint8_t *config); -uint8_t XT_Read_Shell_All(uint8_t *shell); -uint8_t XT_Measure_Res_All(uint8_t *adcvalue); -uint8_t XT_Get_UID_R(uint8_t *uid, uint8_t uidlen); -uint8_t XT_Get_R(void); - -uint8_t XT_Get_UID_C(uint8_t *uid, uint8_t uidlen, uint8_t level, uint32_t time_out,float *CapacitanceValue) ; -uint8_t XT_Get_C(uint8_t level, uint32_t time_out, float *CapacitanceValue); - -#endif diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c deleted file mode 100644 index c65add8..0000000 --- a/source/elec_det/elec_det.c +++ /dev/null @@ -1,248 +0,0 @@ -#include "board.h" -#include "bytearray.h" -#include "mystdlib.h" - -#include "elec_det.h" -#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" - - -#define PLAN_MAX_TASK 64 - - -typedef struct{ - CheckerTask_Info_st* task_info_array[PLAN_MAX_TASK];//ṹָ - -}self_def; - - -static self_def g_self; - - -// ȡַ -uint8_t elec_local_addr(void) -{ - static uint8_t addr=0; - if(addr==0) - addr=Gpio_GetDeivceAddr(); - return addr; -} - - -// led1״̬ -void elec_led1_power(int power) -{ - LED1_Out=power?1:0; -} - -// led2״̬ -void elec_led2_power(int power) -{ - LED2_Out=power?1:0; -} - - - -// ȡ -array_def *elec_check_result(void) -{ - array_def *r=arr_creat(); - - return arr_temp(r); -} - - -// дӲ汾 -int elec_write_hardversion(int version) -{ - board_st.hard_v=version; - return 0; -} - - - -// дУ׼ֵ -int elec_write_resistor_cbv(int cbv) -{ - board_st.resistor_diff=cbv; - return 0; -} - - -// ˿ֵ -array_def *elec_check_resistor(void) -{ - /* - 1 ͨ1-4ͨ˿ - 2 ͨ2-3ͨ˿ - 3 ͨ1-3ͨ迹 - 4 ͨ2-4ͨ迹 - */ - uint16_t aus_sample[5]; - uint16_t us_resistor; - uint8_t uc_index = 0; - AD_SampleResistor(aus_sample); - for(uc_index = 0; uc_index < 5; uc_index++) - { - aus_sample[uc_index] -= board_st.resistor_diff; - } - // ȡвģʽ - switch(0) - { - case 0: us_resistor = aus_sample[0];break; - case 1: us_resistor = aus_sample[1];break; - case 2: us_resistor = aus_sample[2];break; - default : us_resistor = 0;break; - } - array_def *r=arr_creat(); - arr_append(r,0); - arr_append(r,us_resistor&0xff); - arr_append(r,(us_resistor >> 8) & 0xff); - return arr_temp(r); -} - - - - - -// У鷽,0ɹ -static int elec_check_scheme(void) -{ - uint32_t ul_crc32; - - ul_crc32 = Crc32Calu((uint32_t*)APP_TEST_PLAN_ADDR,(APP_TEST_PLANINFO_SIZE-4)); - if(ul_crc32 != (*(uint32_t*)(APP_TEST_PLAN_ADDR+APP_TEST_PLANINFO_SIZE-4))) - { - board_st.plan_id = ~0; - LED1_Out_Off; - return 1; - } - return 0; -} - - - - -// ط -static void elec_load_scheme(void) -{ - self_def *s=&g_self; - uint8_t uc_index = 0; - uint32_t ul_len; - CheckerTask_Info_st* pinfo_st = (CheckerTask_Info_st*)(APP_TEST_PLAN_ADDR+256); - for(uc_index = 0; uc_index < PLAN_MAX_TASK; uc_index++) - { - s->task_info_array[uc_index] = 0; - } - uc_index = 0; - while((pinfo_st->runindex != 0xFF) && (uc_index < PLAN_MAX_TASK)) - { - s->task_info_array[uc_index++] = pinfo_st; - ul_len = pinfo_st->param_rtv_count & 0x0F; - ul_len = (ul_len<<1)+5; - - pinfo_st = (CheckerTask_Info_st*)((uint8_t*)pinfo_st + ul_len); - } - -} - - -// м -array_def *elec_check_with_scheme(array_def *uid_psw) -{ - self_def *s=&g_self; - const uint8_t* ptaskindex = (uint8_t*)(APP_TEST_PLAN_ADDR+4); - CheckerTask *tasks_fun_table[]={jqtaskArray,xttaskArray}; - CheckerTask_Info_st *task_par=0; - uint8_t chip_type=0; - uint8_t taskid=0; - CheckerTask task_fun=0; - uint8_t res=0; - array_def *r=arr_creat(); - chip_type=(board_st.plan_id >> 12 ) & 0x0F; - if(chip_type>=LENGTH(tasks_fun_table)){ - arr_append(r,1); - return arr_temp(r); - } - memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st)); - int task_index=0; - int err_flag=0; - LED1_Out_Off; - while((ptaskindex[task_index]!=0xff)&&(task_index=CHECKER_MAXID_COUNT){ - break; - } - task_par= s->task_info_array[task_index]; - if(task_par==0){ - break; - } - task_fun=tasks_fun_table[chip_type][taskid]; - if(task_fun==0){ - break; - } - - // װز - rt_memcpy(&checker_runcfg.task_info,task_par,sizeof(CheckerTask_Info_st)); - checker_runcfg.param_count = checker_runcfg.task_info.param_rtv_count & 0x0F; - checker_runcfg.rtv_count = (checker_runcfg.task_info.param_rtv_count >> 4) & 0x0F; - rt_memcpy(checker_runcfg.params,checker_runcfg.task_info.params,checker_runcfg.param_count*2); - - // ִ - for(int i=0;i<1+task_par->retry_time;i++) - { - checker_runcfg.excue_rtv=1; - task_fun(); - Checker_Excueindex(task_index); - if(checker_runcfg.excue_rtv==0) - break; - } - - // Ѱһ - if((checker_runcfg.excue_rtv != 0) - && (checker_runcfg.task_info.error_jumpto != 0) - && (checker_runcfg.task_info.error_jumpto != 0xFF) - ) - { - uint8_t uc_index = task_index+1;//ʱһֱ˳ִ - task_index = checker_runcfg.task_info.error_jumpto; - while(uc_index < task_index) - { - Checker_MaskResult(1,uc_index);//IJδִ - //ֵ±꣬IJķֵ洢ռ䱣 - checker_runcfg.rtv_index += (s->task_info_array[uc_index]->param_rtv_count >> 4) & 0x0F; - uc_index++; - } - }else{ - task_index++;//ֱ˳ִ - } - } - - arr_append(r,0); - arr_appends(r,checker_runcfg.Task_Result,8); - arr_appends(r,checker_runcfg.Task_Excute,8); - arr_appends(r,checker_runcfg.Test_Rtv,checker_runcfg.rtv_index*2); - return arr_temp(r); -} - - - - diff --git a/source/elec_det/elec_det.h b/source/elec_det/elec_det.h deleted file mode 100644 index 1d3b448..0000000 --- a/source/elec_det/elec_det.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef elec_det_h__ -#define elec_det_h__ - - -#include "stdint.h" - - - - - -uint8_t elec_local_addr(void); - -void elec_led1_power(int power); - -void elec_led2_power(int power); - - - - - - - - - - - - -#endif - - - diff --git a/source/elec_det/hardware/adc_cfg.c b/source/elec_det/hardware/adc_cfg.c deleted file mode 100644 index f61a782..0000000 --- a/source/elec_det/hardware/adc_cfg.c +++ /dev/null @@ -1,633 +0,0 @@ -#include "adc_cfg.h" -#include "gpio_cfg.h" -#include "base/delay.h" -#include "timer_cfg.h" -#include "base/utility.h" -#include "power.h" -uint16_t ad0_adc_sample[AD_SCAN_SAMPLE*AD_SCAN_COUNT]; -#define ADC1_SAMPLE_BUF_LEN 200 -#define ADC1_SAMPLE_BUF_LEN2 20 - -volatile uint16_t FireBus_ADC_Buf[FIREBUS_ADC_BUF_LEN]; - - -uint16_t adc1_sample_buf[ADC1_SAMPLE_BUF_LEN]; -void AdcDef_Init(void) -{ - - ADC_InitTypeDef ADC_InitStructure; - DMA_InitTypeDef DMA_InitStructure; - GPIO_InitTypeDef GPIO_InitStructure; - RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE ); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE ); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); - RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); - - RCC_ADCCLKConfig(RCC_PCLK2_Div6); //12MHz - - //GPIO 配置 - GPIO_InitStructure.GPIO_Pin= VCC_2V5_Pin | VCC_1V25_Pin | V_LA_M_Pin | V_LA_H_Pin | R_AD_01_Pin; - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_Init(GPIOA,&GPIO_InitStructure); - GPIO_Write(GPIOA,GPIO_InitStructure.GPIO_Pin); - - //GPIO 配置 - GPIO_InitStructure.GPIO_Pin= AD_OUTA_Pin | AD_OUTB_Pin | AN_UA_Pin | AN_MAL_Pin | AN_CAP_AD_Pin; - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_Init(GPIOA,&GPIO_InitStructure); - GPIO_Write(GPIOC,GPIO_InitStructure.GPIO_Pin); - - ADC_DeInit(ADC1); - ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; - ADC_InitStructure.ADC_ScanConvMode = ENABLE; - ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; - ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; - ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; - ADC_InitStructure.ADC_NbrOfChannel = AD_SCAN_SAMPLE; - ADC_Init(ADC1, &ADC_InitStructure); - ADC_TempSensorVrefintCmd(ENABLE); - - - - ADC_RegularChannelConfig(ADC1, VCC_2V5_CH, 1, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, VCC_1V25_CH, 2, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, V_LA_M_CH, 3, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, V_LA_H_CH, 4, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, AD_OUTA_CH, 5, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, AD_OUTB_CH, 6, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 7, ADC_SampleTime_71Cycles5); - ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 8, ADC_SampleTime_71Cycles5); - - DMA_DeInit(DMA1_Channel1); - DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; - DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ad0_adc_sample; - DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; - DMA_InitStructure.DMA_BufferSize = AD_SCAN_SAMPLE*AD_SCAN_COUNT; - DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; - DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; - DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; - DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; - DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; - DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; - DMA_InitStructure.DMA_M2M = DISABLE; - DMA_Init(DMA1_Channel1,&DMA_InitStructure); - DMA_Cmd(DMA1_Channel1,ENABLE); - - ADC_Cmd(ADC1, ENABLE); - ADC_ResetCalibration(ADC1); - while(ADC_GetResetCalibrationStatus(ADC1)); - - ADC_StartCalibration(ADC1); - while(ADC_GetCalibrationStatus(ADC1)); - - ADC_DMACmd(ADC1,ENABLE); - ADC_SoftwareStartConvCmd(ADC1, ENABLE); - - - - ADC_DeInit(ADC2); - ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; - ADC_InitStructure.ADC_ScanConvMode = DISABLE; - ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; - ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; - ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; - ADC_InitStructure.ADC_NbrOfChannel = 1; - ADC_Init(ADC2, &ADC_InitStructure); - - ADC_Cmd(ADC2, ENABLE); - ADC_ResetCalibration(ADC2); - while(ADC_GetResetCalibrationStatus(ADC2)); - - ADC_StartCalibration(ADC2); - while(ADC_GetCalibrationStatus(ADC2)); - - ADC_DMACmd(ADC2,ENABLE); - ADC_SoftwareStartConvCmd(ADC2, ENABLE); -} - - -void StartADC2Channel(uint32_t channel, uint32_t speed) -{ - - ADC_RegularChannelConfig(ADC2,channel,1,speed); - ADC_SoftwareStartConvCmd(ADC2,ENABLE); - delay_us(100); -} - -void StartADC1Channel(uint32_t channel) -{ - - ADC_RegularChannelConfig(ADC1,channel,1,ADC_SampleTime_71Cycles5); - ADC_SoftwareStartConvCmd(ADC1,ENABLE); - delay_us(100); - //adc_calibration_enable(ADC0); -} - -/* -使用该函数,对ADC2触发一次采样,到用该函数前,应调用一次StartADC1Channel(ch) -*/ -uint32_t GetADC2_Fast(void) -{ - uint16_t time_out = 10000; - uint16_t temp = 0; - ADC_ClearFlag(ADC2,ADC_FLAG_EOC);//清除转换结束标志 - ADC_SoftwareStartConvCmd(ADC2,ENABLE);//启动转换 - while((time_out > 0) && ( ADC_GetFlagStatus(ADC2,ADC_FLAG_EOC) == RESET)) - { - time_out--; - } - temp = ADC_GetConversionValue(ADC2) & 0x0FFF; - return temp; -} -/* -使用该函数,对ADC触发一次采样,到用该函数前,应调用一次StartADC0Channel(ch) -*/ -uint16_t GetADC_Fast(ADC_TypeDef* adc_periph) -{ - uint16_t time_out = 10000; - uint16_t temp = 0; - ADC_ClearFlag(adc_periph,ADC_FLAG_EOC);//清除转换结束标志 - ADC_SoftwareStartConvCmd(adc_periph,ENABLE);//启动转换 - while((time_out > 0) && ( ADC_GetFlagStatus(adc_periph,ADC_FLAG_EOC) == RESET)) - { - time_out--; - } - temp = ADC_GetConversionValue(adc_periph) & 0x0FFF; - return temp; -} - -uint32_t GetADC1_Fast(void) -{ - return GetADC_Fast(ADC1); -} - - -uint32_t GetADC2_Value(uint32_t channel) -{ - StartADC2Channel(channel,ADC_SPEED_MIDLE); - return GetADC2_Fast(); -} - -/* - ADC_RegularChannelConfig(ADC1, VCC_2V5_CH, 1, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, VCC_1V25_CH, 2, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, V_LA_M_CH, 3, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, V_LA_H_CH, 4, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, AD_OUTA_CH, 5, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, AD_OUTB_CH, 6, ADC_SampleTime_239Cycles5); - ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 7, ADC_SampleTime_71Cycles5); - ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 8, ADC_SampleTime_71Cycles5); - -*/ -void GetADC1_Value(uint32_t channel,uint16_t* buf,uint16_t len) -{ - uint8_t i = 0; - uint16_t* buf_head = 0; - switch(channel) - { - case VCC_2V5_CH: buf_head = ad0_adc_sample;break; - case VCC_1V25_CH: buf_head = ad0_adc_sample+1;break; - case V_LA_M_CH: buf_head = ad0_adc_sample+2;break; - case V_LA_H_CH: buf_head = ad0_adc_sample+3;break; - case AD_OUTA_CH: buf_head = ad0_adc_sample+4;break; - case AD_OUTB_CH: buf_head = ad0_adc_sample+5;break; - case ADC_Channel_16:buf_head = ad0_adc_sample+6;break; - case ADC_Channel_17:buf_head = ad0_adc_sample+7;break; - default:buf_head = 0;break; - } - if(buf_head == 0) - return; - if(len > AD_SCAN_COUNT) - len = AD_SCAN_COUNT; - for(i=0; i < len ; i++) - { - buf[i] = buf_head[i*AD_SCAN_SAMPLE]; - } - - -} - -float Get_Temperature(void) -{ - uint32_t ad_v; - GetADC1_Value(ADC_Channel_16,(uint16_t*)&ad_v,1); - float temper = (1.43f - ad_v*3.3f/4096) * 1000 / 4.3f + 25; - return temper; -} - - -/*************************ADC App****************************************/ -/* -@brief 稳定获取总线电流 -@rtv 返回电流值 0.1uA -*/ -uint16_t ADC_GetBaseStableCur(void) -{ - uint16_t us_count = 0; - uint16_t us_temp = 0; - uint32_t ul_base; - StartADC2Channel(AN_UA_CH,ADC_SPEED_SLOW); - Power_SetSampleCurrentRange(R100_0uA_160uA_UC); - delay_ms(100); - while(us_count < ADC1_SAMPLE_BUF_LEN) - { - adc1_sample_buf[us_count] = GetADC_Fast(ADC_CURR_DE); - delay_us(20); - if(us_count == 0) - { - ul_base = adc1_sample_buf[us_count] ; - }else{ - ul_base += adc1_sample_buf[us_count] ; - ul_base >>= 1; - } - us_count++; - } - - for(us_count = 0; us_count < ADC1_SAMPLE_BUF_LEN; us_count++) - { - ul_base = (ul_base*8 + adc1_sample_buf[us_count]*2 )/10; - adc1_sample_buf[us_count] = ul_base; - } - Bubble_Sort_u16(adc1_sample_buf,us_count); - - us_count = (ADC1_SAMPLE_BUF_LEN>>2); - us_temp = ADC1_SAMPLE_BUF_LEN - (ADC1_SAMPLE_BUF_LEN>>2); - while(us_count < us_temp) - { - ul_base += adc1_sample_buf[us_count++]; - } - us_temp -= (ADC1_SAMPLE_BUF_LEN>>2); - ul_base = ul_base / us_temp; - ul_base = Power_ConvCur(ul_base,R100_0uA_160uA_UC); - return ul_base; -} - - -/* -@brief 稳定获取总线电流 -@rtv 返回电流值 0.1uA -*/ -uint16_t ADC_Comm1p6mA_EndCur(void) -{ - uint16_t us_count = 0; - uint16_t us_temp = 0; - uint32_t ul_base; - StartADC2Channel(AN_UA_CH,ADC_SPEED_SLOW); - Power_SetSampleCurrentRange(R10_0p1mA_1p6mA_UC); - delay_ms(1); - while(us_count < ADC1_SAMPLE_BUF_LEN2) - { - adc1_sample_buf[us_count] = GetADC_Fast(ADC_CURR_DE); - delay_us(1); - if(us_count == 0) - { - ul_base = adc1_sample_buf[us_count] ; - }else{ - ul_base += adc1_sample_buf[us_count] ; - ul_base >>= 1; - } - us_count++; - } - - for(us_count = 0; us_count < ADC1_SAMPLE_BUF_LEN2; us_count++) - { - ul_base = (ul_base*8 + adc1_sample_buf[us_count]*2 )/10; - adc1_sample_buf[us_count] = ul_base; - } - Bubble_Sort_u16(adc1_sample_buf,us_count); - - us_count = (ADC1_SAMPLE_BUF_LEN2>>2); - us_temp = ADC1_SAMPLE_BUF_LEN2 - (ADC1_SAMPLE_BUF_LEN2>>2); - while(us_count < us_temp) - { - ul_base += adc1_sample_buf[us_count++]; - } - us_temp -= (ADC1_SAMPLE_BUF_LEN2>>2); - ul_base = ul_base / us_temp; - ul_base = Power_ConvCur(ul_base,R10_0p1mA_1p6mA_UC); - return ul_base; -} - -/* -@brief 电流降到指定电流下的时间 -@param 执行时间 单位0.1ms -@rtv 最大波动AD值 -*/ -uint16_t AD_CurMonitor(uint32_t ul_times) -{ - uint32_t ul_count = 0, ul_count2; - uint16_t us_count = 0; - uint16_t aus_adc[20]; - uint16_t us_maxadv,us_minadv = 0; - uint16_t ul_shake = 0; - LED1_Out = 0; - for(ul_count2 =0; ul_count2 < 20;ul_count2++) - { - aus_adc[ul_count2] = ADC_GetCurADCFast(); - } - LED1_Out = 1; - ul_count2 = 0; - while(ul_times > 0) - { - ul_count = 0; - Get100usCount(); - while(ul_count< 50000 && ul_count < ul_times) - { - us_maxadv = 0; - us_minadv = 0xFFF; - - for(us_count = 0; us_count < 20;us_count++) - { - if(aus_adc[us_count] > us_maxadv) - { - us_maxadv = aus_adc[us_count]; - } - if(aus_adc[us_count] < us_minadv) - { - us_minadv = aus_adc[us_count]; - } - } - ul_count2 %= 20; - aus_adc[ul_count2++] = ADC_GetCurADCFast(); - if(us_maxadv < us_minadv) - { - us_minadv = 4096; - }else{ - us_minadv = us_maxadv - us_minadv; - } - if(ul_shake < us_minadv) - { - ul_shake = us_minadv; - if(ul_shake > 500){ - LED1_Out = 0; - delay_us(50); - LED1_Out = 1; - } - } - delay_us(40); - ul_count = GET_COUNTTIM_VAL(); - } - if(ul_count >= ul_times) - { - LED1_Out = 0; - return ul_shake; - } - ul_times -= ul_count; - } - LED1_Out= 0; - return ul_shake; -} - -/* -@brief 电流降到指定电流下的时间 -@param 采样超时 -@param end_adv 检测启动和结束判线 -@param 最大电流ad -@param 电流下降过程中最大向上波动 -@rtv 时间采集值0.1ms -*/ - - -uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max_cul,uint16_t *shake_adv) -{ - uint16_t aus_adc_v[5]; - uint16_t aus_adv_shake[20]; - uint16_t time_out; - uint16_t us_count = 0; - uint16_t us_shake_count = 0; - uint16_t us_shake_minadc,us_shake_maxadc; - uint8_t start_flag = 0,shake_flag = 0; - Get100usCount(); - ADC_ClearFlag(ADC_CURR_DE,ADC_FLAG_EOC);//清除转换结束标志 - ADC_SoftwareStartConvCmd(ADC_CURR_DE, ENABLE); //启动转换 - aus_adc_v[4] = 0xFFFF; - *max_cul = 0; - *shake_adv = 0; - LED1_Out = 0; - if(end_adv == 0 || end_adv == 0xFFFF) - { - return 0; - } - while(GetCountTimerCnt() < sample_timeout) - { - time_out = 2000; - while((time_out > 0) && ( ADC_GetFlagStatus(ADC_CURR_DE,ADC_FLAG_EOC) == RESET)) - { - time_out--; - } - aus_adc_v[us_count] = ADC_GetConversionValue(ADC_CURR_DE) & 0x0FFF; - aus_adv_shake[us_shake_count] = aus_adc_v[us_count]; - ADC_ClearFlag(ADC_CURR_DE,ADC_FLAG_EOC);//清除转换结束标志 - ADC_SoftwareStartConvCmd(ADC_CURR_DE, ENABLE); //启动转换 - us_count++; - us_shake_count++; - us_count %= 5; - us_shake_count %= 20; - if((us_shake_count == 0) && (start_flag > 0)) - { - shake_flag ++; - } - if(shake_flag == 2) - { - LED1_Out = 1; - shake_flag = 1; - time_out = 0; - us_shake_maxadc = 0; - us_shake_minadc = 0x0FFF; - while(time_out < 20) - { - if(aus_adv_shake[time_out] > us_shake_maxadc) - { - us_shake_maxadc = aus_adv_shake[time_out]; - } - if(aus_adv_shake[time_out] < us_shake_minadc) - { - us_shake_minadc = aus_adv_shake[time_out]; - } - time_out++; - } - us_shake_minadc = us_shake_maxadc - us_shake_minadc; - if(us_shake_minadc > 900) - { - us_shake_minadc = 0; - } - if(*shake_adv < us_shake_minadc) - { - *shake_adv = us_shake_minadc; - } - } - - if(us_count == 0) - { - Bubble_Sort_u16(aus_adc_v,5); - if((aus_adc_v[0] > end_adv) && start_flag == 0) - { - start_flag = 1; - Get100usCount();//未启动重新设置计数器 - } - //连续5个都大于判线值 - else if(start_flag >0 ) - { - if(*max_cul < aus_adc_v[2]) - { - *max_cul = aus_adc_v[2]; - } - if(aus_adc_v[4] < end_adv) - { - LED1_Out = 0; - return Get100usCount(); - } - }else if(start_flag == 0) - { - if(GetCountTimerCnt() > 10000) - { - return 0; - } - } - - } - } - return 40000; -} - -/*获取桥丝电阻*/ -void AD_SampleResistor(uint16_t* channels_re) -{ - uint16_t aus_sample[32]; - uint8_t uc_index = 0; - const static float resistor_cur = 2.49f; - const static float res_mutli = 79.7; - /* - Gpio_ResistorSwitch - @param 0 全关 - 1 通道1-4通,过桥丝 - 2 通道2-3通,过桥丝 - 3 通道1-3通,测阻抗 - 4 通道2-4通,测阻抗 - - */ - float f_r1,f_r2,f_r3,f_r4; - ADC_ResistorChannelSet(ADC_SPEED_MIDLE); - Gpio_ResistorSwitch(1); - delay_ms(50); - for(uc_index = 0; uc_index < 32; uc_index++) - { - aus_sample[uc_index] = ADC_GetResistorADCFast(); - } - Bubble_Sort_u16(aus_sample,uc_index); - f_r1 = 0; - for(uc_index = 8; uc_index < 24; uc_index++) - { - f_r1 += aus_sample[uc_index]; - } - f_r1 = (((f_r1 /res_mutli)*1000)/4096)*3.3f/resistor_cur/16; - - Gpio_ResistorSwitch(2); - delay_ms(50); - - for(uc_index = 0; uc_index < 32; uc_index++) - { - aus_sample[uc_index] = ADC_GetResistorADCFast(); - } - Bubble_Sort_u16(aus_sample,uc_index); - f_r2 = 0; - for(uc_index = 8; uc_index < 24; uc_index++) - { - f_r2 += aus_sample[uc_index]; - } - f_r2 = (((f_r2 /res_mutli)*1000)/4096)*3.3f/resistor_cur/16; - - Gpio_ResistorSwitch(3); - delay_ms(50); - - for(uc_index = 0; uc_index < 32; uc_index++) - { - aus_sample[uc_index] = ADC_GetResistorADCFast(); - } - Bubble_Sort_u16(aus_sample,uc_index); - f_r3 = 0; - for(uc_index = 8; uc_index < 24; uc_index++) - { - f_r3 += aus_sample[uc_index]; - } - f_r3 = (((f_r3 /res_mutli)*1000)/4096)*3.3f/resistor_cur/16; - - Gpio_ResistorSwitch(4); - delay_ms(50); - - for(uc_index = 0; uc_index < 32; uc_index++) - { - aus_sample[uc_index] = ADC_GetResistorADCFast(); - } - Bubble_Sort_u16(aus_sample,uc_index); - f_r4 = 0; - for(uc_index = 8; uc_index < 24; uc_index++) - { - f_r4 += aus_sample[uc_index]; - } - f_r4 = (((f_r4 /res_mutli)*1000)/4096)*3.3f/resistor_cur/16; - - Gpio_ResistorSwitch(0); - - channels_re[0] = (uint16_t) (((f_r1+f_r2-f_r3-f_r4)/2+0.005f)*100); - channels_re[1] = (uint16_t) ((f_r1+0.005f)*100); - channels_re[2] = (uint16_t) ((f_r2+0.005f)*100); - channels_re[3] = (uint16_t) ((f_r3+0.005f)*100); - channels_re[4] = (uint16_t) ((f_r4+0.005f)*100); - -} - -/*测量电容电压*/ -uint16_t AD_SampleCap(uint16_t delay) -{ - uint32_t ul_ad = 0,ul_ad2 = 0; - uint8_t uc_index = 0; - uint16_t aus_sample[32]; - Gpio_CAPSwitch(1); - ADC_CAPVolChannelSet(ADC_SPEED_MIDLE); - delay_ms(1500); - for(uc_index = 0; uc_index < 32; uc_index++) - { - aus_sample[uc_index] = ADC_GetCAPVolADCFast(); - } - Bubble_Sort_u16(aus_sample,uc_index); - ul_ad = 0; - for(uc_index = 8; uc_index < 24; uc_index++) - { - ul_ad += aus_sample[uc_index]; - } - // - ul_ad >>= 4; - - while(delay > 0) - { - delay_os_ms(100); - delay--; - } - - for(uc_index = 0; uc_index < 32; uc_index++) - { - aus_sample[uc_index] = ADC_GetCAPVolADCFast(); - } - Bubble_Sort_u16(aus_sample,uc_index); - ul_ad2 = 0; - for(uc_index = 8; uc_index < 24; uc_index++) - { - ul_ad2 += aus_sample[uc_index]; - } - //ul_ad2 = ((ul_ad2 *25*11*100/board_st.v2p5_adc/16)+5)/10; - ul_ad2 >>= 4; - - if(ul_ad < ul_ad2) - { - ul_ad = 0; - }else{ - ul_ad = ul_ad - ul_ad2; - ul_ad = ((Power_ADVGetCalVal_106(ul_ad)*11)/100+5)/10 ;//((ul_ad *25*11*1000/board_st.v2p5_adc )+5)/10; - } - Gpio_CAPSwitch(0); - return ul_ad; -} diff --git a/source/elec_det/hardware/adc_cfg.h b/source/elec_det/hardware/adc_cfg.h deleted file mode 100644 index 6561504..0000000 --- a/source/elec_det/hardware/adc_cfg.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef ADC_CFG_H_ -#define ADC_CFG_H_ -#include "base/define.h" - - - - - - -#define AN_UA_CH ADC_Channel_12 //AD2 -#define AN_MAL_CH ADC_Channel_13 //AD2 -#define RAD_01_CH ADC_Channel_2 //AD2 -#define AN_CAP_AD_CH ADC_Channel_15 //AD2 - - - -#define VCC_2V5_CH ADC_Channel_1 //AD1 -#define VCC_1V25_CH ADC_Channel_3 //AD1 -#define V_LA_M_CH ADC_Channel_6 //AD1 -#define V_LA_H_CH ADC_Channel_7 //AD1 -#define AD_OUTA_CH ADC_Channel_10 //AD1 -#define AD_OUTB_CH ADC_Channel_11 //AD1 - - -#define ADC_CURR_DE ADC2 - - - -#define AD_SCAN_COUNT 16 -#define AD_SCAN_SAMPLE 8 - -#define FIREBUS_ADC_BUF_LEN 160 -extern volatile uint16_t FireBus_ADC_Buf[FIREBUS_ADC_BUF_LEN]; - -#define ADC_SPEED_SLOW ADC_SampleTime_239Cycles5 -#define ADC_SPEED_MIDLE ADC_SampleTime_71Cycles5 -#define ADC_SPEED_HIGH ADC_SampleTime_13Cycles5 -#define ADC_SPEED_HFAST ADC_SampleTime_7Cycles5 -void AdcDef_Init(void); -void StartADC2Channel(uint32_t channel, uint32_t speed); -#define ADC_CurChnnelSet(channel,speed) StartADC2Channel(channel,speed) -//桥丝电阻测量通道 -#define ADC_ResistorChannelSet(speed) StartADC2Channel(RAD_01_CH,speed); -//电容电压测量 -#define ADC_CAPVolChannelSet(speed) StartADC2Channel(AN_CAP_AD_CH,speed); - -void StartADC1Channel(uint32_t channel); -void StartADC2ChannelV2(uint32_t channel); -uint32_t GetADC2_Fast(void); -//电流采集通道 -#define ADC_GetCurADCFast() GetADC2_Fast() -//桥丝电阻采集通道 -#define ADC_GetResistorADCFast() GetADC2_Fast() -//电容电压采集通道 -#define ADC_GetCAPVolADCFast() GetADC2_Fast() - -uint32_t GetADC1_Fast(void); - -uint32_t GetADC2_Value(uint32_t channel); -#define ADC_GetCurADC(chnnel) GetADC2_Value(channel) - -void GetADC1_Value(uint32_t channel,uint16_t* buf,uint16_t len); -float Get_Temperature(void); -/* -@brief 稳定获取总线电流 -@rtv 返回电流值 0.1uA -*/ -uint16_t ADC_Comm1p6mA_EndCur(void); -/* -@brief 稳定获取总线电流 -*/ -uint16_t ADC_GetBaseStableCur(void); -/* -@brief 电流降到指定电流下的时间 -@param 采样超时 -@param end_adv 检测启动和结束判线 -@param 最大电流ad -@param 电流下降过程中最大向上波动 -@rtv 时间采集值0.1ms -*/ -uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max_cul,uint16_t *shake_adv); -/* -@brief 电流降到指定电流下的时间 -@param 执行时间 单位0.1ms -@rtv 最大波动AD值 -*/ -uint16_t AD_CurMonitor(uint32_t us_times); -/* -使用该函数,对ADC触发一次采样,到用该函数前,应调用一次StartADC0Channel(ch) -*/ -uint16_t GetADC_Fast(ADC_TypeDef* adc_periph); - -/*获取桥丝电阻*/ -void AD_SampleResistor(uint16_t* channels_re); -/*测量电容电压*/ -uint16_t AD_SampleCap(uint16_t delay); -#endif diff --git a/source/elec_det/hardware/dac_cfg.c b/source/elec_det/hardware/dac_cfg.c deleted file mode 100644 index 2a5b3d3..0000000 --- a/source/elec_det/hardware/dac_cfg.c +++ /dev/null @@ -1,69 +0,0 @@ -#include "dac_cfg.h" -#include "gpio_cfg.h" -/* -@brief 默认初始化 -*/ -void DAC_Definit(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - DAC_InitTypeDef DAC_InitStructure; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); - RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); - - GPIO_InitStructure.GPIO_Pin = C_H_DAC_Pin|C_M_DAC_Pin; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - - DAC_DeInit(); - DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software; - DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; - DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; - - - DAC_Init(DAC_Channel_1, &DAC_InitStructure); - - - DAC_Init(DAC_Channel_2, &DAC_InitStructure); - - DAC_Cmd(DAC_Channel_1, ENABLE); - - DAC_Cmd(DAC_Channel_2, ENABLE); - - - - C_H_DAC_Set(4000); - /* configure the DAC1 */ - C_M_DAC_Set(4000); -} -/* -@brief 设置高电平电压 -@param dac_val DAC0输出值 0-4096 -*/ -void C_H_DAC_Set(uint16_t dac_val) -{ - DAC_SetChannel1Data(DAC_Align_12b_R, dac_val); - DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); -// dac_output_buffer_enable(DAC0); -// dac_data_set(DAC0,DAC_ALIGN_12B_R,dac_val); -// dac_trigger_enable(DAC0); -// dac_enable(DAC0); -// dac_software_trigger_enable(DAC0); -} -/* -@brief 设置高电平电压 -@param dac_val DAC1输出值 0-4096 -*/ -void C_M_DAC_Set(uint16_t dac_val) -{ - DAC_SetChannel2Data(DAC_Align_12b_R, dac_val); - DAC_SoftwareTriggerCmd(DAC_Channel_2,ENABLE); -// dac_output_buffer_enable(DAC1); -// dac_data_set(DAC1,DAC_ALIGN_12B_R,dac_val); -// dac_trigger_enable(DAC1); -// dac_enable(DAC1); -// dac_software_trigger_enable(DAC1); -} - - diff --git a/source/elec_det/hardware/dac_cfg.h b/source/elec_det/hardware/dac_cfg.h deleted file mode 100644 index b7556bb..0000000 --- a/source/elec_det/hardware/dac_cfg.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef DAC_CFG_H -#define DAC_CFG_H -#include "base/define.h" - -#define C_H_DAC_CH DAC_OUT_0 -#define C_H_DAC_CM DAC_OUT_1 - -/* -@brief 设置高电平电压 -@param dac_val DAC0输出值 0-4096 -*/ -void C_H_DAC_Set(uint16_t dac_val); -/* -@brief 设置高电平电压 -@param dac_val DAC1输出值 0-4096 -*/ -void C_M_DAC_Set(uint16_t dac_val); -/* -@brief 默认初始化 -*/ -void DAC_Definit(void); -#endif diff --git a/source/elec_det/hardware/gpio_cfg.c b/source/elec_det/hardware/gpio_cfg.c deleted file mode 100644 index 46e3bfd..0000000 --- a/source/elec_det/hardware/gpio_cfg.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "gpio_cfg.h" -#include "base/delay.h" -void CtrlGpio_DefInit(void) -{ - - GPIO_InitTypeDef GPIO_InitStructure; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); - - GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); - //GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); - - PAout(LAVC_M_Pin_Nu) = 0; - - //GPIO 配置 - GPIO_InitStructure.GPIO_Pin=LAVC_M_Pin; - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_Init(GPIOA,&GPIO_InitStructure); - GPIO_ResetBits(GPIOA,GPIO_InitStructure.GPIO_Pin); - - GPIO_InitStructure.GPIO_Pin = SEG0_Pin; - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; - GPIO_Init(GPIOA,&GPIO_InitStructure); - - - PBout(R10_ON_Pin_Nu) = 1; - PBout(R510_ON_Pin_Nu) = 0; - PBout(LED1_Pin_Nu) = 0; - PBout(IO_APD12_Pin_Nu) = 0; - PBout(LED2_Pin_Nu) = 0; - PBout(OUTAL_Pin_Nu) = 0; - PBout(OUTBL_Pin_Nu) = 0; - PBout(OUTAH_Pin_Nu) = 0; - PBout(IO_CAP_AD_Pin_Nu) = 0; - - //GPIO 配置 - GPIO_InitStructure.GPIO_Pin=\ - R10_ON_Pin|R510_ON_Pin|LED1_Pin|IO_APD12_Pin|LED2_Pin|OUTAL_Pin|OUTBL_Pin|OUTAH_Pin|IO_CAP_AD_Pin; - - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_Init(GPIOB,&GPIO_InitStructure); - - GPIO_ResetBits(GPIOB,GPIO_InitStructure.GPIO_Pin); - - GPIO_InitStructure.GPIO_Pin = FIRE_TEST_Pin; - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; - GPIO_Init(GPIOB,&GPIO_InitStructure); - - PCout(R100_ON_Pin_Nu) = 0; - PCout(OUTBH_Pin_Nu) = 0; - PCout(POWER_ON_Pin_Nu) = 0; - PCout(IO_APD22_Pin_Nu) = 0; - PCout(IO_APD21_Pin_Nu) = 0; - PCout(IO_APD11_Pin_Nu) = 0; - - - GPIO_InitStructure.GPIO_Pin=\ - R100_ON_Pin|OUTBH_Pin|POWER_ON_Pin|IO_APD22_Pin|IO_APD21_Pin|IO_APD11_Pin; - - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_Init(GPIOC,&GPIO_InitStructure); - - //GPIO 配置 - GPIO_InitStructure.GPIO_Pin=SEG4_Pin|SEG3_Pin|SEG1_Pin|SEG2_Pin; - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_Init(GPIOC,&GPIO_InitStructure); - - -} -/* -@brief 获取设备地址 -@param 无 -@rtv 设备地址 -*/ -uint8_t Gpio_GetDeivceAddr(void) -{ - uint16_t ul_addr ; - ul_addr = (PCin(SEG4_Pin_Nu) & 0x01) <<4; - ul_addr |= ((PCin(SEG3_Pin_Nu) & 0x01) <<3); - ul_addr |= ((PCin(SEG2_Pin_Nu) & 0x01) <<2); - ul_addr |= ((PCin(SEG1_Pin_Nu) & 0x01) <<1); - ul_addr |= (PAin(SEG0_Pin_Nu) & 0x01); - return ul_addr; -// return 1; -} - - -/* -@brief 4限制电阻测量通道切换 -@param 0 全关 - 1 通道1-4通,过桥丝 - 2 通道2-3通,过桥丝 - 3 通道1-3通,测阻抗 - 4 通道2-4通,测阻抗 -*/ -void Gpio_ResistorSwitch(uint8_t uc_r) -{ - /* - 1 2 - 3 4 - */ - switch(uc_r) - { - //1-4通,过桥丝电阻 - case 1: PCout(IO_APD11_Pin_Nu) = 1;PBout(IO_APD12_Pin_Nu) = 0;PCout(IO_APD22_Pin_Nu) = 1;PCout(IO_APD21_Pin_Nu) = 0; break; - //2-3通,过桥丝测电阻 - case 2: PCout(IO_APD11_Pin_Nu) = 0;PBout(IO_APD12_Pin_Nu) = 1;PCout(IO_APD22_Pin_Nu) = 0;PCout(IO_APD21_Pin_Nu) = 1; break; - //1-3通, 测阻抗 - case 3: PCout(IO_APD11_Pin_Nu) = 1;PBout(IO_APD12_Pin_Nu) = 1; PCout(IO_APD22_Pin_Nu) = 0; PCout(IO_APD21_Pin_Nu) = 0; break; - //2-4通,测阻抗 - case 4: PCout(IO_APD11_Pin_Nu) = 0; PBout(IO_APD12_Pin_Nu) = 0; PCout(IO_APD22_Pin_Nu) = 1; PCout(IO_APD21_Pin_Nu) = 1; break; - //全关 - default: PCout(IO_APD11_Pin_Nu) = 0; PBout(IO_APD12_Pin_Nu) = 0;PCout(IO_APD22_Pin_Nu) = 0; PCout(IO_APD21_Pin_Nu) = 0; break; - } -} - -/* -@brief 测量电容电压压降GPIO配置 -*/ - -void Gpio_CAPSwitch(uint8_t uc_sw) -{ - Gpio_ResistorSwitch(0); - if(uc_sw > 0) - { - PBout(IO_CAP_AD_Pin_Nu) = 1; - }else{ - PBout(IO_CAP_AD_Pin_Nu) = 0; - } -} diff --git a/source/elec_det/hardware/gpio_cfg.h b/source/elec_det/hardware/gpio_cfg.h deleted file mode 100644 index 1d69c26..0000000 --- a/source/elec_det/hardware/gpio_cfg.h +++ /dev/null @@ -1,304 +0,0 @@ -#ifndef GPIO_CFG_H_ -#define GPIO_CFG_H_ -#include "base/define.h" - -//具体实现思想,参考<>第五章(87页~92页). -//IO口操作宏定义 -#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) -#define MEM_ADDR_(addr) *((volatile unsigned long *)(addr)) -#define BIT_ADDR_(addr, bitnum) MEM_ADDR_(BITBAND(addr, bitnum)) -//IO口地址映射 -#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C -#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C -#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C -#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C -#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C -#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C -#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C - -#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 -#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 -#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 -#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 -#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 -#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 -#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08 - -//IO口操作,只对单一的IO口! -//确保n的值小于16! -#define PAout(n) BIT_ADDR_(GPIOA_ODR_Addr,n) //输出 -#define PAin(n) BIT_ADDR_(GPIOA_IDR_Addr,n) //输入 - -#define PBout(n) BIT_ADDR_(GPIOB_ODR_Addr,n) //输出 -#define PBin(n) BIT_ADDR_(GPIOB_IDR_Addr,n) //输入 - -#define PCout(n) BIT_ADDR_(GPIOC_ODR_Addr,n) //输出 -#define PCin(n) BIT_ADDR_(GPIOC_IDR_Addr,n) //输入 - -#define PDout(n) BIT_ADDR_(GPIOD_ODR_Addr,n) //输出 -#define PDin(n) BIT_ADDR_(GPIOD_IDR_Addr,n) //输入 - -#define PEout(n) BIT_ADDR_(GPIOE_ODR_Addr,n) //输出 -#define PEin(n) BIT_ADDR_(GPIOE_IDR_Addr,n) //输入 - -#define PFout(n) BIT_ADDR_(GPIOF_ODR_Addr,n) //输出 -#define PFin(n) BIT_ADDR_(GPIOF_IDR_Addr,n) //输入 - -#define PGout(n) BIT_ADDR_(GPIOG_ODR_Addr,n) //输出 -#define PGin(n) BIT_ADDR_(GPIOG_IDR_Addr,n) //输入 - -#define VCC_2V5_Pin GPIO_Pin_1 -#define VCC_2V5_Pin_Nu 1 -#define VCC_2V5_GPIO_Port GPIOA - -#define R_AD_01_Pin GPIO_Pin_3 -#define R_AD_01_Nu 3 -#define R_AD_01_Port GPIOA - -#define VCC_1V25_Pin GPIO_Pin_3 -#define VCC_1V25_Pin_Nu 3 -#define VCC_1V25_GPIO_Port GPIOA - - -#define C_H_DAC_Pin GPIO_Pin_4 -#define C_H_DAC_Pin_Nu 4 -#define C_H_DAC_GPIO_Port GPIOA - -#define C_M_DAC_Pin GPIO_Pin_5 -#define C_M_DAC_Pin_Nu 5 -#define C_M_DAC_GPIO_Port GPIOA - -#define V_LA_M_Pin GPIO_Pin_6 -#define V_LA_M_Pin_Nu 6 -#define V_LA_M_GPIO_Port GPIOA - -#define V_LA_H_Pin GPIO_Pin_7 -#define V_LA_H_Pin_Nu 7 -#define V_LA_H_GPIO_Port GPIOA - -#define LAVC_M_Pin GPIO_Pin_8 -#define LAVC_M_Pin_Nu 8 -#define LAVC_M_GPIO_Port GPIOA - -#define USART1_TX_Pin GPIO_Pin_9 -#define USART1_TX_Pin_Nu 9 -#define USART1_TX_GPIO_Port GPIOA - -#define USART1_RX_Pin GPIO_Pin_10 -#define USART1_RX_Pin_Nu 10 -#define USART1_RX_GPIO_Port GPIOA - -#define CAN1_RX_Pin GPIO_Pin_10 -#define CAN1_RX_Pin_Nu 11 -#define CAN1_RX_GPIO_Port GPIOA - -#define CAN1_TX_Pin GPIO_Pin_11 -#define CAN1_TX_Pin_Nu 12 -#define CAN1_TX_GPIO_Port GPIOA - -#define SEG0_Pin GPIO_Pin_15 -#define SEG0_Pin_Nu 15 -#define SEG0_GPIO_Port GPIOA - - -#define R10_ON_Pin GPIO_Pin_0 -#define R10_ON_Pin_Nu 0 -#define R10_ON_GPIO_Port GPIOB - - -#define R510_ON_Pin GPIO_Pin_1 -#define R510_ON_Pin_Nu 1 -#define R510_ON_GPIO_Port GPIOB - -#define LED1_Pin GPIO_Pin_2 -#define LED1_Pin_Nu 2 -#define LED1_GPIO_Port GPIOB - -#define IO_CAP_AD_Pin GPIO_Pin_5 -#define IO_CAP_AD_Pin_Nu 5 -#define IO_CAP_AD_Port GPIOB - -#define FIRE_TEST_Pin GPIO_Pin_8 -#define FIRE_TEST_Pin_Nu 8 -#define FIRE_TEST_Port GPIOB - -#define IO_APD12_Pin GPIO_Pin_9 -#define IO_APD12_Pin_Nu 9 -#define IO_APD12_GPIO_Port GPIOB - -#define I2IC_SCL_Pin GPIO_Pin_10 -#define I2IC_SCL_Pin_Nu 10 -#define I2IC_SCL_GPIO_Port GPIOB - -#define I2IC_SDA_Pin GPIO_Pin_11 -#define I2IC_SDA_Pin_Nu 11 -#define I2IC_SDA_GPIO_Port GPIOB - - -#define LED2_Pin GPIO_Pin_12 -#define LED2_Pin_Nu 12 -#define LED2_GPIO_Port GPIOB - -#define OUTAL_Pin GPIO_Pin_13 -#define OUTAL_Pin_Nu 13 -#define OUTAL_GPIO_Port GPIOB - -#define OUTBL_Pin GPIO_Pin_14 -#define OUTBL_Pin_Nu 14 -#define OUTBL_GPIO_Port GPIOB - -#define OUTAH_Pin GPIO_Pin_15 -#define OUTAH_Pin_Nu 15 -#define OUTAH_GPIO_Port GPIOB - - -#define AD_OUTA_Pin GPIO_Pin_0 -#define AD_OUTA_Pin_Nu 0 -#define AD_OUTA_Port GPIOC - -#define AD_OUTB_Pin GPIO_Pin_1 -#define AD_OUTB_Pin_Nu 1 -#define AD_OUTB_Port GPIOC - -#define AN_UA_Pin GPIO_Pin_2 -#define AN_UA_Pin_Nu 2 -#define AN_UA_Port GPIOC - -#define AN_MAL_Pin GPIO_Pin_3 -#define AN_MAL_Pin_Nu 3 -#define AN_MAL_Port GPIOC - -#define R100_ON_Pin GPIO_Pin_4 -#define R100_ON_Pin_Nu 4 -#define R100_ON_GPIO_Port GPIOC - -#define AN_CAP_AD_Pin GPIO_Pin_5 -#define AN_CAP_AD_Pin_Nu 5 -#define AN_CAP_AD_Port GPIOC - -#define OUTBH_Pin GPIO_Pin_6 -#define OUTBH_Pin_Nu 6 -#define OUTBH_GPIO_Port GPIOC - -#define POWER_ON_Pin GPIO_Pin_7 -#define POWER_ON_Pin_Nu 7 -#define POWER_ON_GPIO_Port GPIOC - -#define SEG4_Pin GPIO_Pin_8 -#define SEG4_Pin_Nu 8 -#define SEG4_GPIO_Port GPIOC - -#define SEG3_Pin GPIO_Pin_9 -#define SEG3_Pin_Nu 9 -#define SEG3_GPIO_Port GPIOC - -#define SEG1_Pin GPIO_Pin_10 -#define SEG1_Pin_Nu 10 -#define SEG1_GPIO_Port GPIOC - -#define SEG2_Pin GPIO_Pin_11 -#define SEG2_Pin_Nu 11 -#define SEG2_GPIO_Port GPIOC - -#define U3_TXD_Pin GPIO_Pin_10 -#define U3_TXD_Pin_Nu 10 -#define U3_TXD_GPIO_Port GPIOC - -#define U3_RXD_Pin GPIO_Pin_11 -#define U3_RXD_Pin_Nu 11 -#define U3_RXD_GPIO_Port GPIOC - -#define IO_APD22_Pin GPIO_Pin_13 -#define IO_APD22_Pin_Nu 13 -#define IO_APD22_GPIO_Port GPIOC - - -#define IO_APD21_Pin GPIO_Pin_14 -#define IO_APD21_Pin_Nu 14 -#define IO_APD21_GPIO_Port GPIOC - -#define IO_APD11_Pin GPIO_Pin_15 -#define IO_APD11_Pin_Nu 15 -#define IO_APD11_GPIO_Port GPIOC - - - - - - - - - - -#define LED2_Out PBout(LED2_Pin_Nu) -#define LED1_Out PBout(LED1_Pin_Nu) -#define LED1_Out_On PBout(LED1_Pin_Nu)=0 -#define LED1_Out_Off PBout(LED1_Pin_Nu)=1 - -//电源开关 - -#define POWER_ON {PCout(POWER_ON_Pin_Nu) = 1;} -#define POWER_OFF {PCout(POWER_ON_Pin_Nu) = 0;} - -//桥驱动 -#define HMOS_SWITCH_W_1 {PAout(LAVC_M_Pin_Nu)=0; PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PBout(OUTAH_Pin_Nu)=1;} -#define HMOS_SWITCH_W_0 {PAout(LAVC_M_Pin_Nu)=0; PBout(OUTBL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTAL_Pin_Nu)=1;PCout(OUTBH_Pin_Nu)=1;} - -#define HMOS_SWITCH_RW_1 {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PBout(OUTAH_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;} -#define HMOS_SWITCH_RW_0 {PAout(LAVC_M_Pin_Nu)=0; PBout(OUTBL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTAL_Pin_Nu)=1;PCout(OUTBH_Pin_Nu)=1;} - -#define HMOS_SWITCH_GND {PCout(OUTBH_Pin_Nu)=0; PAout(LAVC_M_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0;delay_nop(50);PBout(OUTBL_Pin_Nu)=1;PBout(OUTAL_Pin_Nu)=1;} -#define HMOS_SWITCH_OFF {PCout(OUTBH_Pin_Nu)=0; PAout(LAVC_M_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0;delay_nop(50);PBout(OUTBL_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;} -#define HMOS_FAST_DISCHG {PCout(POWER_ON_Pin_Nu) = 0; PCout(OUTBH_Pin_Nu)=0; PAout(LAVC_M_Pin_Nu)=0;PBout(OUTBL_Pin_Nu)=0;delay_nop(50);PBout(OUTAH_Pin_Nu)=1;PBout(OUTAL_Pin_Nu)=1;} -#define HMOS_SWITCH_ON {PAout(LAVC_M_Pin_Nu)=0;PCout(OUTBH_Pin_Nu)=0; PBout(OUTAL_Pin_Nu)=0;delay_nop(50);PBout(OUTBL_Pin_Nu)=1;PBout(OUTAH_Pin_Nu)=1;} - -//芯跳桥驱动 -#define XTBus_POWER_Out HMOS_SWITCH_W_1//总线模式开关 -#define XTBUS_ON HMOS_SWITCH_ON -#define XTBUS_OFF HMOS_SWITCH_OFF -#define XTBUS_W_1 HMOS_SWITCH_W_1 -#define XTBUS_W_0 HMOS_SWITCH_W_0 -#define XTBUS_WR_1 HMOS_SWITCH_W_1 -#define XTBUS_WR_0 HMOS_SWITCH_W_0 - -//JQ 桥驱动 - -#define JQBus_POWER_Out HMOS_SWITCH_W_1 //总线模式开关 -#define JQBUS_ON HMOS_SWITCH_ON -#define JQBUS_OFF HMOS_SWITCH_OFF -#define JQBUS_W_1 HMOS_SWITCH_W_1 -#define JQBUS_W_0 HMOS_SWITCH_W_0 - -//EW 桥驱动 -#define EW_SINGLE_MOD_M {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;} -#define EW_SINGLE_MOD_H HMOS_SWITCH_W_1 - -#define EW_DIFF_MOD_M {PCout(OUTBH_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; delay_nop(50); PBout(OUTBL_Pin_Nu)=1;PAout(LAVC_M_Pin_Nu)=1;} -#define EW_DIFF_MOD_H HMOS_SWITCH_W_1 -#define EW_DIFF_MOD_L HMOS_SWITCH_W_0 -#define EW_BUS_OFF HMOS_SWITCH_OFF - - -void CtrlGpio_DefInit(void); -/* -@brief 获取设备地址 -@param 无 -@rtv 设备地址 -*/ -uint8_t Gpio_GetDeivceAddr(void); - -/* -@brief 4限制电阻测量通道切换 -@param 0 全关 - 1 通道1-4通,过桥丝 - 2 通道2-3通,过桥丝 - 3 通道1-3通,测阻抗 - 4 通道2-4通,测阻抗 -*/ -void Gpio_ResistorSwitch(uint8_t uc_r); -/* -@brief 测量电容电压压降GPIO配置 -*/ -void Gpio_CAPSwitch(uint8_t uc_sw); -#endif - diff --git a/source/elec_det/hardware/hardware.c b/source/elec_det/hardware/hardware.c deleted file mode 100644 index 78ba9ae..0000000 --- a/source/elec_det/hardware/hardware.c +++ /dev/null @@ -1,89 +0,0 @@ -#include "base/define.h" -#include "gpio_cfg.h" -#include "adc_cfg.h" -//#include "usartapp.h" -//#include "console_usart.h" -#include "base/delay.h" -#include "power.h" -//#include "database.h" -#include "timer_cfg.h" -#include "base/utility.h" -//#include "yecan.h" -#include "hardware/jw3425iic.h" -BoartCheck_st board_st; -BoardInfo_un boardinfo_un; - -void test_timer_function() -{ - static uint8_t flag_ = 0; - LED1_Out = flag_; - flag_ ^= 0x01; -} - -//检测小板初始化 -void Ye_BoardInit(void) -{ - - AdcDef_Init(); - DAC_Definit(); -// ConsoleUsart_Init(); -// YeCanInit(); - CtrlGpio_DefInit(); - DelayTimer_Init(); - TimerCount_Init(); - CurrentSampleR_Def - I2C_init(); - delay_ms(500); - -} -/* - 测试小板上电自检 -*/ -void Ye_BoardCheck(void) -{ - uint16_t aus_buf[AD_SCAN_COUNT]; - board_st.app_run_flag = 1; - board_st.device_id = Gpio_GetDeivceAddr(); - board_st.chip_temp = (uint16_t)(Get_Temperature()*10); - board_st.soft_v = SoftVersion; - board_st.hard_v = boardinfo_un.boardinfo.hard_v; - board_st.resistor_diff = boardinfo_un.boardinfo.resistor_diff; - board_st.plan_id = *((uint32_t*)APP_TEST_PLAN_ADDR); - - - GetADC1_Value(VCC_1V25_CH,aus_buf,AD_SCAN_COUNT); - Bubble_Sort_u16(aus_buf,AD_SCAN_COUNT); - board_st.v1p25_adc = aus_buf[AD_SCAN_COUNT>>1]; - - GetADC1_Value(VCC_2V5_CH,aus_buf,AD_SCAN_COUNT); - Bubble_Sort_u16(aus_buf,AD_SCAN_COUNT); - board_st.v2p5_adc = aus_buf[AD_SCAN_COUNT>>1]; - - GetADC1_Value(ADC_Channel_16,aus_buf,AD_SCAN_COUNT); - Bubble_Sort_u16(aus_buf,AD_SCAN_COUNT); - board_st.adc_shake = aus_buf[AD_SCAN_COUNT-1] - aus_buf[0]; - - - LED1_Out = 1; - if(0 != PowerCalPrapare()) - { - board_st.v1p25_adc = 0; - LED1_Out = 0; - } - PowerCalibration_set(POWER_DEF_V,45); - delay_ms(100); - board_st.bus_5p5v = Power_GetHPowerV(); -// -#ifdef CHECKER_DEV - PowerCalibration_set(260,50); - delay_ms(100); -#else - PowerCalibration_set(90,45); -#endif - board_st.bus_26v = Power_GetHPowerV(); -// - PowerCalibration_set(POWER_DEF_V,45); - - -} - diff --git a/source/elec_det/hardware/jw3425iic.c b/source/elec_det/hardware/jw3425iic.c deleted file mode 100644 index 509a449..0000000 --- a/source/elec_det/hardware/jw3425iic.c +++ /dev/null @@ -1,731 +0,0 @@ -#include "jw3425iic.h" -#include "gpio_cfg.h" -#include "base/delay.h" -#include "interface/basechecker.h" -#include "base/utility.h" - - - -void IIC_SDA_DIR(uint8_t dir) -{ - GPIO_InitTypeDef GPIO_InitStructure; - if(dir == 0) - { - - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; - - }else{ - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; - } - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_InitStructure.GPIO_Pin= I2IC_SDA_Pin; - GPIO_Init(GPIOB,&GPIO_InitStructure); -} - -void I2C_init(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - /* enable GPIOB clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); - //GPIO 配置 - GPIO_InitStructure.GPIO_Pin=I2IC_SCL_Pin | I2IC_SDA_Pin; - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_Init(GPIOB,&GPIO_InitStructure); - IIC_SDA(1); - IIC_SCL(1); -} -void I2C_Definit(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - /* enable GPIOB clock */ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); - //GPIO 配置 - GPIO_InitStructure.GPIO_Pin=I2IC_SCL_Pin | I2IC_SDA_Pin; - GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; - GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; - GPIO_Init(GPIOB,&GPIO_InitStructure); -} -//产生IIC起始信号 -void IIC_Start(void) -{ - SDA_OUT(); //sda线输出 - IIC_SDA(1); - IIC_SCL(1); - delay_us(IIC_PLUS_DELAY); - IIC_SDA(0);//START:when CLK is high,DATA change form high to low - delay_us(IIC_PLUS_DELAY); - IIC_SCL(0);//钳住I2C总线,准备发送或接收数据 -} -//产生IIC停止信号 -void IIC_Stop(void) -{ - SDA_OUT();//sda线输出 - IIC_SCL(0); - IIC_SDA(0);//STOP:when CLK is high DATA change form low to high - delay_us(IIC_PLUS_DELAY); - IIC_SCL(1); - delay_us(IIC_PLUS_DELAY); - IIC_SDA(1);//发送I2C总线结束信号 -} - -//等待应答信号到来 -//返回值:1,接收应答失败 -// 0,接收应答成功 -uint8_t IIC_Wait_Ack(void) -{ - uint32_t ucErrTime=0; - SDA_IN(); //SDA设置为输入 - IIC_SDA(1); - delay_us(1); - IIC_SCL(1); - delay_us(IIC_PLUS_DELAY>>1); - while(READ_SDA) - { - ucErrTime++; - if(ucErrTime>I2C_OPERATION_OUTTIME) - { - IIC_Stop(); - return 1; - } - } - IIC_SCL(0);//时钟输出0 - return 0; -} -//产生ACK应答 -void IIC_Ack(void) -{ - IIC_SCL(0); - SDA_OUT(); - IIC_SDA(0); - delay_us(IIC_PLUS_DELAY); - IIC_SCL(1); - delay_us(IIC_PLUS_DELAY); - IIC_SCL(0); -} -//不产生ACK应答 -void IIC_NAck(void) -{ - IIC_SCL(0); - SDA_OUT(); - IIC_SDA(1); - delay_us(IIC_PLUS_DELAY); - IIC_SCL(1); - delay_us(IIC_PLUS_DELAY); - IIC_SCL(0); -} -//IIC发送一个字节 -//返回从机有无应答 -//0,有应答 -//1,无应答 -uint8_t IIC_Send_Byte(uint8_t txd) -{ - uint8_t t; - SDA_OUT(); - for(t=0;t<8;t++) - { - IIC_SCL(0);//拉低时钟开始数据传输 - delay_us(IIC_PLUS_DELAY>>1); - IIC_SDA((txd&0x80)>>7); - txd<<=1; - delay_us(IIC_PLUS_DELAY>>1); - IIC_SCL(1); - delay_us(IIC_PLUS_DELAY); - } - IIC_SCL(0); - delay_us(IIC_PLUS_DELAY >>1); - - return IIC_Wait_Ack(); -} - -//读1个字节,ack=1时,发送ACK,ack=0,发送nACK -uint8_t IIC_Read_Byte(unsigned char ack) -{ - unsigned char i,receive=0; - SDA_IN();//SDA设置为输入 - for(i=0;i<8;i++ ) - { - IIC_SCL(0); - delay_us(IIC_PLUS_DELAY); - IIC_SCL(1); - delay_us(IIC_PLUS_DELAY>>1); - receive<<=1; - if(READ_SDA)receive++; - delay_us(IIC_PLUS_DELAY >> 1); - } - if (!ack) - IIC_NAck();//发送nACK - else - IIC_Ack(); //发送ACK - return receive; -} - - - - - -/* @param bi_dir: option using in transceive */ -int32_t I2C_master_write(uint16_t address, uint8_t *src, uint32_t size, uint32_t *nwriten, uint8_t bi_dir) -{ - uint32_t timeout = 0; - uint8_t ack = 0; - *nwriten = 0; - __disable_irq(); - IIC_Start(); - //发送地址 - ack = IIC_Send_Byte(( address<<1)); - if(ack) - { - goto iic_send_stop; - } - while (*nwriten < size) { - ack = IIC_Send_Byte(src[*nwriten]); - if(ack) - { - break; - } - (*nwriten)++; - } - -iic_send_stop: - if(bi_dir ==0)//bi_dir == 1时不发送停止信号 - { - IIC_Stop(); - } - __enable_irq(); - return ack; -} - -/* @param bi_dir: option using in transceive */ -int32_t I2C_master_read(uint16_t address, uint8_t *dst, uint32_t size, uint32_t *nread, uint8_t bi_dir) -{ - uint32_t i; - *nread = 0; - uint8_t ack = 0; - if (size == 0) - return 0; - __disable_irq(); - IIC_Start();//重新发送起始信号 - ack = IIC_Send_Byte(( address << 1) | 0x01);//发送读命令地址 - if(ack) - goto send_stop_err; - while(*nread < size) - { - if((*nread) == (size-1))//倒数1个字节,设置不应答 - { - dst[*nread] = IIC_Read_Byte(0); - }else{ - dst[*nread] = IIC_Read_Byte(1); - } - (*nread)++; - } -send_stop_err: - // If receive NACK or no data to write, send STOP - if (bi_dir == 0) - IIC_Stop(); - __enable_irq(); - return ack; -} - - -/* @param bi_dir: option using in transceive */ -int32_t I2C_master_write_read(uint16_t address, uint8_t*cmd, uint8_t cmd_size,uint8_t *dst, uint32_t read_size, uint32_t *nread) -{ - uint32_t ul_writen; - *nread = 0; - - if (read_size == 0) - return 0; - I2C_master_write(address,cmd,cmd_size,&ul_writen,1); - if(ul_writen != cmd_size) - { - IIC_Stop(); - return 1; - } - I2C_master_read(address, dst, read_size, nread, 1); - IIC_Stop(); - if(read_size != *nread) - { - return 1; - } - return 0; -} - - -int32_t I2C_master_writeCode(uint16_t address, uint8_t *cmd_src, uint32_t cmd_len,const uint8_t* puc_cod,uint32_t code_len ) -{ - uint8_t uc_code; - uint8_t ack = 0; - __disable_irq(); - IIC_Start(); - //发送地址 - ack = IIC_Send_Byte(( address<<1)); - if(ack) - { - IIC_Stop(); - __enable_irq(); - return ack; - } - //发送命令 - while (cmd_len > 0) { - ack = IIC_Send_Byte(*cmd_src); - if(ack) - { - IIC_Stop(); - __enable_irq(); - return ack; - } - cmd_src++; - cmd_len--; - } - //发送代码数据 - while (code_len > 0) { - uc_code = *puc_cod; - ack = IIC_Send_Byte(uc_code); - if(ack) - { - IIC_Stop(); - __enable_irq(); - return ack; - } - puc_cod++; - code_len--; - } - IIC_Stop(); - __enable_irq(); - return ack; -} - - -int32_t I2C_master_CodeEquel(uint16_t address, uint8_t *cmd_src, uint32_t cmd_len,const uint8_t* puc_cod,uint32_t code_len ) -{ - uint8_t uc_code; - uint8_t uc_rdata; - uint8_t ack = 0; - __disable_irq(); - IIC_Start(); -//发送地址 - ack = IIC_Send_Byte(( address<<1)); - if(ack) - { - IIC_Stop(); - __enable_irq(); - return ack; - } - //发送命令 - while (cmd_len > 0) { - ack = IIC_Send_Byte(*cmd_src); - if(ack) - { - IIC_Stop(); - __enable_irq(); - return ack; - } - cmd_src++; - cmd_len--; - } - IIC_Start();//重新发送起始信号 - ack = IIC_Send_Byte(( address << 1) | 0x01);//发送读命令地址 - if(ack) - { - IIC_Stop(); - __enable_irq(); - return ack; - } - while(code_len > 0) - { - uc_code = *puc_cod; - puc_cod++; - if(code_len == 1)//倒数1个字节,设置不应答 - { - uc_rdata = IIC_Read_Byte(0); - }else{ - uc_rdata = IIC_Read_Byte(1); - } - if(uc_code != uc_rdata) - { - ack = 1; - break; - } - code_len--; - } - IIC_Stop(); - __enable_irq(); - return ack; -} - - - -/******************IIC trim **********************/ -#define SLAVE_IIC_ADDR_ 0x18 -/* -@brief Vref电压校准 -@param0 0不更新,1更新 -@param1 校准值 -*/ -void MC_VrefTrim(void) -{ - uint8_t auc_cmd[]={0x10,0xEF,0x00}; - uint8_t auc_run_cmd[]={0x18,0xE7}; - uint32_t ul_sendlen = 0; - uint8_t uc_ack = 0; - auc_cmd[2] = checker_runcfg.params[1] & 0x0F; - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0); - if(uc_ack != 0 || checker_runcfg.params[0] == 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - return ; - } - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_run_cmd,sizeof(auc_run_cmd),&ul_sendlen,0); - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); -} -/* -@brief Iref电压校准 -@param0 Iref1 0不更新,1更新 -@param1 Iref2 0不更新,1更新 -@param2 Iref1 校准值 -@param3 Iref2 校准值 -*/ -void MC_IrefTrim(void) -{ - uint8_t auc_cmd[]={0x12,0xED,0x00}; - uint8_t auc_run1_cmd[]={0x19,0xE6}; - uint8_t auc_run2_cmd[]={0x1A,0xE5}; - uint32_t ul_sendlen = 0; - uint8_t uc_ack = 0; - auc_cmd[2] = (checker_runcfg.params[2] & 0x0F) | ((checker_runcfg.params[3] & 0x0F)<<4); - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - return ; - } - if(checker_runcfg.params[0] != 0) - { - uc_ack |= I2C_master_write(SLAVE_IIC_ADDR_,auc_run1_cmd,sizeof(auc_run1_cmd),&ul_sendlen,0); - } - if(checker_runcfg.params[1] != 0) - { - uc_ack |= I2C_master_write(SLAVE_IIC_ADDR_,auc_run2_cmd,sizeof(auc_run2_cmd),&ul_sendlen,0); - } - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); -} - - - -/* -@brief Iref1电压校准 -@param0 0不更新,1更新 -@param1 校准值 -*/ -void MC_RC4MTrim(void) -{ - uint8_t auc_cmd[]={0x14,0xEB,0x00}; - uint8_t auc_run_cmd[]={0x1B,0xE4}; - uint32_t ul_sendlen = 0; - uint8_t uc_ack = 0; - auc_cmd[2] = checker_runcfg.params[1] & 0x3F; - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0); - if(uc_ack != 0 || checker_runcfg.params[0] == 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - return ; - } - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_run_cmd,sizeof(auc_run_cmd),&ul_sendlen,0); - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); -} - -/* -@brief RC128K校准 -@param0 0不更新,1更新 -@param1 校准值 -*/ -void MC_RC128KTrim(void) -{ - uint8_t auc_cmd[]={0x15,0xEA,0x00}; - uint8_t auc_run_cmd[]={0x1C,0xE3}; - uint32_t ul_sendlen = 0; - uint8_t uc_ack = 0; - auc_cmd[2] = checker_runcfg.params[1] & 0x1F; - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0); - if(uc_ack != 0 || checker_runcfg.params[0] == 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - return ; - } - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_run_cmd,sizeof(auc_run_cmd),&ul_sendlen,0); - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); -} - -/* -@brief 设置MTP电压 -@param0 低压 -@param1 高压 -*/ -void MC_SetMTPVol(void) -{ - uint8_t auc_cmd[]={0x22,0xDD,0x00}; - uint32_t ul_sendlen = 0; - uint8_t uc_ack = 0; - auc_cmd[2] = (checker_runcfg.params[0] & 0x03) | ((checker_runcfg.params[1] & 0x0F)<<2); - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0); - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); -} - -/* -@brief 设置MTP电压 -@param0 MTP地址 -@param1 擦除模式 -*/ -void MC_EraseMTP(void) -{ - uint8_t auc_erase_cmd[]={0x00,0x00}; - uint8_t auc_setAddr_cmd[]={0x23,0xDC,0x00,0x00}; - uint32_t ul_sendlen = 0; - uint8_t uc_ack = 0; - auc_setAddr_cmd[2] = (checker_runcfg.params[0]>>8) & 0xFF; - auc_setAddr_cmd[3] = checker_runcfg.params[0] & 0xFF; - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - return; - } - ul_sendlen = 0; - auc_erase_cmd[0] = checker_runcfg.params[1]; - switch(checker_runcfg.params[1]) - { - case 0x25: auc_erase_cmd[1] = 0xDA; break;//全片擦除 - case 0x26: auc_erase_cmd[1] = 0xD9; break;//块擦除 - case 0x27: auc_erase_cmd[1] = 0xD8; break;//页擦除 - case 0x28: auc_erase_cmd[1] = 0xD7; break;//字擦除 - } - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_erase_cmd,sizeof(auc_erase_cmd),&ul_sendlen,0); - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); -} - - - -/* -@brief MTP写入数据 -@param0..N 编程数据 -*/ -void MC_IICWriteMTP(void) -{ - uint8_t auc_cmd[16]={0x29,0xD6}; - uint32_t ul_sendlen = 0; - uint8_t uc_ack = 0; - uint16_t us_index = 0; - for(us_index = 0; us_index < checker_runcfg.param_count;us_index++) - { - auc_cmd[us_index+2] = checker_runcfg.params[us_index]; - } - - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,us_index+2,&ul_sendlen,0); - - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); -} -/* -@brief MTP读数据 -@param0 读取MTP地址 -@param1 读取数据字节长度 -*/ -void MC_IICReadMTP(void) -{ - - uint8_t auc_setAddr_cmd[]={0x23,0xDC,0x00,0x00}; - uint8_t auc_cmd[]={0x2A,0xD5}; - uint32_t ul_readlen = 0; - uint8_t uc_ack = 0; - uint16_t us_buf[32]; - uint32_t ul_sendlen = 0; - auc_setAddr_cmd[2] = (checker_runcfg.params[0]>>8) & 0xFF; - auc_setAddr_cmd[3] = checker_runcfg.params[0] & 0xFF; - if(checker_runcfg.params[1] > 64) - { - checker_runcfg.params[1] = 64; - } - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0); - delay_ms(10); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - return ; - } - uc_ack = I2C_master_write_read(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),(uint8_t*)us_buf,checker_runcfg.params[1],&ul_readlen); - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - Checker_SetRtv(us_buf,checker_runcfg.rtv_count); -} - -/* -@brief MTP状态查询 -*/ -void MC_IICCheckMTPState(void) -{ - uint8_t auc_cmd[]={0x30,0xBF}; - uint32_t ul_readlen = 0; - uint8_t uc_ack = 0; - uint16_t ul_rtv; - uc_ack = I2C_master_write_read(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),(uint8_t*)&ul_rtv,1,&ul_readlen); - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); -} - -/* -@brief MTP使能或失能 -@param0 0失/1使能 -*/ -void MC_IICEnMTP(void) -{ - uint8_t auc_cmd[]={0x20,0x20,0}; - uint32_t ul_sendlen = 0; - uint8_t uc_ack = 0; - if(checker_runcfg.params[0] == 0) - { - auc_cmd[2] = 0x33; - }else{ - auc_cmd[2] = 0xCC; - } - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_cmd,sizeof(auc_cmd),&ul_sendlen,0); - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); -} - - -/* -@brief MTP下载程序 -@param 更新地址 -@param 烧录长度 -*/ -void MC_IICUpdateMTP(void) -{ - uint8_t uc_ack; - uint8_t auc_enMTP_cmd[]={0x20,0x20,0xCC}; - uint8_t auc_setAddr_cmd[]={0x23,0xDC,0x00,0x00}; - uint8_t auc_setMTPOperReg_cmd[]={0x20,0xDF,0x00}; - uint8_t auc_earse_cmd[]={0x25,0xDA}; - uint8_t auc_setMTPVol[]={0x22,0xDD,0x18};//1.5V 5V - uint8_t auc_program_cmd[]={0x29,0xD6}; - uint8_t auc_readCode_cmd[]={0x2A,0xD5}; - uint32_t ul_sendlen; - uint16_t us_programLen = checker_runcfg.params[1]; - uint8_t* puc_Master_addr = (uint8_t*)(MC_CODE_ADDR + checker_runcfg.params[0]); - uint16_t ul_rtv = 0; - uint32_t ul_crc32 = 0; - - ul_crc32 = Crc32Calu((uint32_t*)MC_CODE_ADDR,16*1024); - if(ul_crc32 != boardinfo_un.boardinfo.mc_ICodeCrc32) - { - uc_ack = 1; - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 1; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - - if(checker_runcfg.params[0] == 0x1000) - { - auc_setMTPOperReg_cmd[2] = 0x04; - }else{ - auc_setMTPOperReg_cmd[2] = 0x00; - } - uc_ack = 0; - uc_ack += I2C_master_write(SLAVE_IIC_ADDR_,auc_enMTP_cmd,sizeof(auc_enMTP_cmd),&ul_sendlen,0); - delay_ms(5); - uc_ack += I2C_master_write(SLAVE_IIC_ADDR_,auc_enMTP_cmd,sizeof(auc_enMTP_cmd),&ul_sendlen,0); - delay_ms(5); - uc_ack += I2C_master_write(SLAVE_IIC_ADDR_,auc_enMTP_cmd,sizeof(auc_enMTP_cmd),&ul_sendlen,0); - delay_ms(5); - //设置MTP操作范围 - if(uc_ack > 2) - { - uc_ack = 1; - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 2; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - - auc_setAddr_cmd[2] = (checker_runcfg.params[0]>>8) & 0xFF; - auc_setAddr_cmd[3] = checker_runcfg.params[0] & 0xFF; - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setMTPOperReg_cmd,sizeof(auc_setMTPOperReg_cmd),&ul_sendlen,0); - //设置MTP操作范围 - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 3; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - delay_ms(1); - //设置MTP电压 - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setMTPVol,sizeof(auc_setMTPVol),&ul_sendlen,0); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 4; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - delay_ms(1); - //设置地址 - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 5; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - delay_ms(1); - //擦除 - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_earse_cmd,sizeof(auc_earse_cmd),&ul_sendlen,0); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 6; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - delay_os_ms(200); - //设置地址 - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 7; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - delay_ms(1); - uc_ack = I2C_master_writeCode(SLAVE_IIC_ADDR_,auc_program_cmd,sizeof(auc_program_cmd),puc_Master_addr,us_programLen); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 8; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - delay_ms(20); - //设置地址 - uc_ack = I2C_master_write(SLAVE_IIC_ADDR_,auc_setAddr_cmd,sizeof(auc_setAddr_cmd),&ul_sendlen,0); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 9; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - delay_ms(5); - uc_ack = I2C_master_CodeEquel(SLAVE_IIC_ADDR_,auc_readCode_cmd,sizeof(auc_readCode_cmd),puc_Master_addr,us_programLen); - if(uc_ack != 0) - { - Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex); - ul_rtv = 10; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; - } - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - ul_rtv = 0; - Checker_SetRtv(&ul_rtv,checker_runcfg.rtv_count); - return; -} diff --git a/source/elec_det/hardware/jw3425iic.h b/source/elec_det/hardware/jw3425iic.h deleted file mode 100644 index 40d9722..0000000 --- a/source/elec_det/hardware/jw3425iic.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef JW3425IIC_H -#define JW3425IIC_H - -#include "base/define.h" -#include "gpio_cfg.h" - -#define SDA_IN() IIC_SDA_DIR(1) //PB11输入模式 -#define SDA_OUT() IIC_SDA_DIR(0)//PB11输出模式 -#define IIC_SDA(x) PBout(I2IC_SDA_Pin_Nu)=(x) -#define IIC_SCL(x) PBout(I2IC_SCL_Pin_Nu)=(x) -#define READ_SDA (PBin(I2IC_SDA_Pin_Nu)&0x01) -#define IIC_PLUS_DELAY 5 -#define I2C_OPERATION_OUTTIME 100000 - -void I2C_init(void); -void I2C_Definit(void); -void IIC_SDA_DIR(uint8_t dir); -int32_t I2C_master_write(uint16_t address, uint8_t *src, uint32_t size, uint32_t *nwriten, uint8_t bi_dir); -/* @param bi_dir: option using in transceive */ -int32_t I2C_master_read(uint16_t address, uint8_t *dst, uint32_t size, uint32_t *nread, uint8_t bi_dir); -/* @param bi_dir: option using in transceive */ -int32_t I2C_master_write_read(uint16_t address, uint8_t*cmd, uint8_t cmd_size,uint8_t *dst, uint32_t read_size, uint32_t *nread); -/* -@brief Vref电压校准 -@param0 0不更新,1更新 -@param1 校准值 -*/ -void MC_VrefTrim(void); -/* -@brief Iref电压校准 -@param0 Iref1 0不更新,1更新 -@param1 Iref2 0不更新,1更新 -@param2 Iref1 校准值 -@param3 Iref2 校准值 -*/ -void MC_IrefTrim(void); -/* -@brief Iref1电压校准 -@param0 0不更新,1更新 -@param1 校准值 -*/ -void MC_RC4MTrim(void); -/* -@brief RC128K校准 -@param0 0不更新,1更新 -@param1 校准值 -*/ -void MC_RC128KTrim(void); - -/* -@brief 设置MTP电压 -@param0 低压 -@param1 高压 -*/ -void MC_SetMTPVol(void); -/* -@brief 设置MTP电压 -@param0 MTP地址 -@param1 擦除模式 -*/ -void MC_EraseMTP(void); -/* -@brief MTP写入数据 -@param0..N 编程数据 -*/ -void MC_IICWriteMTP(void); -/* -@brief MTP读数据 -@param0 读取数据字节长度 -*/ -void MC_IICReadMTP(void); -/* -@brief MTP状态查询 -*/ -void MC_IICCheckMTPState(void); -/* -@brief MTP下载程序 -@param 更新地址 -@param 烧录长度 -*/ -void MC_IICUpdateMTP(void); -/* -@brief MTP使能或失能 -@param0 0失/1使能 -*/ -void MC_IICEnMTP(void); -#endif diff --git a/source/elec_det/hardware/power.c b/source/elec_det/hardware/power.c deleted file mode 100644 index b10af92..0000000 --- a/source/elec_det/hardware/power.c +++ /dev/null @@ -1,522 +0,0 @@ -#include "power.h" -#include "base/utility.h" -#include "gpio_cfg.h" -#include "base/delay.h" -#define PowerCurr_AD_BUF_LEN 40 -#define POWER_SET_COUNT 20 -static CurrentSample_Range_eu latest_range = Current_Max; -static PowerInfo_st def_power_st; -//static uint16_t PowerCurr_AD_buf[PowerCurr_AD_BUF_LEN]; -static float f_cur_k; -static float f_cur_b; -static uint8_t uc_power_cal_flag = 0; -PowerInfo_st powerinfo_arrayst[POWER_SET_COUNT] ; - -/* -@brief 获取内部基准1.2V电压对应的AD -*/ -uint32_t Power_GetBaseVAD() -{ - // y1 = kx1+b y2=kx2+b y1-y2/x1-x2 -// uint16_t adv_buf[10]; -// uint32_t temp_v; -// GetADC0_Value(ADC_CHANNEL_17,adv_buf,10) ; -// Bubble_Sort_u16(adv_buf,10); -// return (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2; - - return (uint32_t)(1.2f/3.3f*4096); -} - -void Power_CurCalibration() -{ - uint16_t adv_buf[10],adv2v5,adv1v25; - uc_power_cal_flag = 1; - GetADC1_Value(VCC_2V5_CH,adv_buf,10) ; - Bubble_Sort_u16(adv_buf,10); - adv2v5 = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2; - - GetADC1_Value(VCC_1V25_CH,adv_buf,10) ; - Bubble_Sort_u16(adv_buf,10); - adv1v25 = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2; - - f_cur_k = 1.245f/((adv2v5 - adv1v25)+1); - f_cur_b = 2.49f-f_cur_k*adv2v5; - - -// GetADC0_Value(VCC_1V25_CH,adv_buf,10) ; -// Bubble_Sort_u16(adv_buf,10); -// adv1v25 = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2; -// -// f_cur_k = 1.25f/((adv2v5 - adv1v25)+1); -// f_cur_b = 2.5f-f_cur_k*adv2v5; -} -/* -@brief 将获取的ADC值转换为电压值 -@param1 ul_adv 采样AD原始值 -@rtv 返回AD采集到的电压值 扩大1000000倍 -*/ -uint32_t Power_ADVGetCalVal_106(uint16_t ul_adv) -{ - if(uc_power_cal_flag == 0) - { - Power_CurCalibration(); - } - return (uint32_t)((f_cur_k*ul_adv+f_cur_b)*1000000); -} - - - /* -@brief 采样高电平电压 -*/ -uint32_t Power_GetHPowerV() -{ - uint32_t adv; - uint16_t adv_buf[10]; - Power_CurCalibration(); - GetADC1_Value(V_LA_H_CH,adv_buf,10) ; - Bubble_Sort_u16(adv_buf,10); - adv = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2; - adv = Power_ADVGetCalVal_106(adv); - adv = adv*11/100000; - return adv; -} - - /* -@brief 采样总线输出电压 -*/ -uint32_t Power_GetBousV() -{ - uint32_t abus_v,bbus_v; - uint16_t adv_buf[10]; - Power_CurCalibration(); - GetADC1_Value(AD_OUTA_CH,adv_buf,10) ; - Bubble_Sort_u16(adv_buf,10); - abus_v = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2; - - GetADC1_Value(AD_OUTB_CH,adv_buf,10) ; - Bubble_Sort_u16(adv_buf,10); - bbus_v = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2; - - if(bbus_v > abus_v) - { - abus_v = bbus_v; - } - - abus_v = Power_ADVGetCalVal_106(abus_v); - abus_v = abus_v*11/100000; - return abus_v; -} - -/* -@brief 采样中电平电压 -*/ -uint32_t Power_GetMPowerV() -{ - int32_t adv; - uint16_t adv_buf[10]; - GetADC1_Value(V_LA_M_CH,adv_buf,10) ; - Bubble_Sort_u16(adv_buf,10); - adv = (adv_buf[4]+adv_buf[5]+adv_buf[6]+adv_buf[7])>>2; - adv = Power_ADVGetCalVal_106(adv); - adv = adv*11/100000; - return adv; -} - -/* -typedef enum{ - R510_0uA_32uA_UC = (uint8_t)0,//x201 - R510_0uA_580uA_MC = (uint8_t)1,//x11 - R100_0uA_160uA_UC = (uint8_t)2,//x201 - R100_0p2mA_3mA_MC = (uint8_t)3,//x11 - R10_0p1mA_1p6mA_UC = (uint8_t)4,//x201 - R10_2mA_30mA_MC = (uint8_t)5,//x11 - Current_Max = (uint8_t)6, - Current_SampleR_OFF = (uint8_t)9, -} CurrentSample_Range_eu; -*/ -/* -@brief 通过采样adc,换算电流 -@param adv adc 采样值 -@param rang 采样电阻 -@rtv uint32_t 电流值 0.1uA -*/ -uint32_t Power_ConvCur(uint16_t adv,CurrentSample_Range_eu range) -{ - uint32_t ul_R,ul_Mut; - uint32_t ul_adv = Power_ADVGetCalVal_106(adv); - switch(range) - { - case R510_0uA_32uA_UC: ul_R = 510; ul_Mut = 201 ; break; - case R510_0uA_580uA_MC: ul_R = 510; ul_Mut = 11; break; - case R100_0uA_160uA_UC: ul_R = 100; ul_Mut = 201; break; - case R100_0p2mA_3mA_MC: ul_R = 100; ul_Mut = 11; break; - case R10_0p1mA_1p6mA_UC: ul_R = 10; ul_Mut = 201; break; - case R10_2mA_30mA_MC: ul_R = 10; ul_Mut = 11; break; - case Current_Max: ul_R = 10; ul_Mut = 1; break; - case Current_SampleR_OFF: ul_R = 510; ul_Mut = 1;break; - default: ul_R = 510; ul_Mut = 1;break; - } - ul_adv = (ul_adv*100 / ul_R /ul_Mut+4)/10; - return ul_adv; -} -//根据电流大小的范围,设置采样电阻 -CurrentSample_Range_eu Power_SetSampleCurrentRange(CurrentSample_Range_eu range) -{ - - switch(range) - { - case R510_0uA_32uA_UC: R510_SW_ON; R100_SW_OFF; R10_SW_OFF; break; - case R510_0uA_580uA_MC: R510_SW_ON; R100_SW_OFF; R10_SW_OFF; break; - case R100_0uA_160uA_UC: R100_SW_ON; R510_SW_OFF; R10_SW_OFF; break; - case R100_0p2mA_3mA_MC: R100_SW_ON; R510_SW_OFF; R10_SW_OFF; break; - case R10_0p1mA_1p6mA_UC: R10_SW_ON; R510_SW_OFF; R100_SW_OFF; break; - case R10_2mA_30mA_MC: R10_SW_ON; R510_SW_OFF; R100_SW_OFF; break; - case Current_Max: R510_SW_ON; R100_SW_ON; R10_SW_ON;break; - case Current_SampleR_OFF: R510_SW_OFF;R100_SW_OFF; R10_SW_OFF;break; - default: range = Current_Max; R510_SW_ON; R100_SW_ON; R10_SW_ON;break; - } - latest_range = range; - return latest_range; -} - -/* -@brief 设置电阻采样通道和AD采样配置 -*/ -CurrentSample_Range_eu Power_SetSampleRange_Seep(CurrentSample_Range_eu range , uint32_t speed) -{ - switch(range) - { - case R510_0uA_32uA_UC: ADC_CurChnnelSet(AN_UA_CH,speed); break; - case R510_0uA_580uA_MC: ADC_CurChnnelSet(AN_MAL_CH,speed); break; - case R100_0uA_160uA_UC: ADC_CurChnnelSet(AN_UA_CH,speed); break; - case R100_0p2mA_3mA_MC: ADC_CurChnnelSet(AN_MAL_CH,speed); break; - case R10_0p1mA_1p6mA_UC: ADC_CurChnnelSet(AN_UA_CH,speed); break; - case R10_2mA_30mA_MC: ADC_CurChnnelSet(AN_MAL_CH,speed); break; - case Current_Max: ADC_CurChnnelSet(AN_MAL_CH,speed); break; - case Current_SampleR_OFF: ADC_CurChnnelSet(AN_MAL_CH,speed);break; - default: ADC_CurChnnelSet(AN_MAL_CH,speed);break; - } - return Power_SetSampleCurrentRange(range); -} - - -//获取总线电流 -uint32_t Power_GetCurrent(void) -{ - uint32_t adv; - uint32_t count; - CurrentSample_Range_eu range = latest_range;//档位保存 - CurrentSample_Range_eu set_range; - uint32_t adv_base = Power_GetBaseVAD(); - if(adv_base < 500) - return 0; - set_range = Power_SetSampleCurrentRange(R10_2mA_30mA_MC); - StartADC2Channel(AN_MAL_CH,ADC_SPEED_SLOW); - delay_us(300); - GetADC_Fast(ADC_CURR_DE); - adv = 0; - for(count = 0; count < 4; count++) - { - adv += GetADC_Fast(ADC_CURR_DE); - } - adv >>= 2; - if(adv > 250){ - adv = Power_ConvCur(adv,set_range);//0.1uA - adv = (adv+4)/10; - Power_SetSampleCurrentRange(range); - return adv; - } - set_range = Power_SetSampleCurrentRange(R100_0p2mA_3mA_MC); - StartADC2Channel(AN_MAL_CH,ADC_SPEED_SLOW); - delay_us(300); - GetADC_Fast(ADC_CURR_DE); - adv = 0; - for(count = 0; count < 4; count++) - { - adv += GetADC_Fast(ADC_CURR_DE); - } - adv >>= 2; - if(adv > 250){ - adv = Power_ConvCur(adv,set_range);//0.1uA - adv = (adv+4)/10; - Power_SetSampleCurrentRange(range); - return adv; - } - - set_range = Power_SetSampleCurrentRange(R10_0p1mA_1p6mA_UC); - StartADC2Channel(AN_UA_CH,ADC_SPEED_SLOW); - delay_ms(2); - GetADC_Fast(ADC_CURR_DE); - adv = 0; - for(count = 0; count < 4; count++) - { - adv += GetADC_Fast(ADC_CURR_DE); - } - adv >>= 2; - if(adv > 250){ - adv = Power_ConvCur(adv,set_range);//0.1uA - adv = (adv+4)/10; - Power_SetSampleCurrentRange(range); - return adv; - } - set_range = Power_SetSampleCurrentRange(R100_0uA_160uA_UC); - StartADC2Channel(AN_UA_CH,ADC_SPEED_SLOW); - delay_ms(3); - GetADC_Fast(ADC_CURR_DE); - adv = 0; - for(count = 0; count < 8; count++) - { - adv += GetADC_Fast(ADC_CURR_DE); - } - adv >>= 3; - adv = Power_ConvCur(adv,set_range);//0.1uA - adv = (adv+4)/10; - Power_SetSampleCurrentRange(range); - return adv; -} - -/* -@brief 电源调压准备,计数频率和电压的线性关系 -@rtv 返回值:0 成功 其他失败 -*/ - -uint8_t PowerCalPrapare(void) -{ - //YM硬件直接由公式计算 - return 0; -} -//防止突然上电,导致电源崩溃 -static void PowerUpFilter(uint16_t tag_dac) -{ - uint16_t us_lastdac_h = DAC_GetDataOutputValue(DAC_Channel_1); - if(us_lastdac_h > (tag_dac + 200)) - { - while(us_lastdac_h > tag_dac) - { - if((tag_dac + 100) < us_lastdac_h) - { - us_lastdac_h -= 50; - C_H_DAC_Set(us_lastdac_h); - }else{ - us_lastdac_h = tag_dac; - C_H_DAC_Set(us_lastdac_h); - } - delay_ms(10); - } - } -} - -//电压调节的关系为线性函数 -void PowerCalibration(PowerInfo_st* info_st) -{ - - float vlp,vlm,v_adc_h,v_adc_m; - uint16_t us_basedac_h,us_basedac_m; - uint16_t us_lastdac_h,us_lastdac_m; - uint16_t us_powderv; - uint16_t us_timeout ; - uint32_t diff=0; - uint16_t ok_flg = 0; - uint8_t uc_down_up_flag = 0; - if(info_st->V_LAH < info_st->V_LAM ) - { - info_st->V_LAH_DAC = 0; - info_st->V_LAM_DAC = 0; - return ; - } - PAout(LAVC_M_Pin_Nu)=0;PBout(OUTAH_Pin_Nu)=0; - PBout(OUTBL_Pin_Nu)=0;PBout(OUTAL_Pin_Nu)=0; - PCout(POWER_ON_Pin_Nu) = 1; - vlp = info_st->V_LAH; - vlp /= 10; - //(VLP-1.229V)/178K + (VDAC-1.229V)/20K = 0.1229mA - v_adc_h =( 0.1229- (vlp-1.229)/178)*20+1.229; - us_timeout = 80; - info_st->V_LAH_DAC = 0; - us_basedac_h = (uint16_t)( v_adc_h/3.3 * 4096); - PowerUpFilter(us_basedac_h); - us_lastdac_h = 0; - //us_basedac_h = 250; - ok_flg = 0; - uc_down_up_flag = 0; - while(us_timeout > 0) - { - us_timeout--; - C_H_DAC_Set(us_basedac_h); - us_lastdac_h = us_basedac_h; - switch(uc_down_up_flag) - { - case 0:delay_os_ms(100);break;//首次调压 - case 1:delay_os_ms(50);break;//降压 - case 2:delay_os_ms(10);break;//升压 - } - us_powderv = Power_GetHPowerV(); - diff = us_powderv > info_st->V_LAH?us_powderv-info_st->V_LAH:info_st->V_LAH-us_powderv; - if(diff < 2) - { - ok_flg++; - if(ok_flg > 2) - { - info_st->V_LAH_DAC = us_basedac_h; - break; - }else{ - continue; - } - - } - diff = diff *2; - ok_flg = 0; - if( us_powderv > info_st->V_LAH) - { - us_basedac_h += diff; - uc_down_up_flag = 1; - }else{ - us_basedac_h -= diff; - uc_down_up_flag = 2; - } - - - if(us_basedac_h < 20) - us_basedac_h = 20; - if(us_basedac_h > 4050) - us_basedac_h = 4050; - - } - if(info_st->V_LAH_DAC == 0) - return; - - //(VM-2.5V)/20k+(VDAC-2.5V)/4.7K = 0.25mA - us_timeout = 100; - info_st->V_LAM_DAC = 0; - vlm = info_st->V_LAM ; - vlm /= 10; - v_adc_m =( 0.25- (vlm-2.5)/20)*4.7+2.5; - us_basedac_m = (uint16_t)(v_adc_m / 3.3 * 4096); - //us_lastdac_m = 250; - ok_flg = 0; - uc_down_up_flag = 0; - while( us_timeout > 0) - { - us_timeout--; - C_M_DAC_Set(us_basedac_m); - us_lastdac_m = us_basedac_m; - switch(uc_down_up_flag) - { - case 0:delay_os_ms(50);break;//首次调压 - case 1:delay_os_ms(40);break;//降压 - case 2:delay_os_ms(30);break;//升压 - default:delay_os_ms(50);break; - } - us_powderv = Power_GetMPowerV(); - diff = us_powderv > info_st->V_LAM?us_powderv-info_st->V_LAM:info_st->V_LAM-us_powderv; - if(diff < 2) - { - ok_flg++; - if(ok_flg > 2) - { - info_st->V_LAM_DAC = us_basedac_m; - break; - } - else{ - continue; - } - } - ok_flg = 0; - diff = diff *10; - if( us_powderv > info_st->V_LAM) - { - us_basedac_m += diff; - uc_down_up_flag = 1; - }else{ - uc_down_up_flag = 2; - us_basedac_m -= diff; - } - if(us_basedac_m < 100) - us_basedac_m = 100; - if(us_basedac_m > 4050) - us_basedac_m = 4050; - } - -} -//设置总线电压 -void PowerSetVoltage(PowerInfo_st* info_st) -{ - memcpy(&def_power_st,info_st,sizeof(PowerInfo_st)); - PowerUpFilter(info_st->V_LAH_DAC); - C_H_DAC_Set(info_st->V_LAH_DAC); - C_M_DAC_Set(info_st->V_LAM_DAC); - POWER_ON; - -} -//获取当前电压配置值 -void PowerGetSet(PowerInfo_st* info_st) -{ - uint16_t h_dac = DAC_GetDataOutputValue(DAC_Channel_1); - uint16_t m_dac = DAC_GetDataOutputValue(DAC_Channel_2); - info_st->V_LAH = 0; - info_st->V_LAH_DAC = h_dac; - if(h_dac == def_power_st.V_LAH_DAC) - { - info_st->V_LAH = def_power_st.V_LAH; - } - info_st->V_LAM = 0; - info_st->V_LAM_DAC = h_dac; - if(m_dac == def_power_st.V_LAM_DAC) - { - info_st->V_LAM_DAC = m_dac; - } -} -/* -@brief 设置总线电压 -@param h_v/10 设置高电平电压 -@param m_v/10 设置中电平电压 -@rtv 0 执行成功 1 执行失败 -*/ - -uint8_t PowerCalibration_set(uint16_t h_v,uint16_t m_v) -{ - uint32_t ul_index = 0; - PowerInfo_st powerinfo_st; - rt_memset(&powerinfo_st,0,sizeof(PowerInfo_st)); - while(ul_index < POWER_SET_COUNT) - { - //if( powerinfo_arrayst[ul_index].V_LAH == h_v && powerinfo_arrayst[ul_index].V_LAM == m_v) - if( powerinfo_arrayst[ul_index].V_LAH == h_v) - { - break; - } - ul_index++; - } - //在现有电压列表中能够查询到校准后的电压 - if(ul_index < POWER_SET_COUNT) - { - memcpy(&powerinfo_st,&powerinfo_arrayst[ul_index],sizeof(PowerInfo_st)); - PowerSetVoltage(&powerinfo_st); - return 0; - } - - powerinfo_st.V_LAH = h_v; - powerinfo_st.V_LAM = m_v; - PowerCalibration(&powerinfo_st); - if(powerinfo_st.V_LAH_DAC == 0 || powerinfo_st.V_LAM_DAC == 0) - { - LED1_Out = 1; - return 1; - } - //校准完成后,设置总线电压 - PowerSetVoltage(&powerinfo_st); - //查找为使用的配置缓存,将新设置的电压保存 - ul_index = 0; - while(ul_index < POWER_SET_COUNT) - { - if( powerinfo_arrayst[ul_index].V_LAH_DAC == 0 || powerinfo_arrayst[ul_index].V_LAM_DAC == 0) - { - memcpy(&powerinfo_arrayst[ul_index],&powerinfo_st,sizeof(PowerInfo_st)); - break; - } - ul_index++; - } - - return 0; -} - diff --git a/source/elec_det/hardware/power.h b/source/elec_det/hardware/power.h deleted file mode 100644 index 23a3948..0000000 --- a/source/elec_det/hardware/power.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef __POWER_H__ -#define __POWER_H__ -#include "base/define.h" -#include "dac_cfg.h" -#include "adc_cfg.h" -#include "gpio_cfg.h" - -#define R10_ON_Out PBout(R10_ON_Pin_Nu) -#define R10_SW_ON R10_ON_Out=1 -#define R10_SW_OFF R10_ON_Out=0 -#define R510_ON_Out PBout(R510_ON_Pin_Nu) -#define R510_SW_ON R510_ON_Out=1 -#define R510_SW_OFF R510_ON_Out=0 -#define R100_ON_Out PCout(R100_ON_Pin_Nu) -#define R100_SW_ON R100_ON_Out=1 -#define R100_SW_OFF R100_ON_Out=0 - - - -#define POWER_DEF_V 60 - - -typedef enum{ -R510_0uA_32uA_UC = (uint8_t)0,//x201 - R510_0uA_580uA_MC = (uint8_t)1,//x11 - R100_0uA_160uA_UC = (uint8_t)2,//x201 - R100_0p2mA_3mA_MC = (uint8_t)3,//x11 - R10_0p1mA_1p6mA_UC = (uint8_t)4,//x201 - R10_2mA_30mA_MC = (uint8_t)5,//x11 - Current_Max = (uint8_t)6, - Current_SampleR_OFF = (uint8_t)9, -} CurrentSample_Range_eu; - -typedef struct { -uint16_t V_LAH; -uint16_t V_LAM; -uint16_t V_LAH_DAC; -uint16_t V_LAM_DAC; -}PowerInfo_st; - - - - - /* -@brief 采样总线输出电压 -*/ -uint32_t Power_GetBousV(void); -/* -@brief 采样高电平电压 -*/ -uint32_t Power_GetHPowerV(void); -/* -@brief 采样中电平电压 -*/ -uint32_t Power_GetMPowerV(void); -/* -@brief 获取内部基准1.2V电压对应的AD -*/ -uint32_t Power_GetBaseVAD(void); -//获取总线电流 -uint32_t Power_GetCurrent(void); -//根据电流大小的范围,设置采样电阻 -CurrentSample_Range_eu Power_SetSampleCurrentRange(CurrentSample_Range_eu range) ; -#define CurrentSampleR_Def Power_SetSampleCurrentRange(Current_Max); -/* -@brief 设置电阻采样通道和AD采样配置 -*/ -CurrentSample_Range_eu Power_SetSampleRange_Seep(CurrentSample_Range_eu range , uint32_t speed); -//检测方案,上电充能采样电阻 -#define Checker_PowerOn_Sample_R R100_0p2mA_3mA_MC -#define Checker_OnLine_Sample_R R100_0uA_160uA_UC -#define Checker_MonitorBuf_Sample_R R100_0p2mA_3mA_MC - -#define JQChecker_ChgEnger_Sample_R R100_0p2mA_3mA_MC -#define XTChecker_ChgEnger_Sample_R R10_2mA_30mA_MC -//模块通信采样电阻 -#define XTDriver_Sample_R R10_2mA_30mA_MC -#define JQDriver_Sample_R R10_2mA_30mA_MC - - -//电压调节的关系为线性函数 -void PowerCalibration(PowerInfo_st* info_st); -//设置总线电压 -void PowerSetVoltage(PowerInfo_st* info_st); -//获取当前电压配置值 -void PowerGetSet(PowerInfo_st* info_st); -/* -@brief 设置总线电压 -@param h_v/10 设置高电平电压 -@param m_v/10 设置中电平电压 -@rtv 0 执行成功 1 执行失败 -*/ - -uint8_t PowerCalibration_set(uint16_t h_v,uint16_t m_v); -/* -@brief 将获取的ADC值转换为电压值 -@param1 ul_adv 采样AD原始值 -@rtv 返回AD采集到的电压值 扩大1000000倍 -*/ -uint32_t Power_ADVGetCalVal_106(uint16_t ul_adv); - -/* -@brief 电源调压准备,计数频率和电压的线性关系 -@rtv 返回值:0 成功 其他失败 -*/ - -uint8_t PowerCalPrapare(void); -/* -@brief 通过采样adc,换算电流 -@param adv adc 采样值 -@param rang 采样电阻 -@rtv uint32_t 电流值 0.1uA -*/ -uint32_t Power_ConvCur(uint16_t adv,CurrentSample_Range_eu range); -#endif diff --git a/source/elec_det/hardware/timer_cfg.c b/source/elec_det/hardware/timer_cfg.c deleted file mode 100644 index 07f271f..0000000 --- a/source/elec_det/hardware/timer_cfg.c +++ /dev/null @@ -1,365 +0,0 @@ -#include "base/define.h" -#include "timer_cfg.h" -#include "base/delay.h" -Timerupdatefunc p_timer4update_func = NULL; - - -/* -@brief 发送时钟校准波形 -@param pre_us 发送的周期 -@param count 发送周期的个数 -*/ -static volatile uint16_t amend_plus_count = 0; - -TimerTriger p_timertriger = NULL; -void FireBus_ClkAmend(uint16_t pre_us,uint16_t trigger_us,uint16_t count,void *p_fun) -{ - - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定时器初始化结构 - TIM_OCInitTypeDef TIM_OCInitStructure;//通道输出初始化结构 - NVIC_InitTypeDef NVIC_InitStructure; - - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE ); - p_timertriger = (TimerTriger)p_fun; - amend_plus_count = count; - NVIC_DisableIRQ(TIM3_IRQn); - //TIM初始化 - TIM_TimeBaseStructure.TIM_Period = pre_us-1; //周期0~FFFF - TIM_TimeBaseStructure.TIM_Prescaler = 71 ; //时钟分频 - TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分 1us - TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式 - TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; - TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //基本初始化 - - //TIM3通道初始化 - TIM_OCStructInit(& TIM_OCInitStructure); //默认参数 - TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; //工作状态 - TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设定为输出,需要PWM输出才需要这行代码 - TIM_OCInitStructure.TIM_Pulse = pre_us-trigger_us - 1; //占空长度 - TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //高电平 - - TIM_OC1Init(TIM3, &TIM_OCInitStructure); - TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); - TIM_ClearFlag(TIM3,TIM_IT_CC1); - TIM_ITConfig(TIM3, TIM_IT_CC1 , ENABLE);//使能CC1中断 - TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); - TIM_ARRPreloadConfig(TIM3, ENABLE); - TIM_SetCompare3(TIM3,0); - TIM_Cmd(TIM3, ENABLE); //开启定时器 - - NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 9; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //TIM2全局中断使能 - NVIC_ClearPendingIRQ(TIM3_IRQn); - NVIC_Init(&NVIC_InitStructure); - -} - -/* -使用轮询的方式检测校准结束 -*/ -void FireBus_ClkAmendCycle(void) -{ - //使用查询的方式,关闭中断 - NVIC_DisableIRQ(TIM3_IRQn); - TIM_ITConfig(TIM3, TIM_IT_CC1 , DISABLE);//使能CC1中断 - TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE); - if(p_timertriger == NULL) - { - return; - } - __disable_irq(); - while(1) - { - uint8_t flag = 0; - if( TIM_GetITStatus(TIM3,TIM_IT_Update)) - { - if(amend_plus_count > 0) - amend_plus_count--; - flag = 1; - p_timertriger(flag); - TIM3->SR = 0; - }else if(TIM_GetITStatus(TIM3,TIM_IT_CC1)) - { - flag = 2; - p_timertriger(flag); - TIM3->SR = 0; - } - if(amend_plus_count == 0) - { - flag = 3; - TIM_DeInit(TIM3); - p_timertriger(flag); - p_timertriger = NULL; - break; - } - } - __enable_irq(); -} - - -void TIM3_IRQHandler() -{ - uint8_t flag = 0; - rt_interrupt_enter(); - if( TIM_GetITStatus(TIM3,TIM_IT_Update)) - { - if(amend_plus_count > 0) - amend_plus_count--; - flag = 1; - }else if(TIM_GetITStatus(TIM3,TIM_IT_CC1)) - { - flag = 2; - } - //timer_interrupt_flag_clear(TIMER2,TIMER_FLAG_UP|TIMER_FLAG_CH2|TIMER_FLAG_CH2O); - TIM3->SR = 0; - if(p_timertriger != NULL) - { - p_timertriger(flag); - } - if(amend_plus_count == 0) - { - flag = 3; - NVIC_DisableIRQ(TIM3_IRQn); - TIM_DeInit(TIM3); - p_timertriger(flag); - p_timertriger = NULL; - } - rt_interrupt_leave(); -} - - -/* -@brief 超时定时器,单位10ms -@param ms 最大可设置6553。 -@param pfunc 超时回调函数,注意回调函数中不能做长延时任务 -*/ -void RunTimeOut_Timer(uint16_t ms,Timerupdatefunc pfunc ) -{ - NVIC_InitTypeDef NVIC_InitStructure; - //定时器初始化数据结构定义 - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; - RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE ); - p_timer4update_func = pfunc; - ms = ms*2-1; - - NVIC_DisableIRQ(TIM1_UP_IRQn); - //复位计数器 - TIM_DeInit(TIM1); - TIM_TimeBaseStructure.TIM_Period = ms; //计数上限,100*100us = 10000us = 10ms - TIM_TimeBaseStructure.TIM_Prescaler = 36000-1;//2K; //预分频72MHz主频,分频后时钟周期0.5ms - TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频 - TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 - TIM_TimeBaseStructure.TIM_RepetitionCounter=0; - //初始化 - TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); - //清中断 - TIM_ClearFlag(TIM1, TIM_FLAG_Update); - TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE); - - //定时器清零 - TIM_SetCounter(TIM1,0); - - TIM_ARRPreloadConfig(TIM1, DISABLE); - - //定时器启动 - TIM_Cmd(TIM1,ENABLE); - - NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 10; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //TIM2全局中断使能 - NVIC_ClearPendingIRQ(TIM1_UP_IRQn); - NVIC_Init(&NVIC_InitStructure); -} - - -//停止超时定时器计数 -void RunTimeoutStop(void) -{ - TIM_DeInit(TIM1); -} -//获取超时定时器计数值 -uint16_t GetRunTimeOutCount(void) -{ - return TIM1->CNT; -} - -void TIM1_UP_IRQHandler() -{ -// uint8_t flag = 0; - rt_interrupt_enter(); - if(TIM_GetITStatus(TIM1,TIM_IT_Update)) - { - if(p_timer4update_func != NULL) - { - TIM_Cmd(TIM1,DISABLE); - p_timer4update_func(); - - } - } - TIM1->SR = 0x00; - rt_interrupt_leave(); - -} -/* -延时定时器初始化,单次向上计数 -*/ -void DelayTimer_Init(void) -{ - //定时器初始化数据结构定义 - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE ); - TIM_DeInit(TIM2); - - TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //计数上限,100*100us = 10000us = 10ms - TIM_TimeBaseStructure.TIM_Prescaler = 7200-1; //预分频48,48MHz主频,分频后时钟周期1us - TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频 - TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 - TIM_TimeBaseStructure.TIM_RepetitionCounter=0; - - TIM_ARRPreloadConfig(TIM2, DISABLE); - //初始化 - TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); - StartDelayTime(); -} -/* -延时定时器初始化,单次向上计数 -*/ -void TimerCount_Init(void) -{ - //定时器初始化数据结构定义 - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE ); - TIM_DeInit(TIM2); - - TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //计数上限,100*100us = 10000us = 10ms - TIM_TimeBaseStructure.TIM_Prescaler = 7200-1; //预分频48,48MHz主频,分频后时钟周期1us - TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分频 - TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 - TIM_TimeBaseStructure.TIM_RepetitionCounter=0; - - TIM_ARRPreloadConfig(TIM2, DISABLE); - //初始化 - TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); -} -/* -@brief 重启延时定时器 -*/ -void StartDelayTime() -{ - TIM_Cmd(TIM2,DISABLE); - TIM2->CNT = 0; - TIM2->PSC = (uint32_t)7200-1;//10K 0.1ms - TIM2->EGR |= TIM_EventSource_Update; - TIM2->SR = 0; - TIM_Cmd(TIM2,ENABLE); - -} -/* -@brief 定时器是否运行到大于当前值 -@param 当前比较值 -*/ -uint8_t isDelayEnd(uint16_t wait_time) -{ - if((TIM2->CNT > wait_time) && (TIM2->SR > 0) ) - return 0; - return 1; -} -/* -@breif 等待定时器计数值大于设定值 -@param 等待定时器的结束值,单位0.1ms -*/ -void WaitDelayEnd(uint16_t wait_time) -{ - while((TIM2->CNT < wait_time) && (TIM2->SR < 1)) - { - - } -} -/* -@brief 获取当前定时器计数值,单位1us。并重启计数 -@rtv 返回上次的计数值 -*/ -uint16_t Get1usCount(void) -{ - uint16_t us_value ; - if(TIM2->SR > 0) - { - us_value = 65535; - }else{ - us_value = TIM2->CNT; - } - - TIM_Cmd(TIM2,DISABLE); - TIM2->CNT = 0; - TIM2->PSC = (uint32_t)71;//1M 1us - TIM2->EGR |= TIM_EventSource_Update; - TIM2->SR = 0; - TIM_Cmd(TIM2,ENABLE); - return us_value; -} - -/* -@brief 获取当前定时器计数值,单位10us。并重启计数 -@rtv 返回上次的计数值 -*/ -uint16_t Get10usCount(void) -{ - - uint16_t us_value ; - if(TIM2->SR > 0) - { - us_value = 65535; - }else{ - us_value = TIM2->CNT; - } - - TIM_Cmd(TIM2,DISABLE); - TIM2->CNT = 0; - TIM2->PSC = (uint32_t)720-1;//100K 10us - TIM2->EGR |= TIM_EventSource_Update; - TIM2->SR = 0; - TIM_Cmd(TIM2,ENABLE); - return us_value; - - - - -} - -/* -@brief 获取当前定时器计数值,单位0.1ms。并重启计数 -@rtv 返回上次的计数值 -*/ -uint16_t Get100usCount(void) -{ - - uint16_t us_value ; - if(TIM2->SR > 0) - { - us_value = 65535; - }else{ - us_value = TIM2->CNT; - } - - TIM_Cmd(TIM2,DISABLE); - TIM2->CNT = 0; - TIM2->PSC = (uint32_t)7200-1;//10K 100us - TIM2->EGR |= TIM_EventSource_Update; - TIM2->SR = 0; - TIM_Cmd(TIM2,ENABLE); - return us_value; - - -} - -/* -@brief 直接获取定时器的值 -*/ -uint16_t GetCountTimerCnt() -{ - return TIM2->CNT; -} - diff --git a/source/elec_det/hardware/timer_cfg.h b/source/elec_det/hardware/timer_cfg.h deleted file mode 100644 index 88858fc..0000000 --- a/source/elec_det/hardware/timer_cfg.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef TIMER_CFG_H_ -#include "base/define.h" -#include "stm32f10x_tim.h" -typedef void (*Timerupdatefunc)(void ); -typedef void (*TimerTriger)(uint8_t ); -//停止超时定时器计数 -void RunTimeoutStop(void); -/* -@brief 发送时钟校准波形 -@param pre_us 发送的周期 -@param count 发送周期的个数 -*/ -void FireBus_ClkAmend(uint16_t pre_us,uint16_t trigger_us,uint16_t count,void *p_fun); - -/* -@brief 超时定时器,单位0.1ms -@param ms 最大可设置6553。 -@param pfunc 超时回调函数,注意回调函数中不能做长延时任务 -*/ -void RunTimeOut_Timer(uint16_t ms,Timerupdatefunc pfunc ); -//获取超时定时器计数值 -uint16_t GetRunTimeOutCount(void); -/* -延时定时器初始化,单次向上计数 -*/ -void DelayTimer_Init(void); -/* -延时定时器初始化,单次向上计数 -*/ -void TimerCount_Init(void); - -/* -@breif 等待定时器计数值大于设定值 -@param 等待定时器的结束值,单位0.1ms -*/ -void WaitDelayEnd(uint16_t wait_time); - -/* -@brief 重启延时定时器 -*/ -void StartDelayTime(void); - -#define GET_COUNTTIM_VAL() (TIM2->CNT) - -/* -@brief 获取当前定时器计数值,单位1us。并重启计数 -@rtv 返回上次的计数值 -*/ -uint16_t Get1usCount(void); -/* -@brief 获取当前定时器计数值,单位10us。并重启计数 -@rtv 返回上次的计数值 -*/ -uint16_t Get10usCount(void); -/* -@brief 获取当前定时器计数值,单位0.1ms。并重启计数 -@rtv 返回上次的计数值 -*/ -uint16_t Get100usCount(void); -/* -@brief 直接获取定时器的值 -*/ -uint16_t GetCountTimerCnt(void); -/* -使用轮询的方式检测校准结束 -*/ -void FireBus_ClkAmendCycle(void); -#endif diff --git a/source/elec_det/interface/BaseChecker.c b/source/elec_det/interface/BaseChecker.c deleted file mode 100644 index 297a66a..0000000 --- a/source/elec_det/interface/BaseChecker.c +++ /dev/null @@ -1,216 +0,0 @@ -#include "Basechecker.h" -#include "base/utility.h" -#include "hardware/power.h" -#include "base/delay.h" -#include "hardware/gpio_cfg.h" -Checker_RunCfg_st checker_runcfg; -uint8_t Checker_FacBuf[CHECKER_FAC_BUF_LEN]; -volatile uint8_t ThreeBindResult_flag = 1; -uint16_t Checker_First_Set_Voltage = 88; -/* -@brief 标记执行结果 -@param rtv 执行返回值 1表示失败 0 表示成功 -@param taskindex 任务项目ID号 -*/ -void Checker_MaskResult(uint8_t rtv,uint8_t taskindex) -{ - uint8_t uc_index = taskindex >> 3; - uint8_t uc_bitindex = taskindex & 0x07; - if(taskindex >= CHECKER_MAXRT_COUNT) - { - return; - } - checker_runcfg.excue_rtv = rtv; - uc_bitindex = (0x01<> 3; - uint8_t uc_bitindex = taskindex & 0x07; - if(taskindex >= CHECKER_MAXRT_COUNT) - { - return; - } - uc_bitindex = (0x01< 0) - { - checker_runcfg.Test_Rtv[checker_runcfg.rtv_index++] = *pus_rtv; - pus_rtv++; - count--; - } -} - -/* -brief 准备测试用电压 -@param 设置电压值,最多支持10个参数 -*/ -void Checker_PowerPrapare(void) -{ - uint8_t uc_index = 0; - uint8_t uc_rtv = 0; - uint16_t us_h_v,us_m_v; - if(checker_runcfg.power_prapare_exe > 0 || checker_runcfg.param_count == 0){ - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return ; - } - Checker_First_Set_Voltage = checker_runcfg.params[0]; - Bubble_Sort_u16(checker_runcfg.params,checker_runcfg.param_count); - POWER_OFF; - while(uc_index < checker_runcfg.param_count) - { - us_h_v = checker_runcfg.params[uc_index]; - uc_index++; - if(us_h_v < 55) - { - uc_rtv = 1; - continue; - } - us_m_v = (us_h_v>>1) > 50 ? (us_h_v>>1):50; - uc_rtv |= PowerCalibration_set(us_h_v,us_m_v); - - } - PowerCalibration_set(POWER_DEF_V,POWER_DEF_V-10); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 延时 -@pram1 延时时间 0.1S -@param 使能总线电流监控 -@rtv1 波动AD值 -*/ -void Checker_WaitDelay(void) -{ - uint32_t ul_delaytime = checker_runcfg.params[0]; - uint8_t us_monito_flag = checker_runcfg.params[1]; - uint16_t us_temp; - if(us_monito_flag == 0) - { - while(ul_delaytime > 0) - { - delay_os_ms(100); - ul_delaytime--; - } - }else{ - - Power_SetSampleRange_Seep(Checker_MonitorBuf_Sample_R,ADC_SPEED_MIDLE); - delay_ms(1); - us_temp = AD_CurMonitor(ul_delaytime*1000); - CurrentSampleR_Def; - } - Power_SetSampleCurrentRange(Current_Max); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_temp,checker_runcfg.rtv_count); -} - -/* -@brief 电阻检测 -@param0 电阻检测模式 0 4线制 1 2线 1-4,2 2线 2-3 通 -@rtv0 电阻检测值 -*/ -void Checker_ResistorSample(void) -{ - /* - 1 通道1-4通,过桥丝 - 2 通道2-3通,过桥丝 - 3 通道1-3通,测阻抗 - 4 通道2-4通,测阻抗 - */ - uint16_t aus_sample[5]; - uint16_t us_resistor; - uint8_t uc_index = 0; - AD_SampleResistor(aus_sample); - for(uc_index = 0; uc_index < 5; uc_index++) - { - aus_sample[uc_index] -= board_st.resistor_diff; - } - switch(checker_runcfg.params[0]) - { - case 0: us_resistor = aus_sample[0];break; - case 1: us_resistor = aus_sample[1];break; - case 2: us_resistor = aus_sample[2];break; - case 3: us_resistor = aus_sample[3];break; - case 4: us_resistor = aus_sample[4];break; - default : us_resistor = 0;break; - } - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_resistor,checker_runcfg.rtv_count); -} - -/* -@brief 判断是否需要注码 -@rtv 0 不需要注码 1 注码 -*/ -uint8_t JQXT_Test_IsNeedBind(void) -{ - uint8_t uc_index = 0; - - if(checker_runcfg.uid_len == 0 || checker_runcfg.pwd_len == 0) - { - return 0; - } - for(uc_index = 0; uc_index < checker_runcfg.uid_len ; uc_index++) - { - if(checker_runcfg.writeuid[uc_index] != 0) - { - break; - } - } - if(uc_index != checker_runcfg.uid_len) - { - return 1; - } - - for(uc_index = 0; uc_index < checker_runcfg.pwd_len ; uc_index++) - { - if(checker_runcfg.writepwd[uc_index] != 0) - { - break; - } - } - if(uc_index != checker_runcfg.pwd_len) - { - return 1; - } - return 0; -} -/* -检测执行函数是否正常 -*/ -uint8_t Checker_FunIsValid(CheckerTask* taskArray,uint16_t run_index) -{ - uint16_t index = 0; - while((*taskArray !=0) && (index < CHECKER_MAXID_COUNT)) - { - index++; - } - if(run_index >= index) - { - return 1; - } - return 0; -} - diff --git a/source/elec_det/interface/BaseChecker.h b/source/elec_det/interface/BaseChecker.h deleted file mode 100644 index ca597d2..0000000 --- a/source/elec_det/interface/BaseChecker.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef BASECHECKER_H_ -#define BASECHECKER_H_ -#include "stm32f10x.h" - - -#define CHECKER_NET_ID 10 -#define CHECKER_DELAY_TIME 10 -#define CHECKER_MAXRT_COUNT 64 -#define CHECKER_MAXID_COUNT 100 - - - -typedef void (*CheckerTask)(void ); - -#pragma pack(1) -typedef struct { -uint8_t taskid; //任务ID -uint8_t runindex;//任务序列 -uint8_t retry_time;//重试次数 -uint8_t error_jumpto;//失败后跳转 -uint8_t param_rtv_count;//参数个数和返回值个数 -uint16_t params[10]; -}CheckerTask_Info_st; - - -typedef struct{ -CheckerTask_Info_st task_info; -uint16_t params[10];//运行参数1 -uint16_t rtv_index;//返回值下标 -uint8_t rtv_count;//当前任务返回值个数 -uint8_t param_count;//参数个数 -uint8_t excue_rtv; //任务执行结果 -uint8_t power_prapare_exe;//电源准备任务执行 -uint16_t Test_Rtv[100];//保存返回参数 -uint8_t Task_Result[8];//保存运行状态 -uint8_t Task_Excute[8];//保存执行序列号 -uint16_t netid;//电子模块最新的网络ID -uint8_t user_otp[4];//用户区OTP数据 -uint8_t writeuid[13];//注码uid -uint8_t writepwd[8];//注码密码 -uint8_t uid_len;//密码长度 XT 7 JQ 8 -uint8_t pwd_len;//密码长度 XT 4 JQ 4 -uint8_t uid_pwd_bind_flag; -uint8_t code_bind_check_flag;//三码绑定检测一起执行 -}Checker_RunCfg_st ; - -#pragma pack() - -extern Checker_RunCfg_st checker_runcfg; -#define CHECKER_WRITE_BUF 48 //(CHECKER_FAC_BUF_LEN-2) -#define CHECKER_FAC_BUF_LEN 50 //len+crc8+48bytes -extern uint8_t Checker_FacBuf[CHECKER_FAC_BUF_LEN]; -extern volatile uint8_t ThreeBindResult_flag ; -extern uint16_t Checker_First_Set_Voltage ;//方案设置内部第一个电压 -/* -@brief 标记执行结果 -@param rtv 执行返回值 1表示失败 0 表示成功 -@param taskindex 任务项目ID号 -*/ -void Checker_MaskResult(uint8_t rtv,uint8_t taskindex); -/* -@brief 标记任务序列执行 -@param taskindex 任务序列号 -*/ -void Checker_Excueindex(uint8_t taskindex); - -/* -@brief 保存测试结果值 -@param *pus_rtv 测量结果缓存 -@param count 缓存个数 -*/ -void Checker_SetRtv(uint16_t* pus_rtv, uint8_t count); - -/* -brief 准备测试用电压 -@param 设置电压值,最多支持10个参数 -*/ -void Checker_PowerPrapare(void); -/* -@brief 延时 -@pram1 延时时间 0.1S -@param 使能总线电流监控 -@rtv1 波动AD值 -*/ -void Checker_WaitDelay(void); -/* -@brief 电阻检测 -@param0 电阻检测模式 0 4线制 1 2线 1-4,2 2线 2-3 通 -@rtv0 电阻检测值 -*/ -void Checker_ResistorSample(void); -/* -@brief 判断是否需要注码 -@rtv 0 不需要注码 1 注码 -*/ -uint8_t JQXT_Test_IsNeedBind(void); -/* -检测执行函数是否正常 -*/ -uint8_t Checker_FunIsValid(CheckerTask* taskArray,uint16_t run_index); -#endif diff --git a/source/elec_det/interface/JQChecker.c b/source/elec_det/interface/JQChecker.c deleted file mode 100644 index 6ec197f..0000000 --- a/source/elec_det/interface/JQChecker.c +++ /dev/null @@ -1,1099 +0,0 @@ -#include "driver/JQDriver.h" -#include "base/delay.h" -#include "hardware/adc_cfg.h" -#include "base/utility.h" -#include "hardware/power.h" -#include "JQChecker.h" - -/* -@brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC -@param0 总线电压 -@param1 超时时间 0.1ms -@param2 充电结束时的AD值 -@rtv1 返回总线电流低于设置AD值的时间 -*/ -void JQ_Test_PowerOn(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_rsult[2]; - uint16_t us_max; - uint16_t us_shake; - JQBUS_OFF; - uc_rtv = PowerCalibration_set(checker_runcfg.params[0],checker_runcfg.params[0]-1); - - Power_SetSampleRange_Seep(Checker_PowerOn_Sample_R,ADC_SPEED_HIGH); - //POWER_ON - delay_os_ms(100); - JQBUS_ON; - delay_us(20); - us_rsult[1] = AD_GetChgEnergy(checker_runcfg.params[1],checker_runcfg.params[2], &us_max,&us_shake); - delay_os_ms(100); - us_rsult[0] = Power_GetBousV(); - Checker_SetRtv(us_rsult,checker_runcfg.rtv_count); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - - - -} -/* -@brief 设置总线电压 -@param1 总线电压 -@rtv1 总线电压 -*/ -void JQ_Test_SetBusV(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_h_v,us_m_v; - us_h_v = checker_runcfg.params[0]; - if(us_h_v < 55) - { - uc_rtv = 1; - - }else{ - us_m_v = 50; - uc_rtv |= PowerCalibration_set(us_h_v,us_m_v); - JQBUS_ON; - delay_ms(100); - us_h_v = Power_GetBousV(); - Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count); - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - -} -/* -@brief 测量总线基本电压 -@rtv1 返回总线电流 单位0.01uA -*/ -void JQ_Test_BaseCur(void) -{ - uint16_t ul_cur[2]; - JQBUS_W_1 - delay_ms(250); - ul_cur[0] = ADC_GetBaseStableCur(); - JQBUS_W_0 - delay_ms(100); - ul_cur[1] = ADC_GetBaseStableCur(); - JQBUS_W_1 - delay_ms(20); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - Checker_SetRtv(ul_cur,checker_runcfg.rtv_count); -} -/* -@brief 扫描总线上的电子模块 1发 -@param0 使能或失能通信反码信息采集 -@param1 1 uid数据全0验证 其他不验证 -@rtv1 最大反馈电流 -@rtv2 最大反馈时间 -@rtv3 最小反馈电流 -@rtv4 最小反馈时间 -@rtv5 UID 2Bytes -@rtv6 UID 2Bytes -@rtv7 UID 2Bytes -@rtv8 UID 2Bytes -*/ -void JQ_Test_ScanUID(void) -{ - uint16_t aus_temp[8]; - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_count = 0; - uint32_t ul_temp; - for(uc_count = 0; uc_count < 4; uc_count++) - { - aus_temp[uc_count] = 0x00; - } - for(uc_count = 4; uc_count < 8; uc_count++) - { - aus_temp[uc_count] = 0x55; - } - JQ_ScanUIDBegin(); - if(checker_runcfg.params[0] > 0) - { - JQ_FreeBack_Prapare(1); - } - uc_ack = JQ_ScanReadUID(CHECKER_NET_ID,(uint8_t*)&aus_temp[4]); -// uc_rtv = JQ_ScanReadUID(checker_runcfg.jq_params[2],(uint8_t*)&aus_temp[4]); - - if(uc_ack < 1) - { - uc_rtv = 1; - } - - ul_temp = Power_ConvCur(JQ_FreeBack_MaxCur,JQDriver_Sample_R); - ul_temp = (ul_temp + 500)/1000; - - aus_temp[0] = ul_temp ; - aus_temp[1] = (uint16_t)((((589u*1000)*JQ_FreeBack_MaxTime)/JQ_Read_AD_Sample_C+400)/1000) ; - ul_temp = Power_ConvCur(JQ_FreeBack_MinCur,JQDriver_Sample_R); - ul_temp = (ul_temp + 500)/1000; - aus_temp[2] = ul_temp; - aus_temp[3] = (uint16_t)((((589u*1000)*JQ_FreeBack_MinTime)/JQ_Read_AD_Sample_C+400)/1000) ; - if(checker_runcfg.params[1] == 0) - { - for(uc_count = 4; uc_count < 8; uc_count++) - { - if(aus_temp[uc_count] != 0x00) - { - uc_rtv |= 0x01; - } - } - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(aus_temp,checker_runcfg.rtv_count); -} -/* -@brief 读取芯片码 -@rtv 芯片代码2字节 -*/ -void JQ_Test_ReadChipID(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_chipid; - uint8_t uc_ack; - uc_ack = JQ_ReadChipID(CHECKER_NET_ID,&us_chipid); - if(uc_ack < 1) - { - uc_rtv = 1; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_chipid,checker_runcfg.rtv_count); -} -/* -@brief 密码验证 -@param0 密码原码验证使能 -*/ -void JQ_Test_PWCheck(void) -{ - uint8_t auc_pwd[4]={0,0,0,0}; - uint8_t uc_count = 0,uc_ack = 0,uc_rtv = 0; - if(checker_runcfg.params[0] > 0) - { - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,11,4,auc_pwd); - if(uc_ack != 4) - { - uc_rtv = 1; - } - uc_ack = auc_pwd[3] ; - auc_pwd[3] = auc_pwd[0]; - auc_pwd[0] = uc_ack; - uc_ack = auc_pwd[2] ; - auc_pwd[2] = auc_pwd[1]; - auc_pwd[1] = uc_ack; - } - JQ_VerifyPWD(auc_pwd); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief OTP全0检测 -@param0 UID区和密码区验证标志 1不验证 0 验证 -@param1 延时区和保留区验证 1不验证 0验证,错误标记区 -@param2 用户存储区 -*/ - -void JQ_Test_OTPCheck(void) -{ - uint8_t uc_optbuf[16]; - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_count = 0; - //出厂校准 - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,0,1,uc_optbuf); - if(uc_ack !=1 || uc_optbuf[0] == 0xFF || uc_optbuf[0] == 0) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return ; - } - if(checker_runcfg.params[0] < 1) - { - uc_count = 0; - while(uc_count < 16) - { - uc_optbuf[uc_count++] = 0x55; - } - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,3,12,uc_optbuf); - if(uc_ack != 12) - { - uc_rtv = 1; - } - uc_count = 0; - while(uc_count < 12) - { - if(uc_optbuf[uc_count++] != 0) - { - uc_rtv = 1; - } - } - } - if(checker_runcfg.params[1] < 1) - { - uc_count = 0; - while(uc_count < 16) - { - uc_optbuf[uc_count++] = 0x55; - } - //延时区 - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,15,2,uc_optbuf); //2Bytes - if(uc_ack != 2) - { - uc_rtv = 1; - } - //保留区 3-16损坏使用 - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,17,3,uc_optbuf+2);//3Bytes - if(uc_ack != 3) - { - uc_rtv = 1; - } - //错误标记区 - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,26,6,uc_optbuf+5);//6Bytes - if(uc_ack != 6) - { - uc_rtv = 1; - } - - uc_count = 0; - //OTP31 30 特殊处理,其高4bit不错比较 - uc_optbuf[10] &= 0x0F; - uc_optbuf[9] &= 0x0F; - while(uc_count < 11) - { - if(uc_optbuf[uc_count++] != 0) - { - uc_rtv = 1; - } - } - } - - if(checker_runcfg.params[2] < 1) - { - uc_count = 0; - while(uc_count < 16) - { - uc_optbuf[uc_count++] = 0x55; - } - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,4,uc_optbuf); - if(uc_ack != 4) - { - uc_rtv = 1; - } - uc_count = 0; - while(uc_count < 4) - { - if(uc_optbuf[uc_count++] != 0) - { - uc_rtv = 1; - } - } - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 工厂成测标志检测 -*/ -void JQ_Test_FTCheck(void) -{ - uint16_t us_opt; - uint8_t uc_rtv = 0; - uint8_t uc_ack; - us_opt = 0x00; - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,24,2,(uint8_t*)&us_opt); - if(uc_ack != 2) - { - uc_rtv = 1; - } - if(us_opt != 0xFFFF) - { - uc_rtv = 1; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 读芯片状态 -@param0 比较掩码,状态与掩码与等于掩码返回正常 -*/ -void JQ_Test_ReadState(void) -{ - uint8_t state = 0x00; - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uc_ack = JQ_ReadState(CHECKER_NET_ID,&state); - if((state & checker_runcfg.params[0]) != checker_runcfg.params[0]) - { - uc_rtv = 1; - } - if(uc_ack < 1) - { - uc_rtv = 1; - } - checker_runcfg.params[0] = state; - Checker_SetRtv(checker_runcfg.params,checker_runcfg.rtv_count); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 写入OTP数据 -@param0 2字节OTP数据 -@param1 2字节OTP数据 -*/ -void JQ_Test_WriteUserInfo(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_count = 0; - uint8_t uc_wcount ; - uint32_t ul_temp = 0; - uint32_t ul_write = checker_runcfg.params[1]; - ul_write <<= 16; - ul_write |= checker_runcfg.params[0]; - JQ_EnWOTP(); - JQ_EnWOTP(); - - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,4,(uint8_t*)&ul_temp); - if(uc_ack < 1) - { - uc_rtv = 1; - } - uc_wcount = 0; - //要不全部为0,要不除去低5位一致,其他bits为0 - if(ul_temp == 0) - { - uc_wcount = 4; - } - if((ul_temp & (~0x01Fu)) == 0) - { - if((ul_temp & 0x01Fu) == (ul_write & 0x01Fu)) - { - uc_wcount = 4; - } - } - if(uc_wcount == 0 || uc_rtv == 1) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - - uc_wcount = JQ_WriteOTP(20,4,(uint8_t*)&ul_write); - if(uc_count != 4) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - ul_temp = 0; - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,4,(uint8_t*)&ul_temp); - if(uc_ack < 1) - { - uc_rtv = 1; - } - if(ul_temp != ul_write) - { - uc_rtv = 1; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 写入OTP数据 -@param0 OTP 地址 -@param1 写入数据长度 -@param2 2Bytes OTP数据 -@param3 2Bytes OTP数据 -@param4 2Bytes OTP数据 -@param5 2Bytes OTP数据 -*/ -void JQ_Test_WriteOTP(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_count = 0; - uint8_t uc_wcount ; - uint8_t uc_otpaddr; - uint8_t* uc_pbuf; - uint8_t uc_optbuf[8]; - JQ_EnWOTP(); - JQ_EnWOTP(); - uc_otpaddr = checker_runcfg.params[0]; - uc_count = checker_runcfg.params[1]; - if(uc_count > 8) - uc_count = 8; - uc_pbuf = (uint8_t*)(&checker_runcfg.params[2]); - uc_wcount = JQ_WriteOTP(uc_otpaddr,uc_count,uc_pbuf); - if(uc_wcount != uc_count) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpaddr,uc_count,(uint8_t*)uc_optbuf); - if(uc_ack < 1) - { - uc_rtv = 1; - } - for(uc_wcount = 0; uc_wcount < uc_count; uc_wcount++) - { - if(uc_optbuf[uc_wcount] != uc_pbuf[uc_wcount]) - { - break; - } - } - if(uc_wcount != uc_count) - { - uc_rtv = 1; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - - - -/* -@brief 读OTP -@param0 OTP地址 -@param1 OTP 数量 -*/ - -void JQ_Test_ReadOTP(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_count = 0; - uint8_t uc_wcount ; - uint8_t uc_otpaddr; - uint16_t uc_optbuf[16]; - uc_otpaddr = checker_runcfg.params[0]; - uc_count = checker_runcfg.params[1]; - if((uc_otpaddr+uc_count) > 32) - { - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpaddr,uc_count,(uint8_t*)uc_optbuf); - if(uc_ack < 1) - { - uc_rtv = 1; - } - Checker_SetRtv(uc_optbuf,checker_runcfg.rtv_count); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 充能统计 -@param0 充电超时0.1us -@param1 充电电流判线值,AD值 -@param2 充电末电流结束值,单位0.1uA -@param3 充电最长时间,单位100ms -@param4 充电高压保持时间,单位0.1s - -@rtv0 充能值 单位0.1ms -@rtv1 充末电流 单位0.1uA -@rtv2 充电最大电流 单位0.1Ma -@rtv3 充电抖动幅值 adv -*/ - -void JQ_Test_ChgEnergy(void) -{ - uint16_t us_sample_timeout = checker_runcfg.params[0]; - uint16_t us_adend = checker_runcfg.params[1]; - uint16_t us_chgend_cur = checker_runcfg.params[2]; - uint16_t us_timeout = checker_runcfg.params[3]; - uint32_t ul_holdtime = checker_runcfg.params[4]; - - - uint16_t us_array[4]; - uint16_t us_energy = 0; - uint16_t us_end_cur = 2000; - uint16_t us_max_cur = 0; - uint16_t us_shake = 65535; - uint32_t ul_temp; - uint8_t uc_rtv = 0; - - JQ_Chage(0); - Power_SetSampleRange_Seep(JQChecker_ChgEnger_Sample_R,ADC_SPEED_HIGH); - delay_ms(1); - us_energy = AD_GetChgEnergy(us_sample_timeout,us_adend,&us_max_cur,&us_shake); - us_max_cur = (Power_ConvCur(us_max_cur,JQChecker_ChgEnger_Sample_R) /100+5)/10; - ADC_CurChnnelSet(AN_MAL_CH, ADC_SPEED_MIDLE); - ul_temp = AD_CurMonitor(ul_holdtime*1000); - if(ul_temp > us_shake) - { - us_shake = ul_temp; - } - us_timeout++; - while(us_timeout > 0) - { - - us_end_cur = ADC_GetBaseStableCur(); - - if(us_end_cur < us_chgend_cur) - { - break; - } - us_timeout--; - } - if(us_end_cur > us_chgend_cur) - { - uc_rtv = 1; - } - CurrentSampleR_Def; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - us_array[0] = us_energy; - us_array[1] = us_end_cur; - us_array[2] = us_max_cur; - us_array[3] = us_shake; - - Checker_SetRtv(us_array,checker_runcfg.rtv_count); - -} - -/* -@brief DAC检测 -@param DAC检测的起始值 -@param DAC检测的结束值 -*/ -void JQ_Test_CheckDAC(void) -{ - uint16_t uc_bg_dac = checker_runcfg.params[0]; - uint16_t uc_end_dac = checker_runcfg.params[1]; - uint8_t uc_rtv = 1,uc_state; - while(uc_bg_dac >= uc_end_dac) - { - JQ_ChargJudge(uc_bg_dac); - uc_state = 0; - if( JQ_ReadState(CHECKER_NET_ID,&uc_state) < 1) - { - uc_bg_dac = 0; - uc_rtv = 1; - break; - } - if(uc_state & 0x80) - { - uc_rtv = 0; - break; - } - if(uc_bg_dac == 0) - { - break; - } - uc_bg_dac--; - } - if(uc_bg_dac < uc_end_dac) - { - uc_bg_dac = 0; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(&uc_bg_dac,checker_runcfg.rtv_count); -} - - -/* -@brief 写延时 -@param 延时时间 -*/ -void JQ_Test_SetDelay(void) -{ - uint16_t us_delaytime = checker_runcfg.params[0]; - JQ_WriteDelay(CHECKER_NET_ID,us_delaytime); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} -/* -@brief 读延时 -@param 延时时间 -*/ -void JQ_Test_ReadDelay(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_delaytime,us_temp; - uc_rtv = JQ_ReadDelay(CHECKER_NET_ID,&us_delaytime); - uc_rtv = uc_rtv < 1?1:0; - - us_temp = (us_delaytime >> 8) & 0x0FF; - us_temp |= (us_delaytime << 8) & 0xFF00; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_temp,checker_runcfg.rtv_count); -} - -/* -@brief 校准 -@param1 校准周期 -@param2 脉冲个数 -*/ -void JQ_Test_ClkTrim(void) -{ - uint16_t us_cycle = checker_runcfg.params[0]; - uint16_t us_count = checker_runcfg.params[1]; - JQ_TimeAmend(us_cycle,us_count); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} -/* -@brief 放电,快速放电仅JQ2012才有 -@param0 放电功能 0 普通放电 1 快速放电 -@param1 快速放电时间 -*/ - -void JQ_Test_Discharge(void) -{ - uint16_t us_time = checker_runcfg.params[1]; - JQ_DisChage(); - if(checker_runcfg.params[0] == 1 && us_time > 0) - { - JQ_FastDisChage(1); - delay_os_ms(100*us_time); - JQ_FastDisChage(0); - } - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} - -/* -@brief 复位 -*/ -void JQ_Test_Reset(void) -{ - uint8_t ack = 0,uc_state; - uint8_t i = 0; - for(i = 0; i < 5;i++) - { - delay_os_ms(20); - JQ_Reset(); //软复位 - delay_os_ms(20); - ack = JQ_ReadState(0,&uc_state); //读状态 - if(ack == 0) - continue; - if((uc_state & 0x7B) == 0x18) - { - break; - } - } - delay_os_ms(20); - JQ_DisChage(); //内部放电 - if(i < 5) - { - ack = 0; - }else{ - ack = 1; - } - Checker_MaskResult(ack,checker_runcfg.task_info.runindex); -} - -/* -@brief 起爆使能 -*/ -void JQ_Test_BootEn(void) -{ - JQ_BoomActive(); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} -/* -@brief 清除起爆命令 -*/ -void JQ_Test_ClearBoom() -{ - uint16_t us_temp; - JQ_CheckerBoomCmd(1,&us_temp); - -} -/* -@brief 起爆充能 -@param0 启动电流 adc -@param1 脉冲个数 -@param2 延时采集起爆充能 - -@rtv1 起爆后充电能量 -@rtv2 起爆脉冲波动 -@rtv3 起爆后充电电流 -@rtv4 起爆后充电电流波动 -*/ - -void JQ_Test_BoomEnergy(void) -{ - uint16_t us_adc_bg = checker_runcfg.params[0]; - uint16_t us_plus_count = checker_runcfg.params[1]; - uint16_t us_delay = checker_runcfg.params[2]; - uint16_t aus_rtv[4];// us_shake,max_cul,us_shake2,us_energy; - uint32_t ul_max_cur; - us_plus_count = JQ_CheckerBoomCmd(us_plus_count,&aus_rtv[1]); - if(checker_runcfg.params[1] > 652) - { - - Power_SetSampleRange_Seep(JQChecker_ChgEnger_Sample_R,ADC_SPEED_HIGH); - delay_ms(us_delay); - aus_rtv[0] = AD_GetChgEnergy(40000,us_adc_bg,&aus_rtv[2],&aus_rtv[3]); - ul_max_cur = Power_ConvCur(aus_rtv[2],JQChecker_ChgEnger_Sample_R); - ul_max_cur = (ul_max_cur + 500)/1000;//0.01mA - aus_rtv[2] = ul_max_cur; - - }else{ - aus_rtv[0] = aus_rtv[2] = aus_rtv[3] = 0; - } - if(us_plus_count != CHECKER_NET_ID) - { - Checker_MaskResult(1,checker_runcfg.task_info.runindex); - }else{ - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - } - - Checker_SetRtv(aus_rtv,checker_runcfg.rtv_count); - -} - -/* -@brief 使能通讯末电流采样 -*/ -void JQ_Test_EnCommEndCur(void) -{ - JQ_CommEnd_MaxCur = 0; - JQ_CommEnd_CurEn = 1; - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} -/* -@brief 获取通讯末电流采样,关闭电流采样 -@rtv 返回上次采集的通讯末电流 -*/ -void JQ_Test_GetCommEndCur(void) -{ - JQ_CommEnd_CurEn = 0; - Checker_SetRtv(&JQ_CommEnd_MaxCur,checker_runcfg.rtv_count); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} -/* -@brief 关总线 -*/ -void JQ_Test_PowerOff(void) -{ - JQ_Test_Discharge(); - delay_ms(20); - JQBUS_OFF; - PowerCalibration_set(POWER_DEF_V,POWER_DEF_V-10); -} -/* -@brief 缓存数据写入OTP数据 -@param0 OTP 地址 -@param1 缓存区起始 -@param2 写入数据长度 -*/ -void JQ_Test_WriteBuf2OTP(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_count = 0; - uint8_t uc_wcount ; - uint8_t uc_otpaddr; - uint8_t* uc_pbuf; - uint8_t uc_optbuf[16]; - JQ_EnWOTP(); - JQ_EnWOTP(); - if((checker_runcfg.params[1] + checker_runcfg.params[2] > CHECKER_WRITE_BUF) || (checker_runcfg.params[1] > 16)) - { - 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]) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - memset(uc_optbuf,0x55,16); - uc_otpaddr = checker_runcfg.params[0]; - uc_count = checker_runcfg.params[2]; - uc_pbuf = &Checker_FacBuf[2]+checker_runcfg.params[1]; - - uc_wcount = JQ_WriteOTP(uc_otpaddr,uc_count,uc_pbuf); - if(uc_wcount != uc_count) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpaddr,uc_count,(uint8_t*)uc_optbuf); - if(uc_ack < 1) - { - uc_rtv = 1; - } - for(uc_wcount = 0; uc_wcount < uc_count; uc_wcount++) - { - if(uc_optbuf[uc_wcount] != uc_pbuf[uc_wcount]) - { - break; - } - } - if(uc_wcount != uc_count) - { - uc_rtv = 1; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 写入三码数据 -*/ -void JQ_UID_PWD_Bind(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_count = 0; - uint8_t uc_optbuf[16]; - uint32_t ul_write_mask = 0; - - if(JQXT_Test_IsNeedBind() == 0) - { - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - } - - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,0x03,12,(uint8_t*)uc_optbuf); - if(uc_ack < 1) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - JQ_EnWOTP(); - JQ_EnWOTP(); - for(uc_count = 0; uc_count < 8; uc_count++) - { - if((checker_runcfg.writeuid[uc_count] & uc_optbuf[uc_count]) != uc_optbuf[uc_count]) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - - } - if(checker_runcfg.writeuid[uc_count] != uc_optbuf[uc_count]) - { - ul_write_mask |= ((0x01ul)<>= 1; - } - if(uc_count != 12) - { - uc_rtv = 1; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief UID PWD 验证 -*/ -void JQ_Verify_UID_PWD(void) -{ - uint8_t uc_ack; - uint8_t auc_uid_temp[8]; - uint8_t auc_pwd_temp[4]; - uint8_t uc_state; - - if(JQXT_Test_IsNeedBind() == 0) - { - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - return; - } - - JQ_ScanUIDBegin(); - if(checker_runcfg.params[0] > 0) - { - JQ_FreeBack_Prapare(1); - } - uc_ack = JQ_ScanReadUID(CHECKER_NET_ID,auc_uid_temp); - if(uc_ack < 1) - { - Checker_MaskResult(1,checker_runcfg.task_info.runindex); - return; - } - for(uc_ack = 0; uc_ack < 4; uc_ack++) - { - auc_pwd_temp[uc_ack] = checker_runcfg.writepwd[3-uc_ack]; - } - JQ_VerifyPWD(auc_pwd_temp); - uc_state = 0; - uc_ack = JQ_ReadState(CHECKER_NET_ID,&uc_state); - if((uc_state & 0x40) == 0) - { - Checker_MaskResult(1,checker_runcfg.task_info.runindex); - return; - } - for(uc_ack = 0; uc_ack < 8; uc_ack++) - { - if(checker_runcfg.writeuid[uc_ack] != auc_uid_temp[7-uc_ack]) - { - break; - } - } - if(uc_ack != 8) - { - Checker_MaskResult(1,checker_runcfg.task_info.runindex); - }else{ - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - } -} -/* -@breif 测量电容电压差 -@param0 两次测量间隔 0.1s -@rtv0 电压差值 -*/ -void JQ_Test_CapVoltage(void) -{ - uint16_t us_capv1; - - - POWER_OFF; - Power_SetSampleCurrentRange(Checker_OnLine_Sample_R); - HMOS_FAST_DISCHG; - HMOS_SWITCH_GND; - delay_os_ms(1000); - us_capv1 = AD_SampleCap(checker_runcfg.params[0]); - POWER_ON; - delay_os_ms(500); - JQBUS_ON - Power_SetSampleCurrentRange(Current_Max); - - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_capv1,checker_runcfg.rtv_count); - -} -/* -@breif OTP 读写使能 -*/ - -void JQ_Test_EnOTPW(void) -{ - JQ_EnWOTP(); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} -/* -@breif 写模块版本 前提是要使能OTP (ENWOTP) -@param0 模块版本号 -*/ -void JQ_Test_WriteVersion(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_temp = 0; - uint8_t uc_write = checker_runcfg.params[0] & 0x1F; - - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,1,(uint8_t*)&uc_temp); - if(uc_ack < 1) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - if((uc_temp & 0x1F) == uc_write) - { - uc_rtv = 0; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - uc_temp |= uc_write; - if((uc_temp & 0x1F) != uc_write) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - JQ_EnWOTP(); - JQ_EnWOTP(); - - uc_ack = JQ_WriteOTP(20,1,(uint8_t*)&uc_temp); - if(uc_ack != 1) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - uc_write = uc_temp; - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,1,(uint8_t*)&uc_temp); - if(uc_ack < 1) - { - uc_rtv = 1; - } - if(uc_temp != uc_write) - { - uc_rtv = 1; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 获取版本号 - -*/ -void JQ_Test_ReadVersion(void) -{ - uint16_t us_temp = 0xFF; - uint8_t uc_ack; - uint8_t uc_rtv = 0; - uc_ack = JQ_ReadOTP(CHECKER_NET_ID,20,1,(uint8_t*)&us_temp); - if(uc_ack < 1) - { - uc_rtv = 1; - } - us_temp &= 0x1F; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_temp,checker_runcfg.rtv_count); -} - -CheckerTask jqtaskArray[CHECKER_MAXID_COUNT] ={ -Checker_PowerPrapare, //0 电源准备 -JQ_Test_PowerOn, //1 上电充能 -JQ_Test_SetBusV, //2 设置总线电压 -JQ_Test_BaseCur, //3 获取总线电流 -JQ_Test_ScanUID, //4 扫描UID -JQ_Test_PWCheck, //5 密码验证 -JQ_Test_ReadChipID, //6 读取芯片代码 -JQ_Test_OTPCheck, //7 OTP检测 -JQ_Test_FTCheck, //8 工厂测试检测 -JQ_Test_ReadState, //9 读取状态 -JQ_Test_WriteUserInfo,//10 写工厂信息 -JQ_Test_ChgEnergy ,//11 充能统计 -JQ_Test_CheckDAC ,//12 充电电压检测 -Checker_WaitDelay ,//13 延时等待 -JQ_Test_SetDelay ,//14 设置延时 -JQ_Test_ReadDelay ,//15 读取延时 -JQ_Test_ClkTrim ,//16 时钟校准 -JQ_Test_Discharge ,//17 放电 -JQ_Test_Reset ,//18 复位 -JQ_Test_BootEn ,//19 起爆使能 -JQ_Test_BoomEnergy ,//20 起爆充能 -JQ_Test_EnCommEndCur ,//21 使能通讯末电流采集 -JQ_Test_GetCommEndCur ,//22 获取通讯末电流 -JQ_Test_WriteOTP ,//23 写OTP -JQ_Test_ReadOTP ,//24 读OTP -JQ_Test_ClearBoom ,//25 清除起爆计数 -JQ_Test_PowerOff ,//26 关总线 -JQ_Test_WriteBuf2OTP ,//27 将缓存区数据写入OTP -JQ_UID_PWD_Bind ,//28 三码写入错误 -JQ_Verify_UID_PWD ,//29 三码验证错误 -JQ_Test_CapVoltage ,//30 测量电容压差 -Checker_ResistorSample,//31 测量桥丝阻值 -JQ_Test_EnOTPW ,//32 使能OTP写 -JQ_Test_WriteVersion ,//33 写模块版本 -JQ_Test_ReadVersion ,//34 读取版本号 -(void*)0 //数组结束 -}; - diff --git a/source/elec_det/interface/JQChecker.h b/source/elec_det/interface/JQChecker.h deleted file mode 100644 index 904ce5a..0000000 --- a/source/elec_det/interface/JQChecker.h +++ /dev/null @@ -1,218 +0,0 @@ -#ifndef JQCHECKER_H_ -#define JQCHECKER_H_ -#include "base/define.h" -#include "basechecker.h" - - - - -extern Checker_RunCfg_st checker_runcfg; - - - - -extern CheckerTask jqtaskArray[CHECKER_MAXID_COUNT]; - - -/* -brief 准备测试用电压 -@param 设置电压值,最多支持10个参数 -*/ -void JQ_Test_PowerPrapare(void); - -/* -@brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC -@param1 总线电压 -@param2 充电结束时的AD值 -@rtv1 返回总线电流低于设置AD值的时间 -*/ -void JQ_Test_PowerOn(void); -/* -@brief 扫描总线上的电子模块 1发 -@param0 使能或失能通信反码信息采集 -@param1 1 uid数据全0验证 其他不验证 -*/ -void JQ_Test_ScanUID(void); -/* -@brief 设置总线电压 -@param1 总线电压 -@rtv1 总线电压 -*/ -void JQ_Test_SetBusV(void); -/* -@brief 测量总线基本电压 -@rtv1 返回总线电流 单位0.01uA -*/ -void JQ_Test_BaseCur(void); -/* -@brief 读取芯片码 -@rtv 芯片代码2字节 -*/ -void JQ_Test_ReadChipID(void); -/* -@brief OTP全0检测 -@param0 UID区和密码区验证标志 1不验证 0 验证 -@param1 延时区和保留区验证 1不严重 0验证,错误标记区 -@param2 用户存储区 -*/ - -void JQ_Test_OTPCheck(void); -/* -@brief 工厂成测标志检测 -*/ -void JQ_Test_FTCheck(void); -/* -@brief 读芯片状态 -@param0 比较掩码,状态与掩码与等于掩码返回正常 -*/ -void JQ_Test_ReadState(void); -/* -@brief 写入OTP数据 -@param0 2字节OTP数据 -@param1 2字节OTP数据 -*/ -void JQ_Test_WriteUserInfo(void); -/* -@brief 充能统计 -@param0 充电电流判线值,AD值 -@param1 充电末电流结束值,单位0.1uA -@param2 充电最长时间,单位100ms -@param3 充电高压保持时间,单位0.1s -@rtv0 充能值 单位0.1ms -@rtv1 充末电流 单位0.1uA -@rtv2 充电最大电流 单位0.1Ma -@rtv3 充电抖动幅值 adv -*/ - -void JQ_Test_ChgEnergy(void); -/* -@brief DAC检测 -@param DAC检测的起始值 -@param DAC检测的结束值 -*/ -void JQ_Test_CheckDAC(void); -/* -@brief 延时 -@pram1 延时时间 0.1S -@param 使能总线电流监控 -@rtv1 波动AD值 -*/ -void JQ_Test_WaitDelay(void); -/* -@brief 写延时 -@param 延时时间 -*/ -void JQ_Test_SetDelay(void); -/* -@brief 读延时 -@param 延时时间 -*/ -void JQ_Test_ReadDelay(void); -/* -@brief 校准 -@param1 校准周期 -@param2 脉冲个数 -*/ -void JQ_Test_ClkTrim(void); -/* -@brief 放电 -*/ - -void JQ_Test_Discharge(void); -/* -@brief 复位 -*/ -void JQ_Test_Reset(void); -/* -@brief 起爆使能 -*/ -void JQ_Test_BootEn(void); -/* -@brief 起爆充能 -@param1 启动电流 adc -@param2 脉冲个数 -@param3 延迟采集充能 -@param4 使能电压波动监控 -@rtv1 起爆后充电能量 -@rtv2 起爆脉冲波动 -@rtv3 起爆后充电电流 -@rtv4 起爆后充电电流波动 -*/ - -void JQ_Test_BoomEnergy(void); -/* -@brief 使能通讯末电流采样 -*/ -void JQ_Test_EnCommEndCur(void); -/* -@brief 获取通讯末电流采样,关闭电流采样 -@rtv 返回上次采集的通讯末电流 -*/ -void JQ_Test_GetCommEndCur(void); -/* -@brief 关总线 -*/ -void JQ_Test_PowerOff(void); -/* -@brief 密码验证 -@param0 密码源码验证使能 -*/ -void JQ_Test_PWCheck(void); -/* -@brief 写入OTP数据 -@param0 OTP 地址 -@param1 写入数据长度 -@param2 2Bytes OTP数据 -@param3 2Bytes OTP数据 -@param4 2Bytes OTP数据 -@param5 2Bytes OTP数据 -*/ -void JQ_Test_WriteOTP(void); -/* -@brief 读OTP -@param0 OTP地址 -@param1 OTP 数量 -*/ - -void JQ_Test_ReadOTP(void); -/* -@brief 清除起爆命令 -*/ -void JQ_Test_ClearBoom(void); -/* -@brief 缓存数据写入OTP数据 -@param0 OTP 地址 -@param1 缓存区起始 -@param2 写入数据长度 -*/ -void JQ_Test_WriteBuf2OTP(void); -/* -@brief 写入三码数据 -*/ -void JQ_UID_PWD_Bind(void); -/* -@brief UID PWD 验证 -*/ -void JQ_Verify_UID_PWD(void); -/* -@breif 测量电容电压差 -@param0 两次测量间隔 0.1s -@rtv0 电压差值 -*/ -void JQ_Test_CapVoltage(void); -/* -@breif OTP 读写使能 -*/ - -void JQ_Test_EnOTPW(void); -/* -@brief 获取版本号 - -*/ -void JQ_Test_ReadVersion(void); -/* -@breif 写模块版本 前提是要使能OTP (ENWOTP) -@param0 模块版本号 -*/ -void JQ_Test_WriteVersion(void); -#endif diff --git a/source/elec_det/interface/XTChecker.c b/source/elec_det/interface/XTChecker.c deleted file mode 100644 index f639666..0000000 --- a/source/elec_det/interface/XTChecker.c +++ /dev/null @@ -1,1390 +0,0 @@ - -#include "base/delay.h" -#include "hardware/adc_cfg.h" -#include "base/utility.h" -#include "hardware/power.h" -#include "driver/XTDriver.h" -#include "XTChecker.h" -#include "hardware/timer_cfg.h" -#define XT_CHECKER_RUN_BUF 56 -uint8_t XT_Test_UID[13]="123456789ACDE"; -uint8_t XT_Test_PWD[8]="FBCDabcd"; -uint8_t XT_RunBuf[XT_CHECKER_RUN_BUF]; -/* -@brief 注码检测 -@rtv 0 已经注码,1 不能注码 2 需要注码 -*/ -static uint8_t XT_Test_CheckeThreeCode(void); -/* -@brief 三码绑定验证 -*/ -static uint8_t XT_Test_UID_PWD_Verify_(void); -/* -@brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC -@param0 总线电压 -@param1 超时时间 0.1ms -@param2 充电结束时的AD值 -@rtv1 返回总线电流低于设置AD值的时间 -*/ -void XT_Test_PowerOn(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_rsult[2]; - uint16_t us_max; - uint16_t us_shake; - XTBUS_OFF; - uc_rtv = PowerCalibration_set(checker_runcfg.params[0],checker_runcfg.params[0]-1); - Power_SetSampleRange_Seep(Checker_PowerOn_Sample_R,ADC_SPEED_HIGH); - //POWER_ON - delay_os_ms(100); - XTBUS_ON; - delay_us(20); - us_rsult[1] = AD_GetChgEnergy(checker_runcfg.params[1],checker_runcfg.params[2], &us_max,&us_shake); - delay_os_ms(100); - us_rsult[0] = Power_GetBousV(); - Checker_SetRtv(us_rsult,checker_runcfg.rtv_count); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - XT_Init(0x78); -} - -/* -@brief 设置总线电压 -@param1 总线电压 -@rtv1 总线电压 -*/ -void XT_Test_SetBusV(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_h_v,us_m_v; - us_h_v = checker_runcfg.params[0]; - if(us_h_v < 55) - { - uc_rtv = 1; - - }else{ - us_m_v = 50; - uc_rtv |= PowerCalibration_set(us_h_v,us_m_v); - XTBUS_ON -// if(checker_runcfg.params[1] == 0) -// { -// XTBUS_ON; -// }else{ -// HMOS_SWITCH_RW_1; -// } - us_m_v = ((us_h_v/80)+2)*60; - delay_ms(us_m_v); - us_h_v = Power_GetBousV(); - Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count); - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - -} - -/* -@brief 测量总线基本电压 -@rtv1 返回总线电流 单位0.01uA -*/ -void XT_Test_BaseCur(void) -{ - uint16_t ul_cur[2]; - XTBUS_W_1 - delay_ms(200); - ul_cur[0] = ADC_GetBaseStableCur(); - XTBUS_W_0 - delay_ms(100); - ul_cur[1] = ADC_GetBaseStableCur(); - XTBUS_W_1 - delay_ms(50); -// if(ul_cur[0] < 100 || ul_cur[1] < 100) -// { -// __disable_irq(); -// while(1){}; -// } - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - Checker_SetRtv(ul_cur,checker_runcfg.rtv_count); -} - -/* -@brief 扫描总线上的电子模块 1发 -@param0 UID长度 -@param1 使能或失能 UID对比 -*/ - -void XT_Test_ScanUID(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_count = 0; - uint16_t us_temp[12]; - XT_Clear_Read(); - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - if(checker_runcfg.params[0] == 0) - { - checker_runcfg.params[0] = checker_runcfg.uid_len; - if(checker_runcfg.params[0] == 0) - { - checker_runcfg.params[0] = 7; - } - } - - uc_rtv = XT_Read_Uid(XT_RunBuf,checker_runcfg.params[0]); - - if(checker_runcfg.params[1] > 0) - { - for(uc_count = 0; uc_count < checker_runcfg.params[0];uc_count++) - { - if(checker_runcfg.writeuid[uc_count] != XT_RunBuf[uc_count]) - { - uc_rtv |= 0x01; - } - } - } - uc_count = 0; - if(uc_rtv == 0) - { - checker_runcfg.uid_len = checker_runcfg.params[0]; - memcpy(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len); - uc_count = (checker_runcfg.params[0]+8+1)/2; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - memcpy(us_temp,XT_RunBuf,24); - Checker_SetRtv(us_temp,checker_runcfg.rtv_count); -} -/* -@brief 写芯片配置 -@param0 UID长度 -@param1 密码长度 -@param2 反馈电流挡位 -@param4 版本标识 -*/ -void XT_Test_WriteChipCfg(void) -{ - uint8_t uc_rtv = 0; - XT_RunBuf[0] = (((checker_runcfg.params[0] & 0x0F)-7) << 4) & 0xF0; - XT_RunBuf[0] += ((checker_runcfg.params[1] - 4) & 0x0F) ; - XT_RunBuf[1] = 0x8C;//((checker_runcfg.params[2] & 0x0F) << 2) & 0xF0; - XT_RunBuf[2] = checker_runcfg.params[3]; - uc_rtv = XT_Write_Config(XT_RunBuf); - checker_runcfg.uid_len = (uint8_t)checker_runcfg.params[0]; - checker_runcfg.pwd_len = (uint8_t)checker_runcfg.params[1]; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 芯片配置并比对 -@param0 UID长度 -@param1 密码长度 -@param2 反馈电流挡位 -@param4 版本标识 -*/ -void XT_Test_CheckChipCfg(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_count = 0; - memset(XT_RunBuf,0,10); - XT_RunBuf[0] = (((checker_runcfg.params[0] & 0x0F)-7) << 4) & 0xF0; - XT_RunBuf[0] += ((checker_runcfg.params[1] - 4) & 0x0F) ; - XT_RunBuf[1] = 0x8C;//((checker_runcfg.params[2] & 0x0F) << 2) & 0xF0; - XT_RunBuf[2] = checker_runcfg.params[3]; - uc_rtv = XT_Read_Config(XT_RunBuf+5); - for(uc_count = 0; uc_count < 3; uc_count++) - { - if(XT_RunBuf[uc_count] != XT_RunBuf[6+uc_count]) - { - uc_rtv |= 0x01; - } - } - XT_RunBuf[1] = XT_RunBuf[2];//验证密码/UID 和版本号 - if(XT_Check_Config(XT_RunBuf) == 0) - { - checker_runcfg.uid_len = (uint8_t)checker_runcfg.params[0]; - checker_runcfg.pwd_len = (uint8_t)checker_runcfg.params[1]; - }else{ - uc_rtv |= 0x01; - } - - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - -} - - -/* -@brief 模拟注码,优先写入配置项 -*/ -void XT_Test_BindTestCode(void) -{ - uint8_t uc_rtv = 0; - if(checker_runcfg.uid_len == 0) - { - checker_runcfg.uid_len = 7; - } - memcpy(XT_RunBuf,XT_Test_UID,checker_runcfg.uid_len); - uc_rtv = XT_Write_Uid(XT_RunBuf, checker_runcfg.uid_len); - if(uc_rtv == 0) - { - memcpy(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len); - } - if(checker_runcfg.pwd_len == 0) - { - checker_runcfg.pwd_len = 7; - } - memcpy(XT_RunBuf,XT_Test_PWD,checker_runcfg.pwd_len); - uc_rtv |= XT_Write_Bmid(XT_RunBuf, checker_runcfg.pwd_len); - if(uc_rtv == 0) - { - memcpy(checker_runcfg.writepwd,XT_RunBuf,checker_runcfg.pwd_len); - } - - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 充能统计 -@param0 充电挡位 -@param1 充电电流判线值,AD值 -@param2 充电末电流结束值,单位0.1uA -@param3 充电最长时间,单位100ms -@param4 充电高压保持时间,单位0.1s - -@rtv0 充能值 单位0.1ms -@rtv1 充末电流 单位0.1uA -@rtv2 充电最大电流 单位0.1Ma -@rtv3 充电抖动幅值 adv -*/ - -void XT_Test_ChgEnergy(void) -{ - uint8_t uc_charge_class = checker_runcfg.params[0]; - uint16_t us_sample_timeout = checker_runcfg.params[1]; - uint16_t us_adend = checker_runcfg.params[2]; - uint16_t us_chgend_cur = checker_runcfg.params[3]; - uint16_t us_timeout = checker_runcfg.params[4]; - uint32_t ul_holdtime = checker_runcfg.params[5]; - - uint16_t us_array[4]; - uint16_t us_energy = 0; - uint16_t us_end_cur = 2000; - uint16_t us_max_cur = 0; - uint16_t us_shake = 65535; - uint32_t ul_temp; - uint8_t uc_rtv = 0; - - - XT_Init(0x78); - XT_Charge_All(uc_charge_class); - if(us_adend > 10) - { - Power_SetSampleRange_Seep(XTChecker_ChgEnger_Sample_R,ADC_SPEED_HIGH); - delay_ms(1); - us_energy = AD_GetChgEnergy(us_sample_timeout,us_adend,&us_max_cur,&us_shake); - us_max_cur = ( Power_ConvCur(us_max_cur,XTChecker_ChgEnger_Sample_R) /100+5)/10; - ADC_CurChnnelSet(AN_MAL_CH, ADC_SPEED_MIDLE); - ul_temp = AD_CurMonitor(ul_holdtime*1000); - if(ul_temp > us_shake) - { - us_shake = ul_temp; - } - }else{ - us_shake = 0; - us_max_cur = 0; - us_energy = 0; - } - - - us_timeout++; - us_array[0] = ADC_GetBaseStableCur(); - us_array[1] = ADC_GetBaseStableCur(); - us_array[2] = ADC_GetBaseStableCur(); - while(us_timeout > 0) - { - us_array[3] = ADC_GetBaseStableCur(); - Bubble_Sort_u16(us_array,3); - - us_end_cur = us_array[0]; - - if(us_end_cur < us_chgend_cur ) - { - break; - } - us_timeout--; - } - if(us_end_cur > us_chgend_cur) - { - uc_rtv = 1; - } - CurrentSampleR_Def; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - us_array[0] = us_energy; - us_array[1] = us_end_cur; - us_array[2] = us_max_cur; - us_array[3] = us_shake; - - Checker_SetRtv(us_array,checker_runcfg.rtv_count); -} - -/* -@brief 写现场值,如果UID已经写入,会将现场值读取进行比对 -@param 0 编号 -@param 1 延时 -@param 2 孔号 -*/ - -void XT_Test_WriteRunField(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_count = 0; - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - XT_RunBuf[0] = 0xFF & (checker_runcfg.params[0] >> 8); - XT_RunBuf[1] = 0xFF & (checker_runcfg.params[0]); - XT_RunBuf[2] = 0; - XT_RunBuf[3] = 0xFF & (checker_runcfg.params[1] >> 8); - XT_RunBuf[4] = 0xFF & (checker_runcfg.params[1]); - XT_RunBuf[5] = 0xFF & (checker_runcfg.params[2] >> 8); - XT_RunBuf[6] = 0xFF & (checker_runcfg.params[2]); - - if(checker_runcfg.uid_len > 0) - { - uc_rtv = XT_Write_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf); - delay_os_ms(40); - uc_rtv |= XT_Read_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf+10); - for(uc_count = 0; uc_count < 7; uc_count++) - { - if(XT_RunBuf[uc_count] != XT_RunBuf[uc_count+10]) - { - uc_rtv |= 0x01; - } - } - }else{ - uc_rtv = XT_Write_Field_All(XT_RunBuf); - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 比对现场值 -@param0 比对网络号 -@param1 比对延时 -@param2 比对孔位 -@param3 1使能或 0失能通信反码信息采集 -@rtv1 最大反馈电流 -@rtv2 最大反馈时间 -@rtv3 最小反馈电流 -@rtv4 最小反馈时间 -*/ - -void XT_Test_CheckRunField(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_count = 0; - uint16_t aus_temp[4]; - uint32_t ul_temp; - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - - XT_RunBuf[0] = 0xFF & (checker_runcfg.params[0] >> 8); - XT_RunBuf[1] = 0xFF & (checker_runcfg.params[0]); - XT_RunBuf[2] = 0; - XT_RunBuf[3] = 0xFF & (checker_runcfg.params[1] >> 8); - XT_RunBuf[4] = 0xFF & (checker_runcfg.params[1]); - XT_RunBuf[5] = 0xFF & (checker_runcfg.params[2] >> 8); - XT_RunBuf[6] = 0xFF & (checker_runcfg.params[2]); - - - if(checker_runcfg.uid_len == 0) - { - memset(aus_temp,0,8); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(aus_temp,checker_runcfg.rtv_count); - return; - } - if(checker_runcfg.params[3] > 0) - { - XT_FreeBack_Prapare(1); - } - uc_rtv |= XT_Read_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf+10); - - ul_temp = Power_ConvCur(XT_FreeBackMaxCur, XTDriver_Sample_R); //通信电流 - ul_temp = (ul_temp / 10+4)/10;//0.01mA - - aus_temp[0] = ul_temp ; - aus_temp[1] = (uint16_t)((((XT_ADC_SAMPLE_TIME*1000)*XT_FreeBackMaxTime)/XT_Read_AD_Sample_C+400)/1000) ; - ul_temp = Power_ConvCur(XT_FreeBackMinCur, XTDriver_Sample_R); //通信电流 - ul_temp = (ul_temp / 10+4)/10;//0.01mA - aus_temp[2] = ul_temp; - aus_temp[3] = (uint16_t)((((XT_ADC_SAMPLE_TIME*1000)*XT_FreeBackMinTime)/XT_Read_AD_Sample_C+400)/1000) ; - - if(uc_rtv == 0) - { - for(uc_count = 0; uc_count < 7; uc_count++) - { - if(XT_RunBuf[uc_count] != XT_RunBuf[10+uc_count]) - { - uc_rtv |= 0x01; - } - } - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(aus_temp,checker_runcfg.rtv_count); -} - -/* -@brief 桥丝通断检测,如果测试器有uid,将采用uid方式通信 -*/ -void XT_Test_Resister(void) -{ - uint16_t us_rtv = 0; - if(checker_runcfg.uid_len > 0) - { - us_rtv = XT_Get_UID_R(checker_runcfg.writeuid,checker_runcfg.uid_len); - }else{ - us_rtv = XT_Get_R(); - } - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_rtv,checker_runcfg.rtv_count); -} -/* -@brief 电容容量检测,如果测试器有uid,将采用uid方式通信 -@param0 检测电压参数 -@param1 超时时间 -@rtv0 电容容量 0.1uF -*/ -void XT_Test_Cap(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_temp; - uint32_t ul_time_out = checker_runcfg.params[1] ; - float f_cap = 0.0f; - if(checker_runcfg.params[0] == 0) - { - checker_runcfg.params[0] = 0x11;//默认1V挡位 - } - if(ul_time_out == 0) - { - ul_time_out = XTSingleCollectAckTimerOverflowCnt; - } - if(checker_runcfg.uid_len > 0) - { - uc_rtv = XT_Get_UID_C(checker_runcfg.writeuid,checker_runcfg.uid_len,checker_runcfg.params[0],ul_time_out,&f_cap); - }else{ - uc_rtv = XT_Get_C(checker_runcfg.params[0],ul_time_out,&f_cap); - } - - XT_Charge_All(0x00); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - us_temp = (uint16_t)(f_cap*10); - Checker_SetRtv(&us_temp,checker_runcfg.rtv_count); -} - -/* -@brief 写管壳码 如果测试器有uid,将采用uid方式通信 -@param 命令缓存参数的起始 -@param 写入数据长度 -*/ -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)) - { - 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]) - { - uc_rtv = 1; - 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); -} - -/* -@brief 写UID -@param 命令缓存参数的起始 -@param 写入数据长度 -*/ -void XT_Test_WriteUID(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_count = 0; - if((checker_runcfg.params[0] + checker_runcfg.params[1] > CHECKER_WRITE_BUF)) - { - 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]) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - if(checker_runcfg.params[1] > 13) - { - checker_runcfg.params[1] = 13; - } - memcpy(XT_RunBuf,&Checker_FacBuf[2]+checker_runcfg.params[0],checker_runcfg.params[1]); - - uc_rtv = XT_Write_Uid(XT_RunBuf,checker_runcfg.params[1]); - XT_Clear_Read(); - uc_rtv |= XT_Read_Uid(XT_RunBuf+16,checker_runcfg.params[1]); - if(uc_rtv == 0) - { - for(uc_count = 0; uc_count < checker_runcfg.params[1];uc_count++) - { - if(XT_RunBuf[uc_count] != XT_RunBuf[16+uc_count]) - { - uc_rtv |= 0x01; - } - } - } - if(uc_rtv == 0) - { - checker_runcfg.uid_len = checker_runcfg.params[1]; - memcpy(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len); - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 写密码 -@param 命令缓存参数的起始 -@param 写入数据长度 -*/ -void XT_Test_WritePWD(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_state; - if((checker_runcfg.params[0] + checker_runcfg.params[1] > CHECKER_WRITE_BUF)) - { - 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]) - { - uc_rtv = 1; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - if(checker_runcfg.params[1] > 13) - { - checker_runcfg.params[1] = 13; - } - memcpy(XT_RunBuf,&Checker_FacBuf[2]+checker_runcfg.params[0],checker_runcfg.params[1]); - - uc_rtv = XT_Write_Bmid(XT_RunBuf,checker_runcfg.params[1]); - uc_rtv |= XT_Check_Bmid(XT_RunBuf,checker_runcfg.params[1]); - if(checker_runcfg.uid_len > 0) - { - memset(XT_RunBuf+16,0,8); - uc_rtv |= XT_Read_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf+16); - uc_state = XT_RunBuf[16+7]; - if( (uc_state & 0x20) == 0) - { - uc_rtv = 0x01; - } - } - - if(uc_rtv == 0) - { - checker_runcfg.pwd_len = checker_runcfg.params[1]; - memcpy(checker_runcfg.writepwd,XT_RunBuf,checker_runcfg.pwd_len); - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 备份区标记检测,备份区用于存储检测标记 -@param0 0备份区标记 或 1比对 -@param1 备份区数据掩码 1Bytes -@param1 备份区写入数据 1Bytes - -*/ - -void XT_Test_CheckBackFlag(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_temp1; - if(checker_runcfg.uid_len > 0) - { - uc_rtv = XT_Read_Param(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf); - }else{ - uc_rtv = XT_Read_Param_All(XT_RunBuf); - } - if(uc_rtv != 0) - { - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - return; - } - us_temp1 = XT_RunBuf[1]; - if(checker_runcfg.params[0] == 0) - { - us_temp1 &= (~checker_runcfg.params[1]); - us_temp1 |= checker_runcfg.params[2]; - XT_RunBuf[1] = 0x0FF & us_temp1; - uc_rtv |= XT_Write_Param(XT_RunBuf); - } - else{ - us_temp1 = us_temp1 & checker_runcfg.params[1] ; - if(us_temp1 != checker_runcfg.params[2]) - { - uc_rtv = 1; - } - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 读取备份区数据 -@rtv0 备份区2字节 -@rtv0 备份区2字节 -*/ -void XT_Test_ReadBackFlag(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_temp[2]; - if(checker_runcfg.uid_len > 0) - { - uc_rtv = XT_Read_Param(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf); - }else{ - uc_rtv = XT_Read_Param_All(XT_RunBuf); - } - memcpy(us_temp,XT_RunBuf,4); - - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(us_temp,checker_runcfg.rtv_count); -} - -/* -@brief 时钟校准 -@param0 校准模式 1 快速 0 全 -@param1 校准周期 -@param2 校准时长 -*/ -void XT_Test_Trim(void) -{ - uint8_t uc_rtv = 0; - if(checker_runcfg.params[0] > 0) - { - XT_Trim_Faset_Cycle(checker_runcfg.params[1],checker_runcfg.params[1]>>1); - }else{ - XT_Trim_Complete_Cycle(checker_runcfg.params[1],checker_runcfg.params[1]>>1,checker_runcfg.params[2]); - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 放电 -*/ -void XT_Test_Discharge(void) -{ - uint8_t uc_rtv = 0; - XT_Charge_All(0x00); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 失能通信末电流采集 -*/ -void XT_Test_EnCommEndCur(void) -{ - XT_CommEndMaxCur = 0; - XT_CommEnd_CurEn = 1; - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} - -/* -@brief 获取通信末电流 -*/ -void XT_Test_GetCommEndCur(void) -{ - XT_CommEnd_CurEn = 0; - Checker_SetRtv(&XT_CommEndMaxCur,checker_runcfg.rtv_count); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} - -/* -@brief 在线检测 -@param 检测网络号 -*/ -void XT_Test_OneLineCheck(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_temp; - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - uc_rtv = XT_Check_Online(400,XT_RunBuf); - if(checker_runcfg.params[0] > 400) - { - checker_runcfg.params[0] = 400; - } - if(checker_runcfg.params[1] > 400) - { - checker_runcfg.params[1] = 400; - } - if(checker_runcfg.params[0] > 0) - checker_runcfg.params[0]--; - uc_temp = checker_runcfg.params[0] >> 3; - uc_temp = XT_RunBuf[uc_temp] << (checker_runcfg.params[0] & 0x07); - if(uc_temp != 0x80) - { - uc_rtv = 0x01; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 状态检测,如果UID已经存在,使用UID读取。否则通过扫描的方式 -@param0 状态比较掩码 -@rtv0 与掩码后的状态值 -*/ -void XT_Test_CheckState(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_state = 0; - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - if(checker_runcfg.uid_len > 0) - { - uc_rtv = XT_Read_Field(checker_runcfg.writeuid,checker_runcfg.uid_len,XT_RunBuf); - us_state = XT_RunBuf[7]; - if((us_state & checker_runcfg.params[0]) != checker_runcfg.params[1]) - { - uc_rtv = 1; - } - }else{ - uc_rtv = 1; - us_state = 0; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_state,checker_runcfg.rtv_count); -} - -/* -@brief 起爆 -@param 起爆超时 -@param 巡检脉冲个数 -*/ -void XT_Test_Boom(void) -{ - uint8_t uc_rtv,uc_temp; - uint16_t us_index = 0; - uint16_t us_count = 0; - uint16_t us_res[2]; - uint32_t ul_maxdelay = checker_runcfg.params[0]; - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - if(checker_runcfg.params[1] == 0) - { - checker_runcfg.params[1] = 400; - } - uc_rtv = XT_Check_Fire_Each(checker_runcfg.params[1],XT_RunBuf); - for(us_index = 0; us_index < XT_CHECKER_RUN_BUF;us_index++) - { - if(XT_RunBuf[us_index] != 0) - { - uc_temp = XT_RunBuf[us_index]; - us_res[1] = us_index*8; - while(uc_temp > 0) - { - us_res[1]++; - if((uc_temp & 0x80) > 0) - { - us_count++; - } - uc_temp <<= 1; - } - } - } - if(us_count != 1) - { - uc_rtv = 1; - } - uc_rtv |= XT_Check_Fire_All(); - uc_rtv |= XT_MeasureFire(&ul_maxdelay); - us_res[0] = (uint16_t)ul_maxdelay; - - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(us_res,checker_runcfg.rtv_count); - - -} -/* -@brief 复位 -*/ -void XT_Test_Reset(void) -{ - uint8_t uc_rtv = 0; - XT_Reset(); - delay_os_ms(40); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 关总线 -*/ -void XT_Test_PowerOFF(void) -{ - uint8_t uc_rtv = 0; - XT_Charge_All(0x00); - delay_os_ms(100); - XTBUS_OFF; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 芯片锁存 -*/ -void XT_Test_LockCmdC(void) -{ - uint8_t uc_rtv = 0; - XT_Lock(); - delay_ms(20); - XT_Clear_Read(); - if(0 != XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len)) - { - uc_rtv = 0x01; - } - else{ - if((XT_RunBuf[checker_runcfg.uid_len+7] & 0x80) != 0x80)//锁存后是bit7 = 1; - { - uc_rtv = 0x01; - } - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 赋码设备失能 -*/ - -void XT_Test_CodeBindEn(void) -{ - uint8_t uc_rtv = 0; - checker_runcfg.uid_pwd_bind_flag = 0xAA; - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -static uint8_t XT_Test_InputChek_(uint16_t us_count ) -{ - uint8_t uc_rtv = 0; - uint8_t uc_flag = 0; - uint32_t ul_timeout,ul_time; - Power_SetSampleRange_Seep(Checker_OnLine_Sample_R,ADC_SPEED_MIDLE); - - ul_timeout = us_count; - ul_timeout *= 100; - ul_time = 0; - Get10usCount(); - while(ul_time <= ul_timeout ) - { - ul_time += Get10usCount(); - if(ADC_GetCurADCFast() > 25) - { - uc_flag++; - if(uc_flag > 50) - { - if( ADC_GetBaseStableCur() > 120) - { - Power_SetSampleCurrentRange(Current_Max) ; - delay_ms(2); - ul_time += Get10usCount(); - XT_Clear_Read(); - if( 0 == XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len)) - { - break; - }else{ - ul_time += 250000; - Get10usCount();//XT通信超时定时器也是使用tim2,产生通信后需要请您 - Power_SetSampleRange_Seep(Checker_OnLine_Sample_R,ADC_SPEED_MIDLE); - delay_ms(1); - } - - }else{ - Power_SetSampleRange_Seep(Checker_OnLine_Sample_R,ADC_SPEED_MIDLE); - delay_ms(1); - } - }else{ - delay_ms(1); - } - continue; - }else{ - delay_ms(1); - } - uc_flag = 0; - } - uc_rtv = 1; - if(uc_flag > 50) - { - uc_rtv = 0; - } - return uc_rtv; -} - -/* -@brief 接入检测 -@param0 上电电压 -@param1 超时次数 -*/ - -void XT_Test_InputCheck(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_h_v = checker_runcfg.params[0]; - uint16_t us_count = checker_runcfg.params[1]; - us_h_v = checker_runcfg.params[0]; - if(us_h_v < 55) - { - uc_rtv = 1; - }else{ - uc_rtv |= PowerCalibration_set(us_h_v,50); - XTBUS_ON; - delay_ms(100); - us_h_v = Power_GetBousV(); - } - uc_rtv = XT_Test_InputChek_(us_count); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count); - -} -/* -@brief 密码验证 -*/ - -void XT_Test_CheckPWD(void) -{ - uint8_t uc_rtv = 0; - if(checker_runcfg.pwd_len == 0) - { - checker_runcfg.pwd_len = 7; - } - uc_rtv = XT_Check_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len); - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - -/* -@brief 加载配置参数 -@rtv UID长度 -@rtv 密码长度 -@rtv 版本号 -@rtv 反码数据 -*/ -void XT_Test_LoadChipCfg(void) -{ - uint8_t uc_rtv = 0; - uint16_t us_temp[4]; - memset(XT_RunBuf,0,10); - memset(us_temp,0,8); - uc_rtv = XT_Read_Config(XT_RunBuf); - if(uc_rtv == 0) - { - us_temp[0] = ((XT_RunBuf[1] >> 4) & 0x0F)+7; - us_temp[1] = (XT_RunBuf[1] & 0x0F)+4; - us_temp[2] = XT_RunBuf[3]; - us_temp[3] = (XT_RunBuf[2] >> 2) & 0x0F; - checker_runcfg.uid_len = us_temp[0]; - checker_runcfg.pwd_len = us_temp[1]; - } - - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv(us_temp,checker_runcfg.rtv_count); -} - -/* -@breif 测量电容电压差 -@param0 两次测量间隔 0.1s -@rtv0 电压差值 -*/ -void XT_Test_CapVoltage(void) -{ - uint16_t us_capv1; - POWER_OFF; - Power_SetSampleCurrentRange(Checker_OnLine_Sample_R); - HMOS_FAST_DISCHG; - HMOS_SWITCH_GND; - delay_os_ms(1000); - us_capv1 = AD_SampleCap(checker_runcfg.params[0]); - POWER_ON; - delay_os_ms(500); - XTBUS_ON - Power_SetSampleCurrentRange(Current_Max); - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_capv1,checker_runcfg.rtv_count); -} -/* -@brief 注码检测 -@rtv 0 已经注码,1 不能注码 2 需要注码 -*/ -static uint8_t XT_Test_CheckeThreeCode(void) -{ - uint8_t uc_index; - /* - 已经注码验证 - */ - XT_Check_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len);//密码验证 - XT_Clear_Read(); - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len);//扫描UID - uc_index = XT_RunBuf[checker_runcfg.uid_len+7]; - if((uc_index & 0x80) == 0x80)//已经上锁 - { - if((uc_index & 0xA0) != 0xA0)//已经上锁,密码验证失败 - { - return 0x01; - } - //已经上锁,但UID比对错误 - if(rt_memcmp(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len) != 0) - { - return 0x01; - } - //已经上锁,比对成功 - XTBUS_OFF; - return 0; - } - return 2; -} - -/* -@brief 写入三码数据 -*/ -void XT_Test_UID_PWD_Bind(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_ack; - uint8_t uc_count = 0; - uint8_t uc_optbuf[16]; - uint32_t ul_write_mask = 0; - - if(JQXT_Test_IsNeedBind() == 0) - { - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - } - uc_rtv = XT_Test_CheckeThreeCode(); - if(uc_rtv != 2) - { - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - } - uc_rtv = XT_Write_Uid(checker_runcfg.writeuid,checker_runcfg.uid_len); - delay_ms(40); - - uc_rtv |= XT_Write_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len); - - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} -/* -@brief 三码绑定验证 -@rtv 0 验证通过 1 UID验证不通过 2 密码验证不通过 -*/ -static uint8_t XT_Test_UID_PWD_Verify_(void) -{ - uint8_t uc_rtv = 0; - uint8_t uc_state; - XT_Check_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len); - XT_Clear_Read(); - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len); - uc_rtv = rt_memcmp(checker_runcfg.writeuid , XT_RunBuf,checker_runcfg.uid_len); - if(uc_rtv != 0) - { - return 0x01; - } - uc_state = XT_RunBuf[checker_runcfg.uid_len+7]; - if((uc_state & 0x20) == 0) - { - uc_rtv = 0x02; - } - return uc_rtv; -} - -/* -@brief 三码绑定验证 -*/ -void XT_Test_UID_PWD_Verify(void) -{ - uint8_t uc_rtv = XT_Test_UID_PWD_Verify_(); - if(uc_rtv != 0) - { - uc_rtv = 0x01; - } - Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); -} - - -/* -@breif 在线检测 并扫描通信 -@param0 总线电压 -@param1 超时时间1ms 最大6S -@param2 UID长度 -*/ - -void XT_OnLine_SCAN(void) -{ - uint16_t us_h_v; - uint8_t uc_rtv = 0; - PowerCalibration_set(checker_runcfg.params[0],50); - XTBUS_ON; - delay_os_ms(100); - us_h_v = Power_GetBousV(); - if((us_h_v > (checker_runcfg.params[0]+5)) || (us_h_v < (checker_runcfg.params[0]-5))) - { - XTBUS_OFF; - Checker_MaskResult(1,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count); - } - if(0 != XT_Test_InputChek_(checker_runcfg.params[1])) - { - XTBUS_OFF; - Checker_MaskResult(1,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count); - } - delay_ms(10); - XT_Init(0x78); - XT_Clear_Read(); - memset(XT_RunBuf,0,XT_CHECKER_RUN_BUF); - if(checker_runcfg.params[2] == 0) - { - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count); - return; - } - uc_rtv = XT_Read_Uid(XT_RunBuf,checker_runcfg.params[2]); - Checker_MaskResult(1,checker_runcfg.task_info.runindex); - Checker_SetRtv(&us_h_v,checker_runcfg.rtv_count); - -} - -/* -@brief 芯片离线检测 -@param0 超时时间 1ms -@param1 离线电流 0.1uA -@param2 稳定次数 -*/ - -void XT_OFFLine_SCAN(void) -{ - uint32_t ul_timeout = checker_runcfg.params[0]; - uint16_t us_cur = checker_runcfg.params[1]; - uint16_t us_count = checker_runcfg.params[2]; - uint16_t us_temp = 0,ul_time = 0; - ul_timeout *= 1000; - Get1usCount(); - while((us_temp < us_count) && (ul_time < ul_timeout)) - { - ul_time += Get1usCount(); - if(us_cur >= ADC_GetBaseStableCur()) - { - us_temp++; - continue; - } - us_temp = 0; - } - if(us_temp >= us_count) - { - Checker_MaskResult(0,checker_runcfg.task_info.runindex); - } - Checker_MaskResult(1,checker_runcfg.task_info.runindex); -} - -/* -@brief 芯片离线检测 -@param0 充电使能 -@param1 采样周期 10ms -@param2 采样次数 -*/ - -void XT_CurMonitor(void) -{ - uint16_t us_charge_en = checker_runcfg.params[0]; - uint32_t ul_timeout = checker_runcfg.params[1]; - uint16_t us_count = checker_runcfg.params[2]; - uint16_t us_temp = 0,ul_time = 0; - uint32_t ul_runTimer = 0,ul_cur,ul_1sCount; - ul_timeout *= 1000; - if(us_charge_en > 0) - { - XT_Charge_All(us_charge_en); - } - while(us_count > 0) - { - Get1usCount(); - // ul_cur = Power_GetCurrent(); - ul_cur = (uint32_t) (Get_Temperature()*100); - printf("CurM %d\r\n",ul_cur); - ul_runTimer= Get1usCount(); - - if((ul_runTimer+5) > ul_timeout) - { - continue; - } - ul_runTimer = ul_timeout - ul_timeout -5; - ul_1sCount = ul_runTimer / 1000000; - ul_runTimer = ul_runTimer - ul_1sCount*1000000; - while(ul_1sCount > 0) - { - delay_us(1000000); - } - delay_us(ul_runTimer); - } - Checker_MaskResult(0,checker_runcfg.task_info.runindex); -} - - - -CheckerTask xttaskArray[CHECKER_MAXID_COUNT] ={ -Checker_PowerPrapare, //0 电源准备 -XT_Test_PowerOn, //1 上电充能 -XT_Test_SetBusV, //2 设置总线电压 -XT_Test_BaseCur, //3 获取总线电流 -XT_Test_ScanUID, //4 扫描UID -XT_Test_WriteChipCfg, //5 写配置参数 -XT_Test_CheckChipCfg, //6 验证配置 -XT_Test_BindTestCode, //7 模拟注码 -XT_Test_ChgEnergy, //8 充能统计 -XT_Test_WriteRunField,//9 写现场值 网络id 延时 -XT_Test_CheckRunField,//10比对现场值 -XT_Test_Resister ,//11 桥丝通断检测 -XT_Test_Cap ,//12 电容容量统计 -Checker_WaitDelay ,//13 延时等待 -XT_Test_WriteShell ,//14 写管壳号/工厂信息 -XT_Test_WriteUID ,//15 写UID -XT_Test_WritePWD ,//16 写密码 -XT_Test_CheckBackFlag ,//17 写入/检测备份区标志 -XT_Test_ReadBackFlag ,//18 读取备份区数据 -XT_Test_Trim ,//19 校准 -XT_Test_EnCommEndCur ,//20 使能通讯末电流采集 -XT_Test_GetCommEndCur ,//21 获取通讯末电流 -XT_Test_Discharge ,//22 放电 -XT_Test_OneLineCheck ,//23 在线检测 -XT_Test_CheckState ,//24 状态检测 -XT_Test_Boom ,//25 起爆 -XT_Test_Reset ,//26 复位 -XT_Test_PowerOFF ,//27 关总线 -XT_Test_LockCmdC ,//28 芯片锁存 -XT_Test_CodeBindEn ,//29 使能赋码设备 -XT_Test_InputCheck ,//30 在线检测 -XT_Test_CheckPWD ,//31 密码验证 -XT_Test_LoadChipCfg ,//32 加载芯片配置 -XT_Test_CapVoltage ,//33 电容压差测试 -Checker_ResistorSample,//34 桥丝电阻测试 -XT_Test_UID_PWD_Bind ,//35 检测过程中注码 -XT_Test_UID_PWD_Verify,//36 验证注码 -XT_OnLine_SCAN ,//37 模块在线检测 -(void*)0 //数组结束 -}; - -/* -@brief 三码写入 -@rtv 0 执行成功 - 1 电压设置失败 - 3 UID写入失败 - 4 密码写入失败 - 5 获取UID失败 - 6 UID写入失败 - 7 锁存失败 - 8 等待接入超时 - 9 已经其他数据 -*/ - -uint8_t XT_UID_PWD_Bind(void) -{ - uint16_t us_h_v; - uint8_t uc_index = 0, uc_rtv = 0; - // 雷管厂代码为0时不锁定 - uint8_t lock=checker_runcfg.writeuid[1]; - uint8_t stat_check=0x20; - ThreeBindResult_flag = 0x00; - if(checker_runcfg.uid_pwd_bind_flag != 0xAA) - { - PowerCalibration_set(Checker_First_Set_Voltage,50); - XTBUS_ON; - delay_os_ms(100); - us_h_v = Power_GetBousV(); - if((us_h_v > (Checker_First_Set_Voltage+5)) || (us_h_v < (Checker_First_Set_Voltage-5))) - { - XTBUS_OFF; - return 1; - } - - if(0 != XT_Test_InputChek_(2000)) - { - XTBUS_OFF; - return 8; - } - delay_ms(10); - XT_Init(0x78); - delay_ms(10); - } - /* - 已经注码验证 - */ - uc_rtv = XT_Test_CheckeThreeCode(); - if(uc_rtv == 0) - { - XTBUS_OFF; - ThreeBindResult_flag = 0x55; - return 0x55; - } - else if(uc_rtv == 1) - { - XTBUS_OFF; - return 0x09; - } - - XT_Write_Uid(checker_runcfg.writeuid,checker_runcfg.uid_len); - delay_ms(40); - - XT_Write_Bmid(checker_runcfg.writepwd,checker_runcfg.pwd_len); - delay_ms(40); - - uc_rtv = XT_Test_UID_PWD_Verify_(); - if(uc_rtv == 0x01) - { - - XTBUS_OFF; - return 2; - }else if(uc_rtv == 0x02) - { - XTBUS_OFF; - return 4; - } - - - if(lock){ - //设置电流挡位0x11 1档。锁定前必须执行该命令 - XT_Set_Current(0x11); - delay_ms(30); - XT_Lock(); - delay_ms(40); - stat_check=0xa0;//锁存后是0xa0 - } - XT_Clear_Read(); - if(0 != XT_Read_Uid(XT_RunBuf,checker_runcfg.uid_len)) - { - XTBUS_OFF; - return 5;//扫描UID不存在 - } - uc_rtv = rt_memcmp(checker_runcfg.writeuid,XT_RunBuf,checker_runcfg.uid_len); - if(uc_rtv != 0) - { - XTBUS_OFF; - return 6; - } - uc_index = XT_RunBuf[checker_runcfg.uid_len+7]; - if((uc_index & stat_check) != stat_check) - { - XTBUS_OFF; - return 7; - } - ThreeBindResult_flag = 0x55; - XTBUS_OFF; - return 0x55; -} diff --git a/source/elec_det/interface/XTChecker.h b/source/elec_det/interface/XTChecker.h deleted file mode 100644 index c492f1d..0000000 --- a/source/elec_det/interface/XTChecker.h +++ /dev/null @@ -1,250 +0,0 @@ -#ifndef XTCHECKER_H_ -#define XTCHECKER_H_ -#include "base/define.h" -#include "basechecker.h" - -extern Checker_RunCfg_st checker_runcfg; -extern CheckerTask xttaskArray[CHECKER_MAXID_COUNT] ; -/* -@brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC -@param1 总线电压 -@param2 充电结束时的AD值 -@rtv1 返回总线电流低于设置AD值的时间 -*/ -void XT_Test_PowerOn(void); -/* -@brief 设置总线电压 -@param1 总线电压 -@rtv1 总线电压 -*/ -void XT_Test_SetBusV(void); -/* -@brief 测量总线基本电压 -@rtv1 返回总线电流 单位0.01uA -*/ -void XT_Test_BaseCur(void); -/* -@brief 扫描总线上的电子模块 1发 -@param0 UID长度 -@param1 使能或失能 UID对比 -*/ - -void XT_Test_ScanUID(void); -/* -@brief 写芯片配置 -@param0 UID长度 -@param1 密码长度 -@param2 反馈电流挡位 -@param4 版本标识 -@rtv 芯片配置3字节 -*/ -void XT_Test_WriteChipCfg(void); -/* -@brief 读取芯片配置并比对 -@param0 UID长度 -@param1 密码长度 -@param2 反馈电流挡位 -@param4 版本标识 -*/ -void XT_Test_CheckChipCfg(void); -/* -@brief 模拟注码 -*/ -void XT_Test_BindTestCode(void); -/* -@brief 充能统计 -@param0 充电电流判线值,AD值 -@param1 充电末电流结束值,单位0.1uA -@param2 充电最长时间,单位100ms -@param3 充电高压保持时间,单位0.1s -@param4 充电挡位 -@rtv0 充能值 单位0.1ms -@rtv1 充末电流 单位0.1uA -@rtv2 充电最大电流 单位0.1Ma -@rtv3 充电抖动幅值 adv -*/ - -void XT_Test_ChgEnergy(void); -/* -@brief 写现场值,如果UID已经写入,会将现场值读取进行比对 -@param 0 编号 -@param 1 延时 -@param 2 孔号 -*/ - -void XT_Test_WriteRunField(void); -/* -@brief 比对现场值 -@param0 比对网络号 -@param1 比对延时 -@param2 比对孔位 -@param3 1使能或 0失能通信反码信息采集 -@rtv1 最大反馈电流 -@rtv2 最大反馈时间 -@rtv3 最小反馈电流 -@rtv4 最小反馈时间 -*/ - -void XT_Test_CheckRunField(void); -/* -@brief 桥丝通断检测,如果测试器有uid,将采用uid方式通信 -*/ -void XT_Test_Resister(void); -/* -@brief 电容容量检测,如果测试器有uid,将采用uid方式通信 -@pram 检测电压参数 -*/ -void XT_Test_Cap(void); -/* -@brief 写管壳码 如果测试器有uid,将采用uid方式通信 -@param 命令缓存参数的起始 -@param 写入数据长度 -*/ -void XT_Test_WriteShell(void); -/* -@brief 写UID -@param 命令缓存参数的起始 -@param 写入数据长度 -*/ -void XT_Test_WriteUID(void); -/* -@brief 写密码 -@param 命令缓存参数的起始 -@param 写入数据长度 -*/ -void XT_Test_WritePWD(void); -/* -@brief 备份区标记检测,备份区用于存储检测标记 -@param0 0备份区标记 或 1比对 -@param1 备份区数据掩码 2Bytes -@param1 备份区写入数据 2Bytes - -*/ - -void XT_Test_CheckBackFlag(void); -/* -@brief 备份区标记检测,备份区用于存储检测标记 -*/ -void XT_Test_ReadBackFlag(void); -/* -@brief 时钟校准 -@param0 校准模式 1 快速 0 全 -@param1 校准周期 -@param2 校准时长 -*/ -void XT_Test_Trim(void); -/* -@brief 放电 -*/ -void XT_Test_Discharge(void); - -/* -@brief 失能通信末电流采集 -*/ -void XT_Test_EnCommEndCur(void); -/* -@brief 获取通信末电流 -*/ -void XT_Test_GetCommEndCur(void); -/* -@brief 在线检测 -@param 检测网络号 -*/ -void XT_Test_OneLineCheck(void); -/* -@brief 状态检测,如果UID已经存在,使用UID读取。否则通过扫描的方式 -@param0 状态比较掩码 -*/ -void XT_Test_CheckState(void); -/* -@brief 起爆 -*/ -void XT_Test_Boom(void); -/* -@brief 复位 -*/ -void XT_Test_Reset(void); -/* -@brief 关总线 -*/ -void XT_Test_PowerOFF(void); -/* -@brief 芯片锁存 -*/ -void XT_Test_LockCmdC(void); -/* -@brief 赋码设备失能 -*/ - -void XT_Test_CodeBindEn(void); -/* -@brief 接入检测 -@param0 上电电压 -@param1 超时次数 -*/ -void XT_Test_InputCheck(void); -/* -@brief 密码验证 -*/ - -void XT_Test_CheckPWD(void); -/* -@brief 三码写入 -@rtv 0 执行成功 - 1 电压设置失败 - 3 UID写入失败 - 4 密码写入失败 - 5 获取UID失败 - 6 UID写入失败 - 7 锁存失败 - 8 等待接入超时 -*/ - -uint8_t XT_UID_PWD_Bind(void); -/* -@brief 加载配置参数 -@rtv UID长度 -@rtv 密码长度 -@rtv 版本号 -@rtv 反码数据 -*/ -void XT_Test_LoadChipCfg(void); -/* -@breif 测量电容电压差 -@param0 两次测量间隔 0.1s -@rtv0 电压差值 -*/ -void XT_Test_CapVoltage(void); -/* -@brief 三码绑定验证 -*/ -void XT_Test_UID_PWD_Verify(void); -/* -@brief 写入三码数据 -*/ -void XT_Test_UID_PWD_Bind(void); -/* -@breif 在线检测 并扫描通信 -@param0 总线电压 -@param1 超时时间1ms 最大6S -@param2 UID长度 -*/ - -void XT_OnLine_SCAN(void); -/* -@brief 芯片离线检测 -@param0 超时时间 1ms -@param1 离线电流 0.1uA -@param2 稳定次数 -*/ - -void XT_OFFLine_SCAN(void); -/* -@brief 芯片离线检测 -@param0 充电使能 -@param1 采样周期 10ms -@param2 采样次数 -*/ - -void XT_CurMonitor(void); -#endif diff --git a/source/interface/if_can.c b/source/interface/if_can.c deleted file mode 100644 index 0b9dc9f..0000000 --- a/source/interface/if_can.c +++ /dev/null @@ -1,435 +0,0 @@ -#include "if_can.h" -#include "rtthread.h" -#include "rthw.h" -#include "elec_det.h" -#include "board.h" -CanRxMsg receive_message; -static YeCanRxFrame_st canrx_st; -static uint8_t Can_Device_ID = 0; -static uint32_t GetCanFilter(YeCanID_un yeid); -uint32_t ul_exid,ul_can_mask; - -rt_mutex_t can_tx_mutex; - -volatile uint8_t CAN0_TX_BUSY_Flag = 0; -/* -@brief CAN通讯初始化, 包括CANgpio 过滤器 -*/ -void YeCanInit(void) -{ - uint32_t ul_filter,ul_mask; - CAN_InitTypeDef CAN_InitStructure; - GPIO_InitTypeDef GPIO_InitStructure; - YeCanID_un yeid_un; - CAN_FilterInitTypeDef CAN_FilterInitStructure; - - RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); - //CAN GPIO 初始化 - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA, &GPIO_InitStructure); - - CAN_DeInit(CAN1); - CAN_StructInit(&CAN_InitStructure); - CAN_InitStructure.CAN_TTCM = DISABLE; - CAN_InitStructure.CAN_ABOM = DISABLE; - CAN_InitStructure.CAN_AWUM = DISABLE; - CAN_InitStructure.CAN_NART = DISABLE; - CAN_InitStructure.CAN_RFLM = DISABLE; - CAN_InitStructure.CAN_TXFP = ENABLE; - CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; - CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; - CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq; - CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq; - CAN_InitStructure.CAN_Prescaler = 30; - - CAN_Init(CAN1, &CAN_InitStructure); - - Can_Device_ID = elec_local_addr(); - - yeid_un.Exide = 0; - yeid_un.yecanid.ACK = 0; - yeid_un.yecanid.FunClass = 0; - yeid_un.yecanid.Reserve1 = 0; - yeid_un.yecanid.Reserve0 = 0; - yeid_un.yecanid.SegFlag = 0; - yeid_un.yecanid.SegNum = 0; - yeid_un.yecanid.srcMACID = 0x00; - - yeid_un.yecanid.destMACID = 0x1F; - ul_mask = GetCanFilter(yeid_un); - ul_can_mask =ul_mask; - yeid_un.yecanid.destMACID = Can_Device_ID; - ul_filter = GetCanFilter(yeid_un); - - CAN_FilterInitStructure.CAN_FilterNumber = 0; - CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; - CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; - CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;; - CAN_FilterInitStructure.CAN_FilterIdLow = ul_filter & 0x0FFFF;; - CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (ul_mask >> 16) & 0x0FFFF;; - CAN_FilterInitStructure.CAN_FilterMaskIdLow = ul_mask & 0x0FFFF; ; - CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0; - CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; - CAN_FilterInit(&CAN_FilterInitStructure); - - yeid_un.yecanid.destMACID = 0x1E; - ul_filter = GetCanFilter(yeid_un); - CAN_FilterInitStructure.CAN_FilterNumber = 1; - CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;; - CAN_FilterInitStructure.CAN_FilterIdLow = ul_filter & 0x0FFFF;; - CAN_FilterInit(&CAN_FilterInitStructure); - - yeid_un.yecanid.destMACID = 0x1F; - ul_filter = GetCanFilter(yeid_un); - CAN_FilterInitStructure.CAN_FilterNumber = 2; - CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;; - CAN_FilterInitStructure.CAN_FilterIdLow = ul_filter & 0x0FFFF;; - CAN_FilterInit(&CAN_FilterInitStructure); - - - CAN_OperatingModeRequest(CAN1,CAN_OperatingMode_Normal); - - NVIC_InitTypeDef NVIC_InitStructure; - - NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_Init(&NVIC_InitStructure); - - CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0); - CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE); - can_tx_mutex = rt_mutex_create ("can0_tx_mutex",RT_IPC_FLAG_PRIO); - -} -/* -@brief 根据设置CAN 的ID协议,获取帧过滤值 -*/ -static uint32_t GetCanFilter(YeCanID_un yeid) -{ - uint32_t filter = 0; - filter = yeid.Exide << 3; - filter |= 0x04;//只接收扩展帧 - filter &= ~((uint32_t)0x003);//不限定帧类型 - return filter; -} -/* -@brief CAN发送通讯帧 -@param 源地址 -@param 主机地址 -@param 发送数据缓存 -@param 发送数据长度 -@rtv 0 成功 1 失败 -*/ -uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, uint16_t len) -{ - CanTxMsg transmit_message; - uint8_t mailbox_number; - YeCanID_un yeid_un; - uint32_t time_out = 0; - uint8_t uc_rtv = 0; - //can_transmission_stop(CAN1,0); - /* initialize transmit message */ - transmit_message.ExtId = 0x00; - transmit_message.StdId = 0x00; - transmit_message.RTR = CAN_RTR_DATA; - transmit_message.IDE = CAN_ID_EXT; - yeid_un.Exide = 0; - yeid_un.yecanid.srcMACID = srcaddr; - yeid_un.yecanid.destMACID = dstaddr; - yeid_un.yecanid.ACK = 0; - yeid_un.yecanid.FunClass = 1; - yeid_un.yecanid.SegFlag = 0; - yeid_un.yecanid.SegNum = 0; - if(srcaddr == 0x00 || srcaddr == 0x1f) - { - time_out = 0; - while(time_out < 5) - { - elec_led1_power(0); - rt_thread_mdelay(50); - elec_led1_power(1); - rt_thread_mdelay(50); - time_out++; - - } - } - if(can_tx_mutex != RT_NULL) - { - if(RT_EOK != rt_mutex_take (can_tx_mutex,500)) - { - return 1; - } - } - if(len <= 8) - { - transmit_message.DLC = len; - transmit_message.ExtId = yeid_un.Exide; - memcpy(transmit_message.Data,txdata,8); - - mailbox_number = CAN_Transmit(CAN1, &transmit_message); - time_out = 5000; - while( CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0) - { - time_out --; - rt_hw_us_delay(20); - } - if(time_out == 0) - { - uc_rtv = 1; - goto can0_tx_end; - } - goto can0_tx_end; - } - while(len > 8) - { - memcpy(transmit_message.Data,txdata,8); - len -= 8; - txdata += 8; - - if(yeid_un.yecanid.SegNum == 0) - { - yeid_un.yecanid.SegFlag = 0x01; - }else - { - yeid_un.yecanid.SegFlag = 0x02; - } - transmit_message.ExtId = yeid_un.Exide; - transmit_message.DLC = 8; - mailbox_number = CAN_Transmit(CAN1, &transmit_message); - time_out = 5000; - while( CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0) - { - time_out --; - rt_hw_us_delay(20); - } - if(time_out == 0) - { - uc_rtv = 1; - goto can0_tx_end; - } - yeid_un.yecanid.SegNum ++; - } - yeid_un.yecanid.SegFlag = 0x3; - memcpy(transmit_message.Data,txdata,len); - transmit_message.DLC = len; - transmit_message.ExtId = yeid_un.Exide; - mailbox_number = CAN_Transmit(CAN1, &transmit_message); - time_out = 5000; - while(CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0) - { - - time_out --; - rt_hw_us_delay(20); - } - if(time_out == 0) - { - - uc_rtv = 1; - } - -can0_tx_end: - CAN0_TX_BUSY_Flag = 0; - rt_mutex_release(can_tx_mutex); - return uc_rtv; -} - - -typedef struct{ - void (*end_irq)(void *t,uint32_t len); - void *t; - uint32_t rx_buff_size; -}self_def; - -static self_def g_self; - - - - -static void save_data(void) -{ - YeCanID_un yeid_un; - if(receive_message.DLC > 0) - { - yeid_un.Exide = receive_message.ExtId; - ul_exid = yeid_un.Exide << 3; - ul_exid &= ul_can_mask; - if(yeid_un.yecanid.SegFlag == 00) - { - memcpy(canrx_st.rx_databuf,receive_message.Data,receive_message.DLC); - canrx_st.rx_index = receive_message.DLC; - g_self.end_irq(g_self.t,canrx_st.rx_index); - } - else if(yeid_un.yecanid.SegFlag == 0x01) - { - canrx_st.seg_num = 0; - memcpy(canrx_st.rx_databuf,receive_message.Data,receive_message.DLC); - canrx_st.rx_index = receive_message.DLC; - }else if(yeid_un.yecanid.SegFlag == 0x02) - { - if((canrx_st.seg_num+1) == yeid_un.yecanid.SegNum ) - { - canrx_st.seg_num++; - memcpy(canrx_st.rx_databuf+canrx_st.rx_index,receive_message.Data,receive_message.DLC); - canrx_st.rx_index += receive_message.DLC; - - }else{ - //error - } - }else if(yeid_un.yecanid.SegFlag == 0x03) - { - memcpy(canrx_st.rx_databuf+canrx_st.rx_index,receive_message.Data,receive_message.DLC); - canrx_st.rx_index += receive_message.DLC; - g_self.end_irq(g_self.t,canrx_st.rx_index); - } - } -} - - - -void USB_LP_CAN1_RX0_IRQHandler(void) -{ - rt_interrupt_enter(); - CAN_Receive(CAN1, CAN_FIFO0, &receive_message); - if(g_self.end_irq&&canrx_st.rx_databuf){ - save_data(); - } - CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0); - rt_interrupt_leave(); -} - - - - - - -static int init(uart_def *u,int bsp) -{ - YeCanInit(); - return 0; -} -static int deinit(uart_def *u) -{ - return 0; -} -static int set_irq(uart_def *u,void (*irq)(void *t,uint8_t d),void *t) -{ - return 0; -} -static int set_end_irq(uart_def *u,uint8_t *rx_buff,int rx_buff_size, - void (*irq)(void *t,uint32_t len),void *t) -{ - irq_disable(); - g_self.end_irq=irq; - canrx_st.rx_databuf=rx_buff; - g_self.rx_buff_size=rx_buff_size; - g_self.t=t; - irq_enable(); - return 0; -} -static int read(uart_def *u,uint8_t *b,int len) -{ - return 0; -} -static int write(uart_def *u,const uint8_t *b,int len) -{ - uint8_t src=b[4]; - uint8_t dst=b[5]; - uint8_t ret; - ret=YeCan_SendFrame(src,dst,b,len); - if(ret==0) return len; - else return 0; -} - -uart_init_export(can,init,deinit,set_irq,set_end_irq,read,write,0) - - - - -typedef struct{ - uart_def *dev[2]; - int dev_index; - int inited; - void (*end_irq)(void *t,uint32_t len); - void *t; -}h_self_def; - -static h_self_def g_hself; - -static int h_init(uart_def *u,int bsp) -{ - h_self_def *h=&g_hself; - if(h->inited) return 0; - h->dev[0]=dev_get("uart1"); - h->dev[1]=dev_get("can"); - h->dev[0]->init(h->dev[0],0); - h->dev[1]->init(h->dev[1],0); - return 0; -} - -static int h_deinit(uart_def *u) -{ - return 0; -} - - -static int h_set_irq(uart_def *u,void (*irq)(void *t,uint8_t d),void *t) -{ - return 0; -} -static void h_end_irq0(void *t,uint32_t len) -{ - h_self_def *h=&g_hself; - h->dev_index=0; - if(h->end_irq) - { - h->end_irq(h->t,len); - } -} -static void h_end_irq1(void *t,uint32_t len) -{ - h_self_def *h=&g_hself; - h->dev_index=1; - if(h->end_irq) - { - h->end_irq(h->t,len); - } -} -static int h_set_end_irq(uart_def *u,uint8_t *rx_buff,int rx_buff_size, - void (*irq)(void *t,uint32_t len),void *t) -{ - h_self_def *h=&g_hself; - irq_disable(); - h->end_irq=irq; - h->t=t; - irq_enable(); - h->dev[0]->set_end_irq(h->dev[0],rx_buff,rx_buff_size,h_end_irq0,h); - h->dev[1]->set_end_irq(h->dev[1],rx_buff,rx_buff_size,h_end_irq1,h); - return 0; -} -static int h_read(uart_def *u,uint8_t *b,int len) -{ - return 0; -} -static int h_write(uart_def *u,const uint8_t *b,int len) -{ - h_self_def *h=&g_hself; - uart_def *s=h->dev[h->dev_index]; - return s->write(s,b,len); -} - - -uart_init_export(host,h_init,h_deinit,h_set_irq,h_set_end_irq,h_read,h_write,0) - - - - diff --git a/source/interface/if_can.h b/source/interface/if_can.h deleted file mode 100644 index eab95da..0000000 --- a/source/interface/if_can.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef if_can_h__ -#define if_can_h__ - -//#include "define.h" -#include "stm32f10x_can.h" - -typedef struct{ - uint32_t Reserve1 :3; - uint32_t srcMACID :5; - uint32_t Reserve0 :2; - uint32_t destMACID :5; - uint32_t ACK :1; - uint32_t FunClass :6; - uint32_t SegFlag :2; - uint32_t SegNum :8; - -}YeCanID_st; - -typedef union{ - uint32_t Exide; - YeCanID_st yecanid; -}YeCanID_un; - - - -typedef struct{ - - uint8_t *rx_databuf; //接收数据缓存 - uint8_t seg_num; //分段号 - uint8_t seg_flag;//分段标志 - uint16_t rx_index;//接收缓存下标 -}YeCanRxFrame_st; - -extern volatile uint8_t CAN0_TX_BUSY_Flag; - -/* -@brief CAN通讯初始化, 包括CANgpio 过滤器 -*/ -void YeCanInit(void); -/* -@brief CAN发送通讯帧 -@param 源地址 -@param 主机地址 -@param 发送数据缓存 -@param 发送数据长度 -@rtv 0 成功 1 失败 -*/ -uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, uint16_t len); - -#endif diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index 254cf00..c1b5fc1 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-10-06 18:40:44" +#define BUILD_DATE "2023-09-20 17:48:39" #define SOFT_VERSION "0.03" diff --git a/source/main/main.c b/source/main/main.c index 72d8d64..7535abc 100644 --- a/source/main/main.c +++ b/source/main/main.c @@ -12,6 +12,7 @@ #include "signal.h" #include "prot_mcu.h" #include "debug.h" +#include "handle.h" #include "prot_uc.h" #include "transmit.h" #include "commend.h" @@ -19,6 +20,7 @@ #include "mymisc.h" #include "dev_backup.h" #include "compiler_info.h" +#include "moter.h" @@ -119,9 +121,70 @@ commend_export(scheme,scheme_info,"print scheme info") +typedef struct{ + int updata_run; +}updata_def; +static updata_def g_updata; +static int updata_slave(list_def *argv) +{ + void *ptr=flash_get_slave(); + tran_def *tran=app_variable("tran",0,0); + uint8_t *data=ptr; + data+=FLASH_FILE_HEAD_SIZE; + flash_file *file=ptr; + if(tran==0){ + DBG_WARN("can not find variable \"tran\""); + return -1; + } + if(list_length(argv)<2){ + cmd_print("param num too less."); + return -1; + } + list_def *addrs=str_atod_list(list_get_str(argv,1),','); + for(int i=0;ifile_size)); + g_updata.updata_run++; + } + } + cmd_print("start updata,addr=%s",str_temp(list_string(addrs))); + return 0; +} + +static void cmd_end_slot(void *obj,port_mcu *src,void *data,int ack,char *err_str) +{ + updata_def *self=obj; + if(self->updata_run>0) + { + cmd_print("addr:%d %s",port_get_addr(src),err_str); + self->updata_run--; + } +} +// 挂载命令行槽函数 +static int cmd_slot_init(void) +{ + void *tr=app_variable("tran",0,0); + if(tr){ + for(int i=0;i<20;i++){ + port_mcu *mcu=tran_get_portm(tr,i); + // 连接操作结束信号 + if(mcu) + connect(mcu,port_end_signal,0,&g_updata,cmd_end_slot); + } + } + else{ + app_valid_call("tran",(void (*)(void *))cmd_slot_init,0); + } + return 0; +} +app_init_export(cmd_slot_init); +commend_export(updatas,updata_slave,"updata slave") @@ -156,6 +219,23 @@ commend_export(reboot,reboot,"reboot mcu") +static int moter(list_def *argv) +{ + const sys_param_def *par=sys_param(); + cmd_print("moter ctl"); + if(list_length(argv)<3){ + cmd_print("param num too less."); + return -1; + } + int fre=str_atoi(list_get_str(argv,1)); + int count=str_atoi(list_get_str(argv,2)); + moter_start(fre,count); + cmd_print("moter start,fre=%d,count=%d",fre,count); + return 0; +} + + +commend_export(moter,moter,"control moter up or down|use:moter [frequency] [count]") diff --git a/source/mycopy.py b/source/mycopy.py index 5f27f73..aafbdae 100644 --- a/source/mycopy.py +++ b/source/mycopy.py @@ -6,15 +6,15 @@ import prebuild as time # 定义app和boot文件路径(没有尾缀) -APP_FILE_SRC = "./Objects/app/checker_slave_app" -BOOT_FILE_SRC = "./Objects/boot/checker_slave_boot" -# APP_FILE_DST = "./Objects/checker_slave_app" -APP_FILE_DST = "./python/file/checker_slave_app" -BOOT_FILE_DST = "./Objects/checker_slave_boot" +APP_FILE_SRC = "./Objects/app/coder_2channel_app" +BOOT_FILE_SRC = "./Objects/boot/coder_2channel_boot" +# APP_FILE_DST = "./Objects/coder_2channel_app" +APP_FILE_DST = "./python/file/coder_2channel_app" +BOOT_FILE_DST = "./Objects/coder_2channel_boot" # 定义app和boot的数据库目录 -SQL_APP_PATH = "checker_slave_app" -SQL_BOOT_PATH = "checker_slave_boot" +SQL_APP_PATH = "coder_stm32f1_app" +SQL_BOOT_PATH = "coder_stm32f1_boot" diff --git a/source/rt_thread/board.c b/source/rt_thread/board.c index c112833..fc81678 100644 --- a/source/rt_thread/board.c +++ b/source/rt_thread/board.c @@ -36,7 +36,7 @@ static uint32_t _SysTick_Config(rt_uint32_t ticks) } #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) -static uint32_t g_heap[10*1024/4]; +static uint32_t g_heap[20*1024/4]; RT_WEAK void *rt_heap_begin_get(void) { return (void *)g_heap; diff --git a/source/soft/mystdlib.c b/source/soft/mystdlib.c index 6224d60..b832bdb 100644 --- a/source/soft/mystdlib.c +++ b/source/soft/mystdlib.c @@ -22,7 +22,7 @@ typedef struct -#define SRAM_USER_SIZE (9*1024) +#define SRAM_USER_SIZE (18*1024) #define MEM_BLOCK_SIZE (32) #define MEM_MAX_SIZE (((SRAM_USER_SIZE))*MEM_BLOCK_SIZE/(MEM_BLOCK_SIZE+2)) #define MEM_ALLOC_TABLE_SIZE ((MEM_MAX_SIZE/MEM_BLOCK_SIZE)&(~3)) diff --git a/source/task/history/handle.c b/source/task/handle.c similarity index 100% rename from source/task/history/handle.c rename to source/task/handle.c diff --git a/source/task/history/handle.h b/source/task/handle.h similarity index 100% rename from source/task/history/handle.h rename to source/task/handle.h diff --git a/source/task/history/handle_for_checker.c b/source/task/handle_for_checker.c similarity index 100% rename from source/task/history/handle_for_checker.c rename to source/task/handle_for_checker.c diff --git a/source/task/history/handle_for_checker.h b/source/task/handle_for_checker.h similarity index 100% rename from source/task/history/handle_for_checker.h rename to source/task/handle_for_checker.h diff --git a/source/task/history/handle_for_coder.c b/source/task/handle_for_coder.c similarity index 100% rename from source/task/history/handle_for_coder.c rename to source/task/handle_for_coder.c diff --git a/source/task/history/handle_for_coder.h b/source/task/handle_for_coder.h similarity index 100% rename from source/task/history/handle_for_coder.h rename to source/task/handle_for_coder.h diff --git a/source/task/history/prot_mcu.c b/source/task/history/prot_mcu.c new file mode 100644 index 0000000..e9242d7 --- /dev/null +++ b/source/task/history/prot_mcu.c @@ -0,0 +1,470 @@ +#include "stdio.h" +#include "rtthread.h" +#include "board.h" +#include "mystdlib.h" +#include "list.h" +#include "mystring.h" +#include "signal.h" +#include "prot_mcu.h" +#include "buff.h" +#include "bytearray.h" +#include "debug.h" +#include "crc.h" + + + +typedef struct{ + uint16_t no; + list_def *cmds;//int + uint8_t addr; + uint8_t cmd; + array_def *data; + int retry; + int timeout_ms; +}protm_slave; + + + +static int protm_slave_sub(void *a,void *b) +{ + protm_slave *a_=a; + protm_slave *b_=b; + return a_->addr-b_->addr; +} + +static int protm_slave_del(void *t) +{ + protm_slave *p=t; + CHECK_DO(p->cmds,list_delete); + return 0; +} + + +static protm_slave *protm_slave_creat(void) +{ + protm_slave *p=calloc(1,sizeof(protm_slave)); + param_check(p); + return p; +} + + + + + + + +array_def *protm_decode(protm_def *p,array_def *data); +protm_slave *protm_get_slave(protm_def *p,uint8_t addr); + + + +typedef struct{ + array_def *data; + int addr; +}send_data_def; + + +// 定义事件 +#define EVENT_RECV 0x1 +#define EVENT_SEND 0x2 +#define EVENT_TIMEOUT 0x4 + + + +struct _protm_def{ + uart_def *uart; + array_def *buff; + int num_to_recv; + rt_event_t event; + rt_timer_t timer; + int run; + char *str_err; + list_def *slaves;//protm_slave + list_def *slaves_addr;//int + list_def *send_data;//send_data_def + int in_send;//在发送状态时为1 + uint8_t recv_cmd; + uint8_t recv_src; + +}; + + + + + +static void recv_irq(void *t,uint8_t d) +{ + protm_def *p=t; + arr_append(p->buff,d); + switch(arr_length(p->buff)){ + case 2: + if(arr_get(p->buff,0)=='Y'&&arr_get(p->buff,1)=='e') + { + p->num_to_recv=4; + }else{ + arr_remove(p->buff,0,1); + p->num_to_recv=0; + } + break; + case 4: + { + int len=arr_get(p->buff,2)|(arr_get(p->buff,3)<<8); + p->num_to_recv=len; + } + break; + default: + break; + } + // 此时一帧数据已完成 + if(p->num_to_recv>0&&p->num_to_recv==arr_length(p->buff)) + { + rt_event_send(p->event,EVENT_RECV); + } +} + + + +/* +* 与从机通信的串口是串行的,一个通信事务完成之后才能开始下一个通信 +* 协议层接收的通信事务是并行的,应用层来的通信任务会被放入队列 +*/ + +static void protm_send_next(void *t); +int protm_send(protm_def *p,send_data_def *d); +static void protm_send_timeout(void *t); +static void protm_run(void *t) +{ + protm_def *p=t; + array_def *data; + array_def *decode_data; + uint32_t ev; + while(p->run) + { + rt_event_recv(p->event,0xffffffff,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,RT_WAITING_FOREVER,&ev); + if(ev&EVENT_RECV) + { + // DBG_LOG("protmcu:recv event."); + data=arr_duplicate(p->buff); + arr_clear(p->buff); + //DBG_LOG("recv:%s",str_temp(arr_string(data))); + decode_data=protm_decode(p,data); + arr_delete(data); + emit protm_recv_signal(p,p->recv_src,p->recv_cmd,arr_temp(decode_data),str_temp(str_duplicate(p->str_err))); + irq_disable(); + p->num_to_recv=0; + irq_enable(); + protm_send_next(p); + } + else if(ev&EVENT_TIMEOUT) + { + protm_send_timeout(p); + } + if (ev&EVENT_SEND) + { + // DBG_LOG("protmcu:send event."); + if(list_length(p->send_data)>0) + { + send_data_def *a=(send_data_def *)list_get(p->send_data,0); + protm_send(p,a); + } + } + ev=0; + } +} + + +// 发送下一个 +static void protm_send_next(void *t) +{ + protm_def *p=t; + rt_timer_stop(p->timer); + list_remove(p->send_data,0); + // 如果发送列表中有数据,此时发送 + if (list_length(p->send_data)>0) + { + // DBG_LOG("protmcu:EVENT_SEND."); + rt_event_send(p->event,EVENT_SEND); + } + else{ + irq_disable(); + p->in_send=0; + irq_enable(); + } +} + + +static void protm_send_timeout_cb(void *t) +{ + protm_def *p=t; + rt_event_send(p->event,EVENT_TIMEOUT); +} + +// 接收超时 +static void protm_send_timeout(void *t) +{ + protm_def *p=t; + send_data_def *s=list_get(p->send_data,0); + protm_slave *sl=protm_get_slave(p,s->addr); + if(sl->retry>0){ + sl->retry--; + DBG_WARN("slave:%d retry left ",s->addr,sl->retry); + list_shift(p->send_data); + }else{ + DBG_WARN("slave:%d retry timeout,remove the send data.",s->addr); + list_remove(p->send_data,0); + } + // 如果发送列表中有数据,此时发送 + if (list_length(p->send_data)>0) + { + // DBG_LOG("protmcu:EVENT_SEND."); + rt_event_send(p->event,EVENT_SEND); + } + else{ + irq_disable(); + p->in_send=0; + irq_enable(); + } +} + + + + + +// 发送队列删除条目 +static int _list_send_data_del(void *t) +{ + send_data_def *a=t; + arr_delete(a->data); + return 0; +} + + +protm_def *protm_creat(uart_def *uart,int *addrs,int num) +{ + static int count=0; + char name[20]={0}; + protm_def *p=calloc(1,sizeof(protm_def)); + param_check(p); + p->uart=uart; + sprintf(name,"protm_event#%d",count); + p->event=rt_event_create(name,RT_IPC_FLAG_FIFO); + p->buff=arr_creat(); + p->run=1; + p->slaves=list_creat(sizeof(protm_slave),protm_slave_sub,protm_slave_del,0); + p->slaves_addr=list_creat_int(); + p->send_data=list_creat(sizeof(send_data_def),0,_list_send_data_del,0); + // 创建超时定时器,超过指定时间则不再等待从机返回 + p->timer=rt_timer_create("port_timer",protm_send_timeout_cb,p, + rt_tick_from_millisecond(55), + RT_TIMER_FLAG_ONE_SHOT|RT_TIMER_FLAG_SOFT_TIMER); + list_appends(p->slaves_addr,addrs,num); + sprintf(name,"protm_t#%d",count); + rt_thread_t rt_t=rt_thread_create(name,protm_run,p,512,5,20); + rt_thread_startup(rt_t); + p->uart->init(p->uart); + p->uart->set_irq(p->uart,recv_irq,p); + + count++; + return p; +} + + +// 得到指定地址的从机,找不到则添加 +protm_slave *protm_get_slave(protm_def *p,uint8_t addr) +{ + protm_slave *r=0; + for(int i=0;islaves);i++) + { + r=list_get(p->slaves,i); + if(r->addr==addr) + return r; + } + r=protm_slave_creat(); + r->addr=addr; + r->cmds=list_creat_int(); + r->no=0; + list_append(p->slaves,r); + free(r); + return list_get(p->slaves,-1); +} + + + +// 设置所有从机流水号 +void protm_set_no_all(protm_def *p,uint16_t no,list_def *cmd/*int*/) +{ + for(int i=0;islaves);i++) + { + protm_slave *s=list_get(p->slaves,i); + s->no=no; + list_clear(s->cmds); + list_append_from(s->cmds,cmd); + } +} + + +// 设置单个从机流水号 +void protm_set_no(protm_def *p,uint8_t addr,uint16_t no,list_def *cmd/*int*/) +{ + protm_slave *s=protm_get_slave(p,addr); + s->no=no; + list_clear(s->cmds); + list_append_from(s->cmds,cmd); +} + + + + + +// 解码 +array_def *protm_decode(protm_def *p,array_def *data) +{ + array_def *r=arr_creat(); + param_check(r); + str_set(p->str_err,"ok"); + if(arr_length(data)<10) + { + DBG_WARN("recv data len too less."); + str_set(p->str_err,"recv data len too less."); + return r; + } + uint8_t src=arr_get(data,4); + p->recv_src=src; + uint16_t len=arr_get(data,2)|(arr_get(data,3)<<8); + uint8_t crc=crc_crc8(arr_data(data),arr_length(data)-1); + if(len!=arr_length(data)) + { + // 如果长度不相等则产生了数据丢失 + DBG_WARN("recv data have lossed."); + str_set(p->str_err,"recv data have lossed."); + return r; + } + uint16_t no=arr_get(data,7)|(arr_get(data,8)<<8); + uint16_t h_no=protm_get_slave(p,src)->no; + if(no!=h_no) + { + // 发送一条指令等待其返回,此时流水号应相同 + //DBG_WARN("slave_addr=%d cmd_no error:h_no=%d,no=%d.",src,h_no,no); + //str_set(p->str_err,"cmd no err."); + //return r; + } + if(crc!=arr_get(data,-1)) + { + DBG_WARN("recv data crc check error:%02x,%02x.",crc,arr_get(data,-1)); + str_set(p->str_err,"crc check err."); + } + p->recv_cmd=arr_get(data,6); + list_def *cmds=protm_get_slave(p,src)->cmds; + if(list_contains(cmds,(int []){p->recv_cmd})==0){ + // 命令号校验不对 + DBG_WARN("cmd check err.cmds=%s,recv_cmd=%d",tappend(list_string(cmds),0),p->recv_cmd); + str_set(p->str_err,"cmd check err."); + } + arr_delete(r); + return arr_mid(data,9,len-10); +} + + +// 编码 +array_def *protm_encode(protm_def *p,uint8_t dst,uint8_t cmd,list_def *comp_cmd/*int*/,array_def *data) +{ + array_def *t=arr_creat(); + param_check(t); + uint16_t len=arr_length(data)+10; + protm_slave *slave=protm_get_slave(p,dst); + slave->no++; + protm_set_no(p,dst,slave->no,comp_cmd); + arr_append(t,'Y'); + arr_append(t,'e'); + arr_append(t,len&0xff); + arr_append(t,len>>8); + arr_append(t,0);// 源地址 + arr_append(t,dst);// 目标地址 + arr_append(t,cmd);// 命令码 + arr_append(t,slave->no&0xff); + arr_append(t,slave->no>>8); + arr_appends_from(t,data); + arr_append(t,crc_crc8(arr_data(t),arr_length(t))); + return t; +} + +// 发送数据,发送前先开启超时定时器 +int protm_send(protm_def *p,send_data_def *d) +{ + rt_tick_t tick=0; + protm_slave *s=protm_get_slave(p,d->addr); + //DBG_LOG("send:%s",str_temp(arr_string(d->data))); + tick=rt_tick_from_millisecond(s->timeout_ms); + rt_timer_control(p->timer,RT_TIMER_CTRL_SET_TIME,&tick); + rt_timer_start(p->timer); + if(d->data==0) + { + DBG_WARN("addr=%d,d->data=0",d->addr); + return 0; + } + return p->uart->write(p->uart,arr_data(d->data),arr_length(d->data)); +} + + +//// 槽函数,发送数据到指定地址 +//void protm_send_call(protm_def *p,list_def *addrs/*int*/,uint8_t cmd,list_def *comp_cmd/*int*/,array_def *data) +//{ +// param_check(p); +// for(int i=0;islaves_addr,(int []){dst})==1) +// { +// array_def *t=0; +// t=protm_encode(p,dst,cmd,comp_cmd,data); +// protm_send(p,t); +// arr_delete(t); +// } +// } +//} + + + +// 槽函数,发送数据到指定地址 +void protm_send_call(protm_def *p,uint8_t addr,uint8_t cmd,list_def *comp_cmd/*int*/,array_def *data,int timeout_ms,int retry) +{ + param_check(p); + if(list_contains(p->slaves_addr,(int []){addr})==1) + { + array_def *t=0; + t=protm_encode(p,addr,cmd,comp_cmd,data); + //protm_send(p,t); + //arr_delete(t); + // 添加到发送队列,发送必须等到回应或超时才能发送下一个 + DBG_LOG("send to:%d",addr); + send_data_def sd={0}; + sd.addr=addr;sd.data=t; + protm_slave *s=protm_get_slave(p,addr); + s->retry=retry; + s->timeout_ms=timeout_ms; + list_append(p->send_data,&sd); + if(p->in_send==0){ + irq_disable(); + p->in_send=1; + irq_enable(); + //DBG_LOG("send call"); + rt_event_send(p->event,EVENT_SEND); + } + } +} + + + + +// 返回1表示此地址可以发送到这个端口 +int protm_contains(protm_def *p,uint8_t addr) +{ + param_check(p); + return list_contains(p->slaves_addr,(int []){addr}); +} + + + + + + diff --git a/source/task/history/input.c b/source/task/input.c similarity index 100% rename from source/task/history/input.c rename to source/task/input.c diff --git a/source/task/history/input.h b/source/task/input.h similarity index 100% rename from source/task/history/input.h rename to source/task/input.h diff --git a/source/task/history/log.c b/source/task/log.c similarity index 100% rename from source/task/history/log.c rename to source/task/log.c diff --git a/source/task/history/log.h b/source/task/log.h similarity index 100% rename from source/task/history/log.h rename to source/task/log.h diff --git a/source/task/mod_signals.c b/source/task/mod_signals.c index c582cdf..bcbd205 100644 --- a/source/task/mod_signals.c +++ b/source/task/mod_signals.c @@ -1,11 +1,22 @@ #include "stdlib.h" #include "signal.h" #include "commend.h" +#include "handle.h" +#include "handle_for_checker.h" +#include "handle_for_coder.h" +#include "input.h" +#include "log.h" +#include "moter.h" +#include "process.h" #include "prot_mcu.h" #include "prot_uc.h" +#include "tcp.h" #include "transmit.h" +#include "tran_for_checker.h" +#include "tran_for_coder.h" +#include "tran_for_coder2.h" #include "tran_for_coder2ch.h" -#include "tran_for_slave.h" +#include "udp.h" @@ -23,6 +34,53 @@ signal_export(cmd_reply_signal); +void port_send_signal(port_mcu *obj,uint8_t addr,uint8_t cmd,list_def *comp_cmd,array_def *data,int timeout_ms,int retry) +{ + uint32_t param[6]; + param[0]=(uint32_t)addr; + param[1]=(uint32_t)cmd; + param[2]=(uint32_t)comp_cmd; + param[3]=(uint32_t)data; + param[4]=(uint32_t)timeout_ms; + param[5]=(uint32_t)retry; + _signal_emit(obj,port_send_signal,param,6); +} +signal_export(port_send_signal); + + + +void port_end_signal(port_mcu *obj,port_mcu *src,void *data,int ack,char *err_str) +{ + uint32_t param[4]; + param[0]=(uint32_t)src; + param[1]=(uint32_t)data; + param[2]=(uint32_t)ack; + param[3]=(uint32_t)err_str; + _signal_emit(obj,port_end_signal,param,4); +} +signal_export(port_end_signal); + + + +void moter_end_signal(void *m) +{ + _signal_emit(m,moter_end_signal,0,0); +} +signal_export(moter_end_signal); + + + +void process_send_signal(void *obj,uint8_t cmd,array_def *data) +{ + uint32_t param[2]; + param[0]=(uint32_t)cmd; + param[1]=(uint32_t)data; + _signal_emit(obj,process_send_signal,param,2); +} +signal_export(process_send_signal); + + + void protm_recv_signal(void *obj,uint8_t src,uint8_t cmd,array_def *data,char *err_str) { uint32_t param[4]; @@ -49,6 +107,24 @@ signal_export(protu_recv_signal); +void tcp_connect_signal(void *obj) +{ + _signal_emit(obj,tcp_connect_signal,0,0); +} +signal_export(tcp_connect_signal); + + + +void tcp_recv_signal(void *obj,array_def *data) +{ + uint32_t param[1]; + param[0]=(uint32_t)data; + _signal_emit(obj,tcp_recv_signal,param,1); +} +signal_export(tcp_recv_signal); + + + void tran_reply_signal(tran_def *p,array_def *data) { uint32_t param[1]; @@ -70,6 +146,28 @@ signal_export(tran_send_signal); +void coder_live_send_signal(void *obj,uint8_t cmd,array_def *data) +{ + uint32_t param[2]; + param[0]=(uint32_t)cmd; + param[1]=(uint32_t)data; + _signal_emit(obj,coder_live_send_signal,param,2); +} +signal_export(coder_live_send_signal); + + + +void coder2_live_send_signal(void *obj,uint8_t cmd,array_def *data) +{ + uint32_t param[2]; + param[0]=(uint32_t)cmd; + param[1]=(uint32_t)data; + _signal_emit(obj,coder2_live_send_signal,param,2); +} +signal_export(coder2_live_send_signal); + + + void code2_end_signal(void *obj,int ack,array_def *data) { uint32_t param[2]; @@ -89,3 +187,16 @@ signal_export(code2_start_signal); +void udp_recv_signal(void *obj,const char *codec_name,uint8_t cmd,array_def *data,char *err_str) +{ + uint32_t param[4]; + param[0]=(uint32_t)codec_name; + param[1]=(uint32_t)cmd; + param[2]=(uint32_t)data; + param[3]=(uint32_t)err_str; + _signal_emit(obj,udp_recv_signal,param,4); +} +signal_export(udp_recv_signal); + + + diff --git a/source/task/history/moter.c b/source/task/moter.c similarity index 100% rename from source/task/history/moter.c rename to source/task/moter.c diff --git a/source/task/history/moter.h b/source/task/moter.h similarity index 100% rename from source/task/history/moter.h rename to source/task/moter.h diff --git a/source/task/history/process.c b/source/task/process.c similarity index 100% rename from source/task/history/process.c rename to source/task/process.c diff --git a/source/task/history/process.h b/source/task/process.h similarity index 100% rename from source/task/history/process.h rename to source/task/process.h diff --git a/source/task/history/tcp.c b/source/task/tcp.c similarity index 100% rename from source/task/history/tcp.c rename to source/task/tcp.c diff --git a/source/task/history/tcp.h b/source/task/tcp.h similarity index 100% rename from source/task/history/tcp.h rename to source/task/tcp.h diff --git a/source/task/history/tran_for_checker.c b/source/task/tran_for_checker.c similarity index 100% rename from source/task/history/tran_for_checker.c rename to source/task/tran_for_checker.c diff --git a/source/task/history/tran_for_checker.h b/source/task/tran_for_checker.h similarity index 100% rename from source/task/history/tran_for_checker.h rename to source/task/tran_for_checker.h diff --git a/source/task/history/tran_for_coder.c b/source/task/tran_for_coder.c similarity index 100% rename from source/task/history/tran_for_coder.c rename to source/task/tran_for_coder.c diff --git a/source/task/history/tran_for_coder.h b/source/task/tran_for_coder.h similarity index 100% rename from source/task/history/tran_for_coder.h rename to source/task/tran_for_coder.h diff --git a/source/task/history/tran_for_coder2.c b/source/task/tran_for_coder2.c similarity index 100% rename from source/task/history/tran_for_coder2.c rename to source/task/tran_for_coder2.c diff --git a/source/task/history/tran_for_coder2.h b/source/task/tran_for_coder2.h similarity index 100% rename from source/task/history/tran_for_coder2.h rename to source/task/tran_for_coder2.h diff --git a/source/task/tran_for_coder2ch.c b/source/task/tran_for_coder2ch.c index fc23aac..8ca45a4 100644 --- a/source/task/tran_for_coder2ch.c +++ b/source/task/tran_for_coder2ch.c @@ -1,16 +1,20 @@ +#include "tran_for_coder2.h" #include "tran_for_coder2ch.h" #include "debug.h" #include "mymisc.h" #include "mystdlib.h" #include "board.h" #include "dev_flash.h" +#include "tcp.h" #include "prot_uc.h" +#include "handle_for_coder.h" +#include "handle_for_checker.h" #include "coder_lib.h" #include "JQ_PSDGenerate.h" #include "mystring.h" #include "coder_judge.h" #include "JQ_UIDGenerate.h" -#include "transmit.h" + @@ -150,10 +154,10 @@ static uint32_t in_range_err(const uint8_t *src_data,const uint8_t *errbit) // 注码完成 -static void write_uid_end(ucport_def *u,void *src,void *data,int ack,char *err_str) +static void write_uid_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_str) { write_uid_def *w=(write_uid_def *)u; - uint8_t addr=0; + uint8_t addr=port_get_addr(src); if(addr<=0||addr>w->addrs_num){ DBG_WARN("addr err:%d",addr); return; @@ -259,14 +263,17 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data) u->ack[i*38+0]=i+slave_addr_off(); u->ack[i*38+1]=1; if(1){ - if(check_shell_code(u->item[i].shell_code)){ - // 开始注码 - //port_start(mcu,code2_creat(8,4,u->item[i].uid_pw_hex)); - }else{ - // 管壳码无效,不注码,此时默认已ack - // 管壳码无效不视为失败 - ret=0; - write_uid_fillret(u,i+1,0xff); + port_mcu *mcu=tran_get_portm(u->u.p,i); + // 这里打开赋码操作 + if(mcu){ + if(check_shell_code(u->item[i].shell_code)){ + port_start(mcu,code2_creat(8,4,u->item[i].uid_pw_hex)); + }else{ + // 管壳码无效,不注码,此时默认已ack + // 管壳码无效不视为失败 + ret=0; + write_uid_fillret(u,i+1,0xff); + } } } @@ -309,6 +316,89 @@ transmit_export(ym_checker,0x02,write_uid) +typedef struct{ + rt_timer_t timer; + void *protu; +}live_keeper_def; + + +static void live_start(live_keeper_def *t) +{ + rt_tick_t tick=0; + tick=rt_tick_from_millisecond(1000); + rt_timer_control(t->timer,RT_TIMER_CTRL_SET_TIME,&tick); + rt_timer_start(t->timer); +} +static void live_recv(live_keeper_def *t) +{ + rt_tick_t tick=0; + tick=rt_tick_from_millisecond(5000); + rt_timer_control(t->timer,RT_TIMER_CTRL_SET_TIME,&tick); + rt_timer_start(t->timer); + //rt_timer_stop(t->timer); +} + + +// cmd=0x8a +static void live_send(void *p) +{ + live_keeper_def *live=p; + const sys_param_def *par=sys_param(); + tran_def *t=app_variable("tran",0,0); + uint16_t slave_online=0; + if(t){ + slave_online=tran_get_slave_online(t); + } + //protu_codec_set(live->protu,protu_find_codec("ym_checker")); + + array_def *d=arr_creat(); + arr_append(d,coder_extract_chip(0));// 模块类型 + arr_append(d,0xff); + arr_append(d,0x03); + arr_append(d,par->local_id&0xff); + arr_append(d,slave_online&0xff);// 在线的小板 + arr_append(d,(slave_online>>8)&0xff); + emit coder2_live_send_signal(p,0x8a,arr_temp(d)); + //DBG_LOG("send liver data."); + +} + + +static void init_for_coder2ch(void *t) +{ + void *protu=app_variable("protu",0,0); + if(protu){ + live_keeper_def *live=calloc(1,sizeof(live_keeper_def)); + live->protu=protu; + live->timer=rt_timer_create("live_t",live_send,live, + rt_tick_from_millisecond(1000), + RT_TIMER_FLAG_PERIODIC|RT_TIMER_FLAG_SOFT_TIMER); + protu_codec_set(protu,protu_find_codec("ym_checker")); + connect(protu,protu_recv_signal,0,live,live_recv); + connect(live,coder2_live_send_signal,0,protu,protu_send_call); + DBG_LOG("coder2ch liver created"); + live_start(live); + }else{ + DBG_WARN("can not fond variable \"protu\""); + } +} + + + + +// 如果本机为赋码仪并且连接类型为tcp +// 初始化心跳 +static int init_live_keeper(void) +{ + const sys_param_def *par=sys_param(); + app_valid_call("protu",init_for_coder2ch,0); + return 0; +} +app_init_export(init_live_keeper); + + + + diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c deleted file mode 100644 index 86c5f9f..0000000 --- a/source/task/tran_for_slave.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "tran_for_slave.h" -#include "debug.h" -#include "mymisc.h" -#include "mystdlib.h" -#include "board.h" -#include "dev_flash.h" -#include "prot_uc.h" -#include "coder_lib.h" -#include "JQ_PSDGenerate.h" -#include "mystring.h" -#include "coder_judge.h" -#include "JQ_UIDGenerate.h" -#include "transmit.h" - - - - - - - - - - - - - - - - - - - - - diff --git a/source/task/tran_for_slave.h b/source/task/tran_for_slave.h deleted file mode 100644 index 7685ae5..0000000 --- a/source/task/tran_for_slave.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef tran_for_slave_h__ -#define tran_for_slave_h__ - - - - - - - - - - - -#endif diff --git a/source/task/transmit.c b/source/task/transmit.c index c71ddd2..7f63c19 100644 --- a/source/task/transmit.c +++ b/source/task/transmit.c @@ -20,15 +20,49 @@ +#define PORT_NUM 2 typedef struct _tran_def{ ucport_def *u; + port_mcu *port[PORT_NUM]; + uint32_t slave_online;// 对应位为1则从机在线 int is_busy; }tran_def; +// 打印从机状态 +static void tran_print_slave_stat(void *t) +{ + list_def *l=list_creat_int(); + uint32_t a=tran_get_slave_online(t); + for(int i=0;islave_online=0xfffff; app_variable("tran",tran,0); + later_execute(tran_scan_slave,tran,500); return 0; } app_init_export(tran_init); -void tran_end_slot(tran_def *obj,void *src,void *data,int ack,char *err_str); +void tran_end_slot(tran_def *obj,port_mcu *src,void *data,int ack,char *err_str); tran_def *tran_creat(sig_thread t) { tran_def *tr=calloc(1,sizeof(tran_def)); param_check(tr); + port_init(); + for(int i=0;iport[i]=port_creat(i+1,t); + // 连接操作结束信号 + connect(tr->port[i],port_end_signal,0,tr,tran_end_slot); + } return tr; } @@ -90,16 +133,33 @@ void tran_recv_slot(tran_def *t,const char *codec_name,uint8_t cmd,array_def *da } } +void tran_set_slave_online(tran_def *t,uint8_t addr,int stat) +{ + param_check(t); + uint32_t a=0; + a=1<<(addr-1); + if(stat) + t->slave_online|=a; + else{ + t->slave_online&=(~a); + //DBG_LOG("a=%08x",a); + } +} +uint32_t tran_get_slave_online(tran_def *t) +{ + param_check(t); + return t->slave_online; +} - - -void tran_end_slot(tran_def *obj,void *src,void *data,int ack,char *err_str) +void tran_end_slot(tran_def *obj,port_mcu *src,void *data,int ack,char *err_str) { //DBG_LOG("tran end slot"); param_check(obj); if(strcmp(err_str,"timeout")==0) { + tran_set_slave_online(obj,port_get_addr(src),0); }else{ + tran_set_slave_online(obj,port_get_addr(src),1); } if((obj->u)&&obj->u->doend) obj->u->doend(obj->u,src,data,ack,err_str); @@ -115,7 +175,13 @@ int tran_get_busy(tran_def *t) } - +// 获取指定通道 +port_mcu *tran_get_portm(tran_def *t,int index) +{ + if(index<0||index>=PORT_NUM) + return 0; + return t->port[index]; +} @@ -308,6 +374,13 @@ static void when_scheme_done(ucport_def *u) DBG_LOG("memused:%d",mem_perused()); rt_thread_mdelay(100); DBG_LOG("memused:%d",mem_perused()); + for(int i=0;islave_data,2048)); + } } static ucport_def *tran_scheme(tran_def *t, uint8_t cmd,array_def *data) { diff --git a/source/task/transmit.h b/source/task/transmit.h index 20a8349..10c3e1c 100644 --- a/source/task/transmit.h +++ b/source/task/transmit.h @@ -2,9 +2,9 @@ #define transmit_h__ #include "rtthread.h" +#include "handle.h" #include "signal.h" -#include "stdint.h" -#include "bytearray.h" + // 错误码定义 @@ -25,7 +25,7 @@ typedef struct _ucport_def{ tran_def *p; int (*dolater)(struct _ucport_def *u,uint8_t cmd,array_def *data,char *err_str); void (*del)(struct _ucport_def *h); - void (*doend)(struct _ucport_def *h,void *src,void *data,int ack,char *err_str); + void (*doend)(struct _ucport_def *h,port_mcu *src,void *data,int ack,char *err_str); }ucport_def; @@ -57,6 +57,8 @@ void tran_recv_slot(tran_def *t,const char *codec_name,uint8_t cmd,array_def *da void tran_set_busy(tran_def *t,int busy); int tran_get_busy(tran_def *t); +port_mcu *tran_get_portm(tran_def *t,int index); +uint32_t tran_get_slave_online(tran_def *t); signal tran_reply_signal(tran_def *p,array_def *data); diff --git a/source/task/history/udp.c b/source/task/udp.c similarity index 100% rename from source/task/history/udp.c rename to source/task/udp.c diff --git a/source/task/history/udp.h b/source/task/udp.h similarity index 100% rename from source/task/history/udp.h rename to source/task/udp.h