【DSP】【第四篇】如何生成bin和dat文件

2022年11月5日(纠正与补充)

  • 无论是生成Dat文件还是生成Bin文件都必须使用TI官方的“Hex6x.exe”软件。
  • 关于该“Hex6x.exe”软件的使用,请参考:SPRU186W 第十一章 Hex Conversion Utility Description。
  • “Hex6x.exe”软件,需要 直接参数或者RMD文件,将“.out”文件转换成ASCII编码的文本文件。生成的文本文件的内容是用户程序编码中的各个段落。
  • 在我们使用CCS烧录程序的时候,可以选择烧录bin格式的程序或者是dat格式的程序。在这两者中,bin文件的空间大小更小。
  • 本文8月1日的内容,关于生成bin文件的方式存在错误。在此纠正

1. 生成bin格式的文件

  • 之前的理解都是,bin文件是按照地址位置摆放数据,但凡两个段之间相距很远,就会填充很多的0。这种生成的方式会导致bin文件很大(100M+)。
  • CCSv5下载使用的bin文件,是将段追加在一起,每个段前,记录这段的大小以及段的存放位置。

1.1 步骤

(1)使用hex工具,将out文件生成“btbl文件”(文本文件)。
(2)使用“btoccs”工具,将btbl文件中的字符合并成4字节16进制的数(文本文件)。
(3)使用“ccstobin”工具,将4字节16进制的字符数转换成真实数值,以二进制文件存放。

  • Hex工具是不开源的,而btoccs和ccstobin是开源的。

2022年8月1日

参考链接:
知乎讲解《CCS如何生成hex和bin文件
官网资料《构建前和构建后的步骤
请添加图片描述

1. 生成BIN文件

1.1 ofd6x工具

将.out文件转换为一个xml文件。

ofd6x -x --xml_indent=0 --obj_display=none,sections,header,segments Card6678_C0.out > ofd_123_456_789.xml

1.2 mkhex4bin工具

为 TI的十六进制转换工具hex6x 创建一个文件。
该文件可用于将xml文件转换为一个临时文件。

mkhex4bin  ofd_123_456_789.xml > hexcmd_321_432_658.tmp

1.3 hex6x工具

十六进制转换实用程序。将来自mkhex4bin的临时文件和.out文件一起,转换为一个bin文件。

hex6x -q -b -image -o Card6678_C0.bin hexcmd_321_432_658.tmp Card6678_C0.out

2. 生成DAT文件

参考文献:
Hex6x工具介绍
全部工具链介绍
bootloader搬运代码与下载
ti官网提问:
在nysh.spi.map中设置spi 启动参数表

  • 全过程示意图
    在这里插入图片描述
    在这里插入图片描述

2.1 hex6x.exe

  • 详情参考文件《SPRU186W.pdf》Chapter 11 Hex Conversion Utility Description。
  • 根据 上述文件,可以知道正确用法是: hex6x.exe filename.rmd 。
  • cmd类似rmd文件,指导解析生成二进制文件时候的类型和方式。
    在这里插入图片描述
  • 如何写CMD文件,如下图所示,8个CMD文件仅仅是输入输出的文件名不同,其他的配置皆相同。
    在这里插入图片描述
  • 即使是下载的C6657双核的命令文件,也只是文件名改变。
    在这里插入图片描述

2.2 mergebtbl工具

  • 合并多个btbl文件。将多个文件中的内容拼接在一起,最后以0x00000000结尾。
  • 删除辅核的的入口地址 _c_init00。(1) 在core0程序中人工将辅核地址写到对应的MAGIC_ADDRESS。(2) 或者,将各个辅核入口地址看做是一个只有4字节的段。以段的形式,添加在.btbl文件的末尾。如下图所示。
    在这里插入图片描述

