————————————————
请输入公众号:总线网络。关注我,获取汽车网络开发及测试方面资料,更新干货!
应朋友问题:之前已看过CANOE用报告形式设计bootloader自动化测试(地址https://blog.csdn.net/qq_36407982/article/details/107610153)。那我要是没CANOE岂不是刷不了,那能否用CANalyzer及CANOE创建Network Node的方法来设计bootloader?两者有什么不同?
我:不同之处太多了,前者可列详细步骤函数,有延时函数,可以出报告;后者没有。相信很多朋友做这个都觉得比较难,难的不是正常刷写,而是各种逆向刷写很麻烦,话不多说,且看下文。
如上图所示,我们放置CheckBox控件来选择项目,打印出id值及版本号读取(可重新输入);放置两个 Path Dialog 来获取Driver和App路径,此路径是存在于盘下的任何一个路径;再通过File Number确定文件个数(>=1),最后通过Button(start)开始刷写。至于CAPL Output View控件则是我们进行输出提示语,进度条是每个文件刷写的进度。由于个人习惯原因,所以绑定控件值全部弄的系统变量而没做环境变量。好了,话不多说,正文开始!
第一步还是老操作,文件解析!
刷写文件常见的三种:S19/HEX/BIN,本文不对BIN文件做解析,没难点。
通过文件路径后缀名识别出是哪种文件类型,再将之用于代码判断。因为文件类型不同,解析方式不同。这里简单说明下文件类型。
文件类型判断
S1 10 2000 00 00 00 00 00 00 00 00 00 00 00 00 10 BF
如上数据:
:020000020FFBF2
:021000000001EC
如上数据:
6. ::HEX开头
7. 02:0x02个字节数据,即为2个数据
8. 0000:地址0x0000
9. 02:数据类型:(1)0x00:下载的数据
(2)0x01:读取文件结束标志
(3)0x02:扩展段地址记录,例上0xFFB<<4等于0xFFB0是为段文件初始地址再加上0x1000等于0x10FB0。(相当于左移4位再加上下一行的地址即为新的擦除地址值)
(4)0x03:开始段地址记录
(5)0x04:扩展线性地址记录,相当于把0xFFB<<16再加上初始地址0x1000
(6)0x05:开始线性地址 记录
10. F2:checksum值 F2 = 0X100 -(0X02+0X10+…+0XFB),注意,这个值最终结果只能是一个字节的数。
代码:
解析函数接口代码
通过解析函数fileGetStringSZ代码来对文件进行彻底的解析并存到driver或者app的buff中。最后在下载数据里直接导入此buff。
由于没有测试步骤函数及延时函数,那么就需要我们自己做一个定时器来做延时,步骤也要在定时器里实现
这里设置了预编程、编程中、后编程步骤及已下载文件个数<文件个数,否,就stop()。
在进行下载的时候,一般会有一个预编程,在进入编程模式之前会进行对DID读取,28和85服务使用。有些客户甚至会要求31服务预编程条件检测。
进入到编程模式后,一般会对DID进行写入,比如指纹,日期等,写入格式均有要求。
写入数据如图示
对driver下载,一般是直接下载,34-36-37.下载完之后会进行31CRC校验或者在37进行CRC校验。
driver下载流程图
一般app下载会涉及到多文件/多段下载。
多段下载解析代码如图示
利用for循环将Tempi(段)和二位数组将数据存入buff中,就可以得出app的二维数组数据。
多段下载解析代码如图示
利用段落判断(g_TxData.paragraph_n <= g_AppData.paragraph)判断得出结论是否循环当前步骤。
利用(g_File.completed_number < g_File.number)判断得出结论是否循环当前步骤。
利用
if(g_File.pathchange_flag == FALSE)
{
STEP = paragraph_step_start;
}
来确定是否添加新的文件,这都需要判断。设置全局变量。
当第一次加载文件后并进行下载成功时,会自动判断此时下载成功文件个数是否等于填入的应该下载的文件个数值,利用if(文件个数>完成刷写文件个数?),通过暂停(g_File.pathchange_flag == FALSE)在panel界面加载剩下的文件(自动识别加载与否)来进行下一步的解析并反复走下载流程(擦除地址、请求下载、下载、停止下载、CRC校验、一致性检验)达到多文件下载的目的。
延时定时器图
当所有文件下载完成并完成一致性校验,会进行一次复位看是否能够回到APP状态中。
逆向测试:对测试进行故障测试(获得想要的故障,例如返回期望NRC)。
这里介绍常见的逆向测试
逆向测试如图示
对于传输层输送数据时,一般是在on message下完成,但是有些硬件不支持即时传输,必须考虑传输数据的stmin时间及每一个请求数据的响应时间间隔,所以此法行不通。
我在定时器里传输数据,在通过定时器对每一帧数据都进行一个可编辑延时,达到真正灵活下载。
帧数据延时图
请输入公众号:总线网络。关注我,获取汽车网络开发及测试方面资料,更新干货!
分享总线开发知识
分享CAN/CANFDLIN/ETH等网络资料
分享CANoe/TSMaster/PCAN等设备工具使用
分享UDS/NM/Bootloader测试用例等
一起来学习,进步,交流吧!