TMS320C6678+Kintex-7开发板——DSP程序固化操作手册
前 言
本文主要介绍DSP程序固化操作手册,文章内容包括program-tools工具包说明、文件准备、程序固化、多核程序可执行文件转换等。
program-tools工具包说明
DSP程序固化工具包program-tools位于产品资料“4-软件资料\Tools\”目录下,工具包目录结构及说明如下。
图 1
本次测试板卡为TMS320C6678+Kintex-7 的FPGA高端异核开发板,它采用TI KeyStone架构C6000系列TMS320C6678八核C66x定点/浮点DSP以及Xilinx Kintex-7 FPGA处理器设计。
TMS320C6678+Kintex-7开发板资源图解
核心板内部DSP与FPGA通过SRIO、EMIF16、I2C通信总线连接,并通过工业级高速B2B连接器引出千兆网口、PCIe、HyperLink、EMIF16、GTX等高速通信接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。
表 1
Image
spirom.bin
SPI FLASH的IBL可执行文件
i2crom.bin
EEPROM的IBL可执行文件
ibl.bin
待固化的IBL可执行文件,工具包提供的默认ibl.bin文件为spirom.bin重命名文件
app.out
待固化的用户程序可执行文件,工具包提供的默认app.out文件为led_flash_noOS.out重命名文件
备注:固化过程中,工具包会自动将app.out重命名为app.bin
Log
存放固化过程中产生的Log信息文件
TargetConfig
DSP_C6678.gel
GEL文件
DSP_C6678_XDS100v1.ccxml
XDS100v1仿真器配置文件
DSP_C6678_XDS100v2.ccxml
XDS100v2仿真器配置文件
DSP_C6678_XDS100v3.ccxml
XDS100v3仿真器配置文件
DSP_C6678_XDS200.ccxml
XDS200仿真器配置文件
DSP_C6678_XDS560v2.ccxml
XDS560v2仿真器配置文件(USB模式)
DSP_C6678_XDS560v2_LAN.ccxml
XDS560v2仿真器配置文件(网络模式)
Tools
存放程序固化工具可执行文件,以及相关配置文件
program.bat
一键固化脚本
program_gui.bat
图形化分步固化脚本
program.js
javascript脚本
工具包支持如下固化操作。
表 2
固化操作编号
固化操作说明
0
固化IBL至EEPROM,同时固化用户程序至NAND FLASH
1
固化IBL至EEPROM,同时固化用户程序至SPI FLASH
2
固化IBL至EEPROM,同时固化用户程序至NAND FLASH和SPI FLASH
3
仅固化IBL至EEPROM
4
固化IBL至SPI FLASH,同时固化用户程序至NAND FLASH
5
预留编号
6
预留编号
7
仅固化IBL至SPI FLASH
8
仅固化用户程序至NAND FLASH
9
仅固化用户程序至SPI FLASH
10
固化用户程序至SPI FLASH,同时固化用户程序至NAND FLASH
文件准备
请将程序固化工具包program-tools拷贝至Windows非中文路径下,再执行如下操作。
IBL文件准备
如需从SPI FLASH启动IBL,则使用工具包提供的ibl.bin文件即可,无需额外操作。如需从EEPROM启动IBL,请将i2crom.bin文件重命名为ibl.bin,并替换工具包中的ibl.bin文件。
核心板出厂时默认已固化IBL至SPI FLASH和EEPROM,推荐从SPI FLASH启动IBL。
用户程序文件准备
将待固化的单核用户程序.out格式可执行文件重命名为app.out,并替换工具包中的默认app.out文件。如需固化多核用户程序,请先按照“多核程序可执行文件转换”章节将多核用户程序可执行文件转换为MAD(Multicore Application Deployment)文件,再重命名为app.out,并替换工具包中的默认app.out文件。
单核用户程序可执行文件一般为ELF格式,多核用户程序可执行文件一般为BBLOB格式。
仿真器配置文件准备
如使用XDS100v1/XDS100v2/XDS100v3/XDS200/XDS560v2仿真器进行操作,则使用工具包提供的默认仿真器配置文件即可,无需额外操作。
程序固化
工具包提供两种程序固化方式,方法一为使用program.bat脚本进行一键固化,方法二为使用program_gui.bat脚本进行图形化分步固化。
一键固化
使用编辑工具打开一键固化脚本program.bat,并参考如下说明对相关参数进行配置。
图 2
表 3
参数
说明
DSS_SCRIPT_DIR
配置为"[CCS5.5安装路径]\ccsv5\ccs_base\scripting\bin"
program_type
配置为对应固化操作编号。此处固化操作编号为10,表示“固化用户程序至SPI FLASH,同时固化用户程序至NAND FLASH”
PROGRAM_EVM_TARGET_CONFIG_FILE
配置为适配的仿真器配置文件。此处仿真器配置文件为DSP_C6678_XDS200.ccxml,表示使用的仿真器为XDS200
请将评估板的启动选择拨码开关拨为000XX(1~5),此档位为DSP_NO BOOT(Debug)模式,再将评估板通过仿真器与PC机正常连接。
评估板上电后,双击运行program.bat脚本即可一键固化用户程序或IBL。
备注:如IBL文件无更新,可不进行IBL固化。
图 3
图 4
固化完成后,请将评估板的启动选择拨码开关拨为对应启动模式。取下仿真器后再将评估板上电,程序即可正常运行。
图形化分步固化
使用编辑工具打开图形化分步固化脚本program_gui.bat,配置DSS_SCRIPT_DIR参数为"[CCS5.5安装路径]\ccsv5\ccs_base\scripting\bin"。
图 5
请将评估板的启动选择拨码开关拨为000XX(1~5),此档位为DSP_NO BOOT(Debug)模式,再将评估板通过仿真器与PC机正常连接。
评估板上电后,双击运行program_gui.bat脚本,在弹出的CMD窗口中根据提示输入对应选项数字,指定IBL固化的存储器件、用户程序固化的存储器件、处理器型号、仿真器型号。
备注:如IBL文件无更新,可不进行IBL固化。
图 6
图 7
图 8
图 9
配置完成后,进入程序固化界面。
图 10
图 11
固化完成后,请将评估板的启动选择拨码开关拨为对应启动模式。取下仿真器后再将评估板上电,程序即可正常运行。
多核程序可执行文件转换
multicore-boot工具包说明
多核程序可执行文件转换工具包multicore-boot位于产品资料“4-软件资料\Tools\”目录下,工具包目录结构及说明如下。
图 12
表 4
App
shmIpcBenchmark.out
待转换的多核用户程序可执行文件
Bin
存放MAD加载器
Config
deployment_C6678_bypass_prelink.json
配置文件
maptoolCfg_C66x_bypass_prelink.json
Build.bat
转换脚本
maptool.py
Python脚本
python-2.7.amd64.msi
Python 2.7安装包
请将多核程序可执行文件转换工具包multicore-boot拷贝至Windows非中文路径下,再执行如下操作。
Python安装
multicore-boot工具包的使用需依赖Python,请双击工具包目录下的Python安装包python-2.7.amd64.msi,再点击Next进行安装。
图 13
选择安装路径,并连续点击Next。
图 14
图 15
图 16
点击Finish完成安装。
图 17
多核程序可执行文件转换
使用编辑工具打开转换脚本Build.bat,将PATH配置为:
"[CCS5.5安装路径]\ccsv5\tools\compiler\c6000_7.4.4\bin";[Python安装路径];%PATH%
图 18
使用编辑工具打开配置文件deployment_C6678_bypass_prelink.json,默认内容如下。
图 19
多核单镜像
如八个核心运行同一个用户程序,请将用户程序.out格式可执行文件拷贝至工具包的App目录下,再将标注1、2修改为用户程序可执行文件名。
多核双镜像
如C66xx_0运行一个用户程序,其他七个核心运行另一个不同的用户程序,请将两个用户程序.out格式可执行文件拷贝至工具包的App目录下,再将标注1修改为C66xx_0用户程序可执行文件名,同时将标注2修改为其他七个核心的用户程序可执行文件名。
多核多镜像
如各个核心均运行不同的用户程序,请将各核心的用户程序.out格式可执行文件拷贝至工具包的App目录下,再增加对应核心的applications定义,并更新appDeployment中的applications列表。
C66xx_0~C66xx_7的applications分别对应appDeployment列表中的A~H,参考代码如下。需确保各个applications中的shmIpcBenchmark.out已修改为对应核心的用户程序.out格式可执行文件名。
"applications" : [
{
"name" : "app1",
"fileName" : "./App/shmIpcBenchmark.out",
"allowedCores" : [0,1,2,3,4,5,6,7]
},
{
"name" : "app2",
"fileName" : "./App/shmIpcBenchmark.out",
"allowedCores" : [0,1,2,3,4,5,6,7]
}
{
"name" : "app3",
"fileName" : "./App/shmIpcBenchmark.out",
"allowedCores" : [0,1,2,3,4,5,6,7]
}
{
"name" : "app4",
"fileName" : "./App/shmIpcBenchmark.out",
"allowedCores" : [0,1,2,3,4,5,6,7]
}
{
"name" : "app5",
"fileName" : "./App/shmIpcBenchmark.out",
"allowedCores" : [0,1,2,3,4,5,6,7]
}
{
"name" : "app6",
"fileName" : "./App/shmIpcBenchmark.out",
"allowedCores" : [0,1,2,3,4,5,6,7]
}
{
"name" : "app7",
"fileName" : "./App/shmIpcBenchmark.out",
"allowedCores" : [0,1,2,3,4,5,6,7]
}
{
"name" : "app8",
"fileName" : "./App/shmIpcBenchmark.out",
"allowedCores" : [0,1,2,3,4,5,6,7]
}
],
"appDeployment" : [
"app1",
"app2",
"app3",
"app4",
"app5",
"app6",
"app7",
"app8"
]
修改完成后,请双击运行Build.bat脚本,即可将多核程序可执行文件转换为BBLOB格式的MAD文件。转换完成后,将会在工具包的images目录下生成MAD文件C66x-le.bin。
图 20
图 21
linux嵌入式开发视频教程
作为一个新手,嵌入式Linux该如何学习?这个问题我被问过很多次了,所以写了这篇文章来回答。在学习嵌入式Linux之前,一定要对C语言有基本的了解,对汇编语言有基本的了解也没关系(汇编指令就那么几条,看到就会用)。C语言要学到什么程度呢?越熟悉越好,不熟悉也要有基本功,比如写个数组排序程序,输入数字求和等等。学好C语言的唯一方法就是多写程序,多练习,有编译错误没关系,自己解决;有执行错误也没关系,自己分析。以前用VC练习C语言,经常试着写一些C语言的竞赛题,都是纯C的,纯数学的,纯逻辑的题,不涉及接口之类的东西,很适合用来训练编程能力。回到正题,首先我们要明白你的目的是什么。 一般来说,所谓的嵌入式Linux可以分为底层系统和应用程序开发两个部分。如果要做应用程序开发,那么就要学C语言、数据结构、JAVA等。嵌入式应用程序开发和PC上的应用程序开发没什么特别需要注意的。也许你会说嵌入式系统需要做一些优化,是的,优化是需要的,但是没有优化的程序和PC上的程序开发没什么区别。
另外,当你具备了优化的能力,你就不再需要问这个问题了。举个具体的例子,比如开发一个界面,我们在PC上用VC;在嵌入式Linux上,我们可能用QT或者Android。这时候你就应该学QT和Android编程。但基础还是C或者JAVA,在这个基础上熟悉它们的界面。如果你学过VC,你也应该花时间去了解那些类和控件。
如果你的目的是学习系统底层,也就是我的专长,我可以稍微说一下,在回答这个问题之前,我先回答一下:很多人问我,到底应该学驱动还是学应用程序?
我只能说是凭兴趣,驱动和应用不是截然分开的。 1.我们说的驱动不仅限于硬件操作,还包括操作系统的原理,进程的休眠唤醒调度等概念。如果想写出好的应用,更好的解决应用遇到的问题,这些知识是应该知道的。 2.做应用的门槛低,特别是现在ANDROID,纯JAVA。我个人认为做应用的发展路径就是精通业务,比如做通讯行业,IPTV行业,手机行业,你懂行业的需求。所以,做leader的人,大部分都是做应用的。 3.做驱动,其实我不想叫“做驱动”,我想叫“做底层系统”,如果做好了,什么行业都可以用。我工作几年了,做过手机,做过IPTV,做过会议电视,但是这些产品对我来说没什么区别,因为我只做底层的工作。 他们的事情跟我没关系,当应用出现问题,他们解决不了的时候,我会从内核角度给他们建议,给他们提供工具。
我个人认为做底层的发展方向是做技术专家。 4.其实做底层和做应用是没有界限的,有底层经验再做应用,会觉得很安心,有业务经验,了解底层之后可以很快组建团队。 回到怎么学的问题,嵌入式Linux底层体系包括哪些内容?别急,举个例子就知道了。 1.电脑开机的时候,显示那些界面谁的?就是BIOS。它是干什么的?一些自检,然后从硬盘读取Windows,启动起来。同样的,这个BIOS就对应着嵌入式Linux里面的bootloader,这个bootloader需要从Flash中读取Linux内核,然后启动起来。
2、启动Windows的目的是什么?当然是为了上网聊天了。这些上网和聊天工具在哪儿呢?在C盘和D盘上。所以Windows首先要识别C盘和D盘。在Linux中我们叫它根文件系统。 3、Windows能识别C盘和D盘,那么它一定能读写硬盘,这里面涉及到的东西就叫驱动程序,当然不只是硬盘,还有网卡,USB等等。 嵌入式Linux能从Flash中读取并执行应用程序,那么一定有Flash的驱动程序,当然也不只是Flash。 嵌入式LINUX包含四大部分:引导加载程序,内核,驱动程序,根文件系统。 1、引导加载程序:就是一个稍微复杂的裸板程序。但是要看懂和写好这个裸板程序可不是件容易的事。Windows中那些好用的工具反而削弱了我们的编程能力。很多人玩嵌入式系统的时候,都会用ADS,KEIL,你能回答这些问题吗? 1、接通电源后,CPU从哪里获取指令去执行? 答:一般从Flash中。 2.但是Flash只能读不能直接写。如果我用全局变量,这些全局变量放在哪里呢? 答:全局变量应该在内存中。 3.谁把全局变量放在内存中? 答:长期用ADS、KEIL的朋友,能回答一下吗?这就需要“重定位”。
在ADS或者KEIL里,重定位的代码都是做这些工具的公司给你写好的,你看过吗? 4、内存那么大,我怎么知道要把“原来存放在Flash中的内容”读到内存的“哪个地址”呢? 答:这个地址是由“链接脚本”决定的,ADS里有scatter file,KEIL里也有类似的文件。但是你研究过吗? 5、你说重定位就是把程序从Flash复制到内存里,那么这个程序能读Flash吗? 答:能,必须能操作Flash。当然不只是这些,还有设置时钟,让系统跑得更快等等。 先问再回答这个问题,bootloader的裸板程序其实有3个重点: 1、对硬件的操作 2、对ARM系统处理器的理解 3、程序的基本概念:重定位、堆栈、代码段、数据段、BSS段等。 对于硬件的操作,需要看原理图、芯片手册,这个需要有一定的硬件知识。 你不需要会设计硬件,但至少能看懂;你不需要会看模拟电路,但需要会看数字电路。这个能力我在学校学的,《微机原理》和《数字电路》(我忘了书名)两本书就够了。但我怀疑你有没有耐心看完这两本书。不知道现在有没有更快的书,想学快点,就先放过这个吧,不懂就问Google或者发贴。另外芯片手册一定要看,别找中文的,看英文的就行。刚开始很痛苦,但你会发现,一旦熟悉了语法和词汇,看任何芯片手册都很容易。要看懂ARM系统处理器,就看杜春雷的书,里面讲到汇编指令、异常模式、MMU等,这三样东西你只需要懂。
3.编程的基本概念,当然是看编译原理了,可惜这种书是绝对看不懂的,除非你是超级天才,我劝你还是别看了。只要看我写的和第一个视频就行了,别担心,不花钱。跟着视频做硬件相关的实验,这些概念就清晰了。我还没找到第二套讲这些概念的书或者视频,就允许我瞎吹一通吧。对于bootloader,我学的时候是先看的,然后自己写程序把各种硬件的实验都做了,GPIO,时钟,SDRAM,UART,NAND,搞清楚了之后,再把u-boot拼起来就很容易理解了。综上所述,硬件原理图看懂,芯片手册看懂,需要自己找资料,其他的按照第一个视频的章节目录学就行了。 2.内核:想快速学习的先跳过内核学习,直接学怎么写驱动。 如果你想成为专家,必须对内核有很深入的理解。注意我说的是理解,并没有指望能写一个内核。你需要了解调度机制,内存管理机制,文件管理机制等等。我推荐两本书:1.通读,请读薄的那本(浮躁社会讲求速度,哈哈),2.选择性阅读,读你想了解的部分3.驱动:驱动由硬件本身的操作和驱动程序的框架两部分组成。再是硬件,还是需要看懂原理图看芯片手册,多练习。说到驱动框架,有一些书可以介绍,LDD3,也就是老外写的那本,里面介绍了很多概念,值得一看。但是它的作用仅限于介绍概念,我基本是上手前用它来熟悉一下概念,上手之后就扔了。
4. 驱动介绍最全的应该是宋宝华的,说实话我只看了目录,很多人说很好,所以在这里推荐一下,如果想对某个领域有很深的了解,绝对是超5星推荐,别指望能看完,1800多页,两卷本,我不清楚某一部分的时候,就会翻一翻,这本书200到300页就能讲到任何一部分,非常详细。而且带着一定的目标带领你去分析内核源码,以Linux 2.4为例,但是原理是一样的,也适用于其他版本的Linux。 4. 根文件系统: 大家有没有想过这两个问题: 1. Linux做的产品,有的是用来监控的,有的是做手机的,有的是做平板的。那么内核启动,挂载根文件系统之后,应该启动哪个应用程序呢? 答:内核不知道也不关心应该启动哪个用户程序,它只启动init应用程序,对应/sbin/init。显然这个应用程序需要读取配置文件,并根据配置文件启动用户程序(监控、人工界面、手写板界面等)。这道题提醒我们,文件系统的内容,比如/sbin/init,配置文件,都是有一些约定俗成的。 2、你有没有想过,你写的hello,world程序里用到的printf函数是谁实现的? 答:这个函数不是你实现的,而是库函数实现的,运行时要去找库。这道题提醒我们,文件系统里肯定有库。
这里是一个简单的自问自答,如果想进一步了解,可以看看busybox的init.c,就知道init进程是干什么的了。当然也可以看看建立根文件系统那一章。 先说一下我的学习经历。 1.上学的时候学的是物理电子学,其实课程并没有教怎么设计电路,只教了一些电子电路方面的知识。在实验室里自学了PCB设计,只设计了2层板,现在都忘得差不多了。但是看原理图和芯片手册的能力还是有的。 2.我读的是软件专业,对软件设计挺感兴趣的,但是只学了C语言和数据库,出于兴趣做了不少竞赛题,没有能力参加竞赛,但是C语言练得很好。 3.在实验室和在第一家公司,设计过一些简单的PCI卡,写过一些windows驱动。 4.在第二家公司用51单片机做车载电话,开始走上纯软件的道路。 5.开始感觉到单片机的力不从心,于是辞职闭门研究了半年Linux,从如何操作red hat开始。步骤是先看懂,然后写裸板程序操作硬件,再分析u-boot。同时看懂并熟悉LINUX框架。写裸板的时候建议加强对中断的理解,内核就是利用中断来完成各种功能的。 6.分析完u-boot之后开始做简单的驱动编程,这时候我的能力还很薄弱。 7.开始在中兴通讯工作,工作了2年,写各种驱动,解决各种问题(驱动问题,帮助定位应用问题),能力得到了锻炼。总结一下要看的书: 1.硬件书籍:微机原理,数字电路,大学教材。 毕业好多年了,忘记名字了。2.Linux书籍:,老外写的那本
相关问答
Flash ROM是什么意思、?-ZOL问答应该是nand吧,nand更像硬盘而nor更像内存有用(0)回复zjb_99513824关机重启...亲,在刷机工具-左上角-浏览-高级设置-Fastboot脚本-更改为flash_all...
flash烧录和ic烧录?,IC烧录设备该怎么选,都来说说?[回答](烧uboot和内核)比如直接nanderase全擦除。然后再把文件写到内存tftp内存地址文件名然后再nandwrite进去的。根文件系统是把板子分区挂载起来后再烧...