硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1399|回复: 0
收起左侧

[脱机烧录] USB和以太网控制TOOL烧录的协议

[复制链接]

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2022-8-9 14:39:38 | 显示全部楼层 |阅读模式
应客户要求,公开部分协议。方便客户自行开发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软件可以屏蔽多余功能,只保留烧录器功能。方法如下:
image.png

【3】H7-TOOL设备上电直接进入脱机烧录界面,其他界面禁止进入。
设置方法如下:
image.png    image.png    image.png
开机启动参数修改为: 单路烧录。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 23:10 , Processed in 0.158059 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表