版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机与TCP/IP网偌一版主老古(一)绪言一单片机如何控制以太网网卡进行传输数据,如何加载TCP/IP协议 连接到互联网,这些都是一些令人感兴趣的问题。可以说以太网和TCP/IP协议已经成为使用最广泛的协议,而其它 总线协议如RS485、RS232, CAN, LANWQRKS,都只是一些局部系统 的总线。围绕以太网而制造的集线器,交换机已进入大小公司,企业,家庭。 我现在在众达天网公司,由于公司是搞电脑防火墙的,所以对网络的接 触也越来越多,我研究的主要是网络的底层,并掌握了很多网络分析工 具如(SNIFFER),对以太网和TCP/IP协议的研究就更加深入了。我比较熟悉的网卡是WM的网卡,
2、100M的以太网卡还在研究之中。 曾经用单片机(89C52)控制和驱动10M的NE2000兼容型以太网卡与 电脑主机传输数据。现在将我的一些研究成果写成一系列的文单,提供给大家。也许有 一天研究了 100M的网卡之后,可以让单片机驱动它,那是可能的事, 只不过接口可能会复杂一些。我所写的驱动程序并不是标准的,因为我没有学过UNIX,无法使 用UNIX提供的原代码。如果能使用UNIX的原代码,那将是很好的事。 我也正在接触UNIX和VC+, DDK等方面的内容,希望有一天能够 重写我现在所写的驱动程序。我知道有很多人在了解单片机与以太网方面的东西,在BBS上也发 现了很多这方面的内容,有些人的研
3、究甚至比我还深入,我也希望能跟 这些人交流交流,如果对我的文章感兴趣,当然可以给我发电子邮件 啦。在接下来的文章将介绍以太网协议,网卡驱动,1P协议,1CMP协 议,ARP协议,TCP协议等。-为帮助读者开发该tcp/ip的应用,本站制作了以太网开发板,可以购 买。(二)以太网协议-以太网协议(用于10MBPS的以太网,作者以下所说的以太网均指 10M以太网,而不是100M, 1000M的以太网)以太网协议有两种,一种是1EEE802.2/1EEE802.3,还有一种是以 太网的封装格式。现代的操作系统均能同时支持这两种类型的协议格式。因此对我们 来说只需要了解其中的一种就够了,特别是对单片机
4、来说,不可能支持 太多的协议格式。以太网的物理传输帧:(仅介绍第二种格式)PRSDDASATYPEDATAPADFCS56位8位48位48位16位不超过1500字节可选32位PR:同步位,用于收发双方的时钟同步,同时也指明了传输的速率 (10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010.SP:分隔位,表示下面跟着的是真正的数据,而不是同步时钟,为8位 的10101011,跟同步位不同的是最后2位是11而不是10.DA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧 传输给哪个网卡.如果为FFFFFFFFFFFF则
5、是广播地址广播地址的数据 可以被任何网卡接收到.SA:源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡 地址,同样是6个字节.TYPE:类型字段,表明该帧的数据是什么类型的数据,不同的协议 的类型字段不同。如:0800H表示数据为IP包,0806H表示数据为ARP 包,814cH是SNMP包,8137H为1PX/SPX包,(小于0600H的值是用 于1EEE802的,表示数据包的长度。)-DATA:数据段,该段数据不能超过1500字节。因为以太网规定整 个传输包的最大长度不能超过1514字节。(14字节为DA, SA, TYPE) -PAP:填充位。由于以太网帧传输的数据包最小不能
6、小于60字节,除 去(DA, SA, TYPE 14字节),还必须传输46字节的数据,当数据段 的数据不足46字节时,后面补000000.(当然也可以补其它值)-FCS:32位数据校验位.为32位的CRC校验,该校验由网卡自动计算,自 动生成,自动校验,自动在数据段后面填入.对于数据的校验算法,我们无 需了解.-事实上TR,SD,PAD,FCS这几个数据段我们不用理它,它是由网卡自 动产生的,我们要理的是DASAJYPEQATA四个段的内容.-所有数据位的传输由低位开始(但传输的位流是用曼彻斯特编码的)-以太网的冲突退避算法就不介绍了,它是由硬件自动执行的.DA+SA+TYPE+DATA+PA
7、D最小为60字节,最大为1514字节.-以太网卡可以接收三种地址的数据,一个是广播地位,一个是多播地址 (我们用不上),一个是它自已的地址.但网卡也可以设置为接收任何数据 包(用于网络分析和监控).-任何两个网卡的物理地址都是不一样的,是世界上唯一的,网卡地址由 专门机构分配.不同厂家使用不同地址段洞一厂家的任何两个网卡的地 址也是唯一的.根据网卡的地址段(网卡地址的前三个字节),可以知道网 卡的生产厂家.有些网卡的地址也可以由用户去设定,但一般不需要.(三)ISA总线接口定义ISA ISA=ndustrr Standard Architecture (isa 总线)元件面为A1T31,C1-
8、C18SOLDSIDE反面为Bl-B31D1-D1862+36 PIN EDGE CONNECTOR MALE at the card.62+36 PIN EDGE CONNECTOR FEMALE at the computer.Pin Name Description引脚名称含义Al () CH CT< 1/() channel check; active low=parity errorA2 07 Pava bit 7A3 D6 Data bit 6A4 D5 Data bit 5A5 04 Data bit 4A6 03 Data bit 3A7 D2 Data bit 2A8D
9、1 Data bit 1A10 I/O CH ROY I/O Channel ready, pulled low to lengthen memory cyclesAl 1 AEN Address enable; active high when DMA controls busA12 A19 Address bit 19A13 A18 Address bit 18A14 A17 Address bit 17A15 A16 Address bit 16A16 A15 Address bit 15A17 A14 Address bit 14A18 A13 Address bit 13A19 A1
10、2 Address bit 12A20 Al 1 Address bit 11A21 A10 Address bit 10A22 A9 Address bit 9A23 A8 Address bit 8A24 A7 Address bit 7A25 A6 Address bit 6A26 A5 Address bit 5A27 A4 Address bit 4A28 A3 Address bit 3A29 A2 Address bit 2A30 Al Address bit 1A31 AO Address bit 0Bl GND GroundB2 RESET Active high to re
11、set or initialize system logicB3 +5V +5 VDCB4 1RQ2 Interrupt Request 2B5 -5VPC -5 VDCB6 DRQ2 DMA Request 2B7-12VDC-12VPCB8 /NOWS No WailSlatcB9+12VDC+12VDCBIO GND GroundBll /SMEMW System Memory WriteBl2 /SMEMR System Memory ReadBl3 /IOW I/O WriteB14/IOR I/O ReadBl5 /DACK3 DMA Acknowledge 3B16 DRQ3 D
12、MA Request 3B17 /DACK1 DMA Acknowledge 1B18DRQ1 DMA Request 1B19 /REFRESH RefreshB20 CLOCK System Clock (67 ns, 8-8.33 MHz, 50% duly cycle)B21 IRQ7 Interrupt Request 7B23 IRQ5 Interrupt Request 5B24 IRQ4 Interrupt Request 4B25 IRQ3 Interrupt Request 3B26 /DACK2 DMA Acknowledge 2B27 T/C Terminal coun
13、t; pulses high when DMA term, count reachedB28 ALE Address Latch EnableB29 +5V +5 VDCB30 OSC High-speed Clock (70 ns, 14.31818 MHz, 50% duty cycle)B31 GND GroundCl SBHE System bus high enable (data available on SD8-15)C2 LA23 Address bit 23C3 LA22 Address bit 22C4 LA21 Address bit 21C5 LA20 Address
14、bit 20C6 LAI 8 Address bit 19C7 LA 17 Address bit 18C8 LAI6 Address bit 17C9 /MEMR Memory Read (Active on all mcmon- read cycles)CIO /MEMW Memory Write (Active on all memory write cycles)Cll SD08 Data bit 8C12SD09 Data bit 9C13 SD10 Data bit 10C14SD11 Data bit 11C15SD12Daia bit 12C16SD13Data bit 13C
15、17SD14Databit 14C18SD15Databit 15DI /MEMCS16 Memory 16-bit chip select (1 wait, 16-bil memory cycle)D2 /IOCS 16 I/O 16-bit chip select (1 wait, 16-bil I/O cycle)D3 IRQ 10 Interrupt Request 10D4 1RQ11 Interrupt Request 11D5 IRQ 12 Interrupt Request 12D6 IRQ 15 Interrupt Request 15D7 IRQ 14 Interrupt
16、Request 14D8 /DACKO DMA Acknowledge 0D9 DRQO DMA Request 0DIO /DACK5 DMA Acknowledge 5Dll DRQ5 DMA Request 5D12 /DACK6 DMA Acknowledge 6D13 DRQ6 DMA Request 6D14 /DACK7 DMA Acknowledge 7D15 DRQ7 DMA Request 7D16+5VD17 /MASTER Used with DRQ to gain control of systemDI8 GND Ground Note: Direction is M
17、otherboard relative ISA-Cards.四)89c52单片机与网卡接口电路图电路是由作者自己设计的,可能不是很标准,也可能不是理想的,但是它可 以实现。网卡是加2000兼容型的网卡。作者所用的网卡是TP-L1NK的TE-2008, 接口为ISA接口,网卡的主芯片是RTL8019AS.此款网卡在电脑城可以买到。价 钱不超过50元。如果买不到,也可以使用别的nc2000的兼容网卡,例如芯片 Davicom 的 PM9008,NSI 的 DP8390,MXIC的MX989O5,还有华邦的,dlink的。这些芯片的资料可以在本站的硬件程 序下载区下载。但推荐使用RTL8019AS。
18、为阅读以下的内容,请在本站下载RTL8019AS的芯片资料。这是缩小的图,点击这小放大。放大的图可能还不是很清楚,要看更为清楚的图,点击这里下载SCH电路图。(可以用PROTEL98或PROTEL99打开。如果你没有proid98,可以在本站下 载”。氏198安装程序(要下载几个小时)。电路用到的主要芯片有MAX232(串口的电平转换),24cO2(DC总线的ccprom), 373 (8位锁存),62256 (32K的RAM)淇中的24C02也可以不要,可以通过存 取网卡上的93c46来实现,但我没有这样做。62256为外部32K的Ram,也可以 不用,可以用网卡上的RAM来代替,但是网卡上
19、的Ram的存取比较复杂,速度 会比加62256慢。为了编程的方便,和实现快的传输速度,以及为完成更为复杂 的应用,推荐使用62256,用77E58单片机和外加62256,可以实现500KBPS以 上的传输速度。电路图上方的两大块为ISA槽,网卡是插在这ISA槽上的。本站 还有一个一体化的电路图,是将RTL8019AS也做到板上的,来自 http:/8052.lphard.cz ,这个网站还有现成的程序,是用asm写的,用到的I/O 300H.一作者以下文章的描述全部基于自己的电路图,而不是来自8052.lphard.cz的 电路图,请不要混在一起。作者的全部程序用C51编写,而不是汇编,为了方
20、便 大家移植和扩充。(五)接口电路图详解-89c52单片机部分,ISA接口的A,B部分.§o>aas 版 ,串60白 7埠 zcyHHa 7ZL SAW, 3+ §oMia身 s. 演OL HOL 20<Q' EORa ZUBa, aRCI HSHa XTDSAS d 92 a白 WOKI &匕 2u<a, UI 3HV AS-+ZHIAKH §0nV zooJ10 IS A接 口 A,B 部分oizs 寸 ggncosW。用耳鼻与町用目2日与周各z nviva E 9vJ/VlQI 寸 sviva S PKIIBIQI 9 cv
21、iva 广 ahviqi 8 1viva6E1- gz glzaavl gz eraaav lz zzaav 国 IZCIav I 6Z ozaav om mday In gzaav这是 RTL8019 网卡 ISA 的前半部分 Al-A31(1.31),B1-B31 (32.62)共 62 个引脚.DATA0-PATA7是网卡的8位数据总线,接单片机的P0 口.RESDRV(33脚)(RESET)接单片机的T0(P3.4),单片机用P3.4来复位网卡。RQ9接单片机的INTO (P3.2)JRQ9是网卡的中断9,接到单片机的中断。上。(但我的程序没有使用中断操作,我是用查询操作的)地址线A1
22、9A18A17A16A15A14A13A12AllA10A9A8A7A6A5A4A3A2AlAO240H00000000001001000000.000000000010010XXXXX25FH000o0000001001011111IORJOW 接到单片机的 p3.6,p3.7 (/WR,/RP)GND是地,VCC为+ 5V的电源。A0-A19为网卡的地址线,共20根,我们用到网卡的地址为十六进制的0240H-025FH,转换为二进制为我们看到从地址240H到25FH,地址线的A19A5是固定的000(X)0000010010,因 此A10A19接地,A7-A8接地,ADDR8ADDR15对
23、应地址线的AOA6.(实际 上A5也可以接地,这样可以减少一个单片机的引脚。这是作者在设计电路时没 有注意到,同时A9也可以接VCC)。AOA6(ADDR8-ADDR15)接单片机的 P2 口。因此当P2 口为地址线A6,A9(ADDR15)A5(ADDR13)A4(ADDR12)A3(ADDR11)A2(ADPR10Al (ADDR9)A0(ADDR8)10XXXXXP2 口P2.7P2.5P2.4P2.3P2.2P2.1P2.010XXXXX当P2 口为二进制1X0XXXXX时 将选中网卡的I/O地址空间。在程序里,我使用110XXXXX来选中网卡的地址。地址映射:单片机(P2 口)也就是
24、DPH网卡(I/O)11(X)0000 (OCOH)240H110XXXXX2XXH11011111 (ODFH)25FH我在程序里定义了 rcg()O-rcglf来对应240H25FH端口。#dcfinc rcgQOXBYTERKcOOO /* 240H*/#dcfinc rcg()l XBYTERKclOO /* 241H*/#dcfinc reg()2 XBrTE0xc200#dcfinc rcg()3 XBYTEOxc3()O #dcfinc rcglfXBYTEOxDFOO /* 25FH*/ISA接口的C,D部分RIOd.ON。 9gglsuWSIe, 91sUOI 0 To修II
25、O白710首20 台 己白0Mover OCSTHa over 9XUVT 90目口 白 uyft- Ag+MaLSVK §o17 ISA接口 C,D部分9 rvs TVS 匕之身, MMaw,8as 6as old/ 二 as ZIQS IQS 二 am这是网卡的接口的后半部分,ISA槽的扩展部分。只用到 GND,VCC,1OCS16.其中的1OCS16是16位I/O的选择脚。当网卡上电 复位的时候,这个脚为网卡的输入脚,如果这个脚为低电平,网卡将选 择8位模式,如果这个脚为高电平,网卡将选择16位的模式。我用了 个电阻R10下拉,因此在复位时,这个脚为低电平,网卡选择8位模式。网
26、卡可以兼容8位和16位操作。由于89c52是8位的数据总线,因 此要用网卡的8位总线模式(每次读入或写入1个字节)。如果你是用 80cl96或dsp等16位总线的芯片的话,你可以使用16位的操作模式, 这样有更快的传输速度(每次读入或写入2个字节)。(16位总线时, 这个下拉电阻去掉,不用接,同时网卡的DATA8-DATA15要接到你的 CPU的数据8-15上。DMA操作为16位)(六)接口电路图详解(2)-89c52单片机部分外部存储器62256和373。DATAQDATA1DATA2DATA3DATA4DATA5DATASDATA?3 -4 "7 28 亘 亘 T; 1¥
27、;1111DOQ0DIQiD2Q2D3Q3D4Q4D5Q5D6QfiD7Q7OELEUS74HC3735ADDRI96ADDR289ADDR3712ADDR4615ADDR5516ADDR5419ADDR73ADDROADDR8 25ADDR9 24ADDRlu 21AODOAlDIA2D2A3D3A4D4A5D5A6D6A7D7A8A9A10AllA12A13A14OEWEcFU7ADDRI 1 2362256外邻存储爵"32K字桁UOREAD 22 IJ6MRITE F .#DDR1S 2。ADDRI 2_2 ADDRI 326 ADDR14 -f11DATA012 DATA11
28、3 DATA215 DATA316 DATA417 DATA518 DATA519DATA7RXDTXD-这是外部存储器62256 (32K字节的RAM) , 62256的DATA0-DATA7 接单片机的 P0 口。/OE接单片机的/RD/WE接单片机的/*R/CE接单片机的P2.7A0-A14 接单片机的 P2.0-P2.6-373 的DATA0-DATA7接单片机的P0 口/OE接地LE接单片机的ALEo因此外部存储器62256占用单片机的外部数据地址空间0000H-7FFFH ,共32K字节。我们使用外部RAM的目的是提高单片机的数据传输速度,和复杂的TCP/IP的 处理。由于以太网的
29、包最大可以有1500多字节,89c52单片机是无法存储这么大 的包的,只有放到外部的RAM里。同时这外部的RAM也用作串行口的输入输 出缓冲。以使单片机可以高速的吞吐数据。(用网卡上的RAM来代替62256会 影响速度)MAX232, 24c022 "T"4purr1USMAZ232E串口电平洸袂.,.夕 ,- G«i . 4C1510514PCRXD?Cr3PCTZDru8 y乂-WRITE 162OI-456?111111p p p p p PINTIINTOT1 TOEA/VPXIX2RESETRD WR24C02是IIC总线的“prom,可以用来存储用户的
30、一些设置,比如1P地址,网关等。SCL接单片机的T1(P3.5)SDA接单片机的INTI (P3.3)MAX232为串口电平转换电路。CPUTXD接单片机的TXDCPURXD接单片机的RXDPCRXD和PCTXD是RS 232电平,为标准串口电平。数据可以从串口输入到 单片机,单片机再把数据送到网卡传出去。晶振可以用ll.0592Mhz,也可以用22.1184Mhz,或更高的频率。(七)网卡上电复位当你买到一个新的RTL8019AS网卡,你要先将该网卡设置为以下的配置:操作方式。pcrating Mode:跳线方式Jumperless (不是即插即用Plug and Play)端口 I/O b
31、ase: 0240-25FH中断Interrupt: 2/9(我的程序没有用到网卡中断,所以也可以不用设置) 你要将这个网卡插到你的电脑里,用这个网卡带的设置程序RSET8019.exe将这 个卡按照上面的配置设置好。(最好在纯DOS方式下设置).一一在介绍网卡驱动程序之前,先介绍一下RTL8019AS的基本情况:输入输出地址:共32个,地址偏移量为OOH-1FH,(对应于240H 25FH, 240H的地址偏移量为0, 241H的地址偏移量为1,。25FH的地址偏移量为1FH)。 其中OOHOFH共16个地址,为寄存器地址。10H 17H共8个地址,为DMA地址。18H 1FH共8个地址,为
32、复位端口。对于8位的操作方式,上面的地址中只有18个是有用的:00H-0FH共16个寄存器地址。10HDMA地址(10H 17H的8个地址是一样的,都可以用来做DMA端口, 只要用其中的一个就可以了)1FH复位地址。(18H到1FH共8个地址都是复位地址,每个地址的功能都是 一样的,只要其中的一个就可以了,但实际上只有18H,1AH,1CH,1EH这几个复 位端口是有效的,其他不要使用,有些兼容卡不支持等奇数地址 的复位)跟复位有关的引脚:33RSIDRV High active hardware reset signal from iho SA bus. Pulseswith high le
33、vel less than 800ns are ignored.RSTDRV连接到ISA总线的RSTDRV的引脚上。RSTDRV同时也是ISA总线的复位信号。RSTDRV为高电平有效,至少需要800ns的宽度。给该引脚施加一个lus以上的高电平就可以复位。施加一个高电平之后,然后施加一个低电平。FName*Value,25.0ms50.0ms75.Cms100二QQ 10-RSTDRV 0RSTDRV从高电平到低电平之后要等多久,单片机才可以对网卡进行操作?复位的过程将执行一些操作,比如将93c46读入,将内部寄存器初始化等。这些 至少需要2毫秒的时间。我们推荐大家等待更久的时间之后才对网卡操
34、作,比如 100毫秒之后才对它操作,以确保完全复位。对RSTDRV可以接单片机的一个引脚进行对网卡的复位。但也可以直接将 RSTDRV跟单片机的RESET引脚并联,单片机复位的时候,网卡也复位,以减 少一个单片机的引脚的使用。这种情况下,为了保证能够完全复位,可以使用下 面介绍的热复位代码。跟复位有关的寄存器:|8-IFPori18H 1FH共8个地址,为复位端口。对该端口偶数地址的读,或者写入任何 数,都引起网卡的复位。跟复位有关的标志位:ISR: Interrupt Status Register (07H; TypcR/W in PagcO)This register reflects
35、the NIC status. Ihe host reads it to determine the cause of an interrupt.Individual bits are cleared by writing a H1H into the corresponding bit. It must be cleared after power up.BitSymbolDescil prion|RSTI his bit is set when NK enters reset state and is cleared when a starl command is issued to th
36、e CR. It is also set when receixe buller overflows and is cleared when one or more packets have been read lion】 the bulTcr.6RIX:Scl when remole DMA operation has been completed.5CNYwhen MSR ofone or more of the network tally counters has been set.4OVWI'his bit is set when ihe receive bullcr has
37、been exhausted.rJIXEIransmii error bi( is set when a packet transmission is aborted due to excessive collisions.2RXEThis bit is set when a packet received with one or more of the Allowing errors:- CRC error- Frame alisnmem error J- Missed packet1PTXThis bit indicates packet transmitted with no error
38、s.0PRXi'his bit indiciUcs pnckcl received with no errors.其中的第7位RST跟复位有关。网卡执行正确的复位之后该位为1。在linux或windows的驱动程序中,一般在复 位之后检查该标志位以确认是否正确复位,特别是在即插即用的检测过程中。对 于我们用单片机控制网卡来说,我们可以不检查该标志位,因为如果复位不正常 的情况通常是网卡坏了。寄存器:00H 0FH共16个地址是寄存器地址。寄存器分成4页 PAGE0-PAGE3,但NE2000兼容的寄存器只有3页旧型06空2),(第四页是 RTL8019AS自己定义的,我们不用去管这些寄
39、存器,因为你对第四页的寄存器的操作仅对这个网卡是有效的,如果你换成其他Nc2000兼容的网卡,例如 DM9008QP8390等,你的程序将无法正常运行。为了保证驱动程序对所有Nc2000的网卡有效,不要去操作第四页的寄存器)由于寄存器较多,我将在用到该寄存器的时候才对该寄存器介绍。对网卡进行复位:这是网卡驱动程序的需要做的第一个内容,由于我们将网卡设置为跳线模式,而 不是即插即用的模式,RTL8019AS.PPF中介绍的PLUG and PLAY的一些过程, 我们不需要做,因为单片机的资源有限,能够减少的操作,都尽量减少。程序从main。开始执行:#includc <my.h> /
40、*my.h为作者所用的头文件,包含所有89c52寄存器的大写和 小写的定义,和一些常用的子函数,一些宏的定义*/main。dclaymscccnd(l();延时大约1秒,保证电源稳定和网卡自身的上电完成。nctcardresctQ;/ /复位网卡的子程序下面介绍网卡的复位于程序:#dc£ncrcHfXBYTE()xdR)() 网卡的复位端口的地址,对应于网卡的地址25FH。#dcfinc uint unsigned int /uint 代表 unsigned int 作者一般使用缩写 uini#dcfinc uchar unsigned char /uchar 代表 unsigned
41、 char,我比较懒,不愿意多写 sbiigci=p3人4; /单片机的p3.4脚连接到网卡的RSTDRV复位引脚void nctcardrcsctOuint data i;uchar data temp;resell; 使网卡的RSTDRV引脚变成高电平,网卡是高电平复位的。for(i=0;iv250;i+);延时程序,至少需要rcsct=O; /使网卡的RSTDRV引脚变成低电平,网卡上电复位完毕for(i=0;i<250;i+);temp=rc&l f;/ /读网卡的复位端口rcglf=lcmp; 写网卡的复位端口for(i=0;i<250;i+);上面所讲的实际上是
42、网卡复位的两种情况,rcsct=l;rcsct-0相当于冷复位lcmp=rcglf;rcgl f=tcmp 相当于热复位对网卡的复位端口的读或写将复位网卡,网卡内部将执行复位过程。读写是随意的,写入任意的数都将复位网卡。实际上只要使用冷复位就可以了,热复位程序可以不要。热复位主要在电脑里有 用,冷复位就像电脑的冷启动,热复位相当于电脑的热启动。作者的复位网卡的过程是简化了的,一个电脑里的复位过程是比较复杂的, 如果你有网卡驱动的UNIX,LINUX程序的源代码,它的代码将会做一些判断和 检查,检查网卡是否存在,和是否工作正常,和是否存在地址和中断冲突。但 在我们的这个系统里可以省去这些,我们认
43、为网卡的地址和I/O是没有冲突和 正常工作的。当然如杲读者愿意,也可以写一些检查代码。(八)网卡初始化-完成复位之后,你要对网卡的工作参数进行设置.以使网卡开始工作.先介绍一个子函数#dcfinc rcgOO XBYTE0xc000 对应于地址240H为命令寄存器CR地址void pagc(uchar pagenumber) uchar data temp;tcmp=rcg()0;/command registertcmp=tcmp&0x3f;pagcnumbcr=pagcnumbcr <<6;temp=tump | pagenumber;rcg()0=tcmp;错误修正:
44、(2001年11月10日):以上程序有问题,在中断驱动或发送数据包不作等 待时,因为发送数据包的命令是让TXP置位,如果在发送数据包的过程中,使用该 函数,就会不断地向外发送数据包.原因是TXP置位之后,只能是发完数据包的时 候,由网卡内部将TXP位清(),命令不能使TXP清0,对该位写入0没有作用.读取时 要屏蔽该位,上面的程序修正如下,请用户使用下面的程序:void pagc(uchar pagenumber)(char data temp;lcmp=rcg()0;tcmp=lcmp&0x3B; 注意不是0x3F ,TXP位在平时一定要置为0.pagcnumbcr=pagcnumb
45、cr<<6lcmp=lcmp pagenumber;rc(K)=tcmp;从实验当中也发现,只要再置位TXP位就可以重发该数据包(重发数据包时,不需要设置 TPSTART,TBCRO,TBCR1).作用是选择指定的页,网卡共有4页寄存器,Nc2000兼容的有3页。第四页可以不用。regOO命令寄存器:CR, command register,地址偏移量00H,为一个 字节位76543210名字PS1PSORD2RD1RD0TXPSTASTPPS1和PSO这两个位用来选择寄存器页,PSI PS()=OO时选择寄存器页0尸01时选择寄存器页1, =10时选择寄存器页2=11时选择寄存器
46、页3.上面的程序的参数为pagenumber,用来指定第几页。tcmp=rcg()0 ;读入命令寄存器的值。lcmp=lcmp&0x3f;将高 2 位,即 PS1,PSO 清 0pagenumbe尸pagcnumbcrV<6;将低 2 位移至高端tcmp=tcmp 1 pagenumber, /写入高 2 位rcg00=tcmp; 设置第几页当然也可以写成更加简单的几句:lcmp=rcg()()&0x3f;pagcnumbcr=pagcnumbcr<<6;rcg()()=tcmp | pagvnumbcr;但这样对读者来说不好理解。从执行的速度来说,上面的代码
47、也不是最快的。但作者主要讲述原理,而不是探讨最快的实现。-RD2,RD1FD()这3个位代表要执行的功能。= 001读网卡内存= 010写网卡内存= 011发送网卡数据包= 1*完成或结束DMA的读写操作TXP这个位写入1时发送数据包,发完自动清零一一STA, STP这两个位用来启动命令或停止命令 =10启动命令 =01停止命令F面介绍网卡的初始化于程序: void nc2000initQ rcg00=0x21;选择页。的寄存器,网卡停止运行,因为还没有初始化。rcgQl =0x4c; /寄存器 Pstartrcg()2=()x80; /Pstoprcg03=0x4c; /BNRYrcg()4
48、=0x45; /TPSRrcg()c=()xcc; /RCRrcg()d=()xc0; /TCRrcg()c=()xc8; /DCR数据配置寄存器8位数据dmarcg0f=0x00; /IMR disable all interruptpage;/选择页1的寄存器rcg07=0x4d; /CCRRrcg()8=()x()0; /MAROrcg09=0x41; /MARIrcg()a=0x00; /MAR2rcg()b=()x80; /MAR3rcg()c=()x00; /MAR4 rcgpd=0x00; /MAR5rcg()c=()x()O; /MAR6 regpf=OxOO; /MAR7rc
49、g00=0x22; 选择页。寄存器,网卡执行命令。PSTART接收缓冲区的起始页的地址。PSTOP接收缓冲区的结束页地址。(该页不用于接收)BNRY指向最后一个已经读取的页(读指针) CURR当前的接收结束页地址。(写指针)网卡含有16K字节的RAM,地址为0x4000-()x7fff(指的是网卡上的存储地址, 而不是ISA总线的地址,是网卡工作用的存储器),每256个字节称为一页,共 有64页。页的地址就是地址的高8位,页地址为0x40-0x7f。这16k的ram的 一部分用来存放接收的数据包,一部分用来存储待发送的数据包。当然也可以给 用户使用。(例如把网卡设置成使用8K的ram,另外8K
50、的ram就可以用来给 单片机作为存储器,但我没有这样做,原因是操作网卡上的ram比较复杂) 在我的程序中使用0x40-0x4B为网卡的发送缓冲区,共12页,刚好可以 存储2个最大的以太网包。使用0x4cOx7f为网卡的接收缓冲区,共52页。因 此PSTART=0x4c,PSTOP=0x80()x8()为停止页,就是直到0x7f,是接收缓冲区, 不包括0x80)刚开始,网卡没有接收到任何数据包,所以,BNRY设置为指向 第一个接收缓冲区的页0x4c)这四个寄存器用于接收的设置。CURR是网卡写内存的指针。它指向当前正在写的页的下一页。那么初始化 它就应该指向0x4c+l=0x4d。网卡写完接收缓
51、冲区一页,就将这个页地址加一, CURR=CURR+1。这是网卡自动加的。当加到最后的空页(这里是0x80,PSTOP) 时,将CURR置为接收缓冲区的第一页(这里是0x4c, PSTART),也是网卡自 动完成的。当CURR=BNRY时,表示缓冲区全部被存满,数据没有被用户读走, 这时网卡将停止往内存写数据,新收到的数据包将被丢弃不要,而不覆盖旧的数 据。此时实际上出现了内存溢出。而BNRR要由用户来操作。用户从网卡读走一页数据,要将BNRY加一, 然后再写到BNRY寄存器。当BNRY加到最后的空页(0x80, PSTOP)时,同 样要将BNRY变成第一个接收页(PSTART, 0x4c)B
52、NRY=0x4c;CCRR和BNRY主要用来控制缓冲区的存取过程,保证能顺次写入和读 出)。当CURR=BNRY+1 (或当BNRY=0x7f,CURR=0x4c)时,网卡的接收缓冲区里没 有数据,表示没有收到数据包。用户通过这个判断知道没有包可以读。当上述 条件不成立时,表示接收到新的数据包。然后用户应该读取数据包,直到上述条 件成立时,表示所以数据包已经读完,此时停止读取数据包。-TPSR为发送页的起始页地址。初始化为指向第一个发送缓冲区的页,0x40。 -RCR接收配置寄存器,设置为使用接收缓冲区,仅接收自己的地址的数据 包(以及广播地址数据包)和多点播送地址包,小于64字节的包丢弃(这是协 议的规定,设置成接收是用于网络分析),校验错的数据包不接收。-TCR发送配置寄存器,启用crc自动生成和自动校验,工作在正常模式。-OCR数据配置寄存器,设置为使用F1F。缓存,普通模式,8位数据传输模 式,字节顺序为高位字节在前,低位字节在后(符合我们的习惯)(如杲用16 位的单片机,设置成16位的数据总线操作会更快,但80c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 患者教育心肌梗死 课件
- 危化品经营应急指南
- 2026榆林高新中学教师招聘笔试模拟试题及答案解析
- 2025年宿州职业技术学院单招职业适应性测试试题及答案解析
- 2026年福建宁德霞浦县2026年公开招聘新任教师204人笔试备考试题及答案解析
- 2026温州瑞安市安阳街道公开招聘禁毒社工1人笔试参考题库及答案解析
- 吉水县吉瑞农贸有限公司2026年面向社会公开招聘2名营业员考试参考试题及答案解析
- 2026年合肥国家实验室技术支撑岗位招聘(微纳加工工程师)考试参考试题及答案解析
- 2026年宁波北仑区春晓街道公开招聘编外人员2人考试备考题库及答案解析
- 2026黑龙江省农业投资集团有限公司总部及共享中心人员市场化选聘4人笔试参考题库及答案解析
- 泵房调试要有方案
- 大众蔚揽保养手册
- 磁力泵讲义课件-参考
- 旅行社运营实务电子课件 2.1 走进旅行社门市
- 乳腺良性肿瘤日间手术临床路径临床路径
- 城镇供热管网工程施工及验收规范标准
- GB/T 26480-2011阀门的检验和试验
- GB/T 228.2-2015金属材料拉伸试验第2部分:高温试验方法
- C++初中组及答案
- 中考语文专题复习专题一汉字读写课件
- 麻醉复苏室课件
评论
0/150
提交评论