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.

[参考译文] LAUNCHXL-F28377S:F2837xS 和 F2807x 工具支持

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/703865/launchxl-f28377s-f2837xs-and-f2807x-tools-support

器件型号:LAUNCHXL-F28377S

您好! 我正在尝试使用 Uniflash GUI 串行刷写 LAUNCHXL-F28377S 上的 F28377S。 F28377S 是否已添加串行闪存支持? 我在 Uniflash 连接方法下拉菜单中看不到串行选项。 提前感谢。

Russell

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

    UniFlash 不再支持串行闪存。
    请查看此串行编程示例应用手册 :www.ti.com/.../sprabv4b.pdf

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以加载闪存内部函量、但加载应用程序会导致空白错误。 你有什么建议吗? 如何使用仿真器调试内核代码?


    谢谢、

    Russell


    传输的比特率/s 为:6712.127930
    应用程序加载成功!
    已完成等待应用程序下载和引导...
    命令成功
    错误状态:blank_error
    错误地址:0x82000
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在尝试执行 DFU 或擦除时是否观察到此错误?

    您可以将调试器连接到器件、也可以使用 Visual Studio 在主机应用串行闪存编程器中设置断点。 通过这种方法、您可以设置断点和单步执行、并运行两侧、主机和器件、使它们协同工作以进一步调试。

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

    嗨、大家好、

    我有相同的问题。 执行 DFU 和耳机命令时出现空白错误。

    是否有解决方案。

    谢谢 Alex

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

    我尝试使用 DFU。 我知道调试的含义、我问如何将 LaunchPad 置于调试模式、同时仍将其置于 sci 引导模式、我唯一要连接到 LaunchPad 的连接是 mirco USB。 这将作为 JTAG 调试的通道以及将应用发送到闪存内核的串行线路吗?  请提供 DIP 开关位置以及在仿真器/sci 引导模式下运行 Launch Pad 所需的任何 emuboot 寄存器。 似乎有几个人有完全相同的问题。 请确认此过程是否可行、方法是将其复制到您一侧的硬件上。

    Russell

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅此处的原理图:C:\ti\c2000\C2000Ware_1_00_04_00\boards\LaunchPads\LAUNCHXL_F28379D\R2.0\launchxl-f28379d_r2.0_sch.pdf

    此致、
    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 c1_bootrom.h 中找到了这一点:#define Emulate_try_boot 0xFF //连接仿真器后进行独立启动。

    我没有找到任何有关这方面的文档。 您能找到使用该工具的过程吗? DIP 引脚和相关寄存器

    谢谢、

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

    感谢您的回答、但我使用了我自己的硬件和 tms320f28377。
    与引导加载程序保持通信。
    我向引导加载程序发送"ERASE_CPU1"命令、然后我收到空白检查失败的错误。
    我调试了引导加载程序、我可以看到、在成功擦除后、我会得到一个空白检查错误。
    请参阅以下代码中的注释。
    软件版本为 C200Ware_1_00_04_00
    闪存 API 版本为 F021闪存 API v1.55。


    void shared_Erase (uint32扇区)

    statusCode.status = no_error;
    statusCode.address = 0x12345678;
    int i = 0;
    Fapi_StatusType oReturnCheck;
    Fapi_FlashStatusWordType oFlashStatusWord;
    INT FAIL = 0;

    EALLOW;
    对于(I = 0;I < 14;I++)

    if ((扇区& 0x00000001)=0x00000001)

    oReturnCheck = Fapi_issueODE19 CommandWithAddress (Fapi_EraseSector、
    (uint32 *)(sectAddress[i]));
    断点********* oReturnCheck 显示为 Fapi_Status_Success ********
    while (fapi_checkFsmForReady()!= fapi_Status_FsmReady){}
    oReturnCheck = Fapi_doBlankCheck ((uint32 *)(sectAddress[i])、
    断点********* oReturnCheck 显示为 Fapi_Error_Fail ********
    sectSize[i]、
    oFlashStatusWord (&O);
    if (oReturnCheck!= Fapi_Status_Success)

    if (FAIL =0)//首次失败

    statusCode.status = blank_error;
    statusCode.address = oFlashStatusWord.au32StatusWord[0];

    FAIL++;


    while (fapi_checkFsmForReady ()=fapi_Status_FsmBusy)



    扇区=扇区>> 1;

    EDIS;
    返回;


    谢谢 Alex
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alex,您是否厌倦了加载程序、DFU?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我尝试加载一个程序、但我得到了相同的错误、因为引导加载程序首先擦除、然后将程序编程到闪存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的意思是...
    当您通过 DFU 进行闪存时、引导加载程序会首先擦除闪存。
    这就是我得到相同误差的原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alex、

    请参阅以下内容是否有帮助:

    1)您能否搜索"如果 Fapi_issueCommandWithAddress (Fapi_EraseSector、xx)不等待擦除操作完成、我们如何知道擦除操作是否成功?" 闪存 API wiki 中的链接、网址为 processors.wiki.ti.com/.../C2000_Flash_FAQ

    2)还搜索"当闪存 API 无法擦除或编程时、我们可以考虑哪些常见调试提示?"。  它可能有助于调试。

    谢谢、此致、

    Vamsi

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

    我阅读了所有内容、我认为您的引导加载程序代码中存在一个错误。

    我使用的软件是最新的 C2000Ware_1_00_05_00。
    我的 CPU 是 TMS320F28377SPZPT (F28377S Launchpad 上的 CPU 相同)。
    应用程序:
    C2000Ware_1_00_05_00/device_support/f2837xs/examples/cpu1/blinky/cpu01

    编译配置为 CPU1_FLASH。
    然后、我们必须转换为引导加载程序格式 ASCII。
    hex2000 -boot -sci8 -a blinky_cpu01.out
    输出文件为 blinky_cpu01.a00

    引导加载程序为:
    C2000Ware_1_00_05_00/device_support/f2837xs/examples/cpu1/F2837xS_sci_flash_kernel/cpu01。

    当我尝试使用 DFU 下载该文件时、我会得到一个 blank_error

    打开/dev/ttyO2、38400
    输入和输出已成功刷新
    内核自动波特率成功
    正在将 LED_gpio60.A00下载到器件...
    校验和匹配
    封装尺寸:26.
    地址:82000
    阻塞大小:2.
    地址:80000
    阻塞大小:114
    地址:86000
    封装尺寸:3650
    地址:8201c.
    块大小:448
    地址:90000
    blocksize:0
    结束

    应用程序加载成功!
    已完成等待应用程序下载和引导... 输入和输出已成功刷新
    命令成功
    错误状态:blank_error
    错误地址:0x82000


    在引导加载程序中将其注释掉后、它会起作用

    空 Init_Flash_Sectors (空)

    EALLOW;
    Flash0EccRegs.ecc_enable.bit.enable = 0x0;
    Flash1EccRegs.ecc_enable.bit.enable = 0x0;

    Fapi_StatusType oReturnCheck;
    oReturnCheck = Fapi_initializeAPI (F021_CPU0_W0_BASE_ADDRESS、150);
    if (oReturnCheck!= Fapi_Status_Success)

    Example_Error (oReturnCheck);

    //oReturnCheck = Fapi_initializeAPI (F021_CPU0_W1_BASE_ADDRESS、150);
    //if (oReturnCheck!= Fapi_Status_Success)
    //{
    // Example_Error (oReturnCheck);
    //}
    oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank0);
    if (oReturnCheck!= Fapi_Status_Success)

    Example_Error (oReturnCheck);

    //oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank1);
    //if (oReturnCheck!= Fapi_Status_Success)
    //{
    // Example_Error (oReturnCheck);
    //}
    Flash0EccRegs.ecc_enable.bit.enable = 0xA;
    Flash1EccRegs.ecc_enable.bit.enable = 0xA;
    EDIS;



    但这不能解决我的问题!!!!!!!!!!!
    当我尝试对一个较大的应用程序进行编程时、我会得到一个验证错误。

    在您的手册中、我找到了以下文本、但我在 Booloader 中没有看到银行交换机
    只能写入 bank0。

    银行变更
    每当目标组需要在 Bank0和 Bank1之间更改时、Fapi_initiatizeAPI ()和
    Fapi_setActiveFlashBank()函数必须在任何其他 API 函数之前再次调用(除了
    可以使用 fapi_getLibraryInfo()。 此过程将更新 API 内部状态变量和
    相应的 FMC。


    您能检查一下吗?

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

    太棒了! 它也对我有用。 谢谢 Alex! 现在、帮助 Alex 解决他的问题!

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

    Alex、Rostislav、

    很棒的收获! 调试很好! 很抱歉、具有双组的单核 F2837xS 的闪存内核不够稳健。 它不包含此功能/增强功能。 我已提交一个错误来修复此问题。

    您能否在这里为我们和他人发布您的解决方案? 请发布您为实现此修复而更改的代码的代码片段。

    谢谢、
    SAL

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    刷写目标应用程序时、我会得到与 Alex 相同的验证错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您还需要使用闪存 API 来切换运行的存储库以进行验证。

    需要针对擦除、编程和验证命令对这两个组进行管理。

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

    贝洛·萨尔·普雷佐诺

    以下是我为您的引导加载程序提供的补丁。

    我只需删除 bank1初始值、因为我们要写入 bank0。

    它适用于 blinky 程序、但当我尝试下载程序时

    这不奏效。

    我得到一个程序错误:

    正在将 MyProgramm.A00下载到器件...

    地址:82000 块大小:1021

    地址:80000 块大小:2.

    地址:80002 块大小:3235

    地址:82400 块大小:7168

    地址:84000 块大小:4298

    地址:90000 块大小:1418

    应用程序加载成功!

    已完成等待应用程序下载和引导... 输入和输出已成功刷新

    命令成功

    错误状态:program_error

    错误地址:0x07c88

    我的链接器文件不使用 bank1。

    您能解释一下为什么我必须管理 bank1。

    或者、您能否为引导加载程序提供一个修复程序来管理组。

    Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从 c68b78dc57557a6ac2c9ef1b58c1f843194798c1 Mon Sep 17 00:00:00 2001
    出发地:alexn 
    日期:2018年7月16日星期一13:59:04 +0200
    主题:不是初始银行1。 现在我们不会得到空白错误。 Blinky 工作。
    
    --
    F2837xS_sci_flash_kernel.c | 26 ++++++++++++++++ --------
    1个文件已更改、13个插入(+)、13个删除
    
    (-) diff - git a/F2837xS_sci_flash_kernel.c b/F2837xS_sci_flash_kernel.c
    INDEX 31bc764..ec058d2 100644
    - a/F2837xS_sci_flash_kernel.c INDEX 31b_influ.c + u.ec058d2 100644b - a
    
    @@ 1237x_inu_inu_inu.c + u.c + 129,37xt_inu_inu.c + u.c + u.c @@ 129,t_inu.c
    //
    //初始化闪存。
    //
    - InitFlash_BANK1 ();
    +/-InitFlash_BANK1 ();
    InitFlash_BANK0 ();
    init_Flash_sectors ();
    
    @@-157、7 +157、7 @@ void Init_Flash_Sectors (void)
    {
    EALLOW;
    Flash0EccRegs.ecc_enable.bit.enable = 0x0;
    - Flash1EccRegs.ecc_enable.bit.enable = 0x0;
    +//Flash1EccRegs.ecc_enable.bit.enable = 0x0;
    
    Fapi_StatusType oReturnCheck;
    oReturnCheck = Fapi_initializeAPI (F021_CPU0_W0_BASE_ADDRESS、150);
    @@-165、25 +165、25 @@ void Init_Flash_Sectors (void)
    {
    Example_Error (oReturnCheck);
    }
    - oReturnCheck = Fapi_initializeAPI (F021_CPU0_W1_BASE_ADDRESS、150);
    - if (oReturnCheck!= Fapi_Status_Success)
    -{
    - Example_Error (oReturnCheck);
    -}
    +//oReturnCheck = Fapi_initializeAPI (F021_CPU0_W1_BASE_ADDRESS、150);
    +// if (oReturnCheck!= Fapi_Status_Success)
    +//{
    +// Example_Error (oReturnCheck);
    //}
    
    oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank0);
    if (oReturnCheck!= Fapi_Status_Success)
    {
    Example_Error (oReturnCheck);
    }
    - oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank1);
    - if (oReturnCheck!= Fapi_Status_Success)
    -{
    - Example_Error (oReturnCheck);
    -}
    +//oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank1);
    +//if (oReturnCheck!= Fapi_Status_Success)
    +//{
    +// Example_Error (oReturnCheck);
    +//}
    
    Flash0EccRegs.ecc_enable.bit.enable = 0xA;
    - Flash1EccRegs.ecc_enable.bit.enable = 0xA;
    +//Flash1EccRegs.ecc_enable.bit.enable = 0xA;
    EDIS
    ;}
    
    --
    cgit v0.11.0
    
    

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

    Alex、

    如果不想擦除/编程/验证 BANK1、则无需为  BANK1调用 Fapi_initiataleAPI ()和 Fapi_setActiveFlashBank()。  如果您没有在链接器命令文件中使用 Bank1为其分配任何代码/数据、那么我同意您也不需要初始化其读取接口-也就是说、您无需为 Bank1调用 InitFlash()。   

    A)当闪存程序操作针对 Bank0发生故障时、您能否检查闪存泵信号量是否分配给 FMC0?

    b)您从程序函数调用中得到的确切错误是什么?  

    c)失败后、您是否检查了 fmstat? 如果是、fmstat 的值是什么-这将帮助我们进一步调试。

    谢谢、此致、

    Vamsi

    ------------------------------------------------------------------

    P.S:下面的内容仅适用于 FYI (看起来您已经了解了这些内容)-但只是以防万一。

    1)  1)当应用程序想要执行 Bank0擦除/编程/验证操作时、应调用以下函数来初始化 FMC0和 Bank0 (请注意、参数与 Bank0/FMC0相关)。

      //

      //将泵所有权赋予 FMC0

      //

      PUMPREQUEST = 0x5A5A0002

      //

      //需要此函数来根据系统初始化闪存 API

      //频率、然后才能在组0上执行任何其他闪存 API 操作。

      //请注意、FMC0寄存器基址作为参数传递

      //

      oReturnCheck = Fapi_initializeAPI (F021_CPU0_W0_BASE_ADDRESS、FREQ);

      if (oReturnCheck!= Fapi_Status_Success)

      {

        //

        //检查闪存 API 文档以了解可能的错误

        //

        Example_Error (oReturnCheck);

      }

      //

      // Fapi_setActiveFlashBank 函数为设置闪存组0和 FMC0

      //将在组0上执行进一步的闪存操作。

      //请注意,自 FMC0寄存器以来传递的参数是 Fapi_FlashBank0

      //基址被传递到 Fapi_initiatizeAPI ()

      //

      oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank0);

      if (oReturnCheck!= Fapi_Status_Success)

      {

        //

        //检查闪存 API 文档以了解可能的错误

        //

        Example_Error (oReturnCheck);

      }

    2)  2)当应用程序想要执行 Bank1擦除/编程/验证操作时、应调用以下函数来初始化 FMC1和 Bank1 (请注意、参数与 Bank1/FMC1相关)。

      //

      //将泵所有权授予 FMC1

      //

      PUMPREQUEST = 0x5A5A0001

      //

      //需要此函数来根据系统初始化闪存 API

      //频率、然后才能在组1上执行任何其他闪存 API 操作。

      //请注意、FMC1寄存器基址作为参数传递

      //

      oReturnCheck = Fapi_initializeAPI (F021_CPU0_W1_BASE_ADDRESS、FREQ);

      if (oReturnCheck!= Fapi_Status_Success)

      {

        //

        //检查闪存 API 文档以了解可能的错误

        //

        Example_Error (oReturnCheck);

      }

      //

      // Fapi_setActiveFlashBank 函数为设置闪存组1和 FMC1

      //在银行1上执行进一步的闪存操作。

      //请注意、自 FMC1寄存器以来传递的参数是 Fapi_FlashBank1

      //基址被传递到 Fapi_initiatizeAPI ()

      //

      oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank1);

      if (oReturnCheck!= Fapi_Status_Success)

      {

        //

        //检查闪存 API 文档以了解可能的错误

        //

        Example_Error (oReturnCheck);

      }

     

    3) 3)请注意:由于 F28377S 中有两个用于单核的 FMC、因此只要目标组发生更改、就必须调用上述函数。  只能有一个组被激活用于擦除/编程/验证操作。  因此、每当应用程序希望为闪存操作切换目标组时、在对该组执行闪存操作之前、应调用相应组的上述函数。  请注意、在调用这些函数之前、应配置闪存等待状态。

    4)进入闪存读取接口配置:您可能已经注意到 InitFlash_BANK0 ()和 InitFlash_BANK1 ()函数-这些函数可用于分别初始化 Bank0和 Bank1 (等待状态可根据您的应用频率进行更改)。  应在使用任何闪存 API 函数之前调用这些函数。  无论您要擦除/编程/验证哪一个存储块、都可以执行这两个存储器。

    //
    //调用闪存初始化以设置闪存等待状态、备用电源模式、ECC 等
    //此函数必须驻留在 RAM 中
    //
    InitFlash_BANK0 ();
    InitFlash_BANK1 ();

     

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

    Alex、

    您能否更新调试状态?

    谢谢、此致、
    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TI 是否未调试 F2837xS 的闪存内核? 我们被告知工作中有修复程序。 情况是否仍然如此?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Russell、

    谢谢你。  请注意、我们已将其放入错误修复队列。  我们的团队将努力在下一季度发布。

    谢谢、此致、

    Vamsi

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

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

    下一次更新将于何时进行、是否消除了错误。

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

    遗憾的是、此修复程序被推回。 我们目前没有发布此错误修复的日期。 由此给您带来的不便、我们深表歉意。

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

    没有人解决了???

    Alex
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尚未发布此问题的修复程序。

    此致、
    SAL