zyh_126

lwip移植续

0
阅读(3166)
这几天一直在调试lwip的移植程序,开始碰到了许多问题,开始是对cs8900a网口芯片寄存器的移植问题,可以读各个状态寄存器的值,我以为对硬件的驱动就没有问题了,哪知我配置好所有后,cs8900a不能进入接收中断,我以为是中断配置不对,找了半天没有发现问题,如是我用示波器测试,发现中断触发一下可以进入,我想是不是对csing8900a的配置不成功,就尝试把写入寄存器的值读出来,发现不对,怀疑寄存器写有问题,就测试了下,果然写信号没有变化。查找发现写引脚,被串口2重用了,把串口2的引脚重新设置,中断正常了。后面的几天调试又遇到一个复杂的问题,尝试用最简单的ping命令和网口相连,始终拼不通,在接收中断 ethernetif_input(&netif)处设置了一断点,查看接收的数据是正确的,如是在对ping命令的响应发送函数low_level_output()处设置断点查看对ping的发送帧,开始还不知道回应帧格式,用网络检测软件IRIS分析,发现回应帧数据是对的就是有两处的校验值总是0x00,觉得友协不对,检查代码发现#ifdef CHECKSUM_BY_HARDWARE
    iecho->chksum = 0;
#else 
 /* adjust the checksum */
    if (iecho->chksum >= htons(0xffff - (ICMP_ECHO << 8))) {
      iecho->chksum += htons(ICMP_ECHO << 8) + 1;
    } else {
      iecho->chksum += htons(ICMP_ECHO << 8);
    } 
#endif处CHECKSUM_BY_HARDWARE定义了,去掉#define CHECKSUM_BY_HARDWARE,运行程序校验值不为0了,还是不能拼通,怀疑是不是没有发送出去,检查硬件发现网络变压器输出的中心节点到地的电容焊成了电阻,马上该下结果通了,真是好事多磨啊。