你好:
我最近在用TI的C6678开发板做一些验证,现在需要做spi nor flash boot。在本网站上也看了很多帖子,并仔细看了http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/7411.aspx这个帖子里面的内容,但还是有几个疑问想请教一下各位专家。
第一个问题:
按照帖子里各位所讨论的信息,我是否可以理解c6678的spi加载过程为,先要在工程里增加一个boot段用来搬移flash中的执行代码,然后生成整个工程,把.out文件用hex6x转换为.hex文件,再建一个c6678 spi烧写nor flash的工程,先从nor flash的零地址开始写一个Boot Parameter Table,再把先前的.hex文件读取出来烧写到引导参数表之后的地址中,最后设置开发板的拨位开关为spi加载,重新上电。不知道我的理解是否正确?
另外按照TI的bootloader手册中3.6.1的表3-27所讲SPI Boot Parameter Table第一个参数Options的字节偏移数量为12,是否引导参数表在flash中存放的实际地址也要偏移12个字节,也就是从0x000000C地址开始存放,前面各个字节的值都为0?而且Options的值应为0x00?
第二个问题:
我在网站上下了一个spi的例程:4571.SPI-boot。打开看了,让我很疑惑的是在主函数中各部分初始化完并擦除flash后,就是写数据到flash这句代码
//Writes data to the NOR flash
Write_val = nor_write(&gDeviceNor,0x0,0x6f40,(uint8_t *)Write_data0);//Write_data0
Write_data0:是定义的地址为0x00820000,难道这个例程是把正在运行例程程序段之外的乱码写入到flash中?
还有boot paramet table是在何时写入到flash中的?写入到flash的哪个地址?没有看出来
另外
uint32_t * Write_data1 = (uint32_t *) 0x80200000; //存放要往NOR Flash中写的数据
uint32_t * Read_data1 = (uint32_t *)0x90200000; //存放从NOR Flash中读回来的数据
这两句定义的地址从C6678数据手册中的存储器映射中是属于DDR的地址,在整个例程中就没看到有任何地方读取应用程序代码并存储到DDR3中,注释的说法又是怎么回事?
一没有读取任何有用的执行代码文件来写入到FLASH中,二定义的数据保存与写入地址又是DDR3的,写入flash中的不是乱码就是零值,实在想不通该例程是怎么实现的spi flash boot,运行该程序后,再把开发板重新上电能运行起来吗?还请各位专家指点。
第三个问题
在TI的boot手册中看到,core0在加载时其它core处于等待状态,core0完成后触发ipc中断来唤醒其它core。那么是否是说前面提到的core0的boot段中还要有搬移其它core执行代码的汇编程序,在搬移完core0的代码后,依次搬移core1~core7的执行代码,在core0的执行代码中给其它每个core产生一个ipc?
另外如果我要把各个core的执行代码放到它们各自的L2 SRAM中,而不是0x00800000开始的LOCAL L2 SRAM,请问core0在搬移执行代码时是否能直接访问各个core的L2 SRAM,这个在TI的手册中似乎没有看到有说明,也许是我看漏了,还请讲解一下。
fei lau:
请问您实现了EVM板上的SPI 直接boot吗?