【DSP开发】TMS320C66x DSP SPI Nor Flash的程序烧写

时间:2022-09-25 19:53:17

经过一段时间的研究终于把TMS320C6657单核和双核的SPI Nor Flash的程序烧写调通了。工具都是前辈的工作,有需要的可以留下邮箱,我有空可以发。

原理参考钱丰的《TI c66x 系列DSP 多核BOOT 的研究》论文。

通过Nor flash 烧写加载程序的全部流程:(在no-boot模式下)

【DSP开发】TMS320C66x DSP SPI Nor Flash的程序烧写

一、首先讲讲工具链:

【DSP开发】TMS320C66x DSP SPI Nor Flash的程序烧写

hex6x 配合.rmd文件(有几个.out文件就需要几个.rmd文件,描述输出控制、引导选项、存储器选项等内容)生成片上引导加载器加载程序所需的引导表,输出文件为*.btbl

mergebtbl将*.btbl按照一定的顺序链接起来

b2i2c 将*.btbl转换成i2c/spi格式,把boot表划分成0x80字节块并附加长度(length)和校验码(checksum)

romparse 合并boot表和boot参数表,参数配置表文件*.map作为输入。

byteswapccs将.dat转换成ROM Bootloader代码能够识别的大端模式

二、将工具链写成批处理文件

1.单核.dat文件生成

hex6x simple.rmd

b2i2c simple.btbl simple.btbl.i2c

b2ccs simple.btbl.i2c simple.i2c.ccs

romparse nysh.spi.map

pause       

byteswapccs i2crom.ccs spirom_le.dat

2.双核.dat文件生成

hex6x core0.rmd

hex6x core1.rmd

mergebtbl core0.btblcore1.btbl multi_core.btbl

b2i2c multi_core.btbl simple.btbl.i2c

b2ccs simple.btbl.i2c simple.i2c.ccs

romparse nysh.spi.map

pause

byteswapccs i2crom.ccs spirom_le.dat

蓝色与单核.dat文件生成不同,其他相同。

三、*.dat烧写过程

【DSP开发】TMS320C66x DSP SPI Nor Flash的程序烧写

1. 2个led测试工程,成功编译并生成2个.out文件,生成.out 文件必须命名为core0.out 、core1.out

2. 将2个.out文件拷贝到SPI_Bootloader工具链路径下,双击spibootMulticore.bat批处理文件,开始生成文件,得到spirom_le.dat

3. 将evm板调成no-boot 模式,拨码开关对应 SW3~SW5 1000  0000 0000  0000 (0 对应on  1对应off)

4. 打开MCSDK自带的nor-writer工程,将工程bin文件夹下的nor_writer_input.txt 打开,修改输入文件名为spirom_le.dat 并将spirom_le.dat拷贝到mcsdk_xxxx\tools\writer\nor\evmc667xl\bin路径下

5. 链接工程,等PC指针停在main函数入口,打开view--memory browser,输入0x80000000,load memory 选择spirom_le.dat,(自动)勾上Use the header... 再次确认start address 为0x80000000,length为spirom_le.dat的长度(单位是word) 开始往DDR里灌数。

6. 烧写工程run,注意console输出  显示与length长度大小相同的文件烧入flash,则烧写成功,此时单位是字节。

7. 最后拨码开关拨到ROM SPI boot模式下,SW3~SW5 1011 0000 0010 0000,断电重启

四、多核启动过程

C66x DSP 内部有一个固化的ROM,里面存放着boot 代码(ROM bootloader)。每当DSP 启动时,会自动从这里读取代码并执行。这里执行的代码是固化的不可更改的,其作用就是根据DSP的管脚配置方式对核进行初始化(比如PLL 等)和完成不同模式的Boot 处理。所有的core 执行同一份代码。不同的core 在执行的时候通过DNUM(核编号索引)来去做区分。初始化外设的操作由 core0来完成。所以core0初始化其他外设的同时,其他core都会执行相关的代码映射IPC 中断,并配置相应的寄存器,然后进入IDLE
状态,等待core0 的IPC中断发起。简言之,其他核是在core0 的命令下执行第一句代码。

【DSP开发】TMS320C66x DSP SPI Nor Flash的程序烧写

Boot Magic 地址是每个core 各自一块固定的内存。该字存放的是各个core 初始化之后需要跳转到的c程序入口地址 _c_int00()。TMS320C6657/TMS320C6670的Boot Magic地址是0x1x8FFFFC,因为他们L2 RAM大小为1MB。TMS320C6678的Boot
Magic地址是0x1x87FFFC,因为L2 RAM只有512KB。

如果多核DSP 是由同一套工程分别编译,那么每个核内存分配完全相同。core0 在读取自己核的Boot Magic 地址(0x108ffffc)后,加上0x0*000000 后就可以得到其他核的Boot Magic 地址(*为核号)。但是如果各核编译各自独立工程,各变量内存映射关系不再相同,那么就无法从core0 的Boot Magic 地址里的值去推算其他核相应地址。这个时候只能事先记录下各核的 Magic地址,然后写死在核 0 的用户初始化代码上。

