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


    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

    1.2 mkhex4bin工具

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

    mkhex4bin  ofd_123_456_789.xml > hexcmd_321_432_658.tmp
    
    • 1

    1.3 hex6x工具

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

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

    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文件。
      在这里插入图片描述
  • 相关阅读:
    【HCIP】路由策略、策略路由
    HDU_1018
    Java:MessageDigest&Base64类的解析与使用
    灰色预测GM(1,1)
    Kubernetes多租户策略的好处和挑战
    「Redis」01 NoSQL及Redis概述
    MyBatis中动态 SQL 语句-更复杂的查询业务需求
    善于利用GPT确实可以解决许多难题
    kubernetes之Deployment
    redis删除缓存
  • 原文地址:https://blog.csdn.net/Kshine2017/article/details/126103159