工具/软件:Code Composer Studio
您好!
我正在使用 TM4C123GH6PM、我想通过无线方式进行固件更新。 我想创建应用程序管理器来检测要执行的应用程序或引导加载程序。 应用程序管理器能够切换或选择操作模式(应用程序或引导加载程序)。 应用管理器还支持双映像模式。 请分享一些与创建应用程序管理器相关的文档和示例。
谢谢、此致、
Siva
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.
工具/软件:Code Composer Studio
您好!
我正在使用 TM4C123GH6PM、我想通过无线方式进行固件更新。 我想创建应用程序管理器来检测要执行的应用程序或引导加载程序。 应用程序管理器能够切换或选择操作模式(应用程序或引导加载程序)。 应用管理器还支持双映像模式。 请分享一些与创建应用程序管理器相关的文档和示例。
谢谢、此致、
Siva
您好、Siva、
感谢您提供这些详细信息、您对您的要求进行了非常可靠的总结。 虽然我无法帮助所有这些人、但我会提供我能提供的建议来帮助您的发展。
[引用 user="Siva p"]•检测器件何时应处于引导加载程序模式或应用程序模式[/quot]
这是用户定义的。 根据您的描述、使用"Magic Packet"可能是合理的、在这里、如果 GSM 模块收到它、它将通过 API 调用调用来调用引导加载程序。 您可能需要考虑 GSM 模块何时可以接收此类数据包、并确定是否要立即调用引导加载程序或等待任何进程事先解决-只需在您的范围内考虑特定于应用的问题 整个系统。
[引用 user="Siva p"]•验证应用程序
验证应用程序是制作 OTA 引导加载程序的最棘手部分之一。 通常、最好的方法是使用某种校验和/CRC 来确保数据不会损坏。 这就是我的建议。
[引用 user="Siva p"]•重定向中断矢量
这是引导加载程序过程的一部分。 请记住、引导加载程序本身应从 SRAM 执行、以便覆盖的闪存包含引导加载程序本身、不会中断编程。
[引用 user="Siva p"]•从引导加载程序跳转到应用程序
这同样简单、因为引导加载程序写入闪存后、它应该了解固件写入的位置以及执行代码需要跳转到的地址。
[引用 user="Siva p"]•在双映像模式下恢复有效映像[/quot]
我不确定恢复有效映像意味着什么、但如果使用双映像模式、则存储器将分为3个分区。 第一个也可能是最小的是您的应用程序管理器+引导加载程序。 然后、您的剩余存储器必须被分成一半才能为每个映像提供相同的空间。 此时、应用程序管理器+引导加载程序需要跟踪两个映像中的哪一个映像具有有效的应用程序。 如果一个应用程序有效、而另一个应用程序无效、则应始终优先写入新固件。
验证后、可以将其设置为有效应用程序、引导加载程序可以跳转到该应用程序以执行。 如果您希望尝试通过复制闪存内容来恢复程序、这是可能的、 但我不确定最终是否有益、因为您不应该看到从闪存的不同部分执行的性能有任何差异、因此在我看来、只要应用程序管理器精心设计、该步骤就显得多余。 它真正具有的唯一优势是使从文档角度来看的存储器映射更加简单、代价是需要在闪存上复制内容。
如果您确实希望拥有单独的下载区域、您可以这样做、 但是、一旦新的应用程序映像验证为正常运行、我就没有什么理由将其转移到"应用程序区域"以执行、因为引导加载程序进程结束后、您可以随时确定执行的起始点。 我的两分看法。
[引用 user="Siva p"]检测器件何时应处于引导加载程序模式或应用程序模式
TI 提供了引导加载程序检查按钮按压操作的示例。 您可以在调用引导加载程序之前将此检查更改为应用程序设置的 NV 存储器(可能为 EEPROM)的某些字节。 棘手的是、您始终引导到引导加载程序中、因此需要知道何时执行更新操作以及何时将 CPU 发送到您的应用程序代码。
在大多数示例中、引导加载程序希望固件通过某些接口(UART、USB、以太网等)提供。 您的案例会更简单一些、因为您已经在某个位置下载了映像。
[引用 user="Siva p"]验证应用程序
示例使用 CRC 校验、TI 提供源代码来构建名为 binpack 的 Windows 应用。 Binpack 将 CRC 嵌入到您的固件.bin 文件中。
[引用 user="Siva p"]重定向中断矢量
从芯片的数据表"寄存器57:矢量表偏移量(VTABLE)、偏移量0xD08
注意:该寄存器只能在特权模式下访问。
VTABLE 寄存器指示向量表基地址相对于存储器地址0x0000.0000的偏移量。"
将该寄存器设置为应用程序矢量表下载到的位置。
[引用 user="Siva p"]从引导加载程序跳转到应用程序
堆栈指针被置位。 然后分支到应用程序的复位矢量。
[引用 user="Siva p"]在双映像模式下恢复有效映像[/quot]
示例中未提供这种情况。 我认为这里的优点是您可以运行新下载的映像一段时间、如果遇到问题、则可以跳回到现有映像。 假设 CRC 通过、则映像应按照实验中测试的方式运行。 如果你正在做一些重要的事情比如核反应堆,我会加入这个功能,但在大多数情况下,它似乎并不重要。
如果您设置为双映像、则可能没有临时下载区域的原因。 我会让 gsm 模块将图像下载到当前未运行的空间。 这将为您保存一个复制过程。
编辑:我在输入时没有注意到 Ralph 的回复。 我希望我的信息是补充性的。