334 lines
9.8 KiB
C
334 lines
9.8 KiB
C
#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 cycle 周期
|
||
@param duty 总线高电平时间
|
||
@param count 脉冲个数
|
||
|
||
*/
|
||
void EW_SendTrimSquare(uint16_t cycle,uint16_t duty, uint32_t count);
|
||
/*
|
||
@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
|
||
|
||
|