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.
工具与软件:
团队成员、您好!
我们尝试使用 BSL Scripter 通过以太网刷写 MSP432E401Y。
按照 Resource Explorer 中所述的步骤、我们从 PC 连接了一根 RJ45电缆、从 MCU 连接了另一根电缆、并从我们公司的网络连接了一根 RJ45电缆。
(实际上我的 上一个线程 已关闭、因此开始新的线程)
无法如 Resource Explorer 中所述刷写引导加载程序。 因此、我们尝试使用 UNIFLASH 刷写相同的引导加载程序并进行了电源复位。 然后、我们可以在 Wireshark 中看到来自微控制器的 BOOTP 请求、如下所示。
当我们尝试运行 BSL-Scripter.exe 时、它将等待 BOOTP 请求。 并附加 BSL-Scripter 日志文件 以供参考。
我们有 很多未知在这方面,请回答以下问题。
1.微控制器将发送 BOOTP 请求、然后 BSL Scripter 将发送 BOOTP 应答、并在脚本中将 IP 配置为 IP 客户端。 然后、更新处理程序将更新从 BSL Scripter 发送的固件映像。 请确认这一理解是否正确。
2. BSL Scripter 采用哪种 IP? 该 IP 在脚本中称为 IP 服务器。
3.我们还尝试修改入站和出站防火墙设置,但 Wireshark 中没有任何更改。 只存在来自 MCU 的请求。
4.实际上、在我们的应用中、除了以太网之外、我们无法以任何方式访问 MCU。 USB 也是不可能的。 这样、如何使用以太网擦除主闪存、
5.将服务器连接到网络交换机需要什么? 是强制性的吗?
6.如果无法实现、您能否说明是否有其他方法通过以太网刷写 MSP432E401Y 控制器?
提前感谢。
您好!
Unknown 说:2. BSL Scripter 采用的是哪种 IP? 在脚本中称为 IP 服务器的 IP。
是在 LaunchPad 还是在您自己的自定义板上运行引导加载程序示例? 您是否尝试过在 LaunchPad 上运行过?结果如何?
Unknown 说:2. BSL Scripter 采用的是哪种 IP? 在脚本中称为 IP 服务器的 IP。
是的、MCU 应发送 BOOTP 请求、BSL Scripter 应使用 TFTP 协议回复和下载固件。 下面是以太网引导加载程序工作时 Wireshark 捕获的示例。
Unknown 说:2. BSL Scripter 采用的是哪种 IP? 在脚本中称为 IP 服务器的 IP。
日志显示 MCU 的 IP 地址等于 192.168.254.4.您从哪里得到此地址? 此地址是否为网络上的其他节点未使用的地址? 不能仅使用 MCU 的任何 IP 地址。 您需要在网络上找到未使用的 IP 地址。 运行 BSL Scripter 的 PC IP 地址是什么? 您的日志显示 192.168.254.3.是否确定这是分配给您的 PC 的 IP 地址? 为什么不在 Windows 命令行上运行 ipconfig? 如果 将192.168.254.3分配给您的 PC、则可以。 再说一次、您是否在定制电路板上运行? 您使用70:FF:76:1C:E0:B9作为 MAC 地址。 您能否仔细检查一下您的定制电路板是否已编程 MAC 地址。
70:FF:76:1C:E0:B9 IPClient=192.168.254.4 IPServer=192.168.254.3
[报价用户 id="577647" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1481256/mspbsl-bsl-scripter-with-ethernet-not-working "]3.我们还尝试修改入站和出站防火墙设置,但 Wireshark 中没有任何更改。 只存在来自 MCU 的请求。
4.
我想确保您运行的是哪个示例。 请告诉我您是否在运行如下所示的三个脚本?
这看起来您在一个定制电路板上运行。 是这样吗? 您的电路板上是否有 JTAG 接头? 在没有 JTAG 接头的情况下、如何调试您的问题? 利用电路板上的 JTAG 接头、您可以使用 CCS 或 Uniflash 擦除闪存。
[报价用户 id="577647" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1481256/mspbsl-bsl-scripter-with-ethernet-not-working "]5.将服务器连接到网络交换机需要什么? 是强制性的吗?
[报价]您的 PC 是 BOOTP 和 TFTP 服务器。 您需要让 MCU 和 PC 位于同一网络上、以便在实际应用中可以相互通信。
Unknown 说:6. 如果无法实现、您能否说明是否有其他方法通过以太网刷写 MSP432E401Y 控制器?[/QUOT]我不理解您在这里的问题。 什么是不可能的?
我强烈建议您运行"ready to use"示例、如下所示。 首先在 LaunchPad 上运行。 您需要为正确的 MAC ID 和 IP 地址修改脚本。 阅读每个脚本文件顶部的注释。 要启动此示例、您需要首先使用 CCS 或 Uniflash 擦除闪存。 脚本1会将自定义引导加载程序(BOOT_EMAC_FLASH_MSP_EXP432E401y.txt)下载到 MCU。 自定义引导加载程序开始运行后、可在 PC 端运行脚本2、以便下载示例固件(BOOT_EMAC_FLASH_magicpacket_MSP_EXP432E401y.txt)并通过自定义引导加载程序将其刷写到 MCU 中。 当固件开始运行时、您可以运行脚本3、使固件跳转到引导加载程序以下载另一个固件(BLINK _App2_MSP-EXP432E401y.txt)。 一旦开始工作、就可以在定制电路板上进行尝试。
您好、Charles
您是在 LaunchPad 还是在您自己的自定义电路板上运行引导加载程序示例吗? 您是否尝试过在 LaunchPad 上运行过?结果是什么?[/QUOT]是的、我 按照 Resource Explorer 中提到的相同步骤运行引导加载程序和应用程序。 我分享的结果仅来自 LaunchPad。 我还没有在定制板上尝试过。
IPClient=192.168.254.4 IPServer=192.168.254.3也未使用、MAC 地址70:FF:76:1C:E0:B9是粘贴在 Launchpad 后面的 MAC 地址、我也可以使用 UNIFLASH 读取相同的地址。 因此、这也很好。
我强烈建议您运行如下所示的即用型示例。正如您所提到的、我首先使用 Uniflash 擦除闪存、然后尝试了 C:\ti\BSL-Scripter\ScriptExampleWindows\E4xx_Ethernet 中的示例。 脚本1本身不成功。
由于目前 Launchpad 中没有引导加载程序、因此我在 Wireshark 中看不到任何帧。
您能否进一步指导我们对此进行调试?
我还有一个问题、当运行 script_1.txt 之前在 MCU 中没有刷写与以太网相关的引导加载程序时、MCU 将如何发送 BOOTP 请求?
[/quote]
IPClient=192.168.254.4 IPServer=192.168.254.3也未使用、MAC 地址70:FF:76:1C:B9是粘贴在 Launchpad 后面的内容、我也使用 UNIFLASH 读取了相同内容。 因此这也是可以接受的。[/报价]我对你的上述陈述有疑问。 您是否意味着 IPServer=192.168.254.3也是一个未使用的地址? IPSever 应该是运行 BSL Scripter 的 PC 的地址。 它必须是分配给您的 PC 的有效 IP。 您可以使用 ipconfig 找出其 IP 地址。 请参阅以下示例。 如果 ipconfig 显示为 PC 上的 NIC 分配了 192.168.254.3、则没问题。
[报价用户 id="577647" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1481256/mspbsl-bsl-scripter-with-ethernet-not-working/5690140 #5690140"]
由于目前 Launchpad 中没有引导加载程序、因此我在 Wireshark 中看不到任何帧。
[报价]您能否确认闪存确实已完全擦除? 您可以进行空白检查以查看闪存是否为空。 脚本1的目的是使用 MCU 基于 ROM 的引导加载程序将基于闪存的自定义引导加载程序下载到 MCU。 换言之、当闪存为空时、器件上的 ROM 存储器具有引导加载程序、调用该引导加载程序时首先将基于闪存的自定义引导加载程序下载到0x0处的闪存。
下载基于闪存的引导加载程序后、您可以在0x0处检查它是否存在。 你看到了吗? 下载基于闪存的引导加载程序后、它将开始运行。 不再调用基于 ROM 的引导加载程序、因为器件通过检查0x0和0x4处的有效 SP 和复位矢量、知道0x0处存在有效的程序映像。 然后、您将运行脚本2以便基于闪存的引导加载程序下载应用固件。
您能否指导我们进一步调试此问题?您还可以直接使用 JTAG 首先启动基于闪存的引导加载程序、就像加载 blinky 或 hello 之类的任何程序一样。 脚本1旨在展示您可以使用内置 ROM 引导加载程序而不是使用 JTAG 下载程序、但必须先完全擦除闪存。
我还有一个问题、如果在运行 script_1.txt 之前 MCU 中没有刷写与以太网相关的引导加载程序、MCU 将如何发送 BOOTP 请求?我已经对基于 ROM 的引导加载程序在器件的闪存被完全擦除时进行了上述说明。
[/quote]
我只想告诉您、我运行同样的示例、它可以在 LaunchPad 上帮我工作。 请参见下文。
1.我首先擦除闪存。
2.我运行脚本1、下面的日志显示已成功下载自定义引导加载程序。
在我成功运行脚本1后、我重置电路板并等待 BOOTP 请求在 Wireshark 上显示、然后再运行脚本2、我没有问题。
您好、Charles、
您可以使用 ipconfig 查找其 IP 地址。
我使用的 IP 如下所述:IPServer=192.168.254.3。
您能否确认闪存确实已完全擦除? 您可以执行空白检查以查看闪存是否为空[/报价]此外、还完成了空白检查、闪存为空白。
我理解了您的观点、因此现在 ROM 引导加载程序本身具有发送 BOOTP 请求的配置。 但在 launchpad 中、即使在空白检查之后、Wireshark 中也没有看到 BOOTP 请求。
于是我执行了解锁序列、使 MCU 进入出厂复位状态。 然后、我可以在 Wireshark 中看到 BOOTP 请求、并且在 ROM 引导加载程序中设置了默认 MAC (00:1A:B6:00:64:00)。 使用此 MAC 本身、我尝试运行 script_1、但它正在等待 BOOTP、但失败了。 然后使用 UNIFLASH、我使用粘贴在 Launchpad 背面的内容(70:FF:76:1C:E0:B9)对 MAC 进行编程。 之后我尝试运行脚本、仍然处于相同状态。
我在运行脚本时进行了电源重置、然后它一直工作到 TFTP、如下屏幕截图所示
您也可以直接使用 JTAG 首先启动基于闪存的引导加载程序、就像加载任何程序(如 blinky 或 hello完成上述更改后、我尝试使用 UNIFLASH 将自定义闪存引导加载程序刷写到 LaunchPad、然后执行电源复位、然后运行脚本2、但失败方式与接收到无效 TFTP 请求相同。 但这在运行脚本_2时不需要电源复位。
我还修改了防火墙以允许入站和出站规则中的所有端口、如果仍需要在防火墙中执行某些操作、请在下图中进行验证。
提前感谢。
[/quote]
我使用的 IP 如下所述:IPServer=192.168.254.3。
在此图中、看起来您有两个 NIC。 一个地址为10.169.227.26、另一个地址为192.168.254.3。 您是否可以在禁用 NIC 10.169.227.26。在 客户端上只保留位于同一网络上的 NIC 地址192.168.254.3。 这将是我建议您做的第一个实验。
下一个实验是禁用 192.168.254.3处的 NIC 并使用处的 NIC 10.169.227.26.您需要首先确定 MCU 可以使用哪些未使用的 IP 地址。 您可以首先运行一个简单的 ethernet_lwip 示例、以找出 DHCP 地址。 它将是类似10.109.xxx.yyy 的内容。 记录此地址并 在脚本文件中将该地址用作您的 IP。
我已成功在 LaunchPad 上按原样运行开箱即用示例。 这意味着这些示例应该会起作用。 您的网络或网卡很可能出现问题。 请尝试上述两个实验、并告诉我结果是什么。 您可以尝试另一台 PC。 您是否尝试过其他网络、例如您的家庭网络?
我理解了您的观点、因此现在 ROM 引导加载程序本身具有发送 BOOTP 请求的配置。 但在 launchpad 中、即使在空白检查之后、Wireshark 中也没有看到 BOOTP 请求。
NIC (地址为192.168.254.3)很可能未检测到 BOOTP 请求、而 NIC (地址为10.169.227.26)。 为什么不使用 Wireshark 来查看 ipconfig 中显示的 NIC"以太网适配器以太网"的交通信息?
您好、Charles、
我连接了192.168.254.3、但未连接10.169.227.26 (办公 LAN)。 它按预期刷写了。 但问题是、我每次运行脚本时都必须复位 MCU。 如果我不重置它、它将等待 BOOTP、并由于未收到 BOOTP 请求而出现错误而完成。
只有在连接了办公室 LAN 后、它才会停止、并显示错误、即 TFTP 读取请求无效。
您可以首先运行简单的 ethernet_lwip 示例以查找 DHCP 地址。
我尝试使用用脚本刷写的魔术包固件检查 DHCP IP、并使用 enet_lwip 示例获得 DHCP IP、如下所示
但我认为这个 IP 是一个无效的 DHCP 而搜索它被提到"169.254 IP 地址被称为 APIPA IP 地址。 当您的计算机无法从 DHCP 服务器获取地址时、会收到一个169 APIPA 地址"请更正我的错误。
我也尝试在我的同事 PC 上运行相同的示例、它也是169.254.186.x
然后、我擦除闪存、并尝试使用自定义引导加载程序刷写脚本_1、使用 Resource Explorer 中可用的闪烁代码刷写脚本_2。 闪烁已成功完成、但未发生闪烁。 为什么会这样呢?
另外、您能否说明如何通过以太网重新刷新 MCU? 就像每次我们想要刷写新固件时、我们应该从擦除闪存、脚本1和脚本2开始。 或者任何其他可能的方式?
我在上面尝试的一切、无论是在定制电路板还是在 launchpad 中、都提供了与上面提到的相同的输出。
谢谢!
我连接了192.168.254.3、但未连接10.169.227.26 (办公 LAN)。 它按预期刷写了。 但问题是、我每次运行脚本时都必须复位 MCU。 如果我不重置它、它将等待 BOOTP、并由于未收到 BOOTP 请求而出现错误而完成。
在此图中、看起来它最终会为您效劳。 如果用户参考运行引导加载程序的用户指南、会看到在下载后复位电路板。 请参阅 https://dev.ti.com/tirex/explore/node?fullTextSearch=Static%20Ip%20&fullTextSearchPage=1&node=A__ADn.VTNH8qUYxgak.wnmVw__com.ti.SIMPLELINK_ACADEMY_MSP432E4SDK__Nh7md.m__LATEST
我尝试使用用脚本刷写的魔术包固件检查 DHCP IP、并使用 enet_lwip 示例获得 DHCP IP、如下所示
如果使用169.254、则表示网络上没有 连接 MCU 和192.168.254.3的 DHCP 服务器。 您需要与 IT 部门核实子网上是否有以192.168.8开头的 DHCP 服务器。
为什么不尝试在 192.168.254.3中禁用网卡并 改用10.169.227.26(office lan)? 得到了什么?
[报价 userid="577647" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1481256/mspbsl-bsl-scripter-with-ethernet-not-working/5696108 #5696108"]然后、我擦除闪存、并尝试使用自定义引导加载程序刷写脚本_1、使用 Resource Explorer 中可用的闪烁代码刷写脚本_2。 闪烁已成功完成、但未发生闪烁。 为什么会这样呢?
您是否已重置电路板? 它会闪烁吗? 另请注意、您的闪烁程序必须从0x0开始。 您不能只使用从0x0开始的常规闪烁程序。 您必须重新编译闪烁程序以在0x4000处启动。
另外、您能否说明如何通过以太网重新刷新 MCU? 就像每次我们想要刷写新固件时、我们应该从擦除闪存、脚本1和脚本2开始。 或任何其他可能的方式?
您必须构建自己的应用、使其能够侦听魔术包、然后跳回引导加载程序以开始新的固件更新。 请参考 magicpacket 示例。 此示例固件显示了如何接收魔术包、然后当 BOOTP 服务器向板发送魔术包时跳回引导加载程序。
您是否重置了电路板? 它会闪烁吗? 另请注意、您的闪烁程序必须从0x0开始。 您不能只使用从0x0开始的常规闪烁程序。 您必须重新编译闪烁程序以在0x4000处启动。 [报价]是的、我进行了重置、但仍然没有闪烁
是的、它可能不是从0x0开始。
您能告诉我们如何更改代码的起始地址吗?
如果您参考 C:\ti\simplelink_msp432e4_sdk_4_20_00_12\examples\nortos\MSP_EXP432E401Y\boot_loader\boot_emac_flash_app_magicpacket_update\ccs 中的 boot_emac_flash_app_magicpacket_update 示例、您将找到.cmd 文件。 只需将 APP_BASE 从0x0更改为-0x4000即可。 在您的闪烁示例中使用这个.cmd 文件并重新构建它。
#define APP_BASE 0x00004000 MEMORY { FLASH (RX) : origin = APP_BASE, length = 0x000FC000 SRAM (RWX) : origin = 0x20000000, length = 0x00040000 } /* The following command line options are set as part of the CCS project. */ /* If you are building using the command line, or for some reason want to */ /* define them here, you can uncomment and modify these lines as needed. */ /* If you are using CCS for building, it is probably better to make any such */ /* modifications in your CCS project and leave this file alone. */ /* */ /* --heap_size=0 */ /* --stack_size=256 */ /* --library=rtsv7M4_T_le_eabi.lib */ /* Section allocation in memory */ SECTIONS { .intvecs: > APP_BASE .text : > FLASH .const : > FLASH .cinit : > FLASH .pinit : > FLASH .init_array : > FLASH .vtable : > 0x20000000 .data : > SRAM .bss : > SRAM .sysmem : > SRAM .stack : > SRAM } __STACK_TOP = __stack + 512;
您好、Charles、
谢谢、盲法代码与上述修改相结合。
如下所示、我将魔术包代码集成到我的现有代码中、并尝试刷写相同的代码。 我现有的功能运行良好、但当我刷写闪烁的代码时、它完全刷新、但没有闪烁。 该地址也是正确的。 我在 launchpad 和定制电路板中尝试过此功能、它正在闪存但不闪烁。
我尝试使用 TI Resource Explorer 魔术包代码刷写的相同闪烁代码也没有问题。 我不确定这里出了什么问题。 您能告诉我代码中是否漏掉了某些内容吗?
void SoftwareUpdateRequestCallback (void)
{
g_bFirmwareUpdate = true;
}
/*执行启动以太网控制器所需的初始化步骤
*和 lwIP 堆栈。 */
空洞
设置 ForEthernet (void)
{
/*启动远程软件更新模块。 */
SoftwareUpdateInit (SoftwareUpdateRequestCallback);
}
int main()
{
uint32_t ui32User0、ui32User1;
SysCtlMOSCConfigSet (SYSCTL_MOSC_HIGHFREQ);
//
//在120 MHz 处通过 PLL 运行。
//
G_ui32SysClock = MAP_SysCtlClockFreqSet (SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
PinoutSet (true、false);
UARTStdioConfig (0115200、g_ui32SysClock);
MAP_SysTickPeriodSet (g_ui32SysClock / SYSTICKHZ);
Map_SysTickEnable();
Map_SysTickIntEnable();
Map_FlashUserGet (&ui32User0、&ui32User1);
//
//将24/24拆分 MAC 地址从 NV RAM 转换为32/16拆分 MAC
//对硬件寄存器进行编程所需的地址、然后对 MAC 进行编程
//地址到以太网控制器寄存器中。
//
pui8MACArray[0]=((ui32User0 >> 0)和0xff);
pui8MACArray[1]=((ui32User0 >> 8)和0xff);
pui8MACArray[2]=((ui32User0 >> 16)和0xff);
pui8MACArray[3]=((ui32User1 >> 0)和0xff);
pui8MACArray[4]=((ui32User1 >> 8)和0xff);
pui8MACArray[5]=((ui32User1 >> 16)和0xff);
SrcIPaddr.addr = htonl (inet_addr (sourcIP));
lwIPInit (g_ui32SysClock、pui8MACArray、SrcIPaddr.addr、网络掩码、GWADDR、IPADDR_USE_STATIC);
UdpClientInit();
/*为 UDP 端口9上的魔术包检测设置回调函数*/
SetupForethernet();
MAP_IntPrioritySet (INT_EMAC0、ETHERNET_INT_PRIORITY);
MAP_IntPrioritySet (FAULT_SysTick、SysTick _INT_PRIORITY);
while (1)
{
if (g_bFirmwareUpdate == true)
{
SoftwareUpdateBegin (g_ui32SysClock);
返回(0);
}
}
谢谢你。
我在下面的现有代码中集成了魔术包代码、并尝试刷写相同的代码。 我现有的功能运行良好、但当我刷写闪烁的代码时、它完全刷新、但没有闪烁。 该地址也是正确的。 我在 launchpad 和定制电路板中均尝试使用此器件、它正在闪存但不闪烁。
当您按下复位按钮时、电路板会闪烁吗?
您是否能够检查您的引导加载程序是否仍为0x0? 使用存储器浏览器查看0x0处的闪存内容。
您可以通过在 main()中放置断点并单步执行代码来了解引导加载程序是否跳转到应用程序、从而自行进行一些调试。 如果应用程序在0x4000跳转到相应位置、则单步操作以找出 LED 不闪烁的原因。 在 CCS 中、加载闪烁二进制文件后、您可以使用"Load Symbols"、所以可以通过放置断点来调试代码。
按下重置按钮时、电路板是否闪烁
是、即使在重置后也没有闪烁。
尝试使用 CCS 来刷写我的应用程序代码、放置断点并检查它是否正在获取魔术包、然后继续执行 SoftwareUpdate 函数、该函数跳转到引导加载程序。 然后,我就走了出去。
地址位于0x4000、因此只有在将地址更改为0x0后、才使用 CCS 闪烁时、它才起作用。
因此、我可以通过 BSL 脚本程序刷写这些代码、并在 CCS 中并行检查加载符号。 如果我的理解有误、请更正我。
。 如果应用程序跳转到0x4000、则单步执行以找出 LED 没有闪烁的原因[/QUOT]在闪烁应用程序代码中、我已在 cmd 文件中将闪存起始地址修改为0x4000。 在任何其他文件/ magicpacket 项目中是否要执行此操作?
尝试使用 CCS 神奇数据包来刷写我的应用程序代码、设定断点并检查是否正在获取魔法数据包、然后继续使用 SoftwareUpdate 函数跳转到引导加载程序。 它一直到那里,然后我终止。[/报价]终止雇佣关系是什么意思? 如果引导加载程序仍在0x0处、则您没有回答我。 为什么不在0x0处向我显示存储器浏览器中的内容?
如果要使用 JTAG 同时加载引导加载程序(0x0处)和应用程序(0x4000处)、可以使用 Uniflash。