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.

[参考译文] TMS320F28374S:闪存 API 错误:数据缓冲器长度不正确

Guru**** 2538930 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1110841/tms320f28374s-flash-api-error-incorrect-data-buffer-length

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

你(们)好

我在 SCI 引导中使用了应用手册 www.ti.com/.../sprabv4。

闪存内核取自~\C2000Ware_4_00_00_00\device_support\f2837xs\examples\CPU1\F2837xS_sci_flash_kernel\cpu01\
在文件"F2837xS_sci_flash_kernel.c"中、我替换了以下行:
   EntryAddr = SCI_GetFunction (SCI_BOOT_ALTERNATE);
在:
   EntryAddr = SCI_GetFunction (SCI_BOOT);
因为我有一个100引脚的微控制器。

GPIO72、84为(0、1)

应用程序非常简单- LED 闪烁。

推出日期:

> serial_flash_programr.exe -d f2837xS -k F2837xS_sci_flash_kernel.txt -a can_485_testBoot.txt -p COM3 -b 9600 -v

结果:

我选择了1-DFU 并得到了结果:

我出了什么问题?

谢谢。

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

    尊敬的 Denis:

    在应用程序的链接器命令文件中、能否检查所有闪存映射段是否都在128位边界上对齐?  您可以使用 ALIGN (8)对齐它们、如 C2000Ware 中提供的链接器命令文件中所示。

    谢谢、此致、

    Vamsi

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

    大家好、Vamsi。

    我不太了解链接器命令文件的结构和格式、因此我无法肯定地说所有段都是对齐的。

    2837xS_Generic_flash_lnk.cmd:

    MEMORY
    {
    PAGE 0 :  /* Program Memory */
              /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */
              /* BEGIN is used for the "boot to Flash" bootloader mode   */
    
       BEGIN           	: origin = 0x080000, length = 0x000002
       RAMM0           	: origin = 0x000123, length = 0x0002DD
       RAMD0           	: origin = 0x00B000, length = 0x000800
       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
       RESET           	: origin = 0x3FFFC0, length = 0x000002
    
       /* Flash sectors */
       /* BANK 0 */
       FLASHA           : origin = 0x080002, length = 0x001FFE	/* on-chip Flash */
       FLASHB           : origin = 0x082000, length = 0x002000	/* on-chip Flash */
       FLASHC           : origin = 0x084000, length = 0x002000	/* on-chip Flash */
       FLASHD           : origin = 0x086000, length = 0x002000	/* on-chip Flash */
       FLASHE           : origin = 0x088000, length = 0x008000	/* on-chip Flash */
       FLASHF           : origin = 0x090000, length = 0x008000	/* on-chip Flash */
       FLASHG           : origin = 0x098000, length = 0x008000	/* on-chip Flash */
       FLASHH           : origin = 0x0A0000, length = 0x008000	/* on-chip Flash */
       FLASHI           : origin = 0x0A8000, length = 0x008000	/* on-chip Flash */
       FLASHJ           : origin = 0x0B0000, length = 0x008000	/* on-chip Flash */
       FLASHK           : origin = 0x0B8000, length = 0x002000	/* on-chip Flash */
       FLASHL           : origin = 0x0BA000, length = 0x002000	/* on-chip Flash */
       FLASHM           : origin = 0x0BC000, length = 0x002000	/* on-chip Flash */
       FLASHN           : origin = 0x0BE000, length = 0x002000	/* on-chip Flash */
    
       /* BANK 1 */
       FLASHO           : origin = 0x0C0000, length = 0x002000	/* on-chip Flash */
       FLASHP           : origin = 0x0C2000, length = 0x002000	/* on-chip Flash */
       FLASHQ           : origin = 0x0C4000, length = 0x002000	/* on-chip Flash */
       FLASHR           : origin = 0x0C6000, length = 0x002000	/* on-chip Flash */
       FLASHS           : origin = 0x0C8000, length = 0x008000	/* on-chip Flash */
       FLASHT           : origin = 0x0D0000, length = 0x008000	/* on-chip Flash */
       FLASHU           : origin = 0x0D8000, length = 0x008000	/* on-chip Flash */
       FLASHV           : origin = 0x0E0000, length = 0x008000	/* on-chip Flash */
       FLASHW           : origin = 0x0E8000, length = 0x008000	/* on-chip Flash */
       FLASHX           : origin = 0x0F0000, length = 0x008000	/* on-chip Flash */
       FLASHY           : origin = 0x0F8000, length = 0x002000	/* on-chip Flash */
       FLASHZ           : origin = 0x0FA000, length = 0x002000	/* on-chip Flash */
       FLASHAA          : origin = 0x0FC000, length = 0x002000	/* on-chip Flash */
       FLASHBB          : origin = 0x0FE000, length = 0x001FF0	/* on-chip Flash */
    
    //   FLASHBB_RSVD     : origin = 0x0FFFF0, length = 0x000010    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    
    PAGE 1 : /* Data Memory */
             /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for program allocation */
    
       BOOT_RSVD       : origin = 0x000002, length = 0x000121     /* Part of M0, BOOT rom will use this for stack */
       RAMM1           : origin = 0x000400, length = 0x0003F8     /* on-chip RAM block M1 */
    //   RAMM1_RSVD      : origin = 0x0007F8, length = 0x000008     /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
       RAMD1           : origin = 0x00B800, length = 0x000800
    
       RAMLS5      : origin = 0x00A800, length = 0x000800
    
       RAMGS0      : origin = 0x00C000, length = 0x001000
       RAMGS1      : origin = 0x00D000, length = 0x001000
       RAMGS2      : origin = 0x00E000, length = 0x001000
       RAMGS3      : origin = 0x00F000, length = 0x001000
       RAMGS4      : origin = 0x010000, length = 0x001000
       RAMGS5      : origin = 0x011000, length = 0x001000
       RAMGS6      : origin = 0x012000, length = 0x001000
       RAMGS7      : origin = 0x013000, length = 0x001000
       RAMGS8      : origin = 0x014000, length = 0x001000
       RAMGS9      : origin = 0x015000, length = 0x001000
       RAMGS10     : origin = 0x016000, length = 0x001000
       RAMGS11     : origin = 0x017000, length = 0x000FF8
    //   RAMGS11_RSVD : origin = 0x017FF8, length = 0x000008    /* Reserve and do not use for code as per the errata advisory "Memory: Prefetching Beyond Valid Memory" */
    }
    
    SECTIONS
    {
       /* Allocate program areas: */
       .cinit              : > FLASHB      PAGE = 0, ALIGN(8)
       .pinit              : > FLASHB,     PAGE = 0, ALIGN(8)
       .text               : >> FLASHB | FLASHC | FLASHD | FLASHE      PAGE = 0, ALIGN(8)
       codestart           : > BEGIN       PAGE = 0, ALIGN(8)
    
       /* Allocate uninitalized data sections: */
       .stack              : > RAMM1        PAGE = 1
    #if defined(__TI_EABI__)
       .init_array         : > FLASHB,       PAGE = 0,       ALIGN(8)
       .bss                : > RAMLS5,       PAGE = 1
       .bss:output         : > RAMLS3,       PAGE = 0
       .bss:cio            : > RAMLS5,       PAGE = 1
       .data               : > RAMLS5,       PAGE = 1
       .sysmem             : > RAMLS5,       PAGE = 1
       /* Initalized sections go in Flash */
       .const              : > FLASHF,       PAGE = 0,       ALIGN(8)
    #else
       .pinit              : > FLASHB,       PAGE = 0,       ALIGN(8)
       .ebss               : >> RAMLS5 | RAMGS0 | RAMGS1,    PAGE = 1
       .esysmem            : > RAMLS5,       PAGE = 1
       .cio                : > RAMLS5,       PAGE = 1
       /* Initalized sections go in Flash */
       .econst             : >> FLASHF      PAGE = 0, ALIGN(8)
    #endif
    
       /* Initalized sections go in Flash */
       .switch             : > FLASHB      PAGE = 0, ALIGN(8)
    
       .reset              : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */
    
    #ifdef __TI_COMPILER_VERSION__
        #if __TI_COMPILER_VERSION__ >= 15009000
            #if defined(__TI_EABI__)
                .TI.ramfunc : {} LOAD = FLASHD,
                                     RUN = RAMLS0,
                                     LOAD_START(RamfuncsLoadStart),
                                     LOAD_SIZE(RamfuncsLoadSize),
                                     LOAD_END(RamfuncsLoadEnd),
                                     RUN_START(RamfuncsRunStart),
                                     RUN_SIZE(RamfuncsRunSize),
                                     RUN_END(RamfuncsRunEnd),
                                     PAGE = 0, ALIGN(8)
            #else
                .TI.ramfunc : {} LOAD = FLASHD,
                                 RUN = RAMLS0,
                                 LOAD_START(_RamfuncsLoadStart),
                                 LOAD_SIZE(_RamfuncsLoadSize),
                                 LOAD_END(_RamfuncsLoadEnd),
                                 RUN_START(_RamfuncsRunStart),
                                 RUN_SIZE(_RamfuncsRunSize),
                                 RUN_END(_RamfuncsRunEnd),
                                 PAGE = 0, ALIGN(8)
            #endif
        #else
       ramfuncs            : LOAD = FLASHD,
                             RUN = RAMLS0,
                             LOAD_START(_RamfuncsLoadStart),
                             LOAD_SIZE(_RamfuncsLoadSize),
                             LOAD_END(_RamfuncsLoadEnd),
                             RUN_START(_RamfuncsRunStart),
                             RUN_SIZE(_RamfuncsRunSize),
                             RUN_END(_RamfuncsRunEnd),
                             PAGE = 0, ALIGN(8)
       #endif
    #endif
    
       ramgs0           : > RAMGS0,    PAGE = 1
       ramgs1           : > RAMGS1,    PAGE = 1
    
       /* The following section definitions are for SDFM examples */
       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
       Difference_RegsFile : >RAMGS5, 	PAGE = 1, fill=0x3333
    }
    
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

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

    你(们)好

    能否提供一个指向描述链接器命令文件结构和语法的文档的链接?

    谢谢。

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

    尊敬的 Denis:

    我已查看您的链接器 cmd 文件。  我看到映射到闪存的所有段都在128位边界上对齐。

    是否可以附加地图文件?  我将检查是否有任何长段导致此问题。

    在编译应用程序时、您是否收到有关任何未映射段的警告?

    关于链接器命令文件、您可以检查以下内容: https://software-dl.ti.com/ccs/esd/documents/c2000_c28x-compiler-understanding-linking.html 

    谢谢、此致、

    Vamsi

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

    大家好、Vamsi。

    e2e.ti.com/.../CPU1_5F00_FLASH.zip

    编译无错误或警告。

    谢谢

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

    尊敬的 Denis:

    谢谢你。  我将在几天内回顾并返回给您。

    此致、

    Vamsi

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

    尊敬的 Denis:

    我没有看到任何长段导致此问题。

    我将把这个分配给我们的闪存内核专家、以进一步帮助您。

    谢谢、此致、
    Vamsi

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

    谢谢、我要等。

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

    Denis、  

    您能否尝试在 BANK0中将 codestart 段从 begin 更改为未使用的扇区、并将其与 align (8)指令对齐、然后查看是否有任何更改?

    Anu

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

    您好、Anu。

    替换了2837xS_General_flash_lnk.cmd 文件中的内容
      codestart:> begin page = 0,align (8)
    在上
      codestart:> FLASHG PAGE = 0,ALIGN (8)
    结果:

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

    谢谢 Denis。 是否可以使用此配置发送项目的映射文件?

    Anu

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

    您好、Anu

    e2e.ti.com/.../can_5F00_485_5F00_testBoot.zip

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

    Denis、  

    看起来 codestart 段仍然被映射到这里-您能在映射到 FLASHG 时发送映射文件吗?

    Anu

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

    我看到的配置错误、我看到代码开始部分映射到 CPU1_FLASH 文件夹中的 FLASHG。 您是否对 codestart 部分进行了任何修改?

    Anu

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

    是的。

    "

    Denis、

    您能否尝试在 BANK0中将 codestart 段从 begin 更改为未使用的扇区、并将其与 align (8)指令对齐、然后查看是否有任何更改?
    Anu

    "

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

    Denis、  

    您是否更改了 codestart 部分的实际内容? 我想知道将 codestart 段的内容放入 begin 中是否存在问题。  

    Anu

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

    Anu、

    您能更详细一点吗?

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

    Denis、  

    您是否在 F2837xS_CodeStartBranch.asm 文件中的 CODE_START 函数中进行了任何更改?

    Anu

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

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

    您是否可以尝试将 begin 的长度增加2、将 FLASHA 的长度减少2、并在此处重映射 codestart?

    如果这是您可以接受的更改、您可以继续执行此操作。 我不确定为什么不写入长度为0x2的开头、这是我们需要在内部进一步研究的内容。  

    Anu

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

    您好、Anu。

    1。

      开始             :origin = 0x080000,length = 0x000004

    2.

      FLASHA          :origin = 0x080004,length = 0x000FFF   /*片上闪存*/

    3.

      codestart          :> begin      page = 0,align (8)

    不确定什么是正确的。

    结果是相同的。

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

    FLASHA 的长度应为0xFFC。 FLASHA 的长度为0xFFF 时是否未抛出编译错误?

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

    谢谢、Anu。

    没有错误、编译很顺利。
    0xFFC。 无更改。

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

    Denis、  

    没有变化、您意味着您能够正确运行闪存内核并下载映像吗? 如果是、更改 BEGIN 和 FLASHA 长度的解决方案是否适合您?A

    Anu

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

    e2e.ti.com/.../_12043804340435043E04_-30_2D00_06_2D00_2022-060304.mp4

    您好、Anu。

    是的、闪存内核和映像被刷写。

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

    Denis、  

    好的、还有其他问题吗?

    Anu