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.

[参考译文] 通过 SSI 从 SD 进行固件更新

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/571400/firmware-update-from-sd-via-ssi

主题中讨论的其他器件:TM4C123

您好!

我的设备处理 SD。

是否可以通过 SSI 从 SD 更新固件?

外设控制器库第35.4节中的函数有什么作用?

TivaWare 引导加载程序用户指南第3章中的功能有什么作用?

是否可以通过 SSI 在 SD 上将 boot_dem1与 boot_serial 一起使用? 而无需使用 LM 闪存编程器

提前感谢

安德烈斯

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

    您是否正在寻找以下 TI 设计的软件示例中给出的 SD 卡启动?

    www.ti.com/.../TIDM-TM4C129SDRAMNVM
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我的应用中、我通过 SSI 将 TM4C123G 连接到了 microSD。 我不确定该软件示例是否适用于我的应用。

    基本上、我希望 TM4C123G 能够检测/读取 microSD 中的*。bin 文件、并执行例程以允许其更新固件
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Andres

    TM4C123x 的软件示例不是一对一的。 但是、您仍然可以使用相同的方法将二进制文件上载到闪存(而不是 SDRAM)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我有点困惑。 我有一些问题:

    我必须修改引导加载程序以更新固件?

    如何编译 USB_boot 或 serial_boot 示例?

    如果我修改 USB_stick_update 示例、我必须修改引导加载程序?

    我是否应该结合使用 ektm4c129_sdcard_bootloader 和 USB_stick_update?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Andres

    TI 参考设计示例代码使用 ektm4c129_sdcard_bootloader 将数据复制到 SDRAM 中。 您需要将代码刷写到内部闪存中。 由于该示例适用于 TM4C129x、因此您需要按照迁移指南中的说明对 TM4C123x 进行一些更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对不起、是否有迁移指南?

    请给我提供链接吗?

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

    请参阅以下应用手册。

    www.ti.com/.../spma065.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最后、在阅读文档后、我可以执行从 SD 卡读取文件的项目。

    更新固件的步骤如下:

    *我的程序检测 SD 中是否存在"firmware.bin"
    *它是新版本吗?
    *将新版本的文件复制到外部 SDRAM。
    *重置
    *引导加载程序读取 SDRAM 中是否有"内容"以及它是否是新的可刷新版本
    *将新代码复制到内存位置 APP_base
    *重置
    *引导加载程序找不到新版本、跳转至默认的 APP_BASE 位置


    是否可以执行上述步骤? 尤其是与引导加载程序相关的项目

    引导加载程序是否始终从 SDRAM 运行?

    Tiva 目录中的引导加载程序文件夹是什么?

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

    TM4C123没有 SDRAM 接口。 引导加载程序不会在 SDRAM 中运行、而是在片上闪存上运行。 TivaWare 中的引导加载程序目录是实现引导加载程序以使用 UART、I2C、SPI、USB 或 CAN 作为外部主机或器件的引导加载程序接口所需的一组文件。 它没有用于实现 FAT 文件系统的代码。

    列出的步骤必须是

    *我的程序检测 SD 中是否存在"firmware.bin"
    *它是新版本吗?
    *将文件复制到闪存中的新位置、该位置在 APP_BASE2处进行扇区对齐
    *更新新应用程序映像的非易失性存储器中的标志、如 EEPROM
    *擦除 APP_BASE1中的现有应用程序
    *跳转并执行 APP_BASE2上的应用程序
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答。

    抱歉、我指的是外部闪存 SPI、而不是 SDRAM。

    我想使用您的解决方案、但在这种情况下、我的程序应该占用我内部闪存的一半以上。

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

    否、由于我们不支持 XIP SPI 控制器、因此无法使用外部 SPI 闪存。

    只需使用一个 app_base_bootloader 即可简化上述示例。 引导加载程序在检测到版本高于当前固件版本的 firmware.bin 时、应始终擦除 APP_BASE。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我明白了

    很抱歉坚持、但如何创建我自己的引导加载程序?

    我想使用 boot_serial 示例、但我没有 main。 我认为我在概念上是错的。

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

    引导加载程序是一种引入应用程序映像的方法。 您可以使用 TI 设计前面提到的 SD 卡 Flasher 等现有项目、并使用与引导加载程序相同的项目。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!

    如何设置工程属性以编译和调试引导加载程序工程?

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

    我的项目从具有 FATFS 的 SD 读取 update.bin (将其加载到 RAM 中)。
    然后我删除闪存的所有内容并将 update.bin 复制到位置0x2800
    我使用 CallApplication 跳转到程序的起始位置。
    但在_asm 中失败("LDR sp、[r0]\ n"

    我应该在 startup.c 还是.cmd 中配置什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Andres

    位于0x2800位置的闪存是否包含与应用程序映像相同的数据?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我终于使它工作了。 问题是复制速度太慢。 这是由 SSI 比特率还是 fatfs 导致的? 有什么建议吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Andres

    当前在 FAT 文件系统移植文件中设置的 SSI 时钟速率是多少?系统时钟频率是多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SSI 时钟速率

    SSIConfigSetExpClk (SSI0_BASE、ROM_SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、400000、8);

    和系统时钟频率

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

    您可以使用更新80MHz 的系统时钟

    ROM_SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);

    并将 SD 卡时钟速率从当前的400KHz 提高到1MHz (从开始、然后查看可获得可靠数据的速度)

    SSIConfigSetExpClk (SSI0_BASE、ROM_SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、1000000、8);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、
    现在我还有另外一个问题:
    在通过跳转到引导加载程序(擦除闪存之前)执行升级之前、我需要直接从 SD 卡检查新 firmware.bin 的 CRC。
    是否有办法这样做的想法?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Andres

    您需要创建一个 CRC 工具来计算文件上的 CRC、并将其附加到 PC 等独立主机上的文件末尾。 然后、在引导加载程序软件中、您可以对文件 b y 读取它执行相同的检查、以在更新应用程序空间中的 SP 和 PC 位置之前建立其正确性。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我可以调整 CheckImageCRC32吗?