用3C501来谈谈网卡的基本工作原理
汇编吧
全部回复
仅看楼主
level 12
胡杨胖子 楼主
3C501是第一块用于X86平台的ISA网卡,剖析下它的原理有助于帮助我们了解网卡是如何工作的。
网卡采用带同步信号的曼彻斯特编码(具体含义请BD该名词),其具体每组数据包的格式如下——(目前网络速度大幅提高,SFD已经改变了)
冲突检测使用CSMA/CD载波侦听的介质层协议(具体名词含义请BD)。
3C501网卡的具体方块图如下——
EDLC为数据链路控制芯片、MCC为曼彻斯特码编码器、ASCI为ISA接口逻辑电路,3C501通常占用300~30F共16个I/O口,实际上使用308~30F这几个,对应的寄存器及I/O口如下——
下面我们将介绍具体介绍个寄存器的作用,并分析网络分组包的收发过程(待续)
2013年04月06日 09点04分 1
level 12
胡杨胖子 楼主
1、地址锁存器ARC1(308~309),该寄存器兼有16位地址锁存器和16位同步计数器功能
1)在当从MAC口读取MAC地址时,ARC1作为地址锁存器用,ARC1置0,并在每读取一次后自动加1,共读6次就取得网卡的MAC地址。
2)当使用PIO方式与网卡缓存交换数据时,ARC1作为缓存地址指针,每从DR寄存器访问一次,则ARC1自动加1
3)当采用DMA方式发送分组包时(发送的数据缓存后端对齐),ARC1初始值置为800H-包长,当ARC1为7FF后产生RxEOF信号,EDLC紧接着产生CRC32信号,并在完成发送分组包后产生INT信号。
2、地址锁存器ARC2(30A~30B),在接受分组包时(前端对齐),ARC2初始值为0,每接收一个字节ARC2自动加1,完成接收后ARC2为接收包数据长度,要废除一个接收包只需令ARC2为0即可。
3、MAC地址寄存器、DR数据寄存器前面已经有涉及,这里不再重复。(未完待续)
2013年04月06日 09点04分 2
更正——RxEOF为RxTxEOF
2013年04月06日 09点04分
level 12
胡杨胖子 楼主
4、状态寄存器LCS(读30E)和控制寄存器LCC(写30E),其中LCS bit1、2、3、5、6跟随着LCC的对应位变化。
Bit7:LCC--1=总清,使得LCC、LCS、EDLC恢复默认值,LCS--1=正在发送
Bit6:1=IRQ允许,当此位置1后,EDLC每次发送或接收完一个分组包后,或者DMA模式下传送完指定长度的数据后,将引发IRQ中断。
Bit5:1=DMA允许,当主机与网卡缓存交换数据时,LCS Bit4为“0”,DMA完成后LCS Bit4置“1”
Bit4:LCC--保留,LCS--1=DMA完成
Bit3:LCC--1=启动接收,LCS--1=接收状态
Bit2:LCC--1=启动发送,LCS--1=发送状态
Bit1:LCC--1=启动测试,LCS--1=测试状态
Bit0:LCC--保留,LCS--1=超时状态
当LCC Bit3置“1”后启动接收,LCS Bit3也跟着为“1”,同时LCS Bit0为“1”,在EDLC接收一个完整数据包后LCS Bit0清“0”,超时时要清除此位可令LCC Bit7置“1”。
当LCC Bit2置“1”后启动发送,LCS Bit2也跟着为“1”,同时LCS Bit0为“1”,在EDLC接收一个完整数据包后LCS Bit0清“0”。
(未完待续)
2013年04月06日 11点04分 3
level 6
嗯 新人 但觉得不错
2013年04月13日 00点04分 5
level 5
好文!现在的网卡也是这样吗?
2013年04月13日 02点04分 6
level 9
这是抄别人的还是自己看资料总节的?
2013年04月13日 02点04分 7
我说的是出厂资料。
2013年04月13日 02点04分
level 7
-
不错,谢谢
2013年04月28日 13点04分 8
level 8
求解盲
2013年09月29日 11点09分 12
level 10
好复杂[咦]
2013年11月30日 17点11分 14
level 11
顶一下
2013年12月11日 00点12分 15
1