首页 开发指南---51单片机 RTL8019上网编程指南(可编辑)

开发指南---51单片机 RTL8019上网编程指南(可编辑)

举报
开通vip

开发指南---51单片机 RTL8019上网编程指南(可编辑)开发指南---51单片机 RTL8019上网编程指南(可编辑) 开发指南---51单片机+RTL8019上网编程指南 RTL8019编程指南 SD DA SA TYPE DATA PAD FCS 56位 8位 48位 48位 16位 不超过1500字节 可选 32位 ――PR:同步位,用于收发双方的时钟同步,同时也指明了传输的速率(10M和100M的时钟频率不一样, 所以100M网卡可以兼容10M网卡),是56位的二进制数1XXXXXXXXXX0..... ――SD: 分隔位,表示下面跟着的是真正的数据,而不是...

开发指南---51单片机 RTL8019上网编程指南(可编辑)
开发指南---51单片机 RTL8019上网编程指南(可编辑) 开发指南---51单片机+RTL8019上网编程指南 RTL8019编程指南 SD DA SA TYPE DATA PAD FCS 56位 8位 48位 48位 16位 不超过1500字节 可选 32位 ――PR:同步位,用于收发双方的时钟同步,同时也指明了传输的速率(10M和100M的时钟频率不一样, 所以100M网卡可以兼容10M网卡),是56位的二进制数1XXXXXXXXXX0..... ――SD: 分隔位,表示下面跟着的是真正的数据,而不是同步时钟,为8位的10101011,跟同步位不同的是最后2位是11而不是10. ――DA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给哪个网卡.如果为FFFFFFFFFFFF,则是广播地址,广播地址的数据可以被任何网卡接收到. ――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字节. ----以太网卡可以接收三种地址的数据,一个是广播地位,一个是多播地址(我们用不上),一个是它自已的地址.但网卡也可以设置为接收任何数据包(用于网络 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 和监控). ----任何两个网卡的物理地址都是不一样的,是世界上唯一的,网卡地址由专门机构分配.不同厂家使用不同地址段,同一厂家的任何两个网卡的地址也是唯一的.根据网卡的地址段(网卡地址的前三个字节),可以知道网卡的生产厂家.有些网卡的地址也可以由用户去设定,但一般不需要. 网卡上电复位 ----当你买到一个新的RTL8019AS网卡,你要先将该网卡设置为以下的配置: 操作方式Operating Mode:跳线方式Jumperless(不是即插即用Plug and Play) 端口I/O base:0240-25FH 中断Interrupt: 2/9(我的程序没有用到网卡中断,所以也可以不用设置) 你要将这个网卡插到你的电脑里,用这个网卡带的设置程序RSET8019.exe将这个卡按照上面的配置设置好。(最好在纯DOS方式下设置) . ,,在介绍网卡驱动程序之前,先介绍一下RTL8019AS的基本情况: 输入 输出地址: 共32个,地址偏移量为00H--1FH,(对应于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个地址都是复位地址,每个地址的功能都是一样的,只要其中的一个就可以了,但实际上只有18H,1AH,1CH,1EH这几个复位端口是有效的,其他不要使用,有些兼容卡不支持19H,1BH,1DH等奇数地址的复位) 跟复位有关的引脚: RSTDRV连接到ISA总线的RSTDRV的引脚上。RSTDRV同时也是ISA总线的复位信号。RSTDRV为高电平有效,至少需要 800ns的宽度。给该引脚施加一个1us以上的高电平就可以复位。施加一个高电平之后,然后施加一个低电平。 RSTDRV从高电平到低电平之后要等多久,单片机才可以对网卡进行操作, 复位的过程将执行一些操作,比如将93c46读入,将内部寄存器初始化等。这些至少需要2毫秒的时间。我们推荐大家等待更久的时间之后才对网卡操作,比如100毫秒之后才对它操作,以确保完全复位。 对RSTDRV可以接单片机的一个引脚进行对网卡的复位。但也可以直接将RSTDRV跟单片机的RESET引脚并联,单片机复位的时候,网卡也复位,以减少一个单片机的引脚的使用。这种情况下,为了保证能够完全复位,可以使用下面介绍的热 复位代码。 跟复位有关的寄存器: 18H,,1FH共8个地址,为复位端口。对该端口偶数地址的读,或者写入任何数,都引起网卡的复位。 跟复位有关的标志位: 其中的第7位RST跟复位有关。 网卡执行正确的复位之后该位为1。在linux或windows的驱动程序中,一般在复位之后检查该标志位以确认是否正确复位,特别是在即插即用的 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 过程中。对于我们用单片机控制网卡来说,我们可以不检查该标志位,因为如果复位不正常的情况通常是网卡坏了。 寄存器: 00H,,0FH共16个地址是寄存器地址。 寄存器分成4页PAGE0--PAGE3,但NE2000兼容的寄存器只有3页(Page0-Page2),(第四页是RTL8019AS自己定义的,我们不用去管这些寄存器,因为你对第四页的寄存器的操作仅对这个网卡是有效的,如果你换成其他Ne2000兼容的网卡,例如DM9008,DP8390等,你的程序将无法正常运行。 为了保证驱动程序对所有Ne2000的网卡有效,不要去操作第四页的寄存器) 由于寄存器较多,我将在用到该寄存器的时候才对该寄存器介绍。 对网卡进行复位: 这是网卡驱动程序的需要做的第一个内容,由于我们将网卡设置为跳线模式,而不是即插即用的模式,RTL8019AS.PDF中介绍的PLUG and PLAY的一些过程,我们不需要做,因为单片机的资源有限,能够减少的操作,都尽量减少。 程序从main()开始执行: #include /*my.h 为作者所用的头文件,包含所有89c52寄存器的大写和小写的定义, 和一些常用的子函数,一些宏的定义*/ main() { delaymsecond(10);//延时大约1秒,保证电源稳定和网卡自身的上电完成。 netcardreset();//复位网卡的子程 序 。。。。 } 下面介绍网卡的复位子程序: #define reg1f XBYTE[0xdf00] //网卡的复位端口的地址,对应于网卡的地址25FH。 #define uint unsigned int //uint 代表unsigned int ,作者一般使用缩写uint #define uchar unsigned char //uchar 代表unsigned char,我比较懒,不愿意多写 sbit reset=p3^4; //单片机的p3.4脚连接到网卡的RSTDRV复位引脚 void netcardreset() { uint data i; uchar data temp; reset=1; //使网卡的RSTDRV引脚变成高电平, 网卡是高电平复位的。 for(i=0;i 250;i++);//延时程序,至少需要 reset=0; //使网卡的RSTDRV引脚变成低电平,网卡上电复位完毕 for(i=0;i 250;i++); temp=reg1f;//读网卡的复位端口 reg1f=temp; //写网卡的复位端口 for(i=0;i 250;i++); } 上面所讲的实际上是网卡复位的两种情况, reset=1;reset=0相当于冷复位 temp=reg1f;reg1f=temp相当于热复位 对网卡的复位端口的读或写将复位网卡,网卡内部将执行复位过程。读写是随意的,写入任意的数都将复位网卡。 实际上只要使用冷复位就可以了,热复位程序可以不要。热复位主要在电脑里有用,冷复位就像电脑的冷启动,热复位相当于电脑的热启动。 ,,作者的复位网卡的过程是简化了的,一个电脑里的复位过程是比较复杂的,如果你有网卡驱动的UNIX,LINUX程序的源代码,它的代码将会做一些判断和检查,检查网卡是否存在,和是否工作正常,和是否存在地址和中断冲突 。但在我们的这个系统里可以省去这些,我 们认为网卡的地址和I/O是没有冲突和正常工作的。当然如果读者愿 意,也可以写一些检查代码。 网卡初始化 ---- 完成复位之后,你要 对网卡的工作参数个子函数 void page(uchar pagenumber) #define reg00 XBYTE[0xc000] //对应于地址240H 为命令寄存器CR地址 void page(uchar pagenumber) { uchar data temp; temp=reg00;//command register temp=temp&0x3f; pagenumber=pagenumber 6; temp=temp | pagenumber; reg00=temp; } 错误修正:(2001年11月10日) :以上程序有问题, 在中断驱动或发送数据包不作等待时,因为发送数据包的命令是让 TXP置位,如果在发送数据包的过程中,使用该函数,就会不断地向外 发送数据包.原因是TXP置位之后,只能是发完数据包的时候,由网卡 内部将TXP位清0,命令不能使TXP清0,对该位写入0没有作用.读取 时要屏蔽该位,上面的程序修正如下,请用户使用下面的程序: void page(uchar pagenumber) {uchar data temp; temp=reg00; temp=temp&0x3B; //注意不是0x3F ,TXP位在平时一定要置为0. pagenumber=pagenumber 6 temp=temp|pagenumber; reg00=temp; } 从实验当中也发现,只要再置位TXP位就可以重发该数据包(重发数 据包时,不需要设置TPSTART,TBCR0,TBCR1). 作用是选择指定的页, 网卡共有4页寄存器,Ne2000兼容的有3页。第四页可以不用。 reg00 命令寄存器: CR,command register,地址偏移量00H,为一个字 节 位 7 6 5 4 3 2 1 0 名字 PS1 PS0 RD2 RD1 RD0 TXP STA STP ? ? ? ? ? ? ? ? ? PS1和PS0这两个位用来选择寄存器页, PS1 PS0=00时选 择寄存器页0,=01时选择寄存器页1, =10时选择寄存器页2,=11时 选择寄存器页3.上面的程序的参数为pagenumber,用来指定第几页。 temp=reg00 ;//读入命令寄存器的值。 temp=temp&0x3b;//将高2位,即PS1,PS0清0 pagenumber=pagenumber 6;//将低2位移至高端 temp=temp|pagenumber, //写入高2位 reg00=temp; //设置第几页 当然也可以写成更加简单的几句: temp=reg00&0x3B; pagenumber=pagenumb
本文档为【开发指南---51单片机 RTL8019上网编程指南(可编辑)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_321635
暂无简介~
格式:doc
大小:22KB
软件:Word
页数:0
分类:互联网
上传时间:2017-09-26
浏览量:17