- 前言
- TSMaster软件介绍
- 主界面
- 一、刷写Panel界面控件含义
- 二、加载配置文件方式
- 三、BootLoader刷写过程
————————————————
前言
TSMaster软件
TSMater软件介绍
它是一个媲美canoe的软件,详细介绍点击此处查看TSMaster,软件下载
好了,来看看它的刷写怎么编写吧
主界面![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ad1203c6699a0fc029b91336cb9d125b.png)
一、刷写Panel界面控件含义
1、OEM选择
主机厂选择,这个用于刷写和boot时读DID需要。
2、提示
当前操作在哪一步,会提示加载配置文件成功/失败;读取did成功/失败;刷写成功/失败;修改ID、DID成功/失败;加载刷写文件成功/失败;等。
3、配置文件
路径框,加载配置文件paramerter.txt的绝对路径,不需要自己改,下面会详细说明怎么获取配置文件路径。
4、alter
点击,窗口自动弹出paramerter.txt,去修改里面的值,然后textbox里会自动刷新修改的值。此按钮是调用windows的exe命令来操作txt。下面会详细说明怎么获取exe命令。
5、info
配置文件路径正确时,会自动加载ID、DID的值,也可以在框里改值,16进制格式;最后选择app还是boot里读取。读取的值会以ASCII格式显示在界面上,一 一对应。
6、read
点击,获取info信息,读取DID。
7、文件个数
需要刷写的文件个数。
8、下载次数
需要连续下载的次数
9、app path
需要连续刷写的次数
10、driver path
路径框,获取driver绝对路径并显示出来。
11、app path
路径框,获取app绝对路径并显示出来。
12、load
点击,出现文本框找寻刷写文件路径,然后会将路径写入paramerter.txt并显示在路径框里;此按钮是我自己做的exe(API)来操作的(TSMaster控件无路径按钮),调用windows的exe命令来操作。下面会详细说明怎么做一个exe。
13、ok
点击,进行刷写;
14、下载进度
刷写的进度条,范围:0-100;
二、加载配置文件方式
点击启动按钮后,配置文件自动加载进去,如下图。
1、获取配置文件路径思路
(1)用app.get_configuration_file_path函数获取当前工程目录,再用sprintf函数去获取配置文件路径,如下图
(2)找到cfg文件夹就可以fopen,fgets读取parameter.txt的值。parameter.txt里的值,如下图
可以清楚的看到[ID]/[DID]/[FILE],与panel的信息一一对应。
ID就不说了,用来发报文id,DID是用于获取ECU版本信息。
(3)通过程序启动事件将上面获取的值赋值给系统变量,而控件又绑定了系统变量,因此,控件显示出配置文件的值。
2、修改配置文件路径思路(控件alter)
要想直接点击button按钮就弹出txt文件,如下图效果:
代码如下图:通过app.execute_app()函数调用windows下的notepad.exe打开配置文件路径,本来想用system的,但是TSMaster已经集成这个函数了,故选择它。并且打开时,没有命令窗口,完美!
3、获取刷写文件路径思路(控件load)
要想跟canoe一样,实现用户自己查找刷写文件并把路径加载在textbox框里,就得自己做一个exe,同样用system或者app.execute_app()。
我的思路:
(1)用VS2019建一个命令c++文件,做一个exe。
(2)弹出电脑盘符窗口,VS部分代码,可以识别.s19或者.hex,看自己选择。如下图
效果如下图:
(3)刷写文件打开后,还需要将它写入配置文件中,而配置文件路径跟exe有关系,就同一个工程目录下(自己建)
VS代码写完集成exe后,exe集成在VS目录下解决方案文件下,然后把exe放到\exe\下,实在不会做exe的请去度一下。VS代码如下图
①获取当前exe文件路径
②出现选择刷写文件的窗口,选择文件
③拆掉exe,只保存当前工程路径
④拼接配置文件路径
⑤只读方式打开配置文件
⑥找到配置文件中的apppath字符串,因为要在这一行写入路径
⑦写入刷写文件路径
⑧只写方式打开配置文件
⑨写入成功后,程序自动刷新面板路径
三、BootLoader刷写过程
当界面信息确认好后,即可开始刷写。老操作,文件先要解析后数据存入数组buff中以便传输。
1、文件解析
S19文件解析:
S1 10 2000 00 00 00 00 00 00 00 00 00 00 00 00 10 BF
如上数据:
- S1:文件地址字节数为1+1=2个,最常见还有S2、S3以此类推;
- 10:表示10后面的所有数据个数是0x10个字节,即为16个字节;
- 2000:文件地址0x2000
- 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01:数据
- BF:checksum值 BF = 0XFF - (0X10 +0X20 + 00 …+0X10),注意,这个值最终结果只能是一个字节的数。
HEX文件解析:
:020000020FFBF2
:021000000001EC
如上数据:
- ::HEX开头
- 02:0x02个字节数据,即为2个数据
- 0000:地址0x0000
- 02:数据类型: (1)0x00:下载的数据
(2)0x01:读取文件结束标志
(3)0x02:扩展段地址记录,例上0xFFB<<4等于0xFFB0是为段文件初始地址再加上0x1000等于0x10FB0。(相当于左移4位再加上下一行的地址即为新的擦除地址值)
(4)0x03:开始段地址记录
(5)0x04:扩展线性地址记录,相当于把0xFFB<<16再加上初始地址0x1000
(6)0x05:开始线性地址 记录 - F2:checksum值 F2 = 0X100 -(0X02+0X10+…+0XFB),注意,这个值最终结果只能是一个字节的数。
部分解析代码如下图
driver路径正确时打印出他的段需要传输的段数,起始地址,长度,CRC等信息
app路径正确时打印出他的段需要传输的段数,起始地址,长度,CRC等信息
2、刷写
刷写流程通过定时器来完成
预编程:一般是要先检查适合刷写的条件,有一定车速或没写信息等,不可刷写。
如下图可看到,自己搭的UDS框架服务。
driver编程:driver一般时一个文件一个段但是36的块有可能有很多,因此用判断条件:当前传输块个数<总块数时,循环此定时器。步骤step定死在当前step数。
app编程:app要考虑多文件多段下载,因此需要判断文件个数、段数、块数来确定传输方式
后编程:一般是复位
编程结果判断:通过传输过程中返回的正响应or负响应来确定返回值正确与否,TRUE代表响应正确;FALSE代表响应错误;DownloadComplete代表刷写流程完成,但是还得通过复位后收到的APP、NM报文通信来确定是否刷写成功,最后界面给出结果。
有兴趣的同学可以联系我
请输入公众号:总线网络。关注我,获取汽车网络开发及测试方面资料,更新干货!
分享总线开发知识
分享CAN/CANFDLIN/ETH等网络资料
分享CANoe/TSMaster/PCAN等设备工具使用
分享UDS/NM/Bootloader测试用例等
一起来学习,进步,交流吧!