单片机与TCPIP网络.docx

上传人:b****8 文档编号:9512452 上传时间:2023-05-19 格式:DOCX 页数:31 大小:859.97KB
下载 相关 举报
单片机与TCPIP网络.docx_第1页
第1页 / 共31页
单片机与TCPIP网络.docx_第2页
第2页 / 共31页
单片机与TCPIP网络.docx_第3页
第3页 / 共31页
单片机与TCPIP网络.docx_第4页
第4页 / 共31页
单片机与TCPIP网络.docx_第5页
第5页 / 共31页
单片机与TCPIP网络.docx_第6页
第6页 / 共31页
单片机与TCPIP网络.docx_第7页
第7页 / 共31页
单片机与TCPIP网络.docx_第8页
第8页 / 共31页
单片机与TCPIP网络.docx_第9页
第9页 / 共31页
单片机与TCPIP网络.docx_第10页
第10页 / 共31页
单片机与TCPIP网络.docx_第11页
第11页 / 共31页
单片机与TCPIP网络.docx_第12页
第12页 / 共31页
单片机与TCPIP网络.docx_第13页
第13页 / 共31页
单片机与TCPIP网络.docx_第14页
第14页 / 共31页
单片机与TCPIP网络.docx_第15页
第15页 / 共31页
单片机与TCPIP网络.docx_第16页
第16页 / 共31页
单片机与TCPIP网络.docx_第17页
第17页 / 共31页
单片机与TCPIP网络.docx_第18页
第18页 / 共31页
单片机与TCPIP网络.docx_第19页
第19页 / 共31页
单片机与TCPIP网络.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机与TCPIP网络.docx

《单片机与TCPIP网络.docx》由会员分享,可在线阅读,更多相关《单片机与TCPIP网络.docx(31页珍藏版)》请在冰点文库上搜索。

单片机与TCPIP网络.docx

单片机与TCPIP网络

  单片机与TCP/IP网络

--版主老古

(一)绪言

 

  ——单片机如何控制以太网网卡进行传输数据,如何加载TCP/IP协议连接到互联网,这些都是一些令人感兴趣的问题。

——可以说以太网和TCP/IP协议已经成为使用最广泛的协议,而其它总线协议如RS485、RS232,CAN,LANWORKS,都只是一些局部系统的总线。

——围绕以太网而制造的集线器,交换机已进入大小公司,企业,家庭。

我现在在众达天网公司,由于公司是搞电脑防火墙的,所以对网络的接触也越来越多,我研究的主要是网络的底层,并掌握了很多网络分析工具如(SNIFFER),对以太网和TCP/IP协议的研究就更加深入了。

——我比较熟悉的网卡是10M的网卡,100M的以太网卡还在研究之中。

曾经用单片机(89C52)控制和驱动10M的NE2000兼容型以太网卡与电脑主机传输数据。

——现在将我的一些研究成果写成一系列的文单,提供给大家。

也许有一天研究了100M的网卡之后,可以让单片机驱动它,那是可能的事,只不过接口可能会复杂一些。

——我所写的驱动程序并不是标准的,因为我没有学过UNIX,无法使用UNIX提供的原代码。

如果能使用UNIX的原代码,那将是很好的事。

我也正在接触UNIX和VC++,DDK等方面的内容,希望有一天能够重写我现在所写的驱动程序。

——我知道有很多人在了解单片机与以太网方面的东西,在BBS上也发现了很多这方面的内容,有些人的研究甚至比我还深入,我也希望能跟这些人交流交流,如果对我的文章感兴趣,当然可以给我发电子邮件啦。

——在接下来的文章将介绍以太网协议,网卡驱动,IP协议,ICMP协议,ARP协议,TCP协议等。

----为帮助读者开发该tcp/ip的应用,本站制作了以太网开发板,可以购买。

(二)以太网协议

  ——--以太网协议(用于10MBPS的以太网,作者以下所说的以太网均指10M以太网,而不是100M,1000M的以太网)

——以太网协议有两种,一种是IEEE802.2/IEEE802.3,还有一种是以太网的封装格式。

——现代的操作系统均能同时支持这两种类型的协议格式。

因此对我们来说只需要了解其中的一种就够了,特别是对单片机来说,不可能支持太多的协议格式。

——以太网的物理传输帧:

(仅介绍第二种格式)

PR

SD

DA

SA

TYPE

