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.

[参考译文] TMS320F28377S:闪存 API 集成问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/973153/tms320f28377s-flash-api-integration-issue

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

您好!

我已经在 include 中包含了 API 文件和所有源文件、但一旦调用擦除闪存、就会显示以下错误:

但我没有在任何地方指定任何此类位置。 请支持解决此问题。 如果有人可以支持、也可以在何处编辑此位置。 这将会大有帮助

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

    Needigya、

    这不是错误。  看起来您尝试步入闪存 API 函数。  您在应用中包含了闪存 API 库。  您没有源文件(我们不会为闪存 API 发布源文件)。  该消息只是说您的项目中没有可用的源文件。

    您可以单步执行闪存 API 函数以避免此消息。

    如果您有其他问题、请告诉我。

    谢谢、此致、
    Vamsi

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

    您好!

    感谢您的快速响应。

    实际上、闪存 API 初始化本身会将返回值设置为失败、这就是我尝试对其进行调试的原因。

    您能告诉我调试它的方法吗? 我也不会获得返回值、只是在将代码包含到"estop"之后。

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

    Needigya、

    好的。

    我建议您查看 C2000Ware 中的闪存编程示例、网址 为 C2000Ware_3_03_00_00\device_support\f2837xs\examples\cpu1\flash_programming\cpu01

    您能否检查是从闪存还是 RAM 执行闪存 API?  如果您在链接器 cmd 文件中将其映射到闪存进行加载、并将 RAM 用于执行、则请确保在应用程序中调用闪存 API 函数之前使用 memcpy ()将闪存 API 复制到 RAM。

    此常见问题解答可为您提供帮助: e2e.ti.com/.../951668

    请搜索"当闪存 API 无法擦除或编程时、我们可以考虑哪些常见调试提示?" 在上面的常见问题解答中。

    如果 C2000Ware 示例和常见问题解答对解决您的问题没有帮助、请告诉我、我可以提供帮助。

    谢谢、此致、
    Vamsi

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

    尊敬的 Vamsi:

    我尝试了示例代码、它工作正常。 当我集成到代码中时、问题仍然存在。 您能告诉我们如何找到问题和根本原因吗?

    是的、我要将其复制到 RAM 中。

    一旦调用初始化函数、指针就不会向前移动并转到 estop。

    API 的返回值也不会返回值

    但是、由于我无法访问库、因此我无法调试问题

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

    Needigya、

    您不需要闪存 API 源即可对其进行调试。

    请发送给我:

    (i)链接器 cmd 文件

    (二)地图文件

    (iii)代码片段、您可以在其中调用闪存初始化例程(用于设置 waitstates)、memcpy ()和 Fapi_initiatizeAPI ()。

    我还建议您查看此常见问题解答、以防它为您触发任何调试提示: e2e.ti.com/.../878674

    此外、您还可以单步执行示例代码并查看示例工程的链接器 cmd 和编译设置、以了解该代码与您的工程之间的差异。  同样、无需单步执行闪存 API 函数。

    谢谢、此致、
    Vamsi

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

    您好!

    以下是 cmd 文件:

    /*
    //######################################################################################################################
    //文件:flash_programming_cpu1_flash.cmd
    //标题:所有 F28X7x 器件的链接器命令文件
    //######################################################################################################################
    //$TI 版本:F2837xS 支持库 v191 $
    //$Release Date:星期五3月11日15:58:35 CST 2016 $
    //版权所有:版权所有(C) 2014-2016 Texas Instruments Incorporated -
    // http://www.ti.com/保留所有权利$
    //######################################################################################################################
    *

    /*===================================================================
    //适用于 Code Composer Studio V2.2和更高版本
    //--------------------------------------------------------
    //除了该内存链接器命令文件外,
    //将头文件链接器命令文件直接添加到工程中。
    //链接时需要标头链接器命令文件
    //将外设结构设置到内部的适当位置
    //存储器映射。
    //在中找到了头文件链接器文件 \F2837xS_headers\cmd
    //对于 BIOS 应用程序添加:F28X7x_Headers_BIOS.cmd
    //对于非 BIOS 应用程序添加:F28X7x_Headers_nonBIOS.cmd
    =================================================================================================== *

    /*定义 F28X7x 的存储器块开始/长度
    PAGE 0将用于组织程序段
    第1页将用于组织数据段

    注:
    F28M3Xx 上的存储器块是一致的(也是相同的
    物理存储器)。
    不应该是相同的存储器区域
    同时为 PAGE 0和 PAGE 1定义。
    这样做将导致程序损坏
    和/或数据。

    可以是连续的 SARAM 存储器块或闪存扇区
    组合在一起以创建更大的存储器块。
    *

    存储器

    第0页:/*程序内存*/
    /*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/
    /* begin 用于"引导至闪存"引导加载程序模式*/

    开始:origin = 0x080000,length = 0x000002
    RAMM0:origin = 0x000122、length = 0x0002DE
    RAMD0:origin = 0x00B000、length = 0x000800
    RAMLS03:origin = 0x008000、length = 0x002000
    /* RAMLS1:origin = 0x008800,length = 0x000800
    RAMLS2:origin = 0x009000,length = 0x000800
    RAMLS3:origin = 0x009800、length = 0x000800 *
    RAMLS4:origin = 0x00A000,length = 0x000800
    复位:origin = 0x3FFFC0,length = 0x000002

    /*闪存扇区*/
    FLASHA:origin = 0x080002,length = 0x001FFE /*片上闪存*/
    FLASHB:origin = 0x082000、length = 0x002000 //片上闪存*
    FLASHC:origin = 0x084000,length = 0x002000 //片上闪存*/
    FLASHD:origin = 0x086000、length = 0x002000 //片上闪存*/
    FLASHE:origin = 0x088000、length = 0x008000 //片上闪存*/
    FLASHF:origin = 0x090000,length = 0x008000 //片上闪存*
    FLASHG:origin = 0x098000、length = 0x008000 //片上闪存*/
    FLASHH:origin = 0x0A0000,length = 0x008000 //片上闪存*/
    FLASHI:origin = 0x0A8000、length = 0x008000 //片上闪存*/
    // FLASHJ:origin = 0x0B0000,length = 0x008000 //片上闪存*/
    // FLASHK:origin = 0x0B8000、length = 0x002000 //片上闪存*/
    // FLASHL:origin = 0x0BA000、length = 0x002000 //片上闪存*/
    // FLASHM:origin = 0x0BC000、length = 0x002000 //片上闪存*/
    // FLASHN:origin = 0x0BE000,length = 0x002000 //片上闪存*/

    第1页:/*数据存储器*/
    /*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/

    BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
    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


    部分

    /*分配计划领域:*/
    .cinit:> FLASHD PAGE = 0
    .pinit:> FLASHD,page = 0
    .text:>> FLASHD | FLASHE PAGE = 0
    codestart:> begin page = 0



    ramfuncs
    {-l F021_API_F2837xS_FPU32.lib}
    .TI.ramfunc

    }负载= FLASHD,
    运行= RAMLS03、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0

    /*分配未初始化的数据段:*/
    .stack:>RAMM1 page = 1.
    .ebss:>> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1.
    .esysmem:> RAMLS5 PAGE = 1.

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

    .reset:> reset,page = 0,type = DSECT //未使用,*/

    filter_RegsFile:> RAMGS0,PAGE = 1

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

    /*闪存编程缓冲器*/
    BufferDataSection:>RAMD1,PAGE = 1,ALIG(4)

    /*
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *

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

    您好!

    它停留在以下命令中:擦除命令返回成功、但验证擦除返回失败。

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

    您好!

    它停留在以下命令中:擦除命令返回成功、但验证擦除返回失败。

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

    Needigya、

    在执行擦除命令之后(空白检查之前)、我看不到您检查 FMSTAT 值。  您能否使用 fapi_getFsmStatus()检查 fmstat 值并让我知道该值是什么?   

    请查看 C2000Ware 示例,了解如何使用 Fapi_getFsmStatus()。

    谢谢、此致、

    Vamsi

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

    Needigya、

    您对此有任何更新吗?  我可以关闭此帖子吗?

    谢谢、此致、

    Vamsi