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

K2GICE板子烧写FLASH的问题

K2GICE板子里面已经有从UART引导的代码了,我把BOOT模式拨码开关设置成从UART引导后,串口调试助手那边就会一直打印字母C,CCS版本是9.3,PDK版本是pdk_k2g_1_0_16,SDK版本是sdk_rtos_k2g_6_03_00_106,昨天差不多看了一天的SDK的文档,按照文档说明,使用ti\ccs930\ccs\tools\compiler\ti-cgt-arm_18.12.4.LTS\bin\armhex.exe  和其它几个工具,将我用CCS编译得到的.out文件转换成了.bin格式的文件,然后用命令行启动uniflash工具,通过UART给板子加载代码,结果就一直看在transfer to flash programer…就不动了,后面我改成在uniflash用XDS220U加载,这次程序是烧写到板子了,也正确运行代码了,但一断电,程序就没了,说明没有烧写到板子上的QSPI  flash 器件上,之后又尝试了好几种方法,还是不行,SD卡加载的方法也不行,也试过直接从SD卡引导,也不行,代码写入SD卡插上后,板子没任何动作

Shine:

请尝试用JTAG加载\pdk_k2g_1_0_13\packages\ti\boot\writer\qspi_flash目录下的writer烧写试试。

Nancy Wang:

是参考的以下的文档吗?
software-dl.ti.com/…/index_Foundational_Components.html
烧写完启动之后,连上串口看一下打印信息是什么?

user18914063:

回复 Nancy Wang:

就这个问题,今晚我试了下采用SD卡来引导,先不进行FLASH的烧写,把我做的步骤仔细再做了一次,按顺序如下:
一文档 Processor SDK RTOS 06_03_00_106提到要从SD卡引导目标,SD卡中要具备app 和 MLO这两个文件,在文档第4部分有这么一段叙 述4.6.3.5.6.1.1. Preparing the SD card(1)To boot the target, the SD card needs to be bootable. Follow the steps at Creating bootable SD card in windows or Creating bootable SD card in Linux.(2) Copy “MLO” and “app” to your SD card.MLO is the SBL formatted by the aforementioned tools. A pre-built MLO can be found at: <PDK_INSTALL_DIR>/packages/ti/boot/sbl/binary/evmK2G/mmcsd/binapp is the target application to be booted and also formatted by the aforementioned tools. (Note that the tools for making the bootable MLOand the loadable app are different).
由叙述可见,MLO文件可以不用自己重建,于是在我的电脑中找到G:\ti\pdk_k2g_1_0_16\packages\ti\boot\sbl\binary\iceK2G\mmcsd\bin这一目录下,拷贝了已存在的MLO文件到SD卡中

二我用的是CCS9.3,可能前几天我看其它文档时,对CCS做过一些修改,所以我现在编译工程后,在文件夹里面会自动产生名为app的 二进制文件,作为尝试,我把这个app文件拷贝到SD卡中,然后把卡插入iceK2G板子,连接好串口线,上电,串口调试助手显示如下信息:[01:24:41.899]收←◆
**** PDK SBL ****
SBL Revision: 01.00.09.02 (Apr 20 2020 – 18:21:58)

[01:24:41.979]收←◆Begin parsing user application

[01:24:42.187]收←◆Jumping to user application…

如果程序正确执行了,板子上的相关LED会闪烁,成功执行完成后,代码里有这么一段UART_printStatus("\n All tests have passed \n"),串口调试助手 会显示 All tests have passed,在用调试器下载进行仿真调试的时候,程序执行是没任何问题的, All tests have passed这条信息也会显示在调试助手上
三如上,SD卡执行不成功,于是怀疑CCS生成的app文件有问题,转向Processor SDK RTOS 06_03_00_106文档中介绍的制作app的方 法,如下:4.6.3.5.5. Making Loadable User Application image (app)For converting the compiled .out files to a format loadable by TI’s Secondary Boot Loader (SBL), you must follow these two steps:
1. out2rprc.exe [.out file] [rprc output]2.MulticoreImageGen.exe LE 55 [output name] 0 [rprc output]Out2rprc.exe and MulticoreImageGen.exe are tools supplied by TI and can be located in the <PDK_INSTALL_DIR>/packages/ti/boot/sbl/tools folder. “rprc output” can be any spare name of your choosing. “output name” can also be any name of your choosing.
The ‘0’ used in step 2 refers to the Core ID to boot. By default, ‘0’ is MPU (Cortex A15) core 0. You can input a different value to boot to other cores. Valid values are:
Core ValueMPU Core 0 0DSP Core 0 5于是在我的电脑中找到如下路径 G:\ti\pdk_k2g_1_0_16\packages\ti\boot\sbl\tools,依次找到了out2rprc.exe和MulticoreImageGen.exe这两个可执行程序,按1和2的顺序,我的工程是选择的arm处理器建立的,故这里第2步中的处理器ID号我选择的是0,在命令行中制作并得到了[rprc output]文件和 [output name]这两个文件,其中[output name]我直接将其命名为app,于是最终得到app文件,将其拷贝至SD卡中,覆盖之前的app文件,SD卡中已存在的MLO文件没动,插卡,接串口线,上电,串口调试助手的打印信息依然与第一步一样,板子没有运行起来。
上面的步骤中,CCS都是建立的是Debug工程,然后将工程改为release,重复上面的步骤,结果还是一样,目前这就是我遇到的情况,看看TI工程师能不能帮忙解决下,非常感谢

