This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
最近在调试C6678 的SPI BOOT时遇到了一些问题,我用的是自己开发的板子,C6678是PG1.0的,下面是我的加载步骤:
1.编写待烧写程序,程序中专门写了一段.bootload段,分配在L2的起始地址0x00800000,此段代码的作用就是将Nor Flash(N25Q128A11)中烧写的应用代码按段读到L2中,最后再跳转到入口地址处.
2.将上面程序的.out文件用工具转换。(没有加boot parameter table).
3.将程序烧写到Nor Flash中后,BOOTMODE[12:0]=0b0000000100110.
但是,上电后,PC指针始终指向boot rom,SPI的寄存器表示SPI没有在复位状态,处于使能状态。
请问,上述步骤哪一步有问题啊?
SPI BOOT 不需要PLL fix吧?(因为 PLL 是bypass mode).
到底需不需要加bootparameter table啊?这个事情始终搞不清楚,我看Rom bootloader 中的源代码时,发现默认状态下有一个boot parameter table,但是在这个table中的option的值是0,代表boot parameter table,也就是说仍然需要用户再编写一个boot parameter table,我这样理解正确吗?
如果需要boot parameter table ,那我的参数表的格式是什么样的呢?能不能给我发一份?
由于我们的板子上没有I2C EEPROM,并且EMIF也没有外接Flash,因此目前就SPI BOOT 这种方式可行,有些着急,还请各位高手指教一下!谢谢啦!
你好,
SPI BOOT不需要PLL,boot parameter table的主要目的是配置一些需要的参数,如果boot parameter table中的参数你都可以使用默认值,那么就不需要配置。
你用工具转换后的是boot table,你应该将这些table烧写到特定的位置,如I2C Boot中应该烧写在EEPROM中的(0x80 * parameter Index)的地址。其中parameter Index是在BOOTMODE中配置的。SPI的地址我没有在文档中看到,不过建议你可以按照I2C的地址去尝试。
启动Boot之后,SPI会自动从地址去读取table。然后按照Table的类型去解析Table,最后当BOOTROM侦测到MAGIC_ADDRESS不为零的时候就会结束boot。
"1.编写待烧写程序,程序中专门写了一段.bootload段,分配在L2的起始地址0x00800000,此段代码的作用就是将Nor Flash(N25Q128A11)中烧写的应用代码按段读到L2中,最后再跳转到入口地址处."
这是应用程序代码,它本身就是要从Nor flash中加载的程序吧? 为什么它还需要一个.bootload段?(将Nor Flash(N25Q128A11)中烧写的应用代码按段读到L2中,最后再跳转到入口地址处)
您好tthnny,
我们用EMIF 加载(也是外挂Nor Flash)时,这个.bootload段加上之后才能加载成功,这段代码是用汇编编写的,相当于一段引导代码,目的就是将Nor Flash中的代码按段读到DSP的L2中,并跳到入口地址处。
请问,你们板子上的SPI 加载成功了吗?如果成功了,能否给我发一份整个加载所需的东西,谢谢啦!
您好King Wang,
我试过不加boot parameter table,直接烧写应用程序,但是不成功,如果确定可以不加boot parameter table,那这个烧写的代码应该就没有问题,问题在其他方面,我的bootmodepin[12:0]=0b0000000100110,这个设置应该也没有啥问题,因为上电之后,我用示波器测SPI管脚,有时钟信号,并且数据线也有数据,说明spi接口是正常工作的,还有就是烧写过程,这个就是将代码烧写到Nor Flash,然后再读出比较,错误数为0,这个也没有问题,三个方面都没有问题,但是加载就是不成功,请问还有什么建议吗?
您好,
可以通过CCS链接看一下此时的PC寄存器指向的地方,查看相应memory看程序是否已经load成功,核实此时DSP的状态,同时对照bootloader code看一下是否理解有误,我这边也花时间对照看看再答复你。
你好,
你可以使用如下方法解决:
1)查询加载后0x00800000是否有你要的代码内容。
2)查询MAGIC_ADDRESS是否为非空值。
如果两个都不是你想要的内容,那么应该是你转换成boot table或者放置到FLASH的地址不对,你可以将你转换的方式大概描述一下,或者将转换后的内容发上来大家一起讨论下!
谢谢!
您好King Wang,
您提供的上述两种方法我都试过了,0x00800000没有我想要的内容,MAGIC_ADDRESS不是0,但也不是入口地址,这就奇怪了。
我的烧写代码如下格式:
0x00500000(boot parameter table)
0x00320000
0x40200002
0x00010018
0x00040000
0x00000000
0x03200000
0x01f40000
0x04000000
0x00000000
0x00000000
。
。
。
0x0080a050(偏移地址为0x400)
0x0080ce60(boottable)
0x00000940
0x00800230
。
。
。
上述格式是小端的格式,我试过改成大端的,还是不行(在EVM板上使用大端格式是可以加载的),这个是由TI提供的工具转换来的,偏移地址0x400处的的数据不太懂。
你能将整个加载文档发出来么,生成文档的脚本也可以拿出来看下。比如下面的脚本(I2C out文件生成加载的脚本)
@REM generate boot table in CCS format
hex6x simple.rmd
bconvert64x -le simple.btbl simple.btbl.be
b2i2c simple.btbl.be simple.btbl.i2c
b2ccs simple.btbl.i2c simple.i2c.ccs
@REM generate the complete I2C image(I2C parameter + boot table)
myparser simple.i2c.ccs i2cconfig.txt i2cromfara.ccs
你好,Xiaoyan Bian
根据你的描述,我觉得你的做法应该没有问题。magic address不为0,具体是多少呢?我曾经遇到类似的情况。
建议你把应用程序的.cmd修改一下,不要从L2起始地址开始映射,不妨从0x00830000开始存放程序,然后再把转换后的代码烧写到flash中,看一看结果如何?
谢谢!
您好,tthnny
不好意思,magic address确实为0,地址看错了,一直看的是0x0087ffc0,马虎大意了。请问一下你们的SPI 加载成功了吗?如果成功了,可否传授一下经验?谢谢啦!
您好,不好意思,我理解错了,我的SPI boot也不成功,请问你是否在EVM6678板上调通了SPI boot?
我烧写到Flash里的内容包括一个boot parameter table和boot table(每段长度为256字节,含size+address+section data),上电后连接仿真器看到参数表已经成功加载,但是boot table的所有段都没有加载,不知道问题出现在哪里?如何实现代码搬移?
如果您已经在EVM板上实现了spi boot,可否共享下经验~ 谢谢!
您好,不好意思,我理解错了,我的SPI boot也不成功,请问你是否在EVM6678板上调通了SPI boot?
我烧写到Flash里的内容包括一个boot parameter table和boot table(每段长度为256字节,含size+address+section data),上电后连接仿真器看到参数表已经成功加载,但是boot table的所有段都没有加载,不知道问题出现在哪里?如何实现代码搬移?
如果您已经在EVM板上实现了spi boot,可否共享下经验~ 谢谢!
您好tthnny,
我们的问题解决了,问题在于spi 加载参数中的mode没有设置正确,开始我们选的是0,改成1后就好了(读写时序),你可以参考bxy.zip中的程序,其中工具SPIbootutility转换完后,要把i2crom.ccs中的0051改成0000,还要将所有数据改成大端的模式,,0x12345678改成0x78563412
SPI bootmodepin[12:0]=0b0101000000110
spi bootmodepin[12:0]=0b0101000000110
你好。我最近也在看这方面的资料,方便交流一下吗?我qq 616618107
pcnn您好,
C6678默认采用boot parameter table方式。这种方式下,在进入SPI boot后,首先根据BOOTMODE_PIN及RLB中默认参数获得一组默认的boot parameter table,完成SPI的配置,并从相应的地址读取新的boot parameter table,然后重新进入RBL。所以需要用户在spi接的flash中烧写一段boot parameter table。
xiaoyan您好,
帮忙确认两个问题:
1. 从你提供的压缩包中,没有找到您的boot parameter table,是在哪个文件中呢?
2. 你所说的数据格式0x12345678转换成0x78563412是在哪一步做的,我看了RBL没发现对endian的格式有限制要求?
帮忙解释一下吧,非常感谢
xiaoyan Bian
你好,仔细看了你们的帖子,感觉你那边应该是对EMIF16 NOR FLASH引导方式成功使用了,能不能提供一份简单示例工程,我这边一直没有成功该模式。
十分感谢!
我在论坛内发了个帖子说明我的实验环境:
www.deyisupport.com/.../13433.aspx
QQ:85942591
EM:tangbo611@hotmail.com
您好,请问我按照您的方法调试,spi一直不通,id都读不上来
不知道有什么关键地方又问题么?
http://www.deyisupport.com/question_answer/f/53/t/16119.aspx
Andy你好:
我们用的EVM板子是6670的, 想通过SPI NORFLASH直接加载. 我们尝试根据你给的SPI boot的例程的步骤对CCSv5.3生成的.out文件进行操作.第一步能通过hex6x的工具成功转换为btbl的格式.到了第二步要用b2i2c工具转换成.btbl.i2c格式的时候,b2i2c提示"Max input array size exceeded".我们用的.out文件大小为2,614KB,生成的.btbl文件大小为632KB.
问题:b2i2c工具对于文件输入是否有大小限制?如有,限制的大小是多少?对于该情况该如何操作?我的操作是否有误?谢谢!
Karlphy
祝工作顺利!
xiaoyan Bian,你好:
很高兴看到你已经搞定了SPI NOR FLASH的启动,我最近也在学习SPI NOR FLASH的启动,研究了很久,这帖子来回也看了好多遍,自己太笨了,楞是没弄明白,你能详细讲解下SPI NOR FLASH的启动流程吗,或者是提供一份可能正常启动的代码工程,我想参考下,不甚感激!!!
邮箱是:xiaogeng04@126.com
问题1 我觉得不能 同求专家回答
问题2 这个帖子或许对你有帮助 我在上面留言了 有些问题也没得到解决
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/8065.aspx?pi239031348=1
您好!
我用您的附件里的程序,用nor_writer工程烧进Nor flash后,console显示NOR programming completed successfully。
请问这是代表烧写成功吗?
我怎样在掉电后再上电来查看SPI boot是否成功呢?谢谢!