Files
checker_slave/source/elec_det/driver/history/EWDriver.h

349 lines
10 KiB
C
Raw Normal View History

2023-10-31 18:12:21 +08:00
#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);
/*
@brief
@param count
@param
*/
void DMod_ReadInspect_Data(uint16_t count,uint8_t* buf);
/*
@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 32.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 ,uint32_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 01mA 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);
/*
@brief
@param addr
@param UID数据
*/
uint8_t EW_ReadUID(uint16_t addr,uint8_t* uid,uint8_t uid_len);
#endif