以太网LWIP协议栈调试记录7.1
2013-07-12 14:50
239 查看
下面是测试记录
1、 根据阅读资料的体会,进行一些尝试性的测试,有一些结果。方法如下。
2、 现在的操作流程是,网线一端连接PC,一端连接板子,板子不上电。此时要把任务栏本地连接图标设置为显示在任务栏状态,给板子上电,网线插紧。然后,在板子的以太网口初始化之后,任务栏本地连接图标会变成下图所示。如果是硬件上没连接好,那么就是红叉叉。
开接收中断,可以进入中断服务程序。但是从中断返回后,就进入FaultISR,原因不明。
测试到这,作相关说明:上面的过程,按我的理解是这样的。以太网初始化之后,都是在全双工模式下,PC机与板子互相发一些带有数据包的快速链路脉冲来进行自协商,所以板子能进入接收中断,也能看到数据。一直到自协商成功之后不再发数据,而只是定时的发快速链路脉冲,相当于心跳检测,从此以太网MAC层连接成功,可以进行底层数据收发。
查看以太网数据波形,测量结果如下图:
测试疑问:
1、 对这个数据波形不太理解。
2、 由于不知道PC机向板子发的数据是什么,无法对数据进行检查,目前只知道有数据可以进来。
3、 板子底层向PC机发的数据无法在PC机上识别,PC机的网络调试助手软件是带协议栈的,如果不符合协议栈格式的数据包可能会丢弃。如果想知道底层的数据对不对,可以拿两块板子互连测试。
7月1日上午
1、 有了上面的基础,再次测试UDP工程,看看协议栈是不是一次可以连通。
2、 这次udp_bind,和udp_connect都返回成功,开接收中断,进入while(1)循环。此时应该已经建立了UDP连接,中断里加断点,用PC机软件向板子发数据,可以进入中断。但是,中断处理里,底层的low_level_receive中,从FIFO中读取数据时,程序对数据的解析有问题。第一次读出来的数是目标IP地址,但是程序里认为第一次读出来的数的低16位是packet的长度len。导致后面为收到的packet分配缓冲区失败。分配缓冲区失败,那么就要清空RXFIFO,即按照刚才错误的长度,把RXFIFO里的数全部读出来。在把FIFO中数读出来的过程中,我没有发现有我发的数据。
3、 查看芯片资料,从RXFIFO的组成来看,程序的解析是没错的。那就是数据错误。但是数据的第一个字是目的地址,判断数据不对的原因应该不是数据错位,而可能是协议上的问题。
7月1日下午
1、 在可以正确进接收终端的情况下,将FIFO中的数读出来。结果是,接收FIFO中并没有PC机发出去的数值,而只是周期性的未知数据。100个字节1个循环。见下图
总结:到此为止,基本可以确定硬件没有问题,因为在数据中已经看到了IP地址的正确报文,此时就需要去了解整个的报文交互过程,另外在调试方法上,带操作系统的调试方法和不带操作系统的调试方法有略有区别,需要增加调试经验。
注意点:
在IAR中开启寄存器窗口时,在读以太网FIFO时会出现单步运行FIFO指针跳跃情形,这是由于程序在读FIFO,IAR工具寄存器窗口也在读FIFO,导致的单步一次其实读了两次FIFO。
确认中断后,中断里的断点就可以去掉了,否则由于tcp协议有重发机制,后续的单步调试会被新来的报文所打断,干扰调试。
1、 根据阅读资料的体会,进行一些尝试性的测试,有一些结果。方法如下。
2、 现在的操作流程是,网线一端连接PC,一端连接板子,板子不上电。此时要把任务栏本地连接图标设置为显示在任务栏状态,给板子上电,网线插紧。然后,在板子的以太网口初始化之后,任务栏本地连接图标会变成下图所示。如果是硬件上没连接好,那么就是红叉叉。
开接收中断,可以进入中断服务程序。但是从中断返回后,就进入FaultISR,原因不明。
测试到这,作相关说明:上面的过程,按我的理解是这样的。以太网初始化之后,都是在全双工模式下,PC机与板子互相发一些带有数据包的快速链路脉冲来进行自协商,所以板子能进入接收中断,也能看到数据。一直到自协商成功之后不再发数据,而只是定时的发快速链路脉冲,相当于心跳检测,从此以太网MAC层连接成功,可以进行底层数据收发。
查看以太网数据波形,测量结果如下图:
测试疑问:
1、 对这个数据波形不太理解。
2、 由于不知道PC机向板子发的数据是什么,无法对数据进行检查,目前只知道有数据可以进来。
3、 板子底层向PC机发的数据无法在PC机上识别,PC机的网络调试助手软件是带协议栈的,如果不符合协议栈格式的数据包可能会丢弃。如果想知道底层的数据对不对,可以拿两块板子互连测试。
7月1日上午
1、 有了上面的基础,再次测试UDP工程,看看协议栈是不是一次可以连通。
2、 这次udp_bind,和udp_connect都返回成功,开接收中断,进入while(1)循环。此时应该已经建立了UDP连接,中断里加断点,用PC机软件向板子发数据,可以进入中断。但是,中断处理里,底层的low_level_receive中,从FIFO中读取数据时,程序对数据的解析有问题。第一次读出来的数是目标IP地址,但是程序里认为第一次读出来的数的低16位是packet的长度len。导致后面为收到的packet分配缓冲区失败。分配缓冲区失败,那么就要清空RXFIFO,即按照刚才错误的长度,把RXFIFO里的数全部读出来。在把FIFO中数读出来的过程中,我没有发现有我发的数据。
3、 查看芯片资料,从RXFIFO的组成来看,程序的解析是没错的。那就是数据错误。但是数据的第一个字是目的地址,判断数据不对的原因应该不是数据错位,而可能是协议上的问题。
7月1日下午
1、 在可以正确进接收终端的情况下,将FIFO中的数读出来。结果是,接收FIFO中并没有PC机发出去的数值,而只是周期性的未知数据。100个字节1个循环。见下图
总结:到此为止,基本可以确定硬件没有问题,因为在数据中已经看到了IP地址的正确报文,此时就需要去了解整个的报文交互过程,另外在调试方法上,带操作系统的调试方法和不带操作系统的调试方法有略有区别,需要增加调试经验。
注意点:
在IAR中开启寄存器窗口时,在读以太网FIFO时会出现单步运行FIFO指针跳跃情形,这是由于程序在读FIFO,IAR工具寄存器窗口也在读FIFO,导致的单步一次其实读了两次FIFO。
确认中断后,中断里的断点就可以去掉了,否则由于tcp协议有重发机制,后续的单步调试会被新来的报文所打断,干扰调试。
相关文章推荐
- 以太网&&lwip移植调试记录7.1之前
- 关于开启lwIP协议栈的调试输出LWIP_DEBUGF
- STM32F4 LAN8720以及LWIP的移植调试记录 (2)
- lwip调试记录
- STM32 LWIP TCP 以太网调试注意问题
- 以太网&&lwip协议栈调试笔记之邮件
- LwIP 协议栈源码详解 ——TCP/IP 协议的实现(七:以太网数据接收)
- DIY_DE2之DM9000A网卡调试系列例程(三)——基于LWIP协议栈的TCP/IP实现
- LWIP中断服务程序解析&&调试记录7.3
- STM32F4 LAN8720以及LWIP的移植调试记录 (3)
- SylixOS_LWIP协议栈学习:以太网网卡接口部分初始化
- [RK3399][Android7.1] 调试笔记 --- 系统使用的zygote.rc文件
- js调试记录,将客户的调试信息保存到服务器端的一个小方法。
- ACM_编程与调试重点记录(三)
- 【记录】解决VS2015调试Xamarin程序一闪而过(使用微软ANDROID模拟器)
- 1、 LwIP协议栈规范翻译——简介
- ch7026的VGA调试记录
- CC2530调试记录
- BCM4330 WIFI 调试记录