DM9000
来源:互联网 发布:javascript this 特性 编辑:程序博客网 时间:2024/05/16 11:04
BANK6和BANK7与BANK1到5的区别就是,6和7多了一个刷新功能,每隔一段时间会去充电
DM9000A:
两种工作模式:8位和16位,就是每次传输的数据为8位或16位
EEPROM 存储器,存放芯片初始值,默认值,DM9000A一启动就从EEPROM读出初始值配置好寄存器
连线:
DM9000A->Transformer->RJ45
可以直接把RJ45的4个线接到DM9000A,但是这样会出现问题:打雷或者直接把其中两根线接到220V,就会把芯片烧了,所以出现了Transformer,专业叫网络隔离器
有些网卡芯片可出把Rx+/- Tx+/-对调,这样就可以实现直通线交叉线都可出用
DM9000A没有地址线,只有数据线,所以地址和数据都是通过数据线来发送,叫I/O操作
IOR# 连接LnOE,告诉DM9000A是读操作 接到CPU
IOW# 连接LnWE,告诉DM9000A是写操作
CS# 连接nGCS4,即BANK4,片选
CMD 连接到地址总线的第2位,告诉DM9000A是写地址还是写数据
INT 中断
SD0-7 连接到数据总线0-7,I/O操作,如果是8位工作模式,就只会用到此8个位
SD8-15 连接到数据总线8-15,I/O操作,如果是16位工作模式,就会用到此8个位,如果是8位工作模式,此8位就会是其它功能
CPU访问内存过程:
当我们使用str和ldr会对总线控制器产生作用
r0 = 100; 会发送到数据总线
r1 = 0x20000000; 会发送到地址总线
str r0, [r1]; 发送读使能,IOR#
ldr 发送写使能,IOW#
32位访问地址总线,分成前2位,后3位,最后27位
前2位 如果此2位为0,则访问的地址1G以下,非0则访问的地址在1G以上,则发送到固定的寄存器里
后3位 对应0-7BANK,什么值对应访问哪个BANK
最后27位 为内存的地址,会发送到地址总线上
0x20000000 32位bit前2位为0,所以访问的地址空间在1G以下,后3位为100,所以访问的是BANK4,后27位则访问的是连接BANK4的地址
控制DM9000寄存器:
DM9000连接的是BANK4,所以它的地址为0x20000000,DM9000的cmd连接的是地址总线的第2位(从零算起),所以如果是写地址则需要把地址的第二位保证是为0,写数据则保证为1
读寄存器:
*(volatile unsigned char *)0x20000000 = DM9000寄存器地址;
因为要访问DM9000寄存器,先要写地址,0x20000000是访问的BANK4,第二位又为0,所以为写地址,把地址强转成指针再给指针指向的地址赋值,则写地址。
return *(volatile unsigned char *)0x20000004;
因为第二位为1,所以为写数据,再把地址强转成指针取值。
写寄存器:
*(volatile unsigned char *)0x20000000 = DM9000寄存器地址;
*(volatile unsigned char *)0x20000004 = 数据;
写寄存器也需要先写地址,再写数据;
寄存器默认值:
X 没有默认值
P 上电默认值
S 软重启默认值
E 默认值来自EEPROM
RO 只读
RW 读定
R/C 可读,可清除
RW/C1 可读可写,写1才能清除
WO 只写,不能读
F8 MWCMD 首先写地址,把0xF8写进去,再把数据写进去,但是这数据是写到TX buffer里,不是写到MWCMD这个寄存器里
FC~FD TXPLH/TXPLL 两个寄存器加起来为16位,但是不能直接写16位数据进去,因为每个寄存器为8位,所以必需分开两次写
FE Interrupt Status Register 中断状态寄存器,如果不开中断这里的状态也有效
以太网包数据最大为1500个字节,最小为46个字节
超过8位就要用htons/htonl等转换
IP包头:
ihl IP头长度,为4位,最大表示为15,所以要右移2
version IP包版本
tos
tot_len IP头长度
protocol 接下来要交给哪个协议去处理,17代表UDP
check 校验码
接收:
在Rx Buffer里每个包dm9000A会自动为包添加4个字节的头信息,第一个字节为01为正常包,00为空包,其它为错误,第二个字节为包的状态,错误的信息也可在这里看到,第三个和第四个为数据包的长度,这个长度不包括dm9000A加的4个字节的头信息
- DM9000
- DM9000
- dm9000
- DM9000
- dm9000
- dm9000
- DM9000
- DM9000
- dm9000
- dm9000
- DM9000网卡
- dm9000移植
- DM9000寄存器
- DM9000布线
- DM9000驱动
- DM9000网卡
- DM9000 Device Driver(1) -- Dm9000.c
- DM9000 Device Driver(2) -- Dm9000.h
- U盘存入文件后其重量是否改变
- Eclipse插件开发之定制向导
- 趣味算法-马踏棋盘
- HTC G7 相机故障,自己动手维修详细步骤
- Win7 VS2010装不上(装frame work 4.0 就报错了:oxc8000222 )
- DM9000
- iPhone开发学习笔记005——使用XIB自定义一个UIView,然后将这个view添加到controller的view
- 五、我也来抄bash之ABS--操作符
- 《算法导论》第6章 堆排序 (1)最大堆与堆排序
- Linux提示符为bash-2.05b#,不再显示当前路径
- 中文机器做source code时编码错误问题---perl的引用文件大红叉错误
- 勿以恶小而为之
- 我大学剩下一年半的生活(十)——pythonchallenge之level9
- 一些要看的书