首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
职场驿站
» 详细阐述UCD3xxx
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
详细阐述UCD3xxx
发短消息
加为好友
wxg1988
当前离线
UID
856476
帖子
3055
精华
0
积分
1528
阅读权限
70
在线时间
146 小时
注册时间
2011-10-5
最后登录
2014-6-11
金牌会员
UID
856476
1
#
打印
字体大小:
t
T
wxg1988
发表于 2013-1-11 11:49
|
只看该作者
详细阐述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 文件。
6
参考资料
1. SLUS868D - Digital Power Controllers, Texas Instruments Inc., 2012
2. SPNU118J - ARM Assembly Language Tools v4.9 User's Guide, Texas Instruments Inc., 2011
3. SRecord V1.59- Manipulate EPROM load files, 2012
4. Fusion Digital Power Designer, Texas Instruments Inc., 2012
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议