详细阐述UCD3xxx系列数字电源控制器烧写常用的两种十六进制

后缀为x0 的文件是十六进制文件格式的一种,而intel hex 文件格式也是一种常用的十六进制文件格式。x0是ti 烧写软件和工具常用的文件格式,而hex 文件是第三方烧写器常用的文件格式。编译器(如ti 集成开发环境ccs)编译c 语言或者汇编语言程序生成二进制机器代码,然后由机器代码生成x0 和hex 这两种十六进制文件格式。本文首先介绍这两种文件格式,然后介绍如何在ccs 编译环境中产生这两种文件格式,最后结合ucd3xxx 系列数字电源控制器通过实例来进一步了解这两种文件格式。
1 x0 和hex 文件格式
x0 和hex 文件是由一行行符合对应文件格式的文本所构成的ascii(american standard code for information interchange,美国信息互换标准代码)文本文件。在计算机中,所有的数据在存储和运算时都要使用二进制数表示,例如a、b、c、d 这样的52 个字母(包括大写),0、1 等数字,还有一些常用的符号(如*、#、@等)在计算机中存储时也要使用二进制数来表示。ascii 码就是用来表示这些字母、数字以及符号的,它使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。而x0 和hex 文件格式就利用ascii 码来表示二进制信息。
x0 格式的名称是“泰克扩展十六进制文件格式”(tektronix extended hexadecimal file format),具体格式参见图1。
图 1:x0 文件格式
x0 文件以百分号“%”为记录标志,表示一行的开始;记录长度指的是每一行除百分号外的字符数(不是字节数),占一个字节;记录类型占一个字符,共两种:6 - 代表数据,8-代表结束;校验是整个一行字符除(注意不是字节)除校验自身和百分号外的校验和,占一个字节;地址共9 个字符,第一个字符是8,指的是地址共占8 个字符,后面8 个字符(4 个字节)是数据所要加载的地址;数据就是程序代码或其它信息。
以计算机常用的“hello, word!(加换行符)”为例,如果把它加载到地址0x006b,那么x0 文件如下
表示:
%2a6de80000006b48656c6c6f2c20576f726c64210a
%09819800000000
hex 文件格式有很多种,本文主要介绍“英特尔十六进制目标文件格式”(intel hexadecimal object file format),具体格式如图2 所示。
图 2:hex 文件格式
intel hex 文件以冒号“:”为记录标志,表示新的一行的开始;记录长度占一个字节,指的是每一行所包含实际数据或信息的字节数;加载偏置占两个字节,是相对地址(加载偏置加上扩展线性地址就是绝对地址);记录类型共有6 中,分别为:0 - 数据记录,1 - 文件记录结束,2 - 扩展段地址记录,3 -起始段地址记录,4 - 扩展线性地址记录,5 - 起始线性地址记录;每一行记录的数据部分都是可变的,最多可以有255 个字节,也可能没有,取决于所记录的类型。最后一个是校验,它是除冒号和校验自身的校验和,具体做法是每个字节累加,然后取计算结果最后一个字节补码(取反加1)作为校验字节。
还是以“hello, word! (加换行符)”为例,把它加载到地址0x0000,hex 文件如下:
:0f00000048656c6c6f2c20576f726c64210a7e
:00000001ff
2 ucd3xxx 存储结构
图 3:ucd3xxx 存储结构
介绍如何生成x0 和hex 文件以前,需要先了解一下ucd3xxx 系列数字控制器存储结构,如图3 所示。ucd3xxx 三种模式:复位模式、rom 模式以及flash 模式。这三种状态对应的存储映射是不一样的。复位模式下,所有内存都映射为rom;rom 模式下,程序闪存(program flash)被映射在0x10000至0x17fff,数据闪存(data flash)是从0x18800 至0x18fff,随机存取存储(ram)放在0x19000 至 0x19fff;flash 模式下,数据和随机存取位置不变,程序闪存位置被重新映射到0 至0x7fff。程序闪存最后4 个字节是保存整个程序闪存的校验和。
ucd3xxx 起机过程是:上电开始进入复位模式;上电完成后进入rom模式,此时芯片会自动跳转到0xa000 执行。在0xa000 至0xafff 这一段地址内,固化了一段rom 程序,这段程序除了做一些芯片自身的初始化外,它还会计算程序闪存的校验和,然后和程序闪存最后4 个字节保存的校验和对比,如果不一致,此时程序会停下来,等待主机命令。如果对比结果一致,那么芯片就会进入flash 模式,rom 程序会执行跳转指令进入程序闪存中运行。
3 如何在ccs 集成开发环境下生成x0 和hex 文件
图 4:ccs 编译器编译选项设置
x0 和hex 文件的生成离不开格式转换程序:hex470.exe 和 fusionx0tohex.exe。hex470.exe 是汇编语言工具包里面自带的程序。fusionx0tohex.exe 是ti 数字电源设计(fusion digital power designer)图形用户界面(gui)所带的转换程序。hex470.exe 和 fusionx0tohex.exe 可以用命令行来调用,下面分别介绍各自的命令格式。
hex470.exe 的命令行格式为:hex470 [选项] 文件名,hex470 是调用转换程序的命令,选项是控制转换过程的附加信息(具体信息可参考文献2),文件名是指输入文件的名称。hex470 可以把ccs 编译生成的后缀为out 的文件转换成各种格式的hex 文件,如:
hex470 –i sample.out
这段命令是把生成的sample.out 文件转换成intel hex 格式文件,文件名称为sample.hex;
hex470 –x sample.out
这段命令是把生成的的sample.out 文件转换成x0 格式文件,文件名称sample.x0。
既然hex470 可以直接把out 文件转换成hex 文件,那为什么要先转成x0 再转换成hex 文件呢?有两个原因:hex470 不会计算程序闪存的校验和;hex470 生成的hex 文件地址是基于程序闪存模式,而烧写器需要的地址是rom模式,也就是从0x10000 至0x17fff,所以ucd3xxx 不支持hex470 直接生成的hex 文件,需要通过fusionx0tohex.exe 转换程序把x0 文件转换成hex 格式文件,具体命令格式是:
fusionx0tohex --infile x0-file
--format intel|srec|hexdump
--pflash-checksum calc|none|source
--export pflash|dflash|both|source
--outfile hex-file
--infile 主要指定输入x0 文件。
--format 主要指定生成哪种hex 格式,分别为intel、srec(motorola s-record)和hexdump。
--pflash-checksum 主要指定程序闪存的校验模式,calc 模式-基于x0 文件计算校验位并写入相应位置;none 模式-校验位默认为0xffffffff;source 模式是使用x0 自己的校验位。
--export 指定输出哪一部分存储,pflash 指只输出程序闪存部分。dflash 指输出数据闪存部分。both 是输出程序和数据闪存。无论哪一部分,如果x0 文件中没有就用0xff 填充。source 是直接把x0 输出。
--outfile 是指定输出hex 文件名称。
下面就介绍一下如何在ccs 编译环境中嵌入hex470 和fusionx0tohex 命令行。
在ccs(3.x 版本)编译环境中,进入工程(project)菜单,然后选择编译选项(build options),然后点击通用标签(general),就会出现如图4 所示界面。在最后编译步骤(final build steps)中,我们可以输入下面两条命令行:
hex470 -x -memwidth 8 .\debug\fb_48v_hs.out
fusionx0tohex --infile fb_48v_hs.x0 --pflash-checksum calc --export both --format intel –outfile fb_48v_hs.hex
第一条命令中:-x 选项就是指把.\debug\fb_48v_hs.out 转换成x0 文件,-memwidth 8 是定义系统存储字宽为8 位。
图 5:生成的x0 文件(ucd3xxx)
图 6:生成的hex 文件(ucd3xxx)
第二条命令中:输入待转文件是fb_48v_hs.x0,输出文件是fb_48v_hs.hex,计算程序闪存的校验位,同时输出程序和数据闪存内容,格式是intel 十六进制。
4 基于ucd3xxx 进一步了解x0 和hex 文件格式
为了进一步了解x0 和hex 格式,下面通过ucd3xxx 硬开关全桥评估板软件来看一下具体生成的x0和hex 文件,如图5 和图6 所示。
图5 的第一列统一是百分号开始;下面两列(一个字节)表示的是每一行除百分号外的字符长度,每行最多字符数是0x4e(78);然后一列表示后面数据类型,除最后一行是8(结束)外,其它都是6(数据);再有两列是整行的校验;地址占9 列,以8 开始,后面4 个字节代表实际地址;地址后面就都是数据了。从图中可以看出,x0 文件的程序闪存的地址都是从0 开始的,而且也没有整个程序闪存的校验。ti 烧写软件和工具主要使用x0 格式的文件,烧写软件自己会计算程序闪存的校验和,然后写到最后4 个字节,所以x0 不需要计算整个程序闪存的校验和。
图6 的第一列都是冒号;后面依次一个字节指的是整行所含数据的字节数;两个字节是偏置地址;一个字节是指的记录类型;然后是字节数不等的数据。最后一个字节是每一行的校验。图6 的第一行指定扩展地址,为0x0001;最后一行标志文件结束。另外,在程序闪存最后4 个字节(粉红色区域)就是整个程序闪存的校验和。如果这个校验和不对,程序就不会跳到程序闪存中执行。
5 小结
如果使用ti 提供的烧写软件(gui)和工具(usb 适配器)烧写的话,只需要格式为x0 的文件;如果使用第三方烧写器在生产线烧写,那么就会需要hex 格式文件。可以根据本文的介绍来生成所需的x0或者hex 文件。

谁才是最好的智能音箱?Google Home还是亚马逊Echo?
信号发生器术语解释
Pico推出了旗下新款6DoF VR旗舰一体机Pico Neo 2系列产品
西门子软PLC与组态软件如何通讯?
苹果 iPhone 12在2020年下半年将超过华为和三星
详细阐述UCD3xxx系列数字电源控制器烧写常用的两种十六进制
自锁电路和互锁电路的区别
电路知识基础入门
汽车电子电路中电流测量的原理
荣耀Magic惊艳发布 这款人工智能手机的未来新功能触手可及!
留下债务400亿,汽车厂老板远走海外
台积电5nm产能已被苹果垄断 苹果上5nm芯片的订单非常强劲
电压放大器和功率放大器的典型故障分析
新能源汽车上的钕铁硼磁铁
iPhone8什么时候上市?iPhone8最新消息:iPhone8概念设计色彩丰富,iPhone8价格超10000元是物有所值还是得不偿失?
中国电子信息博览会CITE2020集成电路展区:十大半导体领军企业推荐
保时捷Taycan电动超跑刷新纽博格林北环赛道纪录
注册资本30亿!小米成立北京玄戒信息科技有限公司
SpaceX正在打造星际飞船的“未来酒吧”
Digi-Key宣布与Directed Energy, Inc.建立独家全球分销合作关系