另外,对于Shine提到的尝试用JTAG加载\pdk_k2g_1_0_13\packages\ti\boot\writer\qspi_flash目录下的writer烧写,目前我只安装了1_0_15和1_0_16两个版本,去相关路径下发现我的路径是这样的G:\ti\pdk_k2g_1_0_15\packages\ti\boot\writer\qspi_flash,qspi_flash这个路径下包含了三个文件夹分别是: evmk2gincludesrc,其中只有evmk2g这个目录下有个名为qspiflashwriter_evmk2g.out的文件,尝试了下在CCS中进入调试模式,然后点击RUN先加载这个out文件,结果报错,说是目标不匹配,我的板子是iceK2G,应该是 evmk2g 板子和我的板子硬件电路不兼容所致
对以上问题,我猜测是app文件中bootloader定位到芯片内部的地址不对,但这个地址怎么查看,怎么修改,就完全不知道怎么操作了

user18914063:

回复 user18914063:

今天我在CCS里面新建了一个ICEK2G的DSP裸机工程,在调试状态下成功点亮板子上的LED,然后我采用1. out2rprc.exe [.out file] [rprc output]2.MulticoreImageGen.exe LE 55 [output name] 0 [rprc output]这两个步骤把工程编译得到的.out文件转换成了app文件,其中第二步中Core ID因为我的是DSP工程,故选择的是5,然后将app复制到SD卡中,卡里面已存在有之前复制的MLO文件,这次板子顺利从SD启动成功,板子上的LED按照程序设定周期性的闪烁,表明程序是成功运行了。想到之前的PDK里面的测试,都是建立在ARM核上的,所以我想会不会和选择的核心不同从而导致代码不能从SD卡运行,带着这个想法,找到了之前在pdk_k2g_1_0_16中用pdkProjectCreate.bat创建的DSP工程,导入其中一个LED控制的范例,导入CCS,编译,然后进仿真器调试模式,板子上的LED按程序预定的开始周期性闪烁,调试成功。接下来,继续 1. out2rprc.exe [.out file] [rprc output]和 2.MulticoreImageGen.exe LE 55 [output name] 0 [rprc output]这两步,得到app文件,复制到SD卡中,覆盖掉之前的app文件,插卡,板子上电,这次代码终于成功的从SD卡启动运行。
带着疑问,我继续创建一个基于ARM核的裸机工程,同样在调试状态下点亮了LED,但得到的app文件复制到SD卡后,插入板子同样不能运行。
综上,我的结论是,无论是PDK中创建的基于RTOS操作系统+ARM核的程序,还是我自己建立的ARM裸机工程,仿真运行都没问题,但得到的app复制到SD卡中无法运行,而PDK中基于RTOS系统+DSP核的程序,和我自己建立的DSP裸机工程,仿真运行和从SD卡中运行都完全没有问题,这其中主要区别是DSP和ARM各自的CMD文件有所区别,ARM中的CMD文件是后缀名为lds的文件,我在工程中仔细看了这个文件,也看不出个什么问题,但我相信问题应该就出在这里,对DSP的CMD文件相对比较熟悉,这个ARM的lds文件则比较陌生,不知道我以上的分析是否正确,希望TI工程师能给予帮助,主要是要把板子跑起来,我的目的是想让66AK2G12中的ARM处理和PC端通信和数据处理的任务,相关的应用算法在DSP中完成,

Nancy Wang:

回复 user18914063:

针对你的现象,我会去帮你咨询相关工程师,晚点给你回复。

Nancy Wang:

回复 user18914063:

建议在不添加GEL文件的情况下,连接JTAG调试arm核(load symbol),看一下pc指针是否是在MSMC或DDR内存中,并通过map文件查找一下应用程序或者SBL是卡在哪部分。
以下链接可参考:
software-dl.ti.com/…/index_Foundational_Components.html
另外检查一下SBL和应用程序在内存空间上是否有重叠。

user18914063:

回复 Nancy Wang:

PC指针是落在了DDR内存中的,至于你说的查看map文件,程序时PDK建立的ARM演示工程,调试状态下跑的好好的,看不出map文件有啥提示啥的啊

Nancy Wang:

回复 user18914063:

具体是卡在哪里呢?是在SBL部分还是在应用程序开始的部分?根据卡住部分的地址对照map文件看一下。

user18914063:

回复 Nancy Wang:

你是指在SD卡引导的情况下吗,这个咋去查看卡在哪里的啊,

Nancy Wang:

回复 user18914063:

是的。连上jtag之后load symbol(不要添加GEL文件)。 具体可参考: processors.wiki.ti.com/…/Debugging_Boot_Issues 另外检查一下你的arm工程部分有没有与SBL占用的内存部分重叠。

赞(0)
未经允许不得转载:TI中文支持网 » K2GICE板子烧写FLASH的问题
分享到: 更多 (0)