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.

[参考译文] F28M36P63C2:串行引导加载程序

Guru**** 2601915 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/667340/f28m36p63c2-serial-bootloader

部件号:F28M36P63C2

大家好,

我正在尝试开发一个引导加载程序来从F28m36中的UART更新固件。但我是初学者,找不到任何有关如何执行此操作的全面示例。

是否有解释从何处开始的示例项目或教程?

能否有人给我分步指导?  

我应该编辑哪些文件? 它只是将闪存分成两个区域的.cmd文件,或者我还需要编辑startup-css.c?

谢谢

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

    请访问www.ti.com/lit/sprabv4

    这是串行闪存编程器应用报告,介绍了串行闪存编程器主机PC实用程序的功能以及可用于C2000器件的SCI闪存内核。 遗憾的是,我们不支持F28M36,但您仍然可以使用或修改SCI闪存内核和串行闪存编程器来满足您的需要。

    希望这有所帮助。

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

    感谢您提供材料

    我使用的是自定义板,我无法访问'Boot Mode Selection'(启动模式选择)的GPIO。 主板将此引脚用于其他用途。

    是否可以处理此问题?

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

    是的。 您可以在闪存中保留闪存内核,当您需要执行设备固件更新时,您可以将闪存内核和闪存API复制到RAM,然后开始加载闪存映像并对其重新编程。

    您可以将内核保留在闪存中,然后系统收到DFU的信号,您可以从应用程序分支到内核。

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

    如何为应用程序执行流程分支?

    如何在两个内核中处理此分支流程?

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

    这是您必须集成到系统中的内容。 例如,假定SCI向MCU发送DFU命令。 MCU软件将接收此命令并使用类似于闪存内核的内容开始DFU进程。

    您可以查看F2837xD闪存内核,以了解如何为双核设备解决此问题的示例。

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

    您好,Sal,

    当我尝试在闪存扇区L中写入时,我收到错误'FAI_Error_ABHIncorrectDataBufferLength'。

    下面是我用来编写的代码。

    //可以为程序功能提供最多16字节的数据缓冲区。
    //每个单词都被编程,直到整个缓冲区被编程或
    //发现问题。
    //但是,要编程超过16个字节的缓冲区,
    //程序函数可以循环调用,为每个函数编程16个字节
    //循环迭代,直到对整个缓冲区进行编程
    
    //当使用AutoEccGeneration选项时,Flash API将为给定的计算ECC
    // 64位数据,并将其与64位主阵列数据一起编程。
    //请注意,64位数据片中的任何未提供的数据
    //将被假定为1,用于计算ECC,并将被编程。
    
    对于(i=0,u32Index = Bzero_SectorL_start;
    (u32Index <(Bzero_SectorL_start + img->len.u32))
    &&(oReturnCheck == Fapi_Status_Success);i+=16,u32Index+=16)
    {
    oReturnCheck = Fapi_issueProgrammingCommand(UINT32 *)u32Index,
    img ->data+I,
    16岁
    0,
    0,
    FAPI_AutoEccGeneration);
    
    while (Fapi_checkFsmForReady()== Fapi_Status_FsmBusy);
    
    IF (oReturnCheck!= Fapi_Status_Success)
    {
    //查看Flash API文档以了解可能的错误
    Example_Error(oReturnCheck);
    }
    
    //读取fmstat寄存器内容以了解FSM的状态
    // program命令,查看是否存在与程序操作相关的错误
    oFlashStatus = Fapi_getFsmStatus();
    如果(oFlashStatus!= 0)
    {
    //检查fmstat并进行相应的调试
    fmstat_fail ();
    }
    
    //验证编程的值。 程序步骤本身进行验证
    //。 此验证是可以执行的第二次验证。
    oReturnCheck = Fapi_doVerifyByByByByByByByByByte(((uint8 *)u32Index,
    16岁
    img ->data+I,
    &oFlashStatusWord);
    
    IF (oReturnCheck!= Fapi_Status_Success)
    {
    //查看Flash API文档以了解可能的错误
    Example_Error(oReturnCheck);
    }
    } 

    可能是与链接程序命令文件相关的内容。 我要附加bootloader和应用程序.cmd文件。

    您能指导我调试这个问题吗?

    e2e.ti.com/.../linker_5F00_files.zip

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

    您好,

    您能否提供有关img的一些信息? 图像大小是否为16的多个?

    在链接程序命令文件中,FLASHLOAD大小扩展为0xEDA8,即它包括扇区L。但是您正在尝试再次对扇区L进行编程? 是否有意这样做?

    如果可能,请附上整个项目。 这将有助于更好地了解问题。

    谢谢!
    Katta

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

    你好,Katta!

    感谢您的回复。

    是,img大小为8624字节。

    是的,我正在尝试擦除扇区L,我得到了'Fapi_Status_Success '。

    随附整个项目。

    e2e.ti.com/.../flash_5F00_programming_5F00_m3.zip

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

    我检查了实施情况。
    请在擦除闪存扇区之前添加初始化闪存API (initialize_flash_api())和设置活动闪存库(Fapi_setActiveFlashBank(Fapi_FlashBank0))的缺失步骤。

    请尝试进行这些更改并重试吗? 请按照闪存编程示例中提供的步骤操作。

    谢谢!
    Katta