应客户要求,公开部分协议。方便客户自行开发USB HID 接口或者以太网接口的PC软件,控制烧录器。
1、USB HID设备识别:
[C] 纯文本查看 复制代码 /* Get Device's Capabilities */
HidP_GetCaps(PreparsedData, &Capabilities);
if ((Capabilities.UsagePage == 0xFF00) && (Capabilities.Usage == 0x0001))
{
WCHAR wbuf[128];
HidD_GetProductString(DevHandle, wbuf, sizeof(wbuf));
if (wcsstr(wbuf, L"H7-TOOL HID Communication"))
{
2、应用层协议为MODBUS RTU。
3、以太网包长按标准MODBUS RTU协议格式,变长。最大1024字节。
4、USB HID包长固定 1024字节,不足时后面补0即可。(注意写数据是写1025字节,首字节固定位0,有用数据从第2个单元开始)
烧录控制逻辑:
前提:用H7-TOOL的PC软件生成配置文件并下传到TOOL内部。自己记录好配置文件路径。
第1步:【06H功能码控制TOOL进入烧录界面】 Tx : 01 06 FF 7F 01 01 48 56
#define REG03_RESET_TO_BOOT 0xFF7F /* 特殊寄存器,复位进入BOOT
值含义:
#define JUMP_TO_APP 0x0001 /* 复位,重新进入APP */
#define JUMP_TO_PROGRAMMER_DO_ONCE 0x0008 /* 烧录1次 */
#define PROG_ENTER_SINGLE 0x0101 /* 进入单路烧录 */
#define PROG_ENTER_MUL_1_4 0x0102 /* 进入多路模式,1-4 */
#define PROG_ENTER_MUL_1_3 0x0103 /* 进入多路模式,1-3 */
#define PROG_ENTER_MUL_1_2 0x0104 /* 进入多路模式,1-2 */
#define PROG_ENTER_MUL_1 0x0105 /* 进入多路模式,第1路 */
#define PROG_ENTER_MUL_2 0x0106 /* 进入多路模式,第2路 */
#define PROG_ENTER_MUL_3 0x0107 /* 进入多路模式,第3路 */
#define PROG_ENTER_MUL_4 0x0108 /* 进入多路模式,第4路 *
第2步:【66H功能码修改缺省的烧录配置文件】
选择文件
主机发送: 小程序数据
01 ; 站号
66 ; 功能码
0001 ; 子功能, 3写脱机烧录启动文件。
0000 0000 : 偏移地址 4字节
0020 0000 : 数据长度 4字节
... 数据
CCCC : CRC16
从机应答:
01 ; 从机地址
66 ; 功能码
0000 ; 子功能
0000 0000 : 偏移地址 4字节
0020 0000 : 数据长度 4字节
00 ; 执行结果,0表示OK 1表示错误
CCCC : CRC16
数据字段内容范例: 0:/H7-TOOL/Programmer/User/简配/V1.8a/简配数据采集终端.lua
GB2312编码,末尾补0,不加引号
第3步【06H功能码 启动烧录1次】
寄存器 0xFF7F 写入 0x0008
Tx : 01 06 FF 7F 00 08 89 C0
第4步【03H功能码查询烧录进度】
/* 脱机烧录状态字 - 只读。 写时无动作 */
#define REG03_PROG_STATE_HEAD 0x0800 /* 总体烧录状态 0=空闲,1=烧录中,2=烧录完成 */
#define REG03_PROG_STATE_1 0x0801 /* 第1路烧录状态 0=烧录中 1=OK 2=NG */
#define REG03_PROG_STATE_2 0x0802 /* 第2路烧录状态 */
#define REG03_PROG_STATE_3 0x0803 /* 第3路烧录状态 */
#define REG03_PROG_STATE_4 0x0804 /* 第4路烧录状态 */
#define REG03_PROG_STATE_5 0x0805 /* 第5路烧录状态 */
#define REG03_PROG_STATE_6 0x0806 /* 第6路烧录状态 */
#define REG03_PROG_STATE_7 0x0807 /* 第7路烧录状态 */
#define REG03_PROG_STATE_8 0x0808 /* 第8路烧录状态 */
#define REG03_PROG_STATE_9 0x0809 /* 第9路烧录状态 */
#define REG03_PROG_STATE_10 0x080A /* 第10路烧录状态 */
#define REG03_PROG_STATE_11 0x080B /* 第11路烧录状态 */
#define REG03_PROG_STATE_12 0x080C /* 第12路烧录状态 */
#define REG03_PROG_STATE_13 0x080D /* 第13路烧录状态 */
#define REG03_PROG_STATE_14 0x080E /* 第14路烧录状态 */
#define REG03_PROG_STATE_15 0x080F /* 第15路烧录状态 */
#define REG03_PROG_STATE_16 0x0810 /* 第16路烧录状态 */
第5步:【跳到第3步】,循环烧录。
D0-D9控制逻辑:
1、配置D0-D9的方向。 用06H功能码写如下寄存器
#define REG03_D0_GPIO_MODE 0x0140 /* DO口的GPIO模式 - 0=输入,1=输出 2=其他特殊功能 */
#define REG03_D1_GPIO_MODE 0x0141
#define REG03_D2_GPIO_MODE 0x0142
#define REG03_D3_GPIO_MODE 0x0143
#define REG03_D4_GPIO_MODE 0x0144
#define REG03_D5_GPIO_MODE 0x0145
#define REG03_D6_GPIO_MODE 0x0146
#define REG03_D7_GPIO_MODE 0x0147
#define REG03_D8_GPIO_MODE 0x0148
#define REG03_D9_GPIO_MODE 0x0149
2、设置D0-D9引脚状态 ,用05H功能码写单个引脚,用10H功能码写多个引脚
#define REG01_Y01 0x0000 /* D0输出状态,0表示断开,1表示闭合 */
#define REG01_Y02 0x0001 /* D1输出状态 */
#define REG01_Y03 0x0002 /* D2输出状态 */
#define REG01_Y04 0x0003 /* D3输出状态 */
#define REG01_Y05 0x0004 /* D4输出状态 */
#define REG01_Y06 0x0005 /* D5输出状态 */
#define REG01_Y07 0x0006 /* D6输出状态 */
#define REG01_Y08 0x0007 /* D7输出状态 */
#define REG01_Y09 0x0008 /* D8输出状态 */
#define REG01_Y10 0x0009 /* D9输出状态 */
注意: 生成配置文件时,机台接口请选择禁用。
SWD数据端口占用如下口线:
D8 : SWDIO
D6 : SWCLK
D4 : RESET
其余口
D7 : 单路模式占用,做启动信号
D1 : 多路模式占用,做启动信号
可用口:D0 D2 D3 D5 D6 D9
其中D9口有10K上拉电阻。
3、读取输出引脚状态。 用01H功能码读取 0000 - 0009 寄存器值
4、读取引脚输入状态。用02H功能码读取 0000 - 0009 寄存器值
其他相关功能:
【1】TOOL也有RS232串口、RS485串口、TTL串口控制烧录器的协议:
【新提醒】为方便客户通过PC软件控制烧录器,V2.15固件已实现RS232串口协议 - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)
【2】H7-TOOL标配的PC软件可以屏蔽多余功能,只保留烧录器功能。方法如下:
【3】H7-TOOL设备上电直接进入脱机烧录界面,其他界面禁止进入。
设置方法如下:
开机启动参数修改为: 单路烧录。
|