主题中讨论的其他器件:EK-TM4C1294XL、 UNIFLASH
工具/软件:TI-RTOS
您好!
在我们的项目中 、需要 通过网络更新电路板的嵌入式软件。 是否有可能或有任何有关此问题的参考? 需要远程更新".bin"文件。
感谢您的回答。
此致、
Cengizhan YAPICIOĞLU ć
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.
工具/软件:TI-RTOS
您好!
在我们的项目中 、需要 通过网络更新电路板的嵌入式软件。 是否有可能或有任何有关此问题的参考? 需要远程更新".bin"文件。
感谢您的回答。
此致、
Cengizhan YAPICIOĞLU ć
您好!
我在我的安装文件中看到已重新调整的文档,并找到"4. 以太网更新"部分。 其中提到了 Configureenet()和 UpdateBootp()函数,尽管未看到这些函数采用任何“.bin”文件,而且我在该部分找不到任何其他内容。此外,我找不到 导入 Configureenet()和 UpdateBootp()所需的“BL_*.c”文件。 我想 让 LM FLAH 程序员做些什么、但有一个不同之 处是我想使用以太网。请就这些主题向我提供帮助。 提前感谢。
此致、
Cengizhan YAPICIOĞLU ć
您好!
开机自检链接已断开、我在查找时也遇到问题 不存在的/examples/boards/dk-tm4c1294xl/boot_emac_flash。 此外,我查看了引导加载程序文档,并注意到 Configureenet()和 UpdateBootP()位于 BL_EMAC.c 文件中,尽管我有 BL_config.h.Tmpl 文件,但这些文件需要 bl_config.h。 当我尝试将其与转换为头文件一起使用时、它需要 UIP 第三方软件包、但我使用 TI-RTOS。 另一件事是、我查看了示例(它不在我的安装文档中、但我从 Web 上找到了它)、但在 boot_emac_flash 上找不到任何内容、只是注释行。 然后,我聚焦 了 boot_demo_emac_flash,但无法找到 SoftwareUpdateBegin();SoftwareupdateInit();。 相关文档无法包含这些内容、我找不到它们。
当我关注文档时、我有一个基于 udpecho 示例的 TI-RTOS 项目、不使用 UIP 或 lwip 或类似的东西。 请就这些主题向我提供帮助吗? 相关的问题无法解决。
提前感谢。
此致、
Cengizhan YAPICIOĞLU ć
您好,
我按照链接操作、首先插入通过从 JTAG 接口进行调试来提供 IP 地址所需的.bin 文件。 在子序列中、我使用"Portgram Address Offset 0x0"对 emac_boot_flash.bin 进行编程、并遇到错误。"说明 BOOTP 服务器的问题"我是否可以做错误? 我将重点放在 UDP 端口67和69上、也是计算机使用的端口、但我移至另一个不使用67和69端口的端口、但结果是相同的、我有相同的错误。 从论坛问题中了解到、我还关闭了防火墙。
此致、
Cengizhan Yapıcıoğlu ć
您好!
是否需要为此使用 enet_lwip 示例? 我们有一个 RTOS 项目、它将 UDP 与静态 IP 结合使用。 初始化时、我运行 thsi 并记录 MAC 和 IP 地址。随后、通过 JTAG 接口地址0x0对 EMAC_BOOT_FLASH 进行编程。 然后、我打开 LM 闪存并选择以太网接口并填充 MAC 和 IP 字段、然后运行 EMAC_BOOT_FLASH、但我在 Wireshark 上看不到任何内容。Furthermeore、我无法使用 ping 命令从记录的 IP 地址接收任何答案。
另一件事是、我们希望通过编程方式实现它、我看到"bl_emac.c"- Funct、ons to Update via Internet、我必须使用其中的哪一个来从它更新映像(.bin)? 在引导加载程序文档中没有有关这方面的详细文档。您能就这两个主要主题向我们提供帮助吗?
*是否应该使用静态 IP 而不是 DHCP (enet_UIP 或 lwip)?
*我必须使用哪些函数或.c .h 文件来以编程方式执行它?
提前感谢您的回答。这对我们来说是一个非常重要的要求。
此致、
Cengizhan YAPICIOĞLU ć
您好!
[ Yapıcıoğlu 用户="Cengizhan Δ Σ"]随后、通过 JTAG 接口地址0x0对 EMAC_BOOT_FLASH 进行编程。 然后、我打开 LM 闪存并选择以太网接口并填充 MAC 和 IP 字段、然后运行 EMAC_BOOT_FLASH、但我无法在 Wireshark 上看到任何内容[/QUERP]
您是否按如下所示进入了"Program"选项卡以提供.bin 文件并按"Program"按钮? 您没有提到您已转到"Program"选项卡、单击"Program"按钮。
BOOT_EMAC_FLASH 运行后、它应该已向 LM 闪存编程器发送 BOOTP 请求。 LM 闪存编程器接收到 BOOTP 请求后、在 ARP 之后、.bin 将通过 TFTP 协议下载到 MCU。
[ Yapıcıoğlu user="Cengizhan Δ Σ">但电路板无法打开、发送映像包括 UDP、UART 和 i2c 通信、而不是 BOOT_EMAC_DEMOH_FLASH。 [/报价]
很抱歉,我不能理解你在这里想说什么。 发送包含 UDP、UART 和 i2c 的映像意味着什么? 我迷路了。 在屏幕截图中、您显示电路板正在生成 BOOTP 请求、随后 TFTP 开始将固件下载到闪存。 就引导加载程序而言、我认为这是有效的。
[ Yapıcıoğlu user="Cengizhan Δ t"]是否存在引导加载程序起始地址和固件程序起始地址的任何设置? 我看到了带 Wireshark 的 tftp 数据包。[/quot]
请参阅 bl_config.h 文件。 有 APP_START_ADDRESS 的定义。 请参见下面的示例。 APP_START_ADDRESS 是应用固件将编程到的地址。 0x4000是示例选择使用的地址。 您可以根据需要使用不同的地址。
//
//
//应用程序的起始地址。 这必须是1024的倍数
//字节(使其与页边界对齐)。 矢量表的预期值为
//此位置,以及向量表(位于的栈)的感知有效性
//在 SRAM 中、位于闪存中的复位矢量)用作的指示
//应用程序映像的有效性。
//
//引导加载程序的闪存映像不得大于此值。
//
//取决于:无
//不包括:无
//要求:无
//
//
#define APP_START_ADDRESS 0x00004000
如果您查看 boot_demo_emac_flash_ccs.cmd 文件以获取 boot_demo_emac_flash 示例、则应用程序链接到地址0x4000 、该地址与 boot_emac_flash bootloader 中 bl_config.h 文件中的 app_start_address 0x00004000匹配。 引导加载程序本身必须从0x0开始。
/*应用程序的起始地址。 通常是中断矢量*/
/*必须位于应用程序的开头。 *
#define APP_BASE 0x00004000
#define RAM_base 0x20000000
/*系统内存映射*/
存储器
{
/*存储在内部闪存中并从内部闪存执行的应用程序*/
闪存(RX):origin = app_BASE,length = 0x000fc000
/*应用程序使用内部 RAM 进行数据*/
SRAM (rwx):origin = 0x20000000,length = 0x00040000
}
[引用 USER="Cengizhan Yapıcıoğlu "]1-)是否应在通过 ICDI 更新以太网后或仅一次运行后每次安装 boot_EMAC 和 lw_IP 的.bin 文件? [/报价]
很高兴您取得了良好的进展。
不需要、每次都不需要安装 boot_emac_flash (引导加载程序)。 这应该是一次性的过程。 如前所述、引导加载程序将首先检查0x4000处是否存在有效的应用程序固件(或您指定的任何应用程序起始地址)。 它检查有效应用程序固件的方法是验证堆栈指针和复位矢量是否等于0xFFFFFFFF。 如果它们都是 F、则表示没有应用程序存在。 然后,它将向服务器发送 BOOTP 请求。 服务器收到 BOOTP 请求后,TFTP 将开始下载应用程序固件。 如果0x4000处已经存在应用程序固件、会发生什么情况? 在本例中、引导加载程序将跳转到应用程序。 它不会发送 BOOTP 请求。 您可能会有这样的印象:每次重新加载 boot_emac_flash 时,它都会重新启动 BOOTP。 原因可能是您擦除整个闪存。 每次擦除整个闪存并再次对 boot_emac_flash 进行编程时、0x4000处的堆栈指针和复位向量都为空、引导加载程序将执行 BOOTP 进程。
[引用 user="Cengizhan Yapıcıoğlu "]2-)在我的案例中,它仅在第一次运行时才真正起作用,如下所示。 我检查了程序的起始地址、该地址为0x0、但当我将 bin 更改为启动0x4000 (通过.cfg 文件)时(只有映像在您的情况下不更新第一个固件、而不是 Enet_lw IP)、远程更新成功。 [/报价]
如果将 APP_START_ADDRESS 更改为0x0、则会覆盖位于0x0的引导加载程序(BOOT_EMAC_FLASH)。 我已经提到 BOOT_EMAC_FLASH 必须位于0x0、您的应用程序可以位于0x4000或您选择的其他应用程序。 您要求引导加载程序覆盖自身、当然、由于应用程序固件会覆盖引导加载程序、因此下次引导加载程序将无法引导加载。
boot_demo_emac_flash 是示例应用固件。 这是一个简单的闪烁程序。 但是、它还包含用于检测服务器是否发送了魔术包的代码。 当演示程序正在运行时(使 LED 闪烁)、如果您在 LM 闪存编程器中单击"Program"按钮、 演示程序将跳转到引导加载程序以重新启动 BOOTP 进程。 请检查演示代码。 这就是为什么我要求您按原样运行 boot_emac_flash 和 boot_demo_emac_flash、并在修改它们之前了解它们的工作原理。
如果您要构建自己的应用固件、并且希望能够跳回到引导加载程序、则必须整合代码来检测服务器发送的魔术包。 请读取 boot_demo_emac_flash 代码。
BOOT_EMAC_FLASH (引导加载程序)还具有相应的配置、允许您通过检测按压的引脚来强制执行引导加载、即使已经存在应用程序固件。 在 bl_config.h 中检查#define Forced_update_Periph、 Forced_update_port、 Forced_update_PIN、 Forced_update_polarity。
[引用 USER="Cengizhan Yapıcıoğlu "]3-)另一件事是我将第一个程序地址更改为0x4000 (假设为 lw_IP 端)并通过 ICDI 调用 boot_EMAC。 但我无法在 Wireshark 上查看 BOOTP 请求。 如果 lw_ip 端启动0x0、它将完美工作。
正如我说过的、如果您打算首先对 bootloader boot_emac_flash 进行编程、那么它必须位于0x0。 不能更改为0x4000。 思考一下。 CPU 复位后、它将在0x0处获取堆栈指针和复位矢量、如果没有任何内容、那么它如何能够引导加载? 您是否在询问是否可以将应用程序固件设置为0x0 (boot_demo_emac_flash)、而引导加载程序设置为0x4000 (boot_emac_flash)? 这不奏效。