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.
我一直使用适用于 Launchpad 的 LWIP 示例构建一个简单的 TCP 通信程序。 在 launchpad 上运行正常、当我 使用的定制板进入并安装芯片后、会出现一些问题。 首先、我们必须对 MAC 地址进行编程、我们找到并完成了此编程、预计该应用的工作方式与从.z 的那一点开始在 Launchpad 上的工作方式相同
然而,我们现在遇到了 lwIPInit ()调用内部代码挂起的问题。 我能够使用调试程序从 lwIPInit ()内部跟踪它到以下行。
// // Enable the internal PHY if it's present and we're being // asked to use it. // if((EMAC_PHY_CONFIG & EMAC_PHY_TYPE_MASK) == EMAC_PHY_TYPE_INTERNAL) { // // We've been asked to configure for use with the internal // PHY. Is it present? // if(MAP_SysCtlPeripheralPresent(SYSCTL_PERIPH_EPHY0)) { // // Yes - enable and reset it. // MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_EPHY0); MAP_SysCtlPeripheralReset(SYSCTL_PERIPH_EPHY0); } else { // // Internal PHY is not present on this part so hang here. // while(1) { } } }
在 MAP_SysCtlPeripheralReset (SYSCTL_Periph_EPHY0)期间;调试器丢失了程序所在的位置、电路板没有响应。
仅在使用工厂芯片的电路板上执行此操作、代码在我们用于原型设计代码的 EK-TM4C1294XL launchpad 上运行良好。 我想这可能与 MAC 地址未设置类似、可能存在与 EPHY0默认未设置相关的一些设置。 但是我在网上没有找到关于这类问题的很多文档。 因此,如果有任何帮助,我将不胜感激。
您好!
如果该器件在 LaunchPad 上工作、那么我希望同样的代码能够在您的定制板上工作、前提是您具有连接 RJ45的以太网接口的相同原理图。
在 map_SysCtlPeripheralReset (sysctl_Periph_EPHY0)期间;调试器丢失了程序所在的位置跟踪、电路板变得无响应
处理器程序计数器的确切位置在哪里? 如果这是您所说的无响应、它是否挂起在 MAP_SysCtl_Periph_EPHY0上?
-如果你进行一个复位或功率循环 、你仍然卡在 MAP_SysCtlPeripheralReset 吗?
-如果您更改编译器优化级别,会有什么不同?
-您有多少电路板?
-您可以在另一个定制板上重复同样的问题吗? 我希望这只是一个板上的一次性问题。
-您是运行自己的 lwIP 应用程序还是运行常用的 TivaWare lwIP 示例? 您能否尝试使用常见的 TivaWare lwIP 示例、例如 enet_lwip、这是一种简单的 Web 服务器? 您可以在定制电路板上重复同样的问题吗?
当我指令调试器进入 MAP_SysCtlPeripheralReset (SYSCTL_PREIPH_EPHY0)时、程序计数器消失、尝试暂停或停止执行将返回 CPU 无响应错误。
重启会产生相同的结果。
我们现在正在构建另一个定制板、下周很可能会在板上放代码以查看是否会出现同样的结果。
从 TIvaware 示例修改的自定义 lwip 代码和 Stock TIvaware 示例都存在该问题。
当我让调试器逐步进入 MAP_SysCtlPeripheralReset (SYSCTL_PREIPH_EPHY0)时、程序计数器消失、尝试暂停或停止执行将返回 CPU 无响应错误。 [/报价]您是否可以从 MAP_SysCtlPeripheralReset 更改为 SysCtlPeripheralReset ? MAP_SysCtlPeripheralReset 实际上将调用 ROM_SysCtlPeripheralReset、它是存储在 ROM 中的 driverlib。 我不确定程序计数器的含义会消失。 它可能在 ROM 中执行代码。 您可以查看反汇编代码以了解程序计数器的位置。 但是使用直接 SysCtlPeripheralReset 将允许更容易调试、这是因为函数被编译和存储在闪存中并且具有用于单步执行的调试符号和源代码。
我担心的是,图书馆内的通话本身也会引起问题。 编辑库令我震惊、因为这是一个不好的举动、而且该库的独特版本可能会导致更多问题。
我可以尝试合并一个沙盒程序来运行该调用、看看会发生什么情况。
我暂时更改了库直接调用而不是通过地图。
在出现相同症状之前,它设法在 sysctl.c 中到达这里。
// // Put the peripheral into the reset state. // HWREGBITW(SYSCTL_SRBASE + ((ui32Peripheral & 0xff00) >> 8), ui32Peripheral & 0xff) = 1;
下面是反汇编的屏幕截图、它没有响应之前的一个步骤。
您好!
您使用的编译器及其版本是什么? 我不知道什么是?DataTable53_。 我使用具有优化级别2的 TI Arm 编译器 v18.12.0.LTS。 反汇编输出似乎截然不同。 话虽如此、如果相同的.out 文件运行 LaunchPad、那么我认为没有理由怀疑软件有故障。 我仍然认为它更多地与硬件相关。
执行0x4548后、PC 会去往何处? 可以显示屏幕截图吗? 我想知道你是否有任何错误或在某种类型的分支本身。 抱歉、我仍然不清楚无响应意味着什么。 无响应是否意味着处理器在无限循环中接收到异常故障或分支到自身? PC 必须移动到某个位置。
我将出现的情况标记为无响应的原因是、我不再从编译器调试屏幕中获取任何数据。
我使用的是 IAR Embedded Workbench 9.20.2。
我将重新运行该值、并尝试获取更多数据。
好的、这是在 Tivaware 中运行 enet_tcpecho_server 示例。
因此、当我访问 lwip 库中的调用时、我已将其从映射编辑为出于调试目的的直接调用。
然后、它进入 SYSCTL、尝试执行复位调用。
在我向前迈进后、这就是我得到的结果。 无响应、因为我丢失了程序跟踪、并且如果我尝试通过 IDE 暂停或复位芯片、我将收到以下调试日志消息。 在示例执行期间、直到这时、我才不会进行任何调试。
如果是硬件问题、我应该寻找什么? 我个人认为这是配置问题、就像之前遇到这个问题一样、问题是芯片上没有像 launchpad 一样编程 MAC 地址。 是否还需要为以太网执行任何其他首次芯片设置/配置?
尊敬的 CJ:
-您在使用什么调试器? 您是否正在使用 CCS? 我个人从未看到过调试日志。 在 CCS 中、有一个看起来不同于你的控制台窗口。 我没有看到这样的错误消息,但现在我明白你的意思是 CPU 没有响应。
- 在您看到这些消息后,您的调试器是否仍连接到目标? 您可以停止运行吗、或者调试器无法执行任何操作吗? 我之所以提出这个问题、是因为这个错误似乎表明调试器无法控制目标、也许是调试器与目标失去了连接。 错误似乎是指调试器正在尝试停止 CPU、但不成功。
-您使用的调试探针是什么?
-您计划的 MAC 地址值是什么?
-您使用什么工具编程 MAC 地址? 您能否读出 MAC 地址?
-您可以尝试另一个以太网程序,如 enet_lwip 吗? 这是一个简单的 Web 服务器示例。 我想知道你是否会有同样的问题像 tcpecho。
正如我在前面提到的、我将使用 IAR Embedded Workbench 9.20.2。
我使用的探头是 IAR I-Jet。
如果我尝试停止运行或执行任何操作、则会出现调试日志。 我不再有任何控制或输入、除了停止调试之外、 下电上电并重新开始。
我使用了 Uniflash 和 XDS100V2对 MAC 地址进行编程。 在尝试执行显示这些问题的程序时、我无法使用探针与芯片通信以读取 MAC、但如果加载的程序未尝试合并 LWIP 或网络调用、则可以通过 uniflash 读取 MAC 值。 编程的 MAC 以及现在通过 uniflash 从芯片读取的 MAC 值为70-ff-76-1e-11-db。
我加载并运行 enet_lwip 示例。 它显示的结果与 enet_tcpecho 示例完全相同、一旦他们到达 lwipinit 调用和其中包含的库调用、我自己的代码工程就会显示。
好的、我之前没提到 IAR。
您可以在另一个定制板上重复该问题吗? 您有多少个定制电路板?
您能展示 PPEPHY 寄存器读数吗?
您的定制电路板上的芯片上的器件标识是什么? 您从何处购买器件?
我无法解释您的观察结果、因为库存示例和您修改后的代码在 LaunchPad 上都能正常运行。 该问题仅发生在您的定制电路板上。 这就是我认为问题与硬件有关的原因。
我们已经解决了这个问题。
仔细观察我们的硬件设计、我们注意到在手册中、它要求将 RBIAS 引脚连接到4.87k Ω 电阻器。 我们连接的电阻器的电阻差异很大、要么已损坏、要么安装了错误的电阻器。 这就导致了如手册中所述、当以太网 PHY 器件被 LWIP 库重新加载时、JTAG 连接失败。 我们交换了电阻器、现在它可以按预期运行。
我的问题是为什么会发生这种情况、该电阻器的实际用途是什么? 我认为、如果该引脚即使在不需要以太网 PHY 的应用中也需要有一个电阻器、那么它将包含在 IC 本身中、因为4.7千欧的电阻器不会占用太多空间。
无论如何、问题现在已解决。 谢谢你。
尊敬的 CJ:
很高兴您解决了这个问题。 我并不介意 RBIAS 电阻可能引起的问题。 现在我学到了一些东西、并将此帖子作为书签以供将来参考。
这是一个勘误表、即使未使用以太网、也需要4.7k Ω 电阻器接地。 对于需要以太网的应用、必须使用容差为1%的4.87k Ω 电阻器将 RBIAS 连接到 GND。