十一 ARM9(2440)的网卡接口扩展
单片机驱动DM9000网卡芯片(详细调试过程):http://hi.baidu.com/mikenoodle/blog/item/dda3a4cc034e871800e9287a
s3c2440的网卡接口扩展:
http://blog.csdn.net/zhaocj/article/details/5672588
这两篇文章对我的帮助很大,我想对刚刚开始调DM9000的朋友来说会有点帮助,下面我就说一下我在这个过程中觉得应该注意的问题。
一 DM9000的的基地址设置,因为扩展网卡接口要将2440的nGCSn连接到DM9000的片选引脚,所以要想选中DM9000就必须要访问nGCSn指定的内存区域以激活nGCSn信号,我的板子连接的是nGCS4,所以访问0x20000000开始的区域可以激活nGCS4。因为DM9000由CMD引脚区分输入的是数据还是地址,一般将CMD引脚连接在2440的addr2引脚,所以可以通过访问addr2分别为0和1指定的内存区域控制addr2为0还是1,这样就能区分输入的是数据还是命令了,所以可以将DM9000的数据口地址和地址口地址都可以确定了。
二
三
四
解决办法是:
在MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_CNB); //bank4 for dm9000
把RW_CNB 改为RW_NCNB
五 关于数据的传输,我相信看了上面的这两篇文章大家都应该对ARP数据有了一定的了解,当我们的DM9000初始化成功后,PC机就会开发板发送ARP请求信号(我的是发送了3次),这个数据是一个广播数据,里面有PC机的MAC和IP地址,所以如果我们数据接收正常的话我们可以获得这些信息,因为我的程序中将收到的数据进行区分,如果是ARP数据的话通过串口进行打印。当我们向PC机发送ARP请求的话(发送的数据中必须是有PC机的IP),PC机会发送一个ARP应答信号,里面包括PC机的MAC和IP,也包括开发板的MAC和IP。
六
上面这些就是我在这个过程中遇到的一些问题,下面我给出实验的截图:
这就是我收到的数据的效果图,里面有我电脑的MAC和我设置的IP。
下面是程序代码及分析:
#include"2440addr.h"
#include"dm9000.h"
#include"def.h"
#define DM_ADDR_PORT
#define DM_DATA_PORT
extern void Uart_Printf(char *fmt,...);
int tran;
unsigned char arpsendbuf1[42]={//请求信号
};
U8*buffer;
extern void ChangeRomCacheStatus(int attr);
//写DM9000寄存器
void __inline dm_reg_write(unsigned char reg, unsigned char data)
{
DM_ADDR_PORT = reg;
DM_DATA_PORT = data;
}
//读DM9000寄存器
unsigned char __inline dm_reg_read
ARM92440网卡接口扩 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)