【C2000】DSP生成hex/bin文件的三种方法
【C2000】DSP生成hex/bin文件的三种方法
久别重逢,你我归来,仍如人生初见。从距离上次博客更新转眼已经两年过去了, 感慨时间如梭,白驹过隙,日光荏苒。如果热爱一件事那就保持热爱下去,如果觉得技术分享是有意义的那就坚持下去。
往后我会重点关注半导体行业相关的技术动态, 从MCU芯片底层架构,MCU芯片应用(如德州仪器的DSP产品C2000实时控制MCU,Sitara MCU+产品AM263x/AM243x, 以及低端的Cortex-M0架构MCU ),不同行业应用的学习等等。以C2000实时控制MCU为例, 重点介绍电机控制的应用和数字电源控制的应用。所以,后续博客的分享是承上启下, 继往开来。本博客给大家带来DSP生成hex/bin文件的三种方法。
## 0研究背景 **写在前面:**
1.本代码基于CCS12.20版本,低版本或者不同版本可能会报错;
2.德州仪器的开发板LAUNCHXL-F280039C;
3.所参考的资料均来自TI官网及官方文档。参考C2000Ware中的led_ex1_blinky example
4.如果本博客恰巧与您的研究有所关联,欢迎您的咨询qq1366196286
1.通过PC上的command命令来生成Hex/Bin文件
可以通过PC上的command命令来调用hexC2000.exe来生成Hex文件,详细步骤如下:
Step1.快捷键Win +R 输入“”“cmd”进入windos命令
Step2. cd C:\Users\ShaoxingKe\Desktop\HexC2000
cd C:\Users\ShaoxingKe\Desktop\HexC2000
CCS安装时会自动安装有Hex2000.exe工具, 默认安装是C盘, 我这里把CCS安装在F盘, 如下路径:
根据hex2000.exe所在位置来,我这里将hex2000.exe放在桌面的文件夹HexC2000中。
如下图:
Step3.输入hex2000 -romwidth 16 -memwidth 16 -i -o file_name.hex +FileName
hex2000 -romwidth 16 -memwidth 16 -i -o led_ex1_blinky.hex led_ex1_blinky
4.回车即可生成对应的.hex文件
如下图:
2.通过CCS上的后处理命令Post-build steps来生成Hex/Bin文件
其实CCS安装时已经安装了一个工具mkhex4bin,Path位于C:\ti\ccs1220\ccs\utils\tiobj2bin文件夹下(根据CCS安装路径可能有所不同)。该工具可以把.out文件转化成.bin文件。
https://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_project-management.html#pre-and-post-build-steps
如下图:
"${CG_TOOL_HEX}" -i "${BuildArtifactFileName}" -o "${BuildArtifactFileBaseName}.hex" -order MS -romwidth 16
"${CG_TOOL_HEX}" -i "${BuildArtifactFileName}" -boot -sci8 -a -o "${BuildArtifactFileBaseName}.txt"
"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/ofd2000.exe" "${CG_TOOL_ROOT}/bin/hex2000.exe" "${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe"
{CCS_INSTALL_ROOT} 表示CCS安装路径
{CG_TOOL_ROOT}表示cgTool安装路径
{PROJECT_LOC}表示工程路径
如下图:
3.通过CCS上的C2000 Hex Utility来生成Hex文件
可以直接通过CCS自带的C2000 Hex Utility工具来生成Hex文件,详细步骤如下:
https://software-dl.ti.com/ccs/esd/documents/ccs_hex-utility.html
Step1:Enable “C2000 Hex Utility”
如下图:
Step2:为Hex文件指定Memory width与ROM width,均为16。C2000最小操作位数是16bit的, 不是8bit的。
如下图:
Step3:选择输出的hex格式,选择Intel hex(–intel, -i)的格式
如下图:
Step4:点击Apply and Close, 重新编译工程并在Debug目录下可以找到对应Hex文件。
以上是DSP生成hex/bin文件的三种方法。
其中, C2000的C28x架构是16位的最小处理位宽,如下图所示:
内存宽度是内存系统的物理宽度(以位为单位),通常与目标处理器宽度相同,(即)16 位处理器具有 16 位内存架构。然而,一些应用程序可能需要将目标字分解为多个、连续和更窄的记忆字。默认情况下,十六进制转换实用程序将内存宽度设置为目标>宽度,但这可以使用 --memwidth 选项进行更改。
ROM 宽度决定了 hex 实用程序如何将数据划分为输出文件。在较旧的十六进制编程器中,ROM 宽度用于指定每个 ROM 设备>的物理宽度(以位为单位)。在目标文件数据映射到内存字之后,内存字被分成一个或多个输出文件。大多数现代闪存编程器>不需要特定的 ROM 宽度,但最好检查编程器是否施加了任何限制。
为 memwidth 和 romwidth 指定的值决定了十六进制输出文件的数量:
如果内存宽度≥ROM宽度:文件数=内存宽度÷ROM宽度
如果内存宽度 < ROM 宽度:文件数 = 1
例如,对于 16 的内存宽度,您可以指定 ROM 宽度值为 16 并获得一个包含 16 位字的单个输出文件。或者您可以使用 ROM 宽度值 8 来获得两个文件,每个文件包含每个字的 8 位。
十六进制转换实用程序使用的默认 ROM 宽度(未明确指定时)取决于输出格式:
对于除 TI-Tagged 之外的所有十六进制格式,默认 ROM 宽度为 8 位。
对于 TI-Tagged,默认 ROM 宽度为 16 位。
例如,如果您使用的是 Cortex ARM 设备(默认内存宽度为 32),并且您选择 Intel hex 格式(默认 ROM 宽度设置为 8),则 hex 实用程序将生成 4 个输出 hex文件。要获取单个输出文件,您可以将 --romwidth 选项设置为 32。
此外, 也可以View.→ Memory Browser → 输入“”代码指定地址“” → Save Memory,参考如下:
从cmd文件中可知代码存放从FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4,共计12KB。
右击Save Memory, 设置保存格式, 指定起始地址,保存范围/长度,确定可输出Hex文件。
总结
可以通过不同的方法来生成Hex/Bin文件, 以便后续文件或Bootloader升级所需的格式,或者生产烧录所需要的文件格式。