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.

tms320c6748如何固话两个代码到nand flash中去呢?

那个为了防止我在远程更新程序固件的时候突然断电的情况和长期只用过程中nand flash有坏块导致的程序不能运行的情况,请问我那个可以固话两个代码到nand flash中去,防止一个程序不能运行了还能跳转到另一个程序中去运行呢?请教各位能不能提供一个思路

  • 好像上面语句不太通顺啊。为了正确理解你的需求,麻烦再描述一下你的问题吗?

  • 目的:为了防止远程更新程序的时候我的板子变成砖

    想法:想固话两个不同的代码到nand flash中去,如果第一个代码不能正常运行的情况下,可以启用第二个代码来挽救一下让程序先运行起来的情况

  • 首先呢,NAND boot模式本身支持多个备份,从block 0到block31,如果一个image小于一个block,可以支持最多32个备份,这是为了防止NAND的bit反转特性变砖头。详情请见勘误解表sprz304h的 Advisory 2.3.24 Boot: ECC Data Error in Spare Area Causes NAND Boot Failure

    你的问题是在这个基础之上的软件架构的设计。意思是说你得先考虑上面这一条并实现它,再在这个基础之上来实现你的软件的功能。

    一般的做法是软件上做一个二级boot,用二级boot升级应用代码,而二级boot不变。应用代码则是你可能需要更新的部分。这样在更新应用时出了问题,二级boot还是可以重新来过的。

  • @Tony Tang

    1、那个我有点不能理解的是,在刚开始的时候需要分两次烧写代码吗?用AISgen_d800k008 这个工具生成.ais文件,先烧写一个二级boot代码然后再烧写一个升级的应用代码吗?如理解有错误请多多指点

    2、就是我看了一下那个您提到的文档,可能还不是特别能够理解,请问还有其它关于boot的文档资料吗?

  • kai zhao1 说:
    1、那个我有点不能理解的是,在刚开始的时候需要分两次烧写代码吗?用AISgen_d800k008 这个工具生成.ais文件,先烧写一个二级boot代码然后再烧写一个升级的应用代码吗?如理解有错误请多多指点

    可以这么说吧。

    kai zhao1 说:
    2、就是我看了一下那个您提到的文档,可能还不是特别能够理解,请问还有其它关于boot的文档资料吗?

    boot要那么多文档干嘛,你能让芯片boot起来就行了,剩下的是你的软件要实现的事了。

  • 您好  Tony Tang

    1、那个我想问一下那个二级boot是必须要用汇编写吗?我看到您在一个帖子上面说

    http://www.deyisupport.com/question_answer/dsp_arm/c6000_dsp/f/32/p/119424/329560.aspx#329560

    从上面cmd文件来看,它的意思是"bootload"段是一个二级boot程序,定位到NOR flash 0x42000000,即从0x42000000开始运行的。所以这里的启动模式肯定不是AIS,而是直接从EMIF flash启动。这里想达到的目的是通过汇编写一个二级boot,与应用程序放在一个工程里,将二级boot通过cmd定位到flash的开始部分,以达到直接启动的目的,二级boot启动后,搬移后面的应用程序再跳到应用程序。

    2、我能不能用ti提供的StarterWare中的bootload  c语言方式进行编写呢?

  • kai zhao1 说:
    与应用程序放在一个工程里,

    重点是这句话,你如果不是想要放在一个工程编译,你想怎么做随你。

    kai zhao1 说:
    2、我能不能用ti提供的StarterWare中的bootload  c语言方式进行编写呢?

    可以,随便你。知道自己要做什么就好

  • @Tony Tang

    1、那个我通过nandwriter工程将我需要更新的代码放到第6个block中去(我的代码是通过AISgen_d800k008 生成的ais文件)请问这样可以吗?

    2、我在前面的基础上使用二级boot程序来读取我烧写到第6个block中的代码,但是好像程序执行的时候返回一个错误的标志,提示说是没有找到那个代码?请问我应该怎么进行下一步验证我的错误在哪边呢(主要就是思路)?

  • kai zhao1 说:
    我在前面的基础上使用二级boot程序来读取我烧写到第6个block中的代码,但是好像程序执行的时候返回一个错误的标志,提示说是没有找到那个代码?

    这个二级boot你是有源码的,你是可以看到他是怎么判断是否有效的。这个二级boot就不是用来解释AIS格式的。

    这个二级boot好像是结合tiimage.exe用的,用tiimage.exe将.out转成bin。

    跟你学习一下,你是怎么用的这个bootloader的?C6748的starterware里build下没看到有bootloader工程,AM335x的starterware里到是有bootloader工程。

    上面的信息也是从AM335x starterwar例程的post-build steps里的信息看出来的。看上去很复杂的样子,不知道有什么必要搞这么复杂。

    "${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat"  "../../../../../../../binary/armv7a/cgt_ccs/am335x/beaglebone/demo/${ConfigName}/${ProjName}.out"  "../../../../../../../binary/armv7a/cgt_ccs/am335x/beaglebone/demo/${ConfigName}/${ProjName}.bin"  "${CG_TOOL_ROOT}/bin/armofd.exe"  "${CG_TOOL_ROOT}/bin/armhex.exe"  "${CCS_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe" & "../../../../../../../tools/ti_image/tiimage.exe" "0x80000000" "NONE" "../../../../../../../binary/armv7a/cgt_ccs/am335x/beaglebone/demo/${ConfigName}/${ProjName}.bin" "../../../../../../../binary/armv7a/cgt_ccs/am335x/beaglebone/demo/${ConfigName}/${ProjName}_ti.bin"

  • @Tony Tang

    那个我是按照照片中的bootload来操作的

    1、这个tiimage.exe工具有没有详细的说明方式呢?

  • 我知道是这个bootloader目录,可是里面没有工程,只有代码,没看到哪里说怎么用。在AM335x的starterware里的userguide里有简单描述。

    我就没见什么人用过这个东西,明白原理之后,自己实现呗。

    When a bootloader/application is built from any toolchain, bootloader/application binary image
    binary/armv7a/gcc/am335x/<EVM>/<bootloader/app_folder/<build-configuration>/<app_name>.bin is
    automatically converted to
    binary/armv7a/gcc/am335x/<EVM>/<bootloader/app_folder>/<build-configuration>/<app_name>_ti.bin.
    • Any binary image can be converted to this special format using the image converter application located at
    /tools/ti_image/. The Usage of the tool is described at usage of tiimage tool