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 加载一直未解决的问题

您好,

   最近在调试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

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

  • xiaoyan 您好,首先恭喜你了。其次还想向你请教一下,我对你在外部rom中所烧的PARAMETER table不太理解,能否解释一下,谢谢

  • 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的格式有限制要求?

    帮忙解释一下吧,非常感谢

  • 请问可否重新上传一下您SPI引导成功的例程,您所提到的附件好像没有了,非常感谢!

  • Andy Yin您好,

    不知您是否还存有帖子上加载成功的压缩包,可否再上传学习一下,非常感谢

  • xiaoyan Bian

    你好,仔细看了你们的帖子,感觉你那边应该是对EMIF16 NOR FLASH引导方式成功使用了,能不能提供一份简单示例工程,我这边一直没有成功该模式。

    十分感谢!

    我在论坛内发了个帖子说明我的实验环境:

    www.deyisupport.com/.../13433.aspx

    QQ:85942591

    EM:tangbo611@hotmail.com

  • 您好,

    参考SPI boot。

  •  您好,请问我按照您的方法调试,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

  • xiaoyan Bian,您好!向您请教几个问题:

    (1)、spi启动模式下可以连上仿真器吗?我试了,连不上仿真器!

    (2)、能给个完整的工程吗?谢谢!邮箱:nashixmy@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是否成功呢?谢谢!

  • 你好,我想问一下boot parameter table中第二行的0x00320000是怎么来的,求指教

  • MAGIC_ADDRESS指的是哪里的地址