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.

[参考译文] TMS570LC4357-CRC:示例引导加载程序中的 EP

Guru**** 2426460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1361394/tms570lc4357-ep-crc-in-sample-bootloader

器件型号:EP

尊敬的 Jagadish:

很抱歉有大约5个月没有与您沟通。 分配到软件中的其他模块。 我已经完成了其他领域的任务、现在回到了引导加载程序。 我可以使用您的示例软件 UART_Bootloader_LC4357_New 来刷写我们的应用软件。 以及更改  要刷写的应用软件的 L_sys_link.cmd 和 hl_sys_startup.c。

我们需要使用自己的通过 C#编写的 PC 应用程序将 bin 文件下载到 MCU、就像 TeraTerm 一样。 您能告诉我您在引导加载程序软件中正在使用的 CRC 吗? 我在5个月前问过你这个问题、但你没有回答我。  CRC 文件位于 ASM 中、但我希望用 C 语言编写。如果可以、您有一个包含源代码的简单应用文件吗?我们可以使用这些源代码与 MCU 上的引导加载程序进行通信。  

期待您的回复。  

谢谢!

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

    尊敬的 LayEng:

    Y-Modem 在其协议中使用标准的16位 CRC。

    您可以直接在 google 中搜索 Y 调制解调器 CRC 计算。

    下面的链接中找到、这对我们可能很有用。

    gallium.inria.fr/~doligez/zmodem/ymodem.txt

    --

    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagadish:

    我谷歌找到了一个解决方案,但它与你以上建议的略有不同。 我确实看到了上面的这个、但其中有一些我不理解的代码。 我不确定它所写的语言。 我对 C 更熟悉。例如、我不理解这一行:

    crc +=(((c<=1)和0400)!=0);

    如果可能、您还可以 使用查找表提供 CRC 计算的 C 版本。 谢谢。

    是否可以为我提供发送应用程序(如 TeraTerm)的任何版本(DOS 版本也可以)。 它将帮助我们开发 PC 应用软件、从而将文件下载到 MCU。 我只对使用 Ymodem 协议的数据发送和接收感兴趣。  

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

    尊敬的 Jagadish:

    我还有一个问题。 我要从 APP_STATUS_ADDRESS 开始清除闪存中的32个字节的数据。 我该怎么做? 我一直在查看引导加载程序的 hl_sys_link.cmd。  

    VECTORS (X):origin=0x00000000 length=0x00000020 fill = 0xFFFFFFFFFFFF
    FLASH0 (RX):origin=0x00000020 length=0x001FFFE0 vfill = 0xffffffff
    FLASH1 (RX):origin=0x00200000 length=0x00200000 vfill = 0xffffffff
    /*组7 (128KB、费用)*/
    FLASH7 (R):origin=0xF0200000 length=0x00020000 vfill = 0xffffffff

    APP_STATUS_ADDRESS 位于0x020000。 它在哪家银行? 关于此闪存 API:  

    /* ulAddr 必须是一个闪存扇区的起始地址*/
    uint32_t Fapi_Block (uint32_t ulAddr、uint32_t size)

    如何知道闪存扇区的起始地址?

    如果要清除0x020000到0x020019,  是否只写入 Fapi_Block (0x020000, 0x20)?

    请回复。

    关于 hl_sys_link.cmd 的 flash7:  FLASH7 (R):origin=0xF0200000 length=0x00020000 vfill = 0xffffffff

    这是否意味着包含 EEPROM 的闪存7将始终被擦除?  

    期待您的回复。 谢谢!

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

    尊敬的 LayEng:

    如果我想清除0x020000到0x020019  Fapi_Block,我只需写入0x020000,即可[/报价]

    无法仅擦除存储器中的0x20字节。

    我们可以执行扇区擦除或存储体擦除。

    为此、您可以使用"Fapi_issueAsyncCommandWithAddress" API、如下所示:

    在这里,您可以使用第一个参数 Fapi_Erase ctor"或 Fapi_Erase 451"。 如果您使用  Fapi_Erase 45igor、它将擦除扇区、如果您使用 Fapi_Erase、它将擦除该银行。

    在下表中、您可以找到相应扇区和存储体地址:

    在您的情况下、您应该按如下方式调用以擦除相应的扇区:

    Fapi_issueAsyncCommandWithAddress (Fapi_Erase、(uint32_t*) 0x00200000);

    --
    谢谢。此致、
    Jagadish。