1、使用的是自己开发的板子,处理器是c6657,开发环境ccs5.3 ,实现EMIF16接口nand flash的多核程序启动加载。工具链使用的是在论坛上找到的nandwriter,烧写工程是nandwriter.out;
2、首先我试了单核的加载,上电后能够正确启动。查看工具链生成的烧写文件,发现文件的前面并没有boot参数表的内容,直接是_cint_00入口地址;没有boot参数表但是能够正确启动。
3、双核加载同样使用上面的工具链(nandwriter是一个单核镜像文件的工具链,修改成了双核工具链),上电后不能启动;文件依然没有参数表。
boot参数表是必须有的吗?如果是,但是为什么单核可以启动,双核不行?
boot参数表可以没有的话,镜像文件的格式应该是什么样的?
有可以提供的工具链或者烧写工程?
Allen35065:
双核加载的步骤
1. 将两个boot table合并成一个,入口地址为核0的启动地址,核0和核1的boot table主体部分合并;
2.将合并的table写入NAND;
3. 启动,核0的流程里需要把核1的入口地址写入核1的MAGIC address(L2的最后一个word),然后给核1发一个IPC中断启动核1。
du jianfeng:
回复 Allen35065:
多谢Allen Yin的回复!
关于你的回答我有2个问题再请教你。
1、你说的第2和第3步已操作过,我这里没有问题,就是你说的boot table是指boot parameter table,还是两个核各自的镜像文件。如果你说的是指boot parameter table,主体部分合并是不是指除过boot parameter table外的部分合并。
2、我之前的单核启动时的镜像文件是没有boot parameter table的,但是能启动。我双核的镜像文件生成流程:先生成各自核的镜像文件(主核程序中开始时执行写入辅核的入口地址和IPC中断)——去掉辅核文件头的入口地址——将辅核文件复制到主核文件的后面——修改文件的长度参数,完成后将这个文件烧入flash,上电不能启动;还有个方法就是修改工具链,查看后发现生成的文件格式和手动操作的格式一样。上面我所生成的双核镜像文件试试没有boot parameter table的,如果这个boot parameter table是必须的,能否提供例子或者说明?
谢谢!!!!
Allen35065:
回复 du jianfeng:
1. 指的是boot table,不是parameter table
2. 不需要boot parameter table,你需要去掉核0的最后的0x00000000结束符以及核1的入口地址,然后合并;如果还有问题,建议你连上JTAG看看PC指针在什么位置。
du jianfeng:
回复 Allen35065:
谢谢你的回复,双核的烧写文件是去掉了核0的最后的0x00000000结束符以及核1的入口地址,然后合并的,并修改了文件长度参数。上电连上仿真器后,DEVSTAT 寄存器中的值是0x11807,状态是正常的,BOOTCOMPLETE寄存器的值是0x00000001,即核0已经正确加载了,PC指针指向的是0X00800000后的范围(LOCAL L2RAM),是不是把程序记载到了LOCAL L2RAM 而不是各自核的L2RAM?该怎么修改?
Allen35065:
回复 du jianfeng:
一定要使用Global Address,你改一下两个核的cmd文件吧
du jianfeng:
回复 Allen35065:
谢谢Allen Yin的回复!
修改为Global Address是不是将核0 的中.cmd文件中L2RAM
MEMORY{ L2SRAM (RWX) : org = 0x800000, len = 0x80000 MSMCSRAM (RWX) : org = 0xc000000, len = 0x400000 DDR3 : org = 0x80000000, len = 0x20000000}
里面的L2SRAM:org = 0x800000修改为0x10800000,同样的方法修改核1为0x11800000。
但是之前尝试直接修改linker.cmd文件,会出现内存分配错误,如果是按照上面的方法来修改为Global Address的话,怎么来修改.cmd文件的?求指教,不甚感激!
du jianfeng:
回复 Allen35065:
你好,我将核0和核1的L2RAM 改为了全局地址0x10800000核 0x11800000,但是烧写进去后,上电还是不正常,只有核0的程序在正常运行。查看寄存器,还是只加载了核0,PC指针一直在核0的L2RAM。在核0的main程序开始时执行了写核1入口地址和给核1IPC中断的操作。请问哪里的问题呢?
谢谢
Allen35065:
回复 du jianfeng:
核1的段加载进去了吗,核1的入口地址是否是正确的全局地址?检查boot table核1的部分是否正确,如果已经加载到核1的内存里,则可能是入口地址或IPC中断不正确,也有可能核1已经跑了,但是跑飞了。这个需要调试。
Xu Tsou:
回复 du jianfeng:
du您好,
我最近也在调boot,spi的,一直没成功,也一直没弄明白程序烧进flash重新上电后怎么再通过CCS看寄存器的值,可否赐教?
谢谢
Xu Tsou:
回复 du jianfeng:
du您好,
我最近也在调boot,spi的,一直没成功,也一直没弄明白程序烧进flash重新上电后怎么再通过CCS看寄存器的值,可否赐教?
谢谢