Files
checker_slave/source/elec_det/driver/XTDriver.h
ranchuan cbbb2af298 解决自动更新bootloader死机的问题
软件版本2.00
解决检测任务中重试失败后不会填充返回值的bug
2023-10-16 18:53:12 +08:00

188 lines
8.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 <rtthread.h>
#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 低温下扫描间隔长一点70ms300ms一个短了电压会不够 抢反馈
#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 volatile uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur;
extern volatile 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