2.3 AddDdrTable6678

  • 将DDR3的初始化配置添加到文件中。按照段的形式,添加在core0的入口地址之后。
    在这里插入图片描述

  • DDR配置信息,一共是4长度+4地址+112数据=120字节。

  • 长度数值:0x00000070=112字节。

  • 地址数值:0x00873500。如下图所示,0x00873500为DDR的配置表地址。

  • 引导加载程序bootloader在器件初始引导期间,使用 L2 SRAM 的一部分(起始地址 0x0087 2DC0 和结束地址 0x0087 FFFF)。

  • 以段的形式,将DDR3的配置信息,写在文件中。设备上电启动之后,由搬运代码将DDR3的配置写到L2SRAM中的0x00873500地址处。引导程序会使用该处的配置,用来配置DDR3。
    在这里插入图片描述
    在这里插入图片描述

  • 关于DDR3的112个配置数据,是根据titool.h中的 BOOT_EMIF4_TBL_T 定义的。这些配置除前四个之外,都是DDR中的寄存器。

  • 目前:configselect=0x024280F5 尚不知道从何而来。
    在这里插入图片描述

  • DDR参数

  • 参数生成工具

  • 附加内容:DDR3初始化代码工程示例

  • 《DDR3初始化-SPRABL2A》

2.4 b2i2c工具

  • b2i2c.exe 将 .btbl文件中的内容取出,对内容进行字节分割,按照124字节写入一个block块。
  • 在block块的开头,添加2字节的长度信息和2字节的校验和。一个块为 2+2+124=128字节(0x0080)。
  • 在btbl文件中的数据是以ACII码形式存在。将数据转化为十六进制流,再做分割块的操作。
  • 最后将十六进制流数据,再转回ASCIIHex格式,写入.i2C文件。并添加开始符号,结束符号以及$AXXXX。
  • 下图略过了AddDdrTable6678的过程。
    在这里插入图片描述

2.5 b2ccs工具

  • b2ccs.exe工具将.i2c文件转换为CCS可识别的文件格式.ccs。并添加ccs header。
  • 先将文件由ASCIIHex转换为十六进制流。每4个字节转换为一个32位数,作为1行到.ccs文件。
  • 在.ccs文件的最前面一行,添加:1651 1 10000 1 1c5f0。
  • 1651:固定标示符
  • 1:数据格式
  • 10000:基地址
  • 1:页类型(0-数据 1-程序)
  • 1c5f0:数据长度。(116208行数据+1行开头)
    在这里插入图片描述

2.6 romparse工具和qfparse工具

  • 在.ccs文件中,添加boot启动参数表。一共256行,256x字=256x32位数据。
  • 参数表的定义在titool.h中。
    在这里插入图片描述
  • 如果使用romparse工具进行boot参数表的添加。需要修改nysh.spi.map配置文件。如下图所示。
  • bootmode等于50而不是6,是因为这里的数值用RBL内部使用的扩展引导模式值。(可以理解为,原本的序号6,在去掉一个no boot模式后变成5。对每个序号索引扩大10倍,方便以后中间穿插拓展RBL的引导方式,因而SPI启动模式在RBL中变成了50)
    在这里插入图片描述
  • 如果使用qfparse工具,这个是个人编写的非官方工具。需要配合ParaTable.map文件。在这个map文件中,直接列出了256行参数字,直接修改其中的数值并不是很方便。如下图所示。
    在这里插入图片描述
  • 添加完参数表之后的文件如下图所示。长度有原先的0x1c5f0变成(0x1c5f0+256 = 0x1c6f0行)。
  • 起始地址0x8000000。
    在这里插入图片描述

2.7 byteswapccs工具和modify工具

  • 器件是小端模式。低字节在前面。需要将每行4字节的数据,按照字节进行翻转。即0x87654321变成0x21436587。
  • 文件的第一行信息不变。
  • 官方工具是byteswapccs,个人工具编写的是modify。转换之后得到的新文件为.dat文件。
    在这里插入图片描述
  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值