您的位置:首页 > 其它

以太网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协议有重发机制,后续的单步调试会被新来的报文所打断,干扰调试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: