在新研NXX板上使用了若干片C6414,其中有两片用EMIFB接口连接DM9000芯片扩展出网口,上层采用LwIP协议栈。因此需要移植LwIP协议栈和DM9000的驱动。手头有老板上验证过的代码,但是在CCS3.3环境下开发。
采用的开发环境仍然是CCS5.4,需要做的主要工作有:
1. 建立基础工程,并将整个Lwip源码拷贝到工程目录,然后删除一些不需要的文件,包括IPV6和SLIP等
2. 在工程包含路径中添加Lwip目录下的include和include/ipv4
3. 将cc.h和main.c中包含的工程名相关cfg.h修改名称
4. 由于更改了general.h的bool类型定义,将true和false修改为TRUE和FALSE
5. NPU上的DM9000连接CMD的是A15,而非原来的A2,代码中对应做修改
6. NPU上的DM9000的INT连接到GP7,而非原来的GP5,代码中对应做修改
做完这些修改后编译通过,开始测试。测试过程遇到了许多的问题。
首先读VID和PID,结果读出值为全1。分析代码没有发现问题,于是祭出示波器。测量CMD、CS、IOR等信号,发现CS和IOR正常,但CMD没有信号。从代码中找与CMD相关的代码,最终发现CMD是通过一个地址触发的,地址值计算错误。更正后PID和VID都读取正常。
然后插上网线用底层驱动发送一个自组的ARP包,在与之直连的PC机上用WireShark抓包,结果抓不到。发现网口上的灯不亮,说明底层硬件协商有问题。仔细读手册发现本板上采用的DM9000芯片升级为DM9000C,寄存器与原DM9000有差异,如ISR寄存器的bit7是IO模式位,代码中为bit6,对照文档做了一些修改。同