最近开发28388Bootloader功能,需要将hex文件通过上位机发送到DSP。整理了下LabVIEW生成hex文件以及解析发送hex文件需要注意的地方,附有代码链接。
如上图程序LabVIEW的程序分成两部分。
左边部分选择.out文件的路径,通过TI的hex2000文件生成hex文件,需要注意的是命令行的字符串语句最后要加一个回车,否则无法执行语句。
右边部分是是对hex文件的处理处理与发送,又分四部分(左上,右上,左下,右下四个部分):
第一步将hex文件按行提取放到数组中,并把hex文件每行开头的:给去掉。
第二步考虑到由于读取的是文本类型的数据,在UDP发送时LabVIEW会将文本类型的字符串转换为ASCII码再发送,但这并不是我想要的,我想直接把hex文件文本字符串作为16进制字节发送,所以需要进一步处理。比如我的hex文件第一行是“0200 0004 0008 F2” 我这里把每个字节提取出来转换为数值后,再强制类型转换成16进制字节类型的字符串(程序链接中有一个VI专门是测试这项转换,大家可以自己看看结果)。由于网络是发送是大端字节序,而DSP是小端字节序,如果直接发送的话存在字节序问题。
第三步根据28388存储特点(CPU1端每个地址16个位),所以每2个字节转换一次字节序,转换字节序的原理就是先按小端读取再强制类型转换回去。考虑到hex文件每行不是2的倍数,所以我在每行之后加了2个0字节(反正发几个0不影响,多余的几个0字节受到循环次数的约束不会被读取)。
一系列转换完成后,就是第四步通过以太网发送了。
看一下DSP读取的结果:
轻松秒杀:)
程序链接(包含hex2000,两个发送程序一个只发送hex文件的单行一个发送全部hex文件,文本类型字符串转16进制字节字符串的测试VI):