[STM32火锅(充电器)] 2009-05-03 22:02 我来说两句  

火锅下位机例程:通信协议(项目编号:SF006-F5-010)

火锅下位机的通信协议,是架构於GAP(General Application Protocol)协议之上。
GAP属於应用协议,跟硬件无关,所以,GAP应用在串口上也行,USB上也行,TCP/IP上也行,等等。

GAP需要定义协议头,所以,就有了转义的定义

//协议定义和转义
#define  PROTOCOL_BEGIN           0x1A    //命令行开始
#define  PROTOCOL_END              0x1D     //命令行结束
#define  PROTOCOL_RS                0x1E     //帧的继续包
#define  PROTOCOL_TEXT            0x1C     //纯文本包
#define  PROTOCOL_ESC              0x1B     //帧的转义定义
#define  PROTOCOL_ESC_BEGIN     0x11    //把0x1A 转为  0x11
#define  PROTOCOL_ESC_TEXT      0x13    //把0x1C 转为  0x13
#define  PROTOCOL_ESC_END        0x14    //把0x1D 转为  0x14
#define  PROTOCOL_ESC_RS          0x15    //把0x1E 转为  0x15
#define  PROTOCOL_ESC_DOL        0x0B    //把0x1B 转为  0x0B

GAP有几个常用的主类别

//主类别
#define  MCT_DEVICE_DETECT                   0xF0  //设备搜索
#define  MCT_COMMAND                           0xE1  //命令
#define  MCT_GET_CONFIG                        0xD2  //取得参数或配置
#define  MCT_SET_CONFIG                        0xC3  //设置参数或配置
#define  MCT_RESPONDER                         0xA5  //接收端应答
#define  MCT_SELF_INITIATION                  0x5A  //设备自检
#define  MCT_MANUAL_TEST                     0x4B  //手动测试
#define  MCT_STATUS                              0x2D  //状态
#define  MCT_RAISE_ERROR                       0x1E  //设备发生故障

GAP协议的数据结构

struct GAP_Protocol_Struct{
	u8 DAddr;                      //目标地址
	u8 SAddr;                      //源地址
	u8 MCT;                        //主类别
	u8 SCT;                        //明细类别
	u8 Status;                     //返回状态,只在返回中用。
	u8 Reservation[HEAD_RSV_SIZE]; //保留区
	u8 PCount;                     //参数区长度
	u8 Param[PARAM_SIZE];          //参数区
};
typedef struct GAP_Protocol_Struct GAP_Protocol_Typedef;