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.

[参考译文] TMS320F280049:从闪存 F280049引导 SYSBIOS

Guru**** 2939240 points

Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1037544/tms320f280049-sysbios-boot-from-flash-f280049

器件型号:TMS320F280049
Thread 中讨论的其他器件:SYSBIOS

您好!

我在这个项目上的最后一个助记符、我知道这个问题已经被提出了很多次、我似乎无法跟踪答案。 我有一个在自定义硬件上运行的 SYSBIOS 项目、无法在独立模式下从闪存引导。 使用仿真器、代码运行良好。 我已经编译了闪烁代码、并将其编程到电路板上、然后在独立模式下引导并运行。 因此、从该练习中、我将假定这不是硬件问题、而必须是 SYSBIOS cfg 问题或链接 cmd 文件问题。 这是我的引导/启动选项:-

  

这是我的 cmd 文件:-


存储器

第0页:
/* begin 用于"引导至闪存"引导加载程序模式*/

开始:origin = 0x080000,length = 0x000002
RAMM0:origin = 0x0000F5,length = 0x00030B

RAMLS0:origin = 0x008000、length = 0x000800
RAMLS1:origin = 0x008800,length = 0x000800
RAMLS2:origin = 0x009000,length = 0x000800
RAMLS3:origin = 0x009800,length = 0x000800
RAMLS4:origin = 0x00A000,length = 0x000800
复位:origin = 0x3FFFC0,length = 0x000002

/*闪存扇区*/
/*组0 */
FLASH_BANK0_SEC0:origin = 0x080002、length = 0x000FFE //片上闪存*
/*FLASH_BANK0_SEC1:origin = 0x081000,length = 0x001000*/*片上闪存*/
FLASH_BANK0_sec2:origin = 0x082000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC3:origin = 0x083000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC4:origin = 0x084000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC5:origin = 0x085000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC6:origin = 0x086000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC7:origin = 0x087000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC8:origin = 0x088000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC9:origin = 0x089000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC10:origin = 0x08A000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC11:origin = 0x08B000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC12:origin = 0x08C000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC13:origin = 0x08D000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC14:origin = 0x08E000、length = 0x001000 //片上闪存*
FLASH_BANK0_SEC15:origin = 0x08F000、length = 0x001000 //片上闪存*

/*银行1 */
FLASH_BANK1_SEC0:origin = 0x090000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC1:origin = 0x091000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC2:origin = 0x092000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC3:origin = 0x093000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC4:origin = 0x094000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC5:origin = 0x095000、length = 0x001000 //片上闪存*/
FLASH_BANK1_SEC6:origin = 0x096000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC7:origin = 0x097000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC8:origin = 0x098000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC9:origin = 0x099000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC10:origin = 0x09A000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC11:origin = 0x09B000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC12:origin = 0x09C000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC13:origin = 0x09D000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC14:origin = 0x09E000、length = 0x001000 //片上闪存*
FLASH_BANK1_SEC15:origin = 0x09F000、length = 0x001000 //片上闪存*

第1页:

BOOT_RSVD:origin = 0x000002,length = 0x0000F3 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *

RAMLS5:origin = 0x00A800,length = 0x000800
RAMLS6:origin = 0x00B000、length = 0x000800
RAMLS7:origin = 0x00B800,length = 0x000800

RAMGS0:origin = 0x00C000、length = 0x002000
RAMGS1:origin = 0x00E000、length = 0x002000
RAMGS2:origin = 0x010000、length = 0x002000
RAMGS3:origin = 0x012000,length = 0x002000


部分

codestart:> begin,page = 0,align (4)
.text:>> flash_BANK0_SEC3 | flash_BANK0_SEC4 | flash_BANK0_SEC5 | flash_BANK0_SEC6,page = 0,align (4)
.cinit:> flash_BANK0_sec2,page = 0,align (4)
.switch:> FLASH_BANK0_sec2,PAGE = 0,ALIGN (4)
.reset:> reset,page = 0,type = DSECT //未使用,*/

.stack:>RAMM1,PAGE = 1.

init_array:> flash_BANK0_sec2,page = 0,align (4)
.bss:> RAMLS5,page = 1.
.bss:输出:> RAMLS3,页= 0
.bss:CIO:> RAMLS0,PAGE = 0
.data :> RAMLS5 | RAMLS6,page = 1.
.sysmem:>> RAMLS5,page = 1.

/*初始化段进入闪存*/
.const:> FLASH_BANK0_SEC4、PAGE = 0、ALIGN (4)

RAMS0:>RAMGS0,PAGE = 1
ramgs1:>RAMGS1,page = 1.
ramm0:>RAMM0,page = 0

.TI.ramfunc:load = flash_BANK0_SEC1,
RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3、
Load_start (RamfuncsLoadStart)、
load_size (RamfuncsLoadSize)、
Load_End (RamfuncsLoadEnd)、
RUN_START (RamfuncsRunStart)、
run_size (RamfuncsRunSize)、
RUN_END (RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)

请提供任何帮助。

谢谢、

Richard。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    看起来一切都很好。 如果你看看.map 文件、你能在开始中看到 SYS/BIOS 引导函数吗?

    在调试闪存引导问题时、有时有用的一点是在器件从闪存引导后连接到器件、以防止 CCS 复位器件。 这样、您就可以看到它在卡住时处于何种状态。 这里有一个很好的视频、介绍了如何实现它 。 或者、我有时会在删除 GEL 文件的情况下创建.ccxml 的副本、并改用该副本启动、然后加载.out 的符号。

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的惠特尼:

    这是我在0x80000处闪存中的内容、

    * 0 00080000 00000002
    00080000 00000002 Boot.a28FP:Boot_ASM.o28FP (.ti_catalog_c2800_initF2837x_begin)

    我只加载符号来调试代码,在 Startup_exec 中,当调用 Startup_execImpl 时,会出现地址为0x00000000:-  

    void Startup_exec (void)

    int i;

    if (module->execFlag == false){
    module->execFlag = true;

    对于(i = 0;i < Startup_firstFxns.length;i++){
    /* REQ_TAG (SYSBIOS-955)*/
    startup_firstFxns.elem[i]();

    (startup_execImpl)();

    对于(i = 0;i < Startup_lastFxns.length;i++){
    /* REQ_TAG (SYSBIOS-956)*/
    startup_lastFxns.elem[i]();


    谢谢、

    Richard。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这话什么意思?地址是0x00000000? 就像汇编单步将代码步进 Startup_exeImpl()会导致程序计数器跳转到0x00000000?

    您是否指定了您自己的任何自定义"firstFxns"或"lastFxns"、或者只是 SYS/BIOS 生成的正在运行的文件?

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Whitney、

    当进行该调用时、XAR7包含0x00000000。 我尚未定义我自己的任何启动函数。 我的直觉是、某件事设置不正确、但这将需要更多时间来跟踪我当前 可用的情况。 目前、我在不使用 SYSBIOS 的情况下重新编写了代码、这正常工作。  如果有人能让我看到从 F280049上的闪存引导的 SYSBIOS 示例、我将不胜感激。

     谢谢、

    Richard。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的,当我尝试它(在 F2838x 器件上)时,我可以单步进入 Startup_exeImpl ()并看到它转到存储在正常闪存地址的 XDC_runtime _Startup_exec__i ()。 从那里可以看到 main()。 我将使用 F280049示例进行一个位式测试。

    惠特尼