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.

[参考译文] TMS320F28377D:通过 SCI 刷写固件

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/877366/tms320f28377d-flashing-firmware-over-sci

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARE

你(们)好。

我可以使用 serial_flash_programmer 刷写闪烁示例、但当我刷写自己的应用程序时、我会得到错误状态:program_error、错误地址:0x3。  我在前面的一篇文章中要求检查应用程序链接器命令文件、以确保所有段都在128位地址上对齐。  如何检查情况是否如此?  此外、还有其他关于错误原因是什么的想法吗?  谢谢!

最棒的

Mike

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

    Mike、

    在您的应用程序链接器 cmd 文件中、您可以为此目的使用 align (8)。  例如、请参阅 C:\ti\c2000Ware_2_01_00_00\device_support\f2837xd\common\cmd\2837xD_flash_lnk_cpu1.cmd 。  请使用最新的 C2000Ware、因为链接器 cmd 文件最近更新以显示此内容。

    谢谢、此致、
    Vamsi

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

    您好!

    我尝试将 align (8)应用到我的链接器 cmd 文件、但仍然有问题。  当 我在串行闪存编程器中选择 DFU1时,是否还有其他可能导致我获得错误状态:program_error、error Address:0x3的事情?

    谢谢!

    最棒的

    Mike

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

    Mike、

    您能否检查应用程序链接器 cmd 文件中是否有任何已初始化段映射到 RAM?  所有初始化段都应映射到闪存、以便内核能够将内容编程到闪存。

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    这与从闪存加载但在 RAM 上运行有关、对吧?  那么、我很清楚、例如 下面各节中的 RAMLS2和 RAMGS1_2需要使用类似的命令加载到闪存中?  您是否有机会在章节中看到任何其他问题?

    ramfuncs:load = FLASHD,

    运行= RAML0、

    load_start (_RamfuncsLoadStart)、

    load_end (_RamfuncsLoadEnd)、

    run_start (_RamfuncsRunStart)

    我粘贴了下面链接器 cmd 文件的 SECTIONS 部分。 谢谢!

    最棒的

    Mike

    部分

    /*------------ 分配方案领域:---------------- *
    codestart:> begin page = 0,align (8)
    引导加载程序:>FLASHA PAGE=0,ALIG(8)

    ramfuncs:load = FLASHB、
    运行= RAMGS8、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (8)

    ramfuncs0:load = FLASHA,
    运行= RAMGS7、
    load_start (_Ramfuncs0LoadStart)、
    load_size (_Ramfuncs0LoadSize)、
    load_end (_Ramfuncs0LoadEnd)、
    run_start (_Ramfuncs0RunStart)、
    run_size (_Ramfuncs0RunSize)、
    run_end (_Ramfuncs0RunEnd)、
    PAGE = 0、ALIGN (8)

    ramfuncs1:load = FLASHA,
    运行= RAMGS7、
    load_start (_Ramfuncs1LoadStart)、
    load_size (_Ramfuncs1LoadSize)、
    load_end (_Ramfuncs1LoadEnd)、
    run_start (_Ramfuncs1RunStart)、
    run_size (_Ramfuncs1RunSize)、
    run_end (_Ramfuncs1RunEnd)、
    PAGE = 0、ALIGN (8)


    ramfuncs2:load = FLASHA,
    运行= RAMGS8,
    load_start (_Ramfuncs2LoadStart)、
    load_size (_Ramfuncs2LoadSize)、
    load_end (_Ramfuncs2LoadEnd)、
    run_start (_Ramfuncs2RunStart)、
    run_size (_Ramfuncs2RunSize)、
    run_end (_Ramfuncs2RunEnd)、
    PAGE = 0、ALIGN (8)

    ramfuncs3:load = FLASHA,
    运行= RAMLS3、
    load_start (_Ramfuncs3LoadStart)、
    load_size (_Ramfuncs3LoadSize)、
    load_end (_Ramfuncs3LoadEnd)、
    run_start (_Ramfuncs3RunStart)、
    run_size (_Ramfuncs3RunSize)、
    run_end (_Ramfuncs3RunEnd)、
    PAGE = 0、ALIGN (8)

    Cla1Prog:load = FLASHC,
    运行= RAMLS4_5、//|RAMLS5、
    Load_start (_Cla1ProgLoadStart)、
    load_size (_Cla1ProgLoadSize)、
    Load_End (_Cla1ProgLoadEnd)、
    run_start (_Cla1ProgRunStart)、
    run_size (_Cla1ProgRunSize)、
    Run_End (_Cla1ProgRunEnd)、
    PAGE = 0、ALIGN (8)

    .text:> FLASHE PAGE = 0,ALIG(8)

    初始化:> FLASHE PAGE = 0,ALIG(8)

    .cinit:load = FLASHA
    运行= RAMM0 //M0
    load_start (_cinitLoadStart)、
    load_size (_cinitLoadSize)、
    load_end (_cinitLoadEnd)、
    run_start (_cinitRunStart)、
    run_size (_cinitRunSize)、
    run_end (_cinitRunEnd)、
    PAGE = 0、ALIGN (8)

    .pinit:load = FLASHA
    运行= RAMM0、
    load_start (_pinitLoadStart)、
    load_size (_pinitLoadSize)、
    load_end (_pinitLoadEnd)、
    run_start (_pinitRunStart)、
    run_size (_pinitRunSize)、
    run_end (_pinitRunEnd)、
    PAGE = 0、ALIGN (8)

    switch:load = FLASHA
    运行= RAMM0、
    load_start (_switchLoadStart)、
    load_size (_switchLoadSize)、
    load_end (_switchLoadEnd)、
    run_start (_switchRunStart)、
    run_size (_switchRunSize)、
    run_end (_switchRunEnd)、
    PAGE = 0、ALIGN (8)
    //GS1 CPU2至 CPU1
    CPU2TOCPU1变量:运行= RAMGS1_2,PAGE = 1//CCPU2TOCPU1RAM
    RUN_START (_CPU2TOCPU1Variable_START)、
    run_size (_CPU2TOCPU1Variable_size)
    run_end (_CPU2TOCPU1Variable2_end)

    //将 CPU1更改为 CPU2信息的 GS14

    VarCpu1Cpu2:运行= RAMGS14_2,页= 1
    run_start (_VarCpu1Cpu2_start)、
    run_size (_VarCpu1Cpu2_size)
    RUN_END (_VarCpu1Cpu2_END)


    ParamCpu1Cpu2:运行= RAMGS14_3,页= 1
    run_start (_ParamCpu1Cpu2_start)、
    run_size (_ParamCpu1Cpu2_size)
    run_end (_ParamCpu1Cpu2_end)

    .reset:> reset,page = 0,type = DSECT

    CmdTable:> FLASHB,PAGE = 0,ALIGN(8)
    FcnTable:> FLASHB,PAGE = 0,ALIGN (8)


    /*初始化段进入闪存*/
    //.econst:> FLASHF | FLASHG | FLASHH PAGE = 0
    //.switch:> FLASHB PAGE = 0


    /*---------- 分配未初始化的数据段:-------------------------------------------------------- *
    .stack:>RAMM1 page = 1.
    .ebss:> RAMD1 PAGE = 1.
    .bss:> RAMD1 PAGE = 1.
    econst:>RAMD1 page = 1.
    .esysmem:>RAMD1 page = 1.
    .data:>RAMD1 page = 1.

    filter_RegsFile:> RAMGS0,PAGE = 1

    // SHARERAMGS0:> RAMGS0,PAGE = 1
    // SHARERAMGS1:>RAMGS1,PAGE = 1.

    CLA1mathTables:load = FLASHD /*注意,从 RAM 运行时,加载和运行可以是相同的*/
    运行= RAMLS1、
    Load_start (_Cla1mathTablesLoadStart)、
    load_size (_Cla1mathTablesLoadSize)、
    Load_End (_Cla1mathTablesLoadEnd)、
    run_start (_Cla1mathTablesRunStart)、
    Run_Size (_Cla1mathTablesRunSize)、
    Run_End (_Cla1mathTablesRunEnd)、
    PAGE = 1、ALIGN (8)

    /*Data Memory*/
    SPI_DATA:ALIGN (0x40)> RAMLS2、PAGE = 1
    SCI_DATA:ALIGN (0x40)> RAMLS2、PAGE = 1 //需要在一个 DP 中
    SCI_Rx:ALIGN (0x100)> RAMLS2、PAGE = 1
    SCI_Tx:ALIGN (0x200)> RAMLS2、PAGE = 1


    // ProfilePos:>RAMGS1,page = 1.
    // CANOpenData:>RAMGS1,page = 1.

    // 2017年7月25日更新 Lily
    //将 CPU1更改为 CPU2的 GS14
    NV_DATA:ALIGN (64) run = RAMGS14_3,PAGE = 1 /*存储要保存的参数的 RAM 地址*/
    End (_NV_DATA_End1)、
    RUN_START (_NV_DATA_START)、
    run_size (_nv_data_size)
    RUN_END (_NV_DATA_END)

    nv_data_modinf:block (64) run = RAMGS14_3,page = 1/*存储要保存的模型信息的 RAM 地址*/
    run_start (_nv_data_modinf_start)、
    run_size (_nv_data_modinf_size)
    run_end (_nv_data_modinf_end)

    nv_data_ioffsets:block (64) run = RAMGS14_3,page = 1
    run_start (_nv_data_ioffset_start)、
    run_size (_nv_data_ioffset_size)
    run_end (_nv_data_ioffset_end)

    nv_data_lastf:运行= RAMGS14_3,页= 1
    run_start (_nv_data_lastf_start)、
    run_size (_nv_data_lastf_size)
    run_end (_nv_data_lastf_end)

    ProfileData:运行= RAMGS14_3,页= 1
    RUN_START (_ProfileData_start)、
    run_size (_ProfileData_size)
    RUN_END (_ProfileData_End)


    /*使用 IPC API 驱动程序时需要以下部分定义*/
    组:> CPU1TOCPU2RAM,PAGE = 1

    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX


    组:> CPU2TOCPU1RAM,PAGE = 1

    GETBUFFER:TYPE = DSECT
    GETWRITEIDX:TYPE = DSECT
    PUTREADIDX:TYPE = DSECT


    /*以下部分定义适用于 SDFM 示例*/
    /*
    filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
    Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
    Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
    Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444
    Differit_RegsFile:>RAMGS5,PAGE = 1,fill=0x3333
    *

    /* CLA 特定部分*/
    /* Cla1Prog:> RAMLS5,page=0*/

    // CLADataLS0:> RAMLS0,page=1
    // CLADataLS5:> RAMLS5,page=1
    CLADataLS1:> RAMLS1,PAGE=1,ALIG(8)

    /*CLA1和 CPU1共享数据存储器*/
    Cla1Cpu1ShareLSR:> RAMLS1,PAGE=1,ALIG(8)

    Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,PAGE = 1,ALIG(8)
    CpuToCla1MsgRAM:> CLA1_MSGRAMHIGH,PAGE = 1,ALIG(8)

    #ifdef CLA_C
    /* CLA C 编译器段*/
    //
    //必须被分配给 CLA 具有写入访问权限的内存
    //
    CLAscratch:
    {*。obj (CLAscratch)
    。 += CLA_ScratchPad_size;
    *。obj (CLAscratch_end)}> RAMLS1、PAGE = 1、ALIGN (8)

    暂存区:>RAMLS1,页=1
    .bss_cla:> RAMLS1,page = 1.
    .const_cla:> RAMLS1,PAGE = 1.
    CLA1mathTables:> RAMLS1,page = 1.
    #endif //cla_C



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

    Mike、

    我没有查看整个链接器 cmd。 请检查 C2000Ware 中提供的示例链接器 cmd 文件、并根据需要修复链接器。

    下面是我在高层次上注意到的一些问题。  

    您已将已初始化的段 const 映射到 RAM。  它应该被映射到闪存。

    2.对于 cinit、Pinit、switch 等段、您不需要单独的加载和运行地址 请检查提供的示例链接器命令。

    如果您有任何特定问题、请打开新帖子。

    谢谢、此致、
    Vamsi

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

    Mike、

    我希望这个调试器关闭。  我要关闭此帖子。

    3月9日之前我不可用。  如果您有其他问题、请打开新帖子、我们的团队将为您提供进一步的帮助。

    谢谢、此致、

    Vamsi