如今社会以太网已经发展的相当成熟了,做为我们电子工程师,了解一下以太网是有相
当的必要了,我以我在仪器仪表接入以太网方面的工作的一点经验与大家交流。
我比较熟悉的网卡是10M的网卡,主芯片是51单片机和网卡芯片RTL8019AS。老实说,
我做
的网卡速度并不快,但用于一些简单仪表,智能设备(在速度要求并不是很高的情况下)
中,却是很管用的。速度快不起来,原因有几点:
1, 用的是51单片机,
2, 网卡芯片也只有10M。
3, 由以太网协议本身的要求所决定的(TCP传的慢,UDP传相对要快)。
现在我将自己的一点经验和来自网上大侠的资料给大家参考。
一,以太网数据包的结构 。
PR SD DA SA TYPE DATA PAD FCS
56BIT 8 BIT 48 BIT 48 BIT 16 BIT 46~1500BYTE 不定 32 BIT
——PR:用于同步位,是收发双方的时钟同步,也指明了传输的速率(10M和100M的
时钟
频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010.....
——SD:分隔位,表示下面跟着的是真正的数据,为8位的10101011,跟同步位不同的是最后
2
位是11而不是10.
——DA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给哪个网卡.
——SA:源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址,同样是6个字
节.
----TYPE:类型字段,表明该帧的数据是什么类型的数据,不同的协议的类型字段不同。
如:0800H 表示数据为IP包,0806H 表示数据为ARP包,814CH是SNMP包,8137H
为IPX/SPX
包,(小于0600H的值是用于IEEE802的,表示数据包的长度。)
----DATA:数据段 ,该段数据不能超过1500字节。因为以太网规定整个传输包的最大长
度不能超过1514字节。(14字节为DA,SA,TYPE)
----PAD:填充位。由于以太网帧传输的数据包最小不能小于60字节, 除去(DA,SA,
TYPE 14字节),还必须传输46字节的数据,当数据段的数据不足46字节时,后面补
000000.....(当然也可以补其它值)
----FCS:32位数据校验位.为32位的CRC校验,该校验由网卡自动计算,自动生成,自动校验,
自动在数据段后面填入.对于数据的校验算法,我们无需了解.
----事实上,PR,SD,PAD,FCS这几个数据段我们不用理它 ,它是由网卡自动产生的,我们要
理的是DA,SA,TYPE,DATA四个段的内容.
----所有数据位的传输由低位开始(但传输的位流是用曼彻斯特编码的)
----以太网的冲突退避算法就不介绍了,它是由硬件自动执行的.
DA+SA+TYPE+DATA+PAD最小为60字节,最大为1514字节.
二,网卡芯片RTL8019AS的介绍
由台湾Realtek公司生产的RTL8019AS以太网控制器,由于其优良的性能、低兼的价格,
使
其在市场上10Mbps网卡中占有相当的比例。主要性能:
1、符号Ethernet II与IEEE802.3(10Base5、10Base2、10BaseT)标准;
2、全双工,收发可同时达到10Mbps的速率;
3、内置16KB的SRAM,用于收发缓冲,降低对主处理器的速度要求;
4、支持8/16位数据总线,8个中断申请线以及16个I/O基地址选择;
5、支持UTP、AUI、BNC自动检测,还支持对10BaseT拓扑结构的自动极性修正;
6、允许4个诊断LED引脚可编程输出;
7、100脚的PQFP封装。
网卡芯片RTL8019AS内部结构为:
RTL8019AS内部可分为远程DMA接口、本地DMA接口、MAC(介质访问控制)逻辑、
数据编码
解码逻辑和其他端口。、
远程DMA接口是指单片机对RTL8019AS内部RAM进行读写的总线。单片机收发数据只
需对远
程DMA操作。本地DMA接口是把RTL8019AS与网线的连接通道,完成控制器与网线
的数据交
换。
MAC(介质访问控制)逻辑完成以下功能:当单片机向网上发送数据时,先将一帧数据通
过远程DMA通道送到RTL8019AS中的发送缓存区,然后发出传送命令;当RTL8019AS
完成了
上一帧的发送后,再开始此帧的发送。而RTL8019接收到数据时通过MAC比较、CRC校
验后
,由FIFO存到接收缓冲区;收满一帧后,以中断或寄存器标志的方式通知单片机。
RTL8019AS内部有两块RAM区。一块16K字节,地址为0x4000~0x7fff;一块小区32
字节单
元(即输入输出地址),地址为0x0000~0x001f。:(对应于240H--25FH,240H的地
址
偏移量为0,241H的地址偏移量为1,。。。25FH的地址偏移量为1FH)。
其中00H--0FH共16个地址单元,为寄存器地址。
10H--17H共8个单元,为DMA地址。
18H--1FH共8个单元,为复位端口。
对于8位的操作方式,上面的地址中只有18个是有用的:
00H--0FH共16个寄存器地址。
10H DMA地址 (10H--17H的8个地址是一样的,都可以用来做DMA端口,只用其
中之一)
1FH 复位地址。(18H到1FH共8个地址都是复位地址,每个地址的功能都是一样的,只
用
其中之一就OK了,但实际上只有18H,1AH,1CH,1EH这几个复位端口是有效的,其他不
要使
用,有些兼容卡不支持19H,1BH,1DH等奇数地址的复位)
寄存器介绍:
a, 命令寄存器CR的各位介绍:
——PS1和PS0这两个位用来选择寄存器页,PS1 PS0=00时选择寄存器页0,=01时选择
寄存器
页1, =10时选择寄存器页2,=11时选择寄存器页3.
--RD2,RD1,RD0这3个位代表要执行的功能。
=001 读网卡内存
=010 写网卡内存
=011 发送网卡数据包
=1** 完成或结束DMA的读写操作
--TXP这个位写入1时发送数据包,发完自动清零
--STA,STP这两个位用来启动命令或停止命令
=10 启动命令
=01 停止命令
b,PSTART 指定开始接收页
c,PSTOP指定结束页。(该页不用于接收)
d,BNRY 指向最后一个已经读取的页(读指针)
e,TPSR为发送页的起始页地址。
f,ISR,中断寄存器,为FF则清除所有标志位
g, RCR 接收配置寄存器,设置为使用接收缓冲区,仅接收自己的地址的数据包
(以及广播地址数据包)和多点播送地址包,小于64字节的包丢弃(这是协议的 规定
,设置成接收是用于网络分析),校验错的数据包不接收
h,TCR 发送配置寄存器,启用crc自动生成和自动校验,工作在正常模式
i,DCR 数据配置寄存器,设置为使用FIFO缓存,普通模式,8位数据传输模式,
j,IMR 中断屏蔽寄存器,设置成0x00,屏蔽所有的中断
k,CURR 当前的接收结束页地址
其中b,c,d,k,用于接收的设置
三,对网卡初始操作步骤:
1, 先要对网卡进行复位,对网卡复位有两种,
a, 是泠启动,对RTL8019的33脚RSTDRV进行发送一个高电平,网卡是高电
平
复位的。
b, 是热启动,对RTL8019内部寄存器操作,对复位端口进行任意读写。
2, 对寄存器进行设置,主要有以下操作
a, 先停止网卡工作,设置发送和接收的单元。设置是否要屏蔽中断,设置
网卡工作在8位总线还是16位总线工作方式等。
b, 然后设置网卡的MAC地址到MAR寄存器。等,然后让网卡开始工作
c, 初始化完成。
四,补充几点
1, 以太网卡可以接收三种地址的数据,一个是广播地址,一个是多播地址(我们用不上),
一个是它自已的地址.但网卡也可以设置为接收任何数据包(用于网络分析和监控).
任何网卡的物理地址都应该是不一样的,是世界上唯一的,网卡地址由IEEE专门机构分
配.(申请购买网卡地址的网址)https://standards.ieee.org/regauth/oui/forms/OUI
-form.shtml)
不同厂家使用不同地址段,同一厂家的任何两个网卡的地址也是唯一的. 所以你需要向他
们购买。
2, IP协议采用统一的校验算法:
初始校验和为0,然后对数据每16位求异或,结果取反,便得到校验和。校验时将数据(
含校验和)按同样的算法求和,结果为0,则数据正确。不为零则出错。
3, 网卡LED脚
网卡有四个LED脚,分别为60、61、62、63脚,默认状态下其中60脚在连接网络是为
低电
平,没有连网线是为高电平;61脚连线时为高电平,没有连线是为低电平;62脚没有数
据
通讯是为为低电平输出,有数据传输时为脉冲电平,我做的网卡用了60、62脚。
4, 我的程序没有用到93C46,如果要掉电存储MAC地址等。可以用别的
EEPROM代替。
因篇幅问题不能全部显示,请点此查看更多更全内容