DATA

PAD

FCS

56位

8位

48位

48位

16位

不超过1500字节

可选

32位

——PR:

同步位,用于收发双方的时钟同步,同时也指明了传输的速率(10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010.....

——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,TYPE14字节),还必须传输46字节的数据,当数据段的数据不足46字节时,后面补000000.....(当然也可以补其它值)

----FCS:

32位数据校验位.为32位的CRC校验,该校验由网卡自动计算,自动生成,自动校验,自动在数据段后面填入.对于数据的校验算法,我们无需了解.

----事实上,PR,SD,PAD,FCS这几个数据段我们不用理它,它是由网卡自动产生的,我们要理的是DA,SA,TYPE,DATA四个段的内容.

----所有数据位的传输由低位开始(但传输的位流是用曼彻斯特编码的)

----以太网的冲突退避算法就不介绍了,它是由硬件自动执行的.

DA+SA+TYPE+DATA+PAD最小为60字节,最大为1514字节.

----以太网卡可以接收三种地址的数据,一个是广播地位,一个是多播地址(我们用不上),一个是它自已的地址.但网卡也可以设置为接收任何数据包(用于网络分析和监控).

----任何两个网卡的物理地址都是不一样的,是世界上唯一的,网卡地址由专门机构分配.不同厂家使用不同地址段,同一厂家的任何两个网卡的地址也是唯一的.根据网卡的地址段(网卡地址的前三个字节),可以知道网卡的生产厂家.有些网卡的地址也可以由用户去设定,但一般不需要.

(三)ISA总线接口定义

ISAISA=IndustryStandardArchitecture(isa总线)

PinNameDescription

引脚名称含义

A1/I/OCHCKI/Ochannelcheck;activelow=parityerror

A2D7Databit7

A3D6Databit6

A4D5Databit5

A5D4Databit4

A6D3Databit3

A7D2Databit2

A8D1Databit1

A9D0Databit0

A10I/OCHRDYI/OChannelready,pulledlowtolengthenmemorycycles

A11AENAddressenable;activehighwhenDMAcontrolsbus

A12A19Addressbit19

A13A18Addressbit18

A14A17Addressbit17

A15A16Addressbit16

A16A15Addressbit15

A17A14Addressbit14

A18A13Addressbit13

A19A12Addressbit12

A20A11Addressbit11

A21A10Addressbit10

A22A9Addressbit9

A23A8Addressbit8

A24A7Addressbit7

A25A6Addressbit6

A26A5Addressbit5

A27A4Addressbit4

A28A3Addressbit3

A29A2Addressbit2

A30A1Addressbit1

A31A0Addressbit0

B1GNDGround

B2RESETActivehightoresetorinitializesystemlogic

B3+5V+5VDC

B4IRQ2InterruptRequest2

B5-5VDC-5VDC

B6DRQ2DMARequest2

B7-12VDC-12VDC

B8/NOWSNoWaitState

B9+12VDC+12VDC

B10GNDGround

B11/SMEMWSystemMemoryWrite

B12/SMEMRSystemMemoryRead

B13/IOWI/OWrite

B14/IORI/ORead

B15/DACK3DMAAcknowledge3

B16DRQ3DMARequest3

B17/DACK1DMAAcknowledge1

B18DRQ1DMARequest1

B19/REFRESHRefresh

B20CLOCKSystemClock(67ns,8-8.33MHz,50%dutycycle)

B21IRQ7InterruptRequest7

B22IRQ6InterruptRequest6

B23IRQ5InterruptRequest5

B24IRQ4InterruptRequest4

B25IRQ3InterruptRequest3

B26/DACK2DMAAcknowledge2

B27T/CTerminalcount;pulseshighwhenDMAterm.countreached

B28ALEAddressLatchEnable

B29+5V+5VDC

B30OSCHigh-speedClock(70ns,14.31818MHz,50%dutycycle)

B31GNDGround

C1SBHESystembushighenable(dataavailableonSD8-15)

C2LA23Addressbit23

C3LA22Addressbit22

C4LA21Addressbit21

C5LA20Addressbit20

C6LA18Addressbit19

C7LA17Addressbit18

C8LA16Addressbit17

C9/MEMRMemoryRead(Activeonallmemoryreadcycles)

C10/MEMWMemoryWrite(Activeonallmemorywritecycles)

C11SD08Databit8

