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.

K2GICE板子烧写FLASH的问题

Other Parts Discussed in Thread: UNIFLASH, EVMK2G, 66AK2G12, SYSBIOS, AM5728, TMS570LC4357

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卡插上后,板子没任何动作

  • 请尝试用JTAG加载\pdk_k2g_1_0_13\packages\ti\boot\writer\qspi_flash目录下的writer烧写试试。
  • 是参考的以下的文档吗?
    software-dl.ti.com/.../index_Foundational_Components.html
    烧写完启动之后,连上串口看一下打印信息是什么?
  • 就这个问题,今晚我试了下采用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/bin
    app is the target application to be booted and also formatted by the aforementioned tools. (Note that the tools for making the bootable
    MLO and 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 Value
    MPU Core 0 0
    DSP 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这个路径下包含了三个文件夹分别是: evmk2g include src,其中只有evmk2g这个目录下有个
    名为qspiflashwriter_evmk2g.out的文件,尝试了下在CCS中进入调试模式,然后点击RUN先加载这个out文件,结果报错,说是目标不匹配,我的板子是iceK2G,应该是 evmk2g 板子和我的板子硬件电路不兼容所致
    对以上问题,我猜测是app文件中bootloader定位到芯片内部的地址不对,但这个地址怎么查看,怎么修改,就完全不知道怎么操作了
  • 今天我在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中完成,
  • 针对你的现象,我会去帮你咨询相关工程师,晚点给你回复。
  • 建议在不添加GEL文件的情况下,连接JTAG调试arm核(load symbol),看一下pc指针是否是在MSMC或DDR内存中,并通过map文件查找一下应用程序或者SBL是卡在哪部分。
    以下链接可参考:
    software-dl.ti.com/.../index_Foundational_Components.html
    另外检查一下SBL和应用程序在内存空间上是否有重叠。
  • PC指针是落在了DDR内存中的,至于你说的查看map文件,程序时PDK建立的ARM演示工程,调试状态下跑的好好的,看不出map文件有啥提示啥的啊
  • 具体是卡在哪里呢?是在SBL部分还是在应用程序开始的部分?根据卡住部分的地址对照map文件看一下。
  • 你是指在SD卡引导的情况下吗,这个咋去查看卡在哪里的啊,
  • 是的。连上jtag之后load symbol(不要添加GEL文件)。
    具体可参考:
    processors.wiki.ti.com/.../Debugging_Boot_Issues
    另外检查一下你的arm工程部分有没有与SBL占用的内存部分重叠。

  • 看到了,PC指针一直卡在0x81085404这个位置,这个地址位于DDR中的
  • SD中存放的是PDK创建的工程,调试能运行,SD卡不能运行
  • 查map文件看一下0x81085404指向哪个函数?
  • 刚刚我重新试了下,这次是卡在了地址为0x8000F958的地方,这个地方在代码里面是Excrption_asm_gnu.asm中标签为ti_sysbios_family_arm_exc_Exception_excHandlerDataAsm_I: 这个地方,看样子是触发了系统异常,进入异常中断向量了
  • 那说明SBL已将控制权给了ARM上的SYSBIOS应用程序,应用程序发生了异常。可以看出异常是在main之前还是main之后吗?
  • 应该是在main之前,因为我在main那里打了断点,没有停在那里
  • 我手头有块AM5728的板子,其实这个ARM端程序,仿真跑的好好的,然后按文档得到的app文件在SD卡中无法运行的问题,这个AM5728板子也是如此,我也是反复试了的,而且这个AM5728的例子也是基于PDK工程,运行在TI的RTOS下的,所以,我在想,会不会是在向SD卡写入app时还缺少什么步骤或者什么参数,但这方面在SDK的文档里面似乎没有提及
  • 另外,我个人比较偏爱类似C2000那种位域结构体的寄存器访问方式,所以利用一些时间给66AK2G12编写了寄存器的位域结构体,但目前还不完整,主要是K2G内部寄存器太多了,后面有时间了再一边敲代码一边补充。但这种寄存器访问方式真的是简洁,所见即所得。这里我上传上来,有需要的朋友或者对这种访问方式喜欢的朋友可以下载下来使用。如果大家有时间,也希望大家能陆续的对这个芯片寄存器的头文件做补充,方便大家共享,谢谢。

    6648.66AK2G12裸机芯片头文件.zip

  • 这个头文件做的不一定合理,包括寄存器名字的命名方式,目前这个头文件是针对工程中内核为DSP的裸机工程,因为DSP裸机工程就直接是CMD文件,可以直接在CMD文件中定义寄存器的物理地址,方法和C2000系列的完全一样,如果是ARM核的裸机工程,因为ARM工程的CMD文件和DSP的CMD文件有区别,我还不知道怎么操作,所以在ARM核的工程中,要将上传的头文件的寄存器约定,改为指针的形式,然后在寄存器全局变量定义那个C文件中,将相应的寄存器物理地址以指针的形式赋值给相应的寄存器指针。
  • 不仅如此,我前段还给TMS570LC4357,AM5728也写了寄存器位域结构体的芯片头文件,但也是时间不多,然后芯片寄存器浩如烟海,所以目前只写了很少的一点点,我就放到sitara版块了,大家有需要可以去那里下载
  • 我们会针对你的问题在开发板上做一下测试,看看能否复现您的问题,之后再给您回复。