在完成所有上述操作后,core0 需要对每个核的IPCGRx 寄存器写中断以唤醒其他核的正常运行状态。IPCGRx 寄存器的31-4 比特位是IPC 中断源索引,最多可支持多达28 个中断源,文中例程可以设置为全0;比特3-1 是保留位,可以任意赋值。因此只要对最低比特赋1 就可以完成IPC 中断的触发。

【DSP开发】TMS320C66x DSP SPI Nor Flash的程序烧写的更多相关文章

  1. MDK972-EK开发板裸调试设置和裸机程序烧写(转)

    硬件平台:MDK972-EK开发板编译调试软件:KEIL uVision4仿真工具:JLINK V7/V8   本例子从串口输出信息,如图:       KEIL uVision4调试设置如图所示: ...

  2. 【DSP开发】DSP能用VS2010生成的链接库文件吗?

    [DSP开发]DSP能用VS2010生成的链接库文件吗? 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:可能这个问题让行家看上去就会莞尔一笑,但是很多 ...

  3. DSP/BIOS使用之初窥门径——滴答时钟及烧写Flash

    操作平台和环境 DSP型号:TMS320C6713 仿真器:XDS510PLUS Flash型号:AM29LV800BT或AM29LV800BT都试过(一般接口一样,区别不大) RAM型号:MT48L ...

  4. 【DSP开发】DSP COFF 与 ELF文件

    本文介绍了C6000最新的v7.2或者之后的编译器如何支持ELF(EABI)和COFF-ABI格式,首先由ARM引入嵌入式(Embedded) EABI的介绍,之后比较了COFF-ABI和EABI的区 ...

  5. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  6. 【DSP开发】DSP程序优化

    此文是在http://blog.csdn.net/guanchanghui/article/details/1181851基础上,通过自己的学习理解修改而来.暂且算作是自己的原创吧.如有侵权,联系,立 ...

  7. 【DSP开发】DSP通用并行端口uPP

      这是翻译TI官方文档<KeyStone Architecture Universal Parallel Port (uPP)>SPRUHG9有关通用并行端口uPP的内容(除寄存器部分) ...

  8. Davinci DM6446开发攻略-UBOOT-2009&period;03移植2 nand flash的烧写

      很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-bo ...

  9. 使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法

    1. 简要说明 JLink的调试功能.烧写Flash的功能都很强大,但是对于S3C2410.S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢:烧写Nan ...

随机推荐

  1. MySQLFabric连接的编码问题

    今天解决的一个小问题.最终的解决方案很简单,主要是讲一下解决问题的思路. 测试人员在服务器上测试,页面提交的中文内容存入数据库中以后,是乱码. 开发人员在本机上测试,没有问题. 服务器上使用的是Mys ...

  2. springday04-go1

    springmvc02:1.创建项目,导入jar包 2.复制xml文件到src下 3.在web.xml中配置DispatcherServlet(代码一致) <?xml version=&quot ...

  3. hdu 5101 Select

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5101 Select Description One day, Dudu, the most cleve ...

  4. Redis 命令 - Sets

    SADD key member [member ...] Add one or more members to a set 127.0.0.1:6379> SADD foo hello (int ...

  5. Quick Cocos2dx MVC初步

    今天看到了自己之前两年前写的一个地图编辑器, 写了不到一半就放弃了, 但是还是github上的小伙伴fork了, 真的感觉对不起那位伙计, 同时也鄙视一下一直以来懒得要死的自己, 希望这个demo不要 ...

  6. Nodejs进阶:服务端字符编解码&amp&semi;乱码处理

    写在前面 在web服务端开发中,字符的编解码几乎每天都要打交道.编解码一旦处理不当,就会出现令人头疼的乱码问题. 不少从事node服务端开发的同学,由于对字符编码码相关知识了解不足,遇到问题时,经常会 ...

  7. &period;net扩展方法

    http://www.cnblogs.com/landeanfen/p/4632467.html 看了博客才知道定义一个Util工具类并且在工具类里面写静态扩展方法并不是最好的选择.

  8. boost&colon;&colon;function用法详解

    要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从 "boost/function/func ...

  9. spark 分析日志文件&lpar;key&comma;value&rpar;

    Spark读取日志,统计每个service所用的平均时间 发布时间:2015-12-10 9:54:15来源:分享查询网 获取log日志,每个service以“#*#”开头.统计每个service所需 ...

  10. PowerMock&plus;SpringMVC整合并测试Controller层方法

    PowerMock扩展自Mockito,实现了Mockito不支持的模拟形式的单元测试.PowerMock实现了对静态方法.构造函数.私有方法以及final方法的模拟支持,对静态初始化过程的移除等强大 ...