TI工具, 将.out文件转成串口boot的.AIS

今天又查了很久的原因,最终定位问题是由于TI工具有问题。

检测出TI工具异常的步骤如下:

           1. \c642x_ais_utility\Example\docExample\Example genAIS,将该文件中的docExample_uart.ais用串口可以正常用串口BOOT

          2. 但是用自己的一个工程生成的.out文件,用该工具转成ais文件(63816字节数据量),用串口BOOT总是提示数据破损,于是我将数据中text段数据去掉(5853590110800000到该text段的Negative Pointer to Last Valid Command in Stream命令删除,保留其他的初始化段(.cinit ,.const ,.switch)EVM6424就能正常返回DONE, 现在能说明什么问题?说明程序段转化出问题了。

          如果用\c642x_ais_utility\Example\docExample\Debug.out文件用该工具转换成ais,估计不到100字节,这样的串口BOOT就正常。大一点工程转化,就会把程序段弄出问题。。(额外补充说明,我用的工程生成的.out文件用jatg下载到EVM6424RAM中可以正常运行,所以不用怀疑我的工程有问题).

         急需TI,能给一个正确的转换转换工具!!(我想把我的工程生成的.out文件传到帖子附件,不知道怎么传上来,就不能发出帖子了)

  • #1. 没必要重复发贴讨论同一问题,这对问题本身并不会有额外的帮助。

    #2. 从下面的e2e上的贴子来看,检查一下是genAIS.pl的版本,以及是否使能了CRC校验(这个通过AIS文件头的内容应该也能看出来),按下面的解释,如果加了CRC则会导致这种错误,因为bootloader处理来不及,又没有硬件流控制,主机一直发数据,则导致corruption.

    https://e2e.ti.com/support/dsp/davinci_digital_media_processors/int-dm64x/f/105/p/9272/37396#pi317326=2

    I got the same problem as Giancarlo's, in my case it's uart boot though.

    I found checking CRC, either 1 or 2  doesn't work, it causes CORRUPT.

    I also found that the genAIS.pl version 1.05 with C6424EVM has a bug,  which causes a follwoing error only with -crc 2 option.

    "Use of uninitialized value in subtraction (-) at genAIS.pl line 733."

     Then it doesn't put an Eable CRC(0x58535903) command at the begining of the AIS files.

    So it passes downloading succussuly because it doesn't actually check the CRC!

    genAIS.pl version 1.08 is Ok with the option -crc 2, it successufuly put Enable/Disable CRC as well as -crc 1 option.

    But the both options generate CORRUPT errors.

    So I guess that either of generating CRC in the genAIS.pl or doing it in ROM bootloader in DSP must be wrong.

    I'm using a following command line to generate AIS files.

    DOS>perl.exe genAIS.pl -otype txt -i led.out -crc 2 -o led_crc2.txt -bootmode uart

    The ActivePerl version is 5.8.7.

    http://processors.wiki.ti.com/index.php/Main_Page

    Think Over Before Asking.

    http://www.catb.org/~esr/faqs/smart-questions.html#goal

  • 回复 Tony Tang:

          搞了一个半月,对于这个问题我可以满美收工了。

          首先感谢TI的Tony Tang先生部分指导,感谢flashburn软件公司一定支持,感谢SDS公司知识的共享!

          实现的方法总结一下:

         方法1. 使用TI的NORWriter.pjt用CCS在线将ais格式直接固到flash.

         方法2 利用TI转换工具(根据map修改xx_cmd转换文件 ),将OUT文件转成ti的AIS,使用FlashBurn直接烧写到扇区0。

                    需要注意的是这个方法中,我是将bootloader代码中加入应用程序中, 实现将程序搬运到RAM中运行。 

         方法3:我做两个应用程序,1个是带以太网的烧写程序(并自带bootloader),1个是产品应用程序(也带1个bootloader),开机后先执行其中一个应用程序的boot开始代码由一个跳线引脚决定执行具体哪个应用程序扇区的bootloader,如果执行烧写程序,就可以远程通过以太网进行应用程序升级,不要供应商去现场升级。

        方法4:使用串口boot,我也调试成功,这样就可以不需自己写boot程序,由DSP自己的一级引导搞定,可以实现本地程序升级功能。我试过不需要关闭CRC都可以调试成功,只是有些处理需要注意既可。



                这些方法,我都实验通过....欢迎大家一起学习讨论!!!!!!!!!!!!!!!!!

               TI有些东西做的不够好,资料比较零散,不过学习是在于乐趣: 最后留一个QQ号码:409210521

     

  • 回复 dong wei1:

    @dong wei1   您好

    我想请教一下那个方法三是怎么去实现呢?我想了解一下思路,谢谢

  • 回复 user3726176:

            开机从flash启动,所以flash起始段要写一段自己的bootloader,boot汇编程序和判断运行程序固化到flash的入口。该程序中判断是否启动应用程序2,应用程序2中带有烧写flash程序+以太网+TCP协议+应用程序,可以在线升级。所启动失败,就boot应用程序1,改程序带EMAC+tcp协议+烧写flash程序,正常情况只启动应用程序2,只有失败了才启动应用程序1.

          OK明白了吗?

     

          不懂加我的QQ:409210521

  • 回复 dong wei1:

    @dong wei1   您好

    那个您说需要用汇编来编写代码,我想您有没有这个关于boot比较全面的文本资料呢?感觉现在资料比较乱,思路不是很清晰,麻烦您多多指教一下

    我的qq是:1071255400

  • 回复 Tony Tang:

    您好,请问C6655/6657支持用AIS boot吗?麻烦推荐一个比较简单的boot方式,以及资料介绍链接。谢谢。

  • 回复 wgt Qqian:

    最近刚刚用C6657,不清楚是否可以用AIS格式。听说好像不能用!