C12SD09Databit9

C13SD10Databit10

C14SD11Databit11

C15SD12Databit12

C16SD13Databit13

C17SD14Databit14

C18SD15Databit15

D1/MEMCS16Memory16-bitchipselect(1wait,16-bitmemorycycle)

D2/IOCS16I/O16-bitchipselect(1wait,16-bitI/Ocycle)

D3IRQ10InterruptRequest10

D4IRQ11InterruptRequest11

D5IRQ12InterruptRequest12

D6IRQ15InterruptRequest15

D7IRQ14InterruptRequest14

D8/DACK0DMAAcknowledge0

D9DRQ0DMARequest0

D10/DACK5DMAAcknowledge5

D11DRQ5DMARequest5

D12/DACK6DMAAcknowledge6

D13DRQ6DMARequest6

D14/DACK7DMAAcknowledge7

D15DRQ7DMARequest7

D16+5V

D17/MASTERUsedwithDRQtogaincontrolofsystem

D18GNDGroundNote:

DirectionisMotherboardrelativeISA-Cards.

四)89C52单片机与网卡接口电路图

——电路是由作者自己设计的,可能不是很标准,也可能不是理想的,但是它可以实现。

网卡是ne2000兼容型的网卡。

作者所用的网卡是TP-LINK的TE-2008,接口为ISA接口,网卡的主芯片是RTL8019AS.此款网卡在电脑城可以买到。

价钱不超过50元。

如果买不到,也可以使用别的ne2000的兼容网卡,例如芯片Davicom的DM9008,NSI的DP8390,

MXIC的MX98905,还有华邦的,dlink的。

这些芯片的资料可以在本站的硬件程序下载区下载。

但推荐使用RTL8019AS。

为阅读以下的内容,请在本站下载RTL8019AS的芯片资料。

这是缩小的图,点击这里放大。

放大的图可能还不是很清楚,要看更为清楚的图,点击这里下载SCH电路图。

