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.

[参考译文] TMS320F280039C:DCAN 引导加载

Guru**** 1831610 points
Other Parts Discussed in Thread: SYSBIOS, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1424662/tms320f280039c-dcan-bootloading

器件型号:TMS320F280039C
Thread 中讨论的其他器件:SYSBIOSC2000WARE

工具与软件:

您好!

我在通过 DCAN 引导加载我的 TMS280039C Lanchpad 时遇到问题。 我按照应用手册 SPRAD51A 中描述的所有步骤操作、未成功完成。 我将 flash_kernel_ex5_dcan_flash_kernel 用作 Kernal、led_ex1_blinky。

一些器件反馈:

1.我的 PCAN-USB Pro 呈绿色闪烁、直到 dcan_flash_programmer (我通过 Visual Studio 运行)显示引导加载完成。

2.一旦引导加载"完成"、微控制器就不会跳转至闪存或 RAM。  

3.如果在尝试引导加载之前、通过 XDS100上传闪烁的程序、那么引导加载后 LED 将不再闪烁。

简称为 DFP。 该软件在命令行中显示引导加载已完成、但我没有成功。

非常感谢您的任何帮助!

此致

Ezra

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

    尊敬的 Ezra:

    引导加载完成后、您可以通过 CCS 暂停执行、然后加载与内核或应用关联的符号吗? 这可通过以下步骤完成:

    Load -> Load Symbols ->选择与内核或应用关联的.out 文件

    这样、您就可以查看器件卡住的位置。 它可能卡在内核中(它将在调试窗口中显示一个 RAM 地址)、或者卡在应用程序中的某个位置(它将在调试窗口中显示一个闪存地址)。

    此致、

    Skyler

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

    你好,斯凯拉,谢谢你回到我。

    所以我开始调试闪存 Kernal 和 Visual Studio 程序员。

    1.我已验证 PCAN 是否通过单独的 CAN 分析仪传输@ 100kb。

    2.我已经使用单独的 CAN 分析器验证 FLASH_kernal_Ex5可以接收@100kb 的消息。

    但是、当我将 PCAN 连接到 Launchpad 时、它固定在

    我删除了这段代码、以查看我是否可以进一步获取、但它仍然停留在这段 while 循环中。 它从未接收到 CAN 消息。

    我已经验证了电缆连接。 我已经验证了 LaunchPad 和 PCAN 通信。 这听起来很熟悉吗?

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

    更新:我更新了内核代码 CAN RX 消息。 我无法无问题地接收数据。

    也就是说、当尝试执行此函数时、Kernal 跳至 Estop:

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

    尊敬的 Ezra:

    内核在 RAM 中执行、HCLK 频率为120MHz、正确吗?

    此致、

    Skyler

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

    你好、斯凯拉、是的、Kernal 正在 RAM 中执行。 我将仔细检查 HCLK 频率是否正确。

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

    尊敬的 Ezra:

    好的、当您验证这些信息后、请告诉我。

    此致、

    Skyler

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

    你好,斯凯勒,我不是忽略这个线程。  

    我只能在23/10之前跳过引导加载程序-然后我再跟您谈谈。

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

    尊敬的 Ezra:

    不用担心。

    - Skyler

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

    你好、斯凯拉

    已确认。 HCLK 频率运行在120MHz 上。

    我开始怀疑我使用的.cmd 文件可能存在错误。

    我正在使用28003x_generic_ram_lnk.cmd 文件。 会导致问题?

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

    好的、我已经取得了一些进展:

    1.我定义了_FLASH、可以调用以下代码行:

    2.我更新了链接器文件。 我将把它粘贴在下面。 "那你就来看看吧。"

    3.我 忘记了 FAPI_initializeAPI & Fapi_setActiveFlashBank 函数。

    4.我正在接收数据并将其写入到闪存中、但好像我的链接器文件与我的.txt 标志文件所期望的内容之间存在去奇偶校验。

    以下是我要使用的链接器文件:

    /*
    //########################################################################################################################################################################
    //
    //文件:f28003x_flash_api_lnk.cmd
    //
    //标题:f28003x 器件的闪存 API 链接器 cmd 文件
    //
    //########################################################################################################################################################################
    */

    小程序

    begin:origin = 0x00080000、length = 0x00000002
    BOOT_RSVD:origin = 0x00000002、length = 0x00000126

    RAMM0:origin = 0x00000128、length = 0x000002D8
    RAMM1:origin = 0x00000400、length = 0x00000380 /*片上 RAM 块 M1 */
    BOOT_RSVD_SYSBIOS:origin = 0x00000780、length = 0x00000080

    /* RAMLS0:origin = 0x00008000、length = 0x00000800
    RAMLS1:origin = 0x00008800、length = 0x00000800
    RAMLS2:origin = 0x00009000、length = 0x00000800
    RAMLS3 : origin = 0x00009800 , length = 0x00000800 */
    RAMLS03:origin = 0x00008000、length = 0x00002000
    RAMLS4:origin = 0x0000A000、length = 0x00000800
    RAMLS5:origin = 0x0000A800、length = 0x00000800
    RAMLS6:origin = 0x0000B000、length = 0x00000800
    RAMLS7:origin = 0x0000B800、length = 0x00000800

    /*组合所有 LS RAM */
    //RAMLS:origin = 0x00008000、length = 0x00004000

    RAMGS0:origin = 0x0000C000、length = 0x00001000
    RAMGS1 : origin = 0x0000D000 , length = 0x00001000
    RAMGS2 : origin = 0x0000E000 , length = 0x00001000
    RAMGS3 : origin = 0x0000F000, length = 0x00001000

    BootROM:origin = 0x003F8000、length = 0x00007FC0
    secure_rom:origin = 0x003F2000、length = 0x00006000


    复位:origin = 0x003FFFC0、length = 0x00000002

    /*闪存扇区*/
    /*组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

    /*组2 */
    FLASH_Bank2_SEC0:origin = 0x0A0000、length = 0x001000
    FLASH_Bank2_SEC1:origin = 0x0A1000、length = 0x001000
    Flash_Bank2_sec2:origin = 0x0A2000、length = 0x001000
    FLASH_Bank2_SEC3:origin = 0x0A3000、length = 0x001000
    FLASH_Bank2_SEC4:origin = 0x0A4000、length = 0x001000
    Flash_BANK2_SEC5:origin = 0x0A5000、length = 0x001000
    FLASH_Bank2_SEC6:origin = 0x0A6000、length = 0x001000
    Flash_Bank2_sec7:origin = 0x0A7000、length = 0x001000
    FLASH_Bank2_SEC8:origin = 0x0A8000、length = 0x001000
    FLASH_Bank2_SEC9:origin = 0x0A9000、length = 0x001000
    FLASH_Bank2_SEC10:origin = 0x0AA000、length = 0x001000
    FLASH_Bank2_SEC11:origin = 0x0AB000、length = 0x001000
    FLASH_Bank2_SEC12:origin = 0x0AC000、length = 0x001000
    FLASH_Bank2_SEC13:origin = 0x0AD000、length = 0x001000
    FLASH_Bank2_SEC14:origin = 0x0AE000、length = 0x001000
    FLASH_Bank2_SEC15:origin = 0x0AF000、length = 0x001000

    }


    部分中)

    codestart :> beging, align(8)
    .text:>> FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC4、ALIGN (8)
    .cinit :> FLASH_BANK0_SEC4, ALIGN (8)
    .switch:> FLASH_BANK0_SEC1、ALIGN (8)
    .reset :> RESET , TYPE = DSECT /* NOT USED ,*/

    .stack :> RAMM1.

    #if defined (_TI_EABI__)
    .init_array :> FLASH_BANK0_SEC1, ALIGN (8)
    .bss :> RAMLS5.
    .bss:output :> RAMLS03.
    bss:cio :> RAMLS03.
    .data :> RAMLS5.
    .sysmem :> RAMLS5.
    .const:> FLASH_BANK0_SEC4、ALIGN (8)
    #else
    .pinit :> FLASH_BANK0_SEC1, ALIGN (8)
    .ebss :> RAMLS5.
    .esysmem :> RAMLS5.
    .Cio :> RAMLS03.
    econst:> FLASH_BANK0_SEC4、ALIGN (8)
    #endif

    ramgs0 :> ramgs0
    Ramgs1 :> RAMGS0

    /*分配 IQ 数学区域:*/
    IQMath:> FLASH_BANK0_SEC1、ALIGN (8)
    IQmathTables :> FLASH_BANK0_sec2, ALIGN (8)

    相关

    .TI.ramfunc
    {-l FAPI_F28003x_EABI_v1.58.10.lib}

    } LOAD = FLASH_BANK0_SEC1
    RUN = RAMLS03、
    Load_start (RamfuncsLoadStart)、
    Load_Size (RamfuncsLoadSize)、
    Load_End (RamfuncsLoadEnd)、
    RUN_START (RamfuncsRunStart)、
    RUN_SIZE (RamfuncsRunSize)、
    RUN_END (RamfuncsRunEnd)、
    对齐(8)

    DataBufferSection :> RAMM1, ALIGN(8)
    }
    /*
    //########################################################################################################################################################################
    //文件结尾。
    //########################################################################################################################################################################
    */

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

    尊敬的 Ezra:

    我正在接收数据并将其写入闪存、但好像链接器文件与.txt 标志文件之间存在奇偶校验。

    能否更详细地解释这一点? 我不太明白您在这里的意思。

    此致、

    Skyler

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

    斯凯拉

    如果我通过 CCS 上传和调试内核、我就能够引导加载微控制器。 我无法通过提供的 Visual Studio 代码上传内核和固件文件。

    我确信这是因为我在 Kernal 中使用的链接器文件

    1.您可以看一下我的链接器文件吗? 我已在下面附上它。

    2.我使用 SPRAD51A 中所述的确切设置、但 flash_kernal_ex5_dcan_flash_kernal 示例项目无法开箱即用。 我必须进行大量的更改才能使它通过 CCS 运行。 TI 开发团队是否知道此示例尚不起作用/不足?

    /*
    //###########################################################################
    //
    // FILE:	f28003x_flash_api_lnk.cmd
    //
    // TITLE:	Flash API linker cmd file for f28003x device
    //
    //###########################################################################
    */
    
    MEMORY
    {
       BEGIN           	: origin = 0x00080000, length = 0x00000002
       BOOT_RSVD        : origin = 0x00000002, length = 0x00000126
    
       RAMM0            : origin = 0x00000128, length = 0x000002D8
       RAMM1            : origin = 0x00000400, length = 0x00000380     /* on-chip RAM block M1 */
       BOOT_RSVD_SYSBIOS: origin = 0x00000780, length = 0x00000080
    
    /* RAMLS0           : origin = 0x00008000, length = 0x00000800
       RAMLS1           : origin = 0x00008800, length = 0x00000800
       RAMLS2           : origin = 0x00009000, length = 0x00000800
       RAMLS3           : origin = 0x00009800, length = 0x00000800 */
       RAMLS03          : origin = 0x00008000, length = 0x00002000
       RAMLS4           : origin = 0x0000A000, length = 0x00000800
       RAMLS5           : origin = 0x0000A800, length = 0x00000800
       RAMLS6           : origin = 0x0000B000, length = 0x00000800
       RAMLS7           : origin = 0x0000B800, length = 0x00000800
    
       /* Combining all the LS RAMs */
       //RAMLS            : origin = 0x00008000, length = 0x00004000
    
       RAMGS0           : origin = 0x0000C000, length = 0x00001000
       RAMGS1           : origin = 0x0000D000, length = 0x00001000
       RAMGS2           : origin = 0x0000E000, length = 0x00001000
       RAMGS3           : origin = 0x0000F000, length = 0x00001000
    
       BOOTROM          : origin = 0x003F8000, length = 0x00007FC0
       SECURE_ROM       : origin = 0x003F2000, length = 0x00006000
    
    
       RESET            : origin = 0x003FFFC0, length = 0x00000002
    
       /* Flash sectors */
       /* BANK 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
    
       /* BANK 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
    
      /* BANK 2 */
       FLASH_BANK2_SEC0  : origin = 0x0A0000, length = 0x001000
       FLASH_BANK2_SEC1  : origin = 0x0A1000, length = 0x001000
       FLASH_BANK2_SEC2  : origin = 0x0A2000, length = 0x001000
       FLASH_BANK2_SEC3  : origin = 0x0A3000, length = 0x001000
       FLASH_BANK2_SEC4  : origin = 0x0A4000, length = 0x001000
       FLASH_BANK2_SEC5  : origin = 0x0A5000, length = 0x001000
       FLASH_BANK2_SEC6  : origin = 0x0A6000, length = 0x001000
       FLASH_BANK2_SEC7  : origin = 0x0A7000, length = 0x001000
       FLASH_BANK2_SEC8  : origin = 0x0A8000, length = 0x001000
       FLASH_BANK2_SEC9  : origin = 0x0A9000, length = 0x001000
       FLASH_BANK2_SEC10 : origin = 0x0AA000, length = 0x001000
       FLASH_BANK2_SEC11 : origin = 0x0AB000, length = 0x001000
       FLASH_BANK2_SEC12 : origin = 0x0AC000, length = 0x001000
       FLASH_BANK2_SEC13 : origin = 0x0AD000, length = 0x001000
       FLASH_BANK2_SEC14 : origin = 0x0AE000, length = 0x001000
       FLASH_BANK2_SEC15 : origin = 0x0AF000, length = 0x001000
    
    }
    
    
    SECTIONS
    {
       codestart        : > BEGIN, ALIGN(8)
       .text            : >> RAMLS03, ALIGN(8)
       .cinit           : > RAMLS03, ALIGN(8)
       .switch          : > RAMLS03, ALIGN(8)
       .reset           : > RESET,                  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM1
    
    #if defined(__TI_EABI__)
       .init_array      : > RAMLS03,  ALIGN(8)
       .bss             : > RAMLS5
       .bss:output      : > RAMLS03
       .bss:cio         : > RAMLS03
       .data            : > RAMLS5
       .sysmem          : > RAMLS5
       .const           : > RAMLS03,  ALIGN(8)
    #else
       .pinit           : > RAMLS03,  ALIGN(8)
       .ebss            : > RAMLS5
       .esysmem         : > RAMLS5
       .cio             : > RAMLS03
       .econst          : > RAMLS03,  ALIGN(8)
    #endif
    
        ramgs0 : > RAMGS0
        ramgs1 : > RAMGS0
    
        /*  Allocate IQ math areas: */
       IQmath           : > RAMGS2, ALIGN(8)
       IQmathTables     : > RAMGS2, ALIGN(8)
    
        GROUP
       {
           .TI.ramfunc
           { -l FAPI_F28003x_EABI_v1.58.10.lib}
    
       }  LOAD = RAMGS3,
          RUN = RAMLS03,
          LOAD_START(RamfuncsLoadStart),
          LOAD_SIZE(RamfuncsLoadSize),
          LOAD_END(RamfuncsLoadEnd),
          RUN_START(RamfuncsRunStart),
          RUN_SIZE(RamfuncsRunSize),
          RUN_END(RamfuncsRunEnd),
          ALIGN(8)
    
        DataBufferSection : > RAMM1, ALIGN(8)
    }
    /*
    //###########################################################################
    // End of file.
    //###########################################################################
    */
    

    编辑:在没有 CCS 的情况下上传 Kernal 后、5秒将过期(引导加载前延迟)、并且它将跳转到之前加载至闪存的现有程序。

    此致

    Ezra

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

    Ezra,

    Skyler 目前不在办公室,将于周一返回。

    此致!

    Alex

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

    尊敬的 Ezra:

    默认情况下、您使用 f28003x_flash_api_lnk.cmd 文件而不是工程中包含的28003x_generic_ram_lnk.cmd 文件是否有具体原因?

    我将看一下该示例、看看我是否可以在新导入到 CCS 后运行该示例时重现您看到的任何错误。

    此致、

    Skyler

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

    你好,斯凯拉,是的,有一个原因:

    根据 SPRUJ27C 第7页, 必须调用 Flash_initModule()。 为了允许我必须在 Kernal 的 device.h 中定义_flash

    这进而启用了以下功能  

    #ifdef _FLASH
    #ifndef CMDTOOL
        //
        // Copy time critical code and flash setup code to RAM. This includes the
        // following functions: InitFlash();
        //
        // The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart symbols
        // are created by the linker. Refer to the device .cmd file.
        //
        memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
    #endif
        //
        // Call Flash Initialization to setup flash waitstates. This function must
        // reside in RAM.
        //
        Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
    #endif

    &RamfuncsRunStart、&RamfuncsLoadStart (size_t)&RamfuncsLoadSize 必须在链接器文件中定义、其中 未包含 f28003x_flash_api_lnk.cmd。 我不十分精通链接器文件。 我看到 f28003x_ram_api_lnk.cmd 包含这些变量的定义–如下所示:

       .TI.ramfunc      : LOAD = FLASH_BANK0_SEC1,
                          RUN = RAMLS0,
                          LOAD_START(RamfuncsLoadStart),
                          LOAD_SIZE(RamfuncsLoadSize),
                          LOAD_END(RamfuncsLoadEnd),
                          RUN_START(RamfuncsRunStart),
                          RUN_SIZE(RamfuncsRunSize),
                          RUN_END(RamfuncsRunEnd),
                          ALIGN(8)

    然后、我通过组合这两者来构建我自己的链接器文件。

    TI 能否为我提供一个实际适用于该示例的标准.cmd 文件?  这将有助于消除问题是与我有关还是与链接器有关。

    注意

    Ezra

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

    尊敬的 Ezra:

    尝试使用 28003x_generic_ram_lnk.cmd 文件、然后只需在主函数中手动插入 Flash_initModule ()。 这些工程使用默认包含的链接器文件(28003x_generic_ram_lnk.cmd)进行了测试。

    此致、

    Skyler

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

    感谢 Skyler。

    我尝试了干净的导入、并按照您的建议执行了操作。 不管用。 我相信香草的例子不起作用。 您是否尝试过成功的全新构建? 我运行的是 C2000Ware_5_02_00_00。 您能否确认该版本的示例是否有效。

    在 LED_blinky 示例的链接器文件中是否必须更改某些内容?

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

    尊敬的 Ezra:

    你是对的、我很抱歉我的错误。 请进行以下更改:

    DCAN_Boot.c

    第64行应该是  

    #include "bootloader_can_timing.h"

    bootloader_can_timing.h

    第49-51行应为

    #define CAN_CALC_BITRATE   1000000U
    #define CAN_CALC_CANCLK    20000000U
    #define CAN_CALC_BITTIME   20U

    device.h

    取消第295行的注释并将第294行注释掉

    //#define USE_PLL_SRC_XTAL
    #define USE_PLL_SRC_INTOSC

    此外、如果使用 Launchpad、请确保_LAUNCHXL_F280039C 位于预定义符号中。

    确保将内核.txt 文件的字节3和4更改为 C0 7A。 我已经附上了我在设置中使用的 txt 文件、并按预期运行这些文件。

    e2e.ti.com/.../flash_5F00_kernel_5F00_ex5_5F00_dcan_5F00_flash_5F00_kernel.txte2e.ti.com/.../6874.led_5F00_ex1_5F00_blinky.txt

    DCAN_Boot.c 包含一个头文件 driverlib、该文件将 DCAN 比特率配置为100kbps、但主机编程器/内核期望比特率为1Mbps。 因此、需要更新#include 指令、并且需要更新头文件、以反映此比特率增加情况。  

    我需要对 led_ex1_blinky 工程进行的唯一更改是设置 Launchpad 闪存构建配置。

    此致、

    Skyler

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

    你好、斯凯拉

    感谢您提供信息。

    我使用提供的引导加载.exe 软件文件尝试了两个.txt 文件、但无法成功引导加载。

    我还尝试实施您的更改、然后使用您的.exe 软件文件、但没有成功。

    我想唯一的其他变量是 dcan_flash_programr.exe 软件。 我应该在这里实施哪些更改? 我还在 Visual Studio 中打开了该项目。 我没有注意到任何错误...

    此致  

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

    尊敬的 Ezra:

    有趣的是,我已经能够加载我发送的两个文本文件,没有任何问题。 我在未进行任何修改的情况下使用了 C2000Ware 5.03中的 dcan_flash_programr.exe。 器件现在卡在哪里? (内核加载)中还是在内核(应用程序加载)中?

    此致、

    Skyler

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

    您好、Skyler

    我刚才也尝试过 C2000Ware 5.03。 它为我提供了相同的结果。

    根据您提供的配置、我不会通过 CAN 从软件接收任何数据。

    此致

    Ezra

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

    尊敬的 Ezra:  

    我将在 明天详细了解这一点、一旦有更新、我将立即与您联系。

    此致!

    Matt

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

    谢谢 Matt。

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

    尊敬的 Ezra:  

    对于延迟很抱歉、我仍在 尝试找到解决方案、 但我 想知道在 DCAN 引导加载程序的哪一点卡住了?  

    此致!

    Matt

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

    您好、Matt、感谢 您的努力。

    这里有两种情况:

    1.上传 Sklar 通过 TI 提供的 dcan_flash_programmer 提供的 Kernal 和 LED_blinky.txt 时、PCAN-USB Pro 的 CAN1状态 LED 一直呈绿色闪烁 但是微处理器不会跳转到新上传的固件。 在我手动对微控制器进行下电上电(这次从闪存引导)后、似乎 led_blinky 尚未上传。

    2.当我通过 CCS 上传(与斯凯拉建议的更改)内核,然后通过 dcan_flash 编程器上传 led_blinky (不定义内核上传,并将 TX 更改为1Mb/s ),它总是停留在 READ_MESSAGE ()。 我从未收到 CAN 消息。 但当我把时钟改回外部,并且速度可以达到100KB,然后我确实在 Kernal 上收到 CAN 消息,但它永远不会结束闪存微。

    我有道理吗? 让我知道我是否应该更好地解释它,并采取一堆截图/视频.

    此致

    Ezra

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

    尊敬的 Ezra:

    感谢您的澄清。 我们能够重现此问题、并 在下周继续进行调试。

    此致!

    Matt

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

    尊敬的 Ezra:  

    我们找到了一个潜在的解决方案。

    根据   器件 数据表中的 F28003x 闪存参数、闪存扇区擦除时间会增加每个闪存擦除周期。  

    DCAN 内核 用于在编程时擦除闪存扇区。 为了解决这种擦除延迟、在闪存编程器可执行文件中发送的 CAN 帧之间内置了一个睡眠计时器。 我们怀疑您的器件的擦除时间超过了此 延迟

    您能否试用 e2e.ti.com/.../dcan_5F00_flash_5F00_programr_5F00_delay_5F00_increase.exe、并告诉我们这是否可以解决您的问题。 我们在此版本中将睡眠计时器增加了10倍、以找出问题所在。

    此致!

    Matt

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

    您好、Matt

    这与斯凯拉的变化,内尔整理了我。

    感谢你们的耐心和帮助!

    此致

    Ezra