SPI Nor Flash多核程序烧写

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

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

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

一、首先讲讲工具链:

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

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

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

b2ccs将*.btbl.i2c转换成.i2c.ccs,CCSV5 IDE接收的.dat格式,加载到DDR3中去。并手动将i2crom.ccs中的第9行51改为00。

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       //暂停时,将i2crom.ccs中的第9行51改为00

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      //暂停时,将i2crom.ccs中的第9行51改为00

byteswapccs i2crom.ccs spirom_le.dat

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

三、*.dat烧写过程

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 的命令下执行第一句代码。

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 中断的触发。

原文地址:https://www.cnblogs.com/xiaojianliu/p/8776386.html

时间: 2024-12-19 17:22:00

SPI Nor Flash多核程序烧写的相关文章

S3C2440 初步接触之程序烧写

使用OpenJTAG烧写:(裸板程序) 1.安装驱动 2.将 oflash.exe FTD2XX.dll 拷贝到 C:\Windows\system32 下.(oflash.exe 和 FTD2XX.dll 在 百问网JZ2440v2主光盘\windows\tools中) 3.然后在 Windows 命令行就可以直接使用了. 4.接线. 5.在命令 Windows 命令行中使用 oflash 烧写: 进入要烧写的文件所在目录 执行 oflash xxx.bin (xxx.bin 是指要烧写的那个

走进STM32世界之Hex程序烧写

多数51单片机(STC系列单片机)的初学者都知道,在51单片机初上电时,可以通过PC机上位机软件将程序引导至bootloader,从而将新程序的hex文件下载至单片机中,完成程序的升级或是更新.在32位Cortex-M3内核下的STM32单片机也是可以做到的.这个上位机软件叫做"Flash loader demonstrator":短接boot0与VCC后,再次复位即进入到升级模式(System memory boot loader). 我们需要先下载芯片烧录工具软件Flash loa

iMPACT错误提醒 “A Xilinx Application has encountered an unexpected error.It is recommended that you save any unsaved work in the event that this condition persists ...“程序烧写时点iMPACT突然崩溃

将错误窗口关闭, 双击Boundary Scan,跳出窗口”Do you want to continue and ...”直接关闭, 再跳出一个窗口“This device supports attached Flash PROM .....“窗口再直接关闭,再点击图示的SPI/BPI接口添加.mcs文件 原文地址:https://www.cnblogs.com/cx-qiao/p/11259536.html

在远程服务器上完成本地设备的程序烧写和调试(基于vivado ,SDK软件)

在使用vivado和SDK进行设计开发的时候,通常需要登录到远程服务器上进行,但是会遇到一个问题就是,所使用的开发板通常是连接在自己的电脑上(local-PC),那要怎么才能让运行在服务器上的设计软件检测到连接在本地的设备呢?Vivado开发套件提供了一个解决方法,就是使用Hardware Server,具体实现步骤如下: 1. 在local-PC上找到Vivado或SDK的安装目录,并在该目录下找到hw_server程序,具体路径为: <Vivado_install_root>\bin或者&

Jlink使用技巧之烧写SPI Flash存储芯片

前言 大多数玩单片机的人都知道Jlink可以烧写Hex文件,作为ARM仿真调试器,但是知道能烧写SPI Flash的人应该不多,本篇文章将介绍如何使用JLink来烧写或者读取SPI Flash存储器,JLink软件包含的工具中,有一个是JFlashSPI工具,这就是一个烧写和读取SPI存储器的工具了. 准备 要烧写程序或读取程序的的Flash芯片:SPI协议的Flash都可以,如W25Q128. JFlashSPI软件工具:在Jlink系列软件的安装目录下 JLink V9仿真器 要烧写的文件:

s3c2440 J-flash 烧写 NOR flash

视屏教程里是在NOR Flash 烧写了一个supervivi然后通过superViVi配合DNW下载Uboot程序到landflash第零块,由于我电脑室64位win7,官方提供的USB下载驱动不能正确安装,在网上找了个驱动,但是数值认证搞了半天都没通过,于是找到帖子,通过norFlash的uboot下载uboot到landflash中,于是先通过j-link下载uboot.bin到norflash,使用j-flash烧写,不适用ram的话速度实在太慢,使用ram烧写总是失败,教程上说是jli

刚接触开发板之烧写裸板程序

使用串口操作开发板的前提是开发板上已经有烧好的程序,因此开发板在没有烧好程序时,应先烧写程序.方法有: 1.使用并口工具烧写:接线(参考百问网JZ2440V2开发板使用手册),使用oflash烧写(速度比较慢),可烧写.bin文件,从新上电观察效果.可烧写u_boot. 2.使用openJTAG烧写,接线,使用oflash烧写(oflash烧写完后,会复位开发板). 3.使用Jlink烧写,请看如何烧写S3C2440裸板程序:JLink只支持烧写Nor Flash,不支持Nand Flash.要

烧写裸机程序

使用串口操作开发板的前提是开发板上已经有烧好的程序,因此开发板在没有烧好程序时,应先烧写程序.方法有: 1.使用并口工具烧写:接线(参考百问网JZ2440V2开发板使用手册),使用oflash烧写(速度比较慢),可烧写.bin文件,从新上电观察效果.可烧写u_boot. 2.使用openJTAG烧写,接线,使用oflash烧写(oflash烧写完后,会复位开发板). 3.使用Jlink烧写,请看如何烧写S3C2440裸板程序:JLink只支持烧写Nor Flash,不支持Nand Flash.要

Zigbee烧写程序说明

ZigBee(CC2530)程序烧写说明 注意:插座和连接器有干涉,需要用斜口钳减掉插头定位的突出部分. 注意:烧录器排线插座一定不能插反,红线要靠近CC2530处理器. 1.安装CC2530烧写工具 步骤如下: v        找到安装文件,首先解压缩swrc044s.zip文件 v        双击Setup_SmartRFProgr.exe开始安装 图 2.0 图 2.1 v        根据提示全部默认安装,直到安装完成,之后桌面上出现CC2530烧写软件图标 v        双