(可以用PROTEL98或PROTEL99打开。

如果你没有protel98,可以在本站下载protel98安装程序(要下载几个小时)。

__电路用到的主要芯片有MAX232(串口的电平转换),24c02(IIC总线的eeprom),373(8位锁存),62256(32K的RAM).其中的24C02也可以不要,可以通过存取网卡上的93C46来实现,但我没有这样做。

62256为外部32K的Ram,也可以不用,可以用网卡上的RAM来代替,但是网卡上的Ram的存取比较复杂,速度会比加62256慢。

为了编程的方便,和实现快的传输速度,以及为完成更为复杂的应用,推荐使用62256,用77E58单片机和外加62256,可以实现500KBPS以上的传输速度。

电路图上方的两大块为ISA槽,网卡是插在这ISA槽上的。

本站还有一个一体化的电路图,是将RTL8019AS也做到板上的,来自http:

//8052.lphard.cz,这个网站还有现成的程序,是用asm写的,用到的I/O300H.

--作者以下文章的描述全部基于自己的电路图,而不是来自8052.lphard.cz的电路图,请不要混在一起。

作者的全部程序用C51编写,而不是汇编,为了方便大家移植和扩充。

(五)接口电路图详解

(1)

----89c52单片机部分

——ISA接口的A,B部分.

地址线

A19

A18

A17

A16

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

240H

0

0

0

0

0

0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

...

0

0

0

0

0

0

0

0

0

0

1

0

0

1

0

X

X

X

X

X

25FH

0

0

0

0

0

0

0

0

0

0

1

0

0

1

0

1

1

1

1

1

这是RTL8019网卡ISA的前半部分A1--A31(1...31),B1--B31(32...62)共62个引脚.

DATA0--DATA7是网卡的8位数据总线,接单片机的P0口.

RESDRV(33脚)(RESET)接单片机的T0(P3.4),单片机用P3.4来复位网卡。

IRQ9接单片机的INT0(P3.2),IRQ9是网卡的中断9,接到单片机的中断0上。

(但我的程序没有使用中断操作,我是用查询操作的)

IOR,IOW接到单片机的p3.6,p3.7(/WR,/RD)

GND是地,VCC为+5V的电源。

A0--A19为网卡的地址线,共20根,我们用到网卡的地址为十六进制的0240H---025FH,转换为二进制为

我们看到从地址240H到25FH,地址线的A19---A5是固定的000000000010010,因此A10--A19接地,A7-A8接地,ADDR8--ADDR15对应地址线的A0--A6.(实际上A5也可以接地,这样可以减少一个单片机的引脚。

这是作者在设计电路时没有注意到,同时A9也可以接VCC)。

A0--A6(ADDR8--ADDR15)接单片机的P2口。

因此当P2口为

地址线

 

A6,A9(ADDR15)

A5(ADDR13)

A4(ADDR12)

A3(ADDR11)

A2(ADDR10

A1(ADDR9)

A0(ADDR8)

 

 

1

0

X

X

X

X

X

P2口

 

P2.7

P2.5

P2.4

P2.3

P2.2

P2.1

P2.0

 

 

1

0

X

X

X

X

X

当P2口为二进制1X0XXXXX时将选中网卡的I/O地址空间。

在程序里,我使用110XXXXX来选中网卡的地址。

地址映射:

 

单片机(P2口)也就是DPH

网卡(I/O)

 

11000000(0C0H)

240H

 

110XXXXX

2XXH

 

11011111(0DFH)

25FH

我在程序里定义了reg00--reg1f来对应240H--25FH端口。

#definereg00XBYTE[0xc000]/*240H*/

#definereg01XBYTE[0xc100]/*241H*/

#definereg02XBYTE[0xc200]

#definereg03XBYTE[0xc300]

...

#definereg1fXBYTE[0xDF00]/*25FH*/

---ISA接口的C,D部分

 

 

这是网卡的接口的后半部分,ISA槽的扩展部分。

只用到GND,VCC,IOCS16.其中的IOCS16是16位I/O的选择脚。

当网卡上电复位的时候,这个脚为网卡的输入脚,如果这个脚为低电平,网卡将选择8位模式,如果这个脚为高电平,网卡将选择16位的模式。

我用了个电阻R10下拉,因此在复位时,这个脚为低电平,网卡选择8位模式。

--网卡可以兼容8位和16位操作。

由于89c52是8位的数据总线,因此要用网卡的8位总线模式(每次读入或写入1个字节)。

如果你是用80c196或dsp等16位总线的芯片的话,你可以使用16位的操作模式,这样有更快的传输速度(每次读入或写入2个字节)。

(16位总线时,这个下拉电阻去掉,不用接,同时网卡的DATA8--DATA15要接到你的CPU的数据8--15上。

DMA操作为16位)

(六)接口电路图详解

(2)

----89c52单片机部分

——外部存储器62256和373。

--这是外部存储器62256(32K字节的RAM),62256的

DATA0--DATA7接单片机的P0口。

/OE接单片机的/RD

/WE接单片机的/WR

/CE接单片机的P2.7

A0--A14接单片机的P2.0-P2.6

----373的

DATA0--DATA7接单片机的P0口

/OE接地

LE接单片机的ALE。

---因此外部存储器62256占用单片机的外部数据地址空间0000H--7FFFH,共32K字节。

我们使用外部RAM的目的是提高单片机的数据传输速度,和复杂的TCP/IP的处理。

由于以太网的包最大可以有1500多字节,89c52单片机是无法存储这么大的包的,只有放到外部的RAM里。

同时这外部的RAM也用作串行口的输入输出缓冲。

以使单片机可以高速的吞吐数据。

(用网卡上的RAM来代替62256会影响速度)

----MAX232,24c02

--24C02是IIC总线的eeprom,可以用来存储用户的一些设置,比如IP地址,网关等。

SCL接单片机的T1(P3.5)

SDA接单片机的INT1(P3.3)

---MAX232为串口电平转换电路。

CPUTXD接单片机的TXD

CPURXD接单片机的RXD

PCRXD和PCTXD是RS-232电平,为标准串口电平。

数据可以从串口输入到单片机,单片机再把数据送到网卡传出去。

晶振可以用11.0592Mhz,也可以用22.1184Mhz,或更高的频率。

(七)网卡上电复位

----当你买到一个新的RTL8019AS网卡,你要先将该网卡设置为以下的配置:

操作方式OperatingMode:

跳线方式Jumperless(不是即插即用PlugandPlay)

端口I/Obase:

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个寄存器地址。

10HDMA地址(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的驱动程序中,一般在复位之后检查该标志位以确认是否正确复位,特别是在即插即用的检测过程中。

对于我们用单片机控制网卡来说,我们可以不检查该标志位,因为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2