188 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			188 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#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		低温下扫描间隔长一点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
							 |