TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678 SPI 加载一直未解决的问题

您好,

   最近在调试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 这种方式可行,有些着急,还请各位高手指教一下!谢谢啦!

King Wang1:

你好,

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。

tthnny:

回复 King Wang1:

"1.编写待烧写程序,程序中专门写了一段.bootload段,分配在L2的起始地址0x00800000,此段代码的作用就是将Nor Flash(N25Q128A11)中烧写的应用代码按段读到L2中,最后再跳转到入口地址处."

这是应用程序代码,它本身就是要从Nor flash中加载的程序吧?  为什么它还需要一个.bootload段?(将Nor Flash(N25Q128A11)中烧写的应用代码按段读到L2中,最后再跳转到入口地址处)

xiaoyan Bian:

回复 tthnny:

您好tthnny,

     我们用EMIF 加载(也是外挂Nor Flash)时,这个.bootload段加上之后才能加载成功,这段代码是用汇编编写的,相当于一段引导代码,目的就是将Nor Flash中的代码按段读到DSP的L2中,并跳到入口地址处。

   请问,你们板子上的SPI 加载成功了吗?如果成功了,能否给我发一份整个加载所需的东西,谢谢啦!

xiaoyan Bian:

回复 King Wang1:

您好King Wang,

          我试过不加boot parameter table,直接烧写应用程序,但是不成功,如果确定可以不加boot parameter table,那这个烧写的代码应该就没有问题,问题在其他方面,我的bootmodepin[12:0]=0b0000000100110,这个设置应该也没有啥问题,因为上电之后,我用示波器测SPI管脚,有时钟信号,并且数据线也有数据,说明spi接口是正常工作的,还有就是烧写过程,这个就是将代码烧写到Nor Flash,然后再读出比较,错误数为0,这个也没有问题,三个方面都没有问题,但是加载就是不成功,请问还有什么建议吗?

Andy Yin1:

回复 xiaoyan Bian:

您好,

可以通过CCS链接看一下此时的PC寄存器指向的地方,查看相应memory看程序是否已经load成功,核实此时DSP的状态,同时对照bootloader code看一下是否理解有误,我这边也花时间对照看看再答复你。

King Wang1:

回复 Andy Yin1:

你好,

你可以使用如下方法解决:

1)查询加载后0x00800000是否有你要的代码内容。

2)查询MAGIC_ADDRESS是否为非空值。

如果两个都不是你想要的内容,那么应该是你转换成boot table或者放置到FLASH的地址不对,你可以将你转换的方式大概描述一下,或者将转换后的内容发上来大家一起讨论下!

谢谢!

xiaoyan Bian:

回复 King Wang1:

您好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处的的数据不太懂。

King Wang1:

回复 xiaoyan Bian:

你能将整个加载文档发出来么,生成文档的脚本也可以拿出来看下。比如下面的脚本(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:

回复 King Wang1:

不好意思,有事耽误了一会儿,下面附件中C6678_SPI文件夹是烧写的工程,SPIBootutility文件是转换工具,i2crom.dat是烧写的代码,烧到Nor FLASH的起始地址0x00000000.

tthnny:

回复 xiaoyan Bian:

你好,Xiaoyan Bian

根据你的描述,我觉得你的做法应该没有问题。magic address不为0,具体是多少呢?我曾经遇到类似的情况。

建议你把应用程序的.cmd修改一下,不要从L2起始地址开始映射,不妨从0x00830000开始存放程序,然后再把转换后的代码烧写到flash中,看一看结果如何?

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » C6678 SPI 加载一直未解决的问题
分享到: 更多 (0)