51单片机实现控制网卡芯片进行数据传输的设计

发布者:静雅心灵最新更新时间:2023-10-10 来源: elecfans关键字:51单片机  网卡芯片  数据传输 手机看文章 扫描二维码
随时随地手机看文章

在网络技术应用日益广泛的今天,网络传输是最经济有效的数据传输方式。如何利用廉价的51单片机来控制网卡芯片进行数据传输,加载TCP/IP协议连接到互联网,实现网络通信成了众多设计者的目标。但由于指令及资源的限制,实施过程会有许多困难。我们在设计方案中舍弃了耗费资源的高级协议,采用发送小数据包的方式以避免分段,来简化TCP协议和UDP协议,实现互联接入。


硬件设计与实现

系统的硬件结构框图如图1所示。本系统的微控制器是Winbond公司的78E58,网络接口芯片是与NE2000系列兼容的ReaLTEk公司的RTL8019AS。RTL8019AS内置了10BASE-T收发器,外接一个隔离LPF滤波器,经RJ-45接口输出。外部RAM是62256,24C02是I2C总线的 EEPROM。

51单片机实现控制网卡芯片进行数据传输的设计

图1 嵌入式协议转换硬件框图

系统的软件设计与实现

为适应上网的需求,系统软件设计主要包括两部分内容:一是要执行对RTL8019AS等的控制功能,二是要执行与连接Internet相关的功能,实现TCP/IP协议。本文着重介绍第二部分,主程序采用C51语言编写。


RTL8019AS初始化

要将嵌入式系统接入以太网,首先要设置RTL8019AS的工作方式和工作状态,分配收发数据的缓冲区,通过对地址及数据口的读写来完成以太网帧的接收与发送。然后设置RTL8019AS的工作参数,亦即设置内部控制寄存器。对RTL8019AS的工作参数进行设置完毕后,进入正常工作状态,接下来就读写RTL8019AS的RAM以完成数据包的接收和发送。由于篇幅有限,这里就不再详述。


TCP/IP模型

TCP/IP协议是一套把Internet上的各种系统互连起来的协议族,保证Internet上数据的准确快速传输。TCP/IP通常采用一种简化的四层模型:应用层、传输层、网络层、链路层。

本系统中,应用层传递来自以太网和数据终端的数据,并对数据报作打包拆包处理。传输层采用传输控制协议TCP或用户数据协议UDP。网络层实现IP协议,还要实现能报告数据传输差错等情况的ICMP协议。链路层部分由RTL8019AS完成,链路层由控制同一物理网络上的不同机器间数据传送的底层协议组成。


在单片机里只实现与需要有关的部分,而不使用的协议则一概不支持。单片机应用的TCP/IP协议大多是为了完成数据采集和数据传输,而不需要网页浏览、文件传输这些功能。


ARP协议(地址解析协议

以太网是TCP/IP协议主要采用的局域网技术,是系统接入Internet的基础。ARP本质是完成网络地址到以太网物理地址的动态映射。UNIX系统的ARP协议支持以太网、令牌环等网络,但我们的单片机系统里只支持以太网。


IP协议(网际协议)

IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。就对某些协议而言,IP包最大可以为65K,可以分段传输,而在单片机里根本无法容纳如此大的数据包,因此一般是不支持分段的。我们的设计中采用发送小数据包的方式,以避免分段。


TCP协议(传输控制协议)

TCP数据封装在一个IP数据报中,并具有自己的TCP首部, TCP协议定义十分复杂,鉴于51单片机的片内资源十分有限,本系统对TCP协议进行了一定的简化处理。标准的TCP协议使用慢启动的滑动窗口机制,如果只使用单个窗口,就变成了一种简单确认的处理方法。即只需对单个数据报发送和确认,节约了系统资源,也使维护更加方便。


编程实现TCP协议的另一个难点在于TCP建立连接和终止连接的具体过程的实现。TCP协议是一个面向连接的协议,连接的双方无论是哪一方向另一方发送数据,都必须先通过“三次握手”过程在双方之间建立一条连接,和通过“四次握手”终止连接。


连接建立后,TCP就可以发送数据块,称为数据段。当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。另外,TCP将保持它首部和数据的检验和。


系统主应用程序的实现

系统初始化后,进入主程序循环的两部分:一是对接收到的以太网数据帧进行解包,供应用程序使用,一是对发送的数据进行封装并发送,使采用TCP/IP协议的以太网内的所有计算机都能收到此数据帧。图2是系统的主应用程序的流程图。

51单片机实现控制网卡芯片进行数据传输的设计

图3 系统的主应用程序的流程图

单片机实现TCP/IP协议的难点

51单片机的程序空间、可用的内存RAM、运算速度、指令集等原因,在UNIX或Windows上实现的TCP/IP协议的源代码并不能够直接移植到8位的单片机上。在51单片机上编写代码会受许多限制,特别是实现TCP/IP协议这样关系复杂的程序,我们必须根据实际情况尽可能挖掘51单片机的性能。综合来说,单片机实现与UNIX实现TCP/IP有如下区别:

(1)操作系统:Windows或UNIX都是多任务操作系统,这使得代码编写简单化,在单片机只能是单任务系统,代码结构为顺序执行+硬件中断的方式,无法并发执行。

(2)内存分配:Windows或UNIX的内存分配是动态的。而一般单片机只有外接的一块32K字节的RAM,并同时被各个协议使用。一个最大的以太网数据包有1.5K字节,分配一包的缓冲区就要1.5K字节。为此,我们分配一个256×6=1536个字节的固定的RAM来存放收到的以太网数据包。收到一包就处理一包。

(3)指针:在PC里所有程序都必须先放在RAM里才能运行,所以它的指针都指向RAM。而单片机的结构和PC的结构有很大差别,指针类型很多,各指针运算的速度也不一样,特别是“一般指针”运算很慢,还会占用很多程序空间。UNIX实现TCP/IP的源代码中,用得最多的就是指针,而在单片机里一般要求少用指针,或使用特定类型的指针。对使用UNIX的源代码需要作很多的改动。

(4)参数传递:在UNIX实现的TCP/IP源代码中,一般有很多的参数传递,而在单片机里允许传递的参数是有限的(因为受到内部RAM的限制),同时参数传递的过程要浪费程序代码空间,也降低单片机执行速度。所以在单片机的实现里,一般不要做太多的参数传递,而多使用公共的全局变量来实现调用的过程。

(5)硬件接口:在UNIX或Windows里,对网卡驱动无一例外都是采用中断方式,因为PC的处理速度快,一次中断的处理时间也很短,不会影响系统内的其它中断。而在单片机的应用中,大部分的方案都是查询式的。PC的NE2000的网卡,一般都是用16位DMA的方式,而在单片机里却只能用8位DMA方式。这也使UNIX对网卡驱动的代码不能直接移植。


结语

本文设计的嵌入式网络接入方案,采用廉价的8位51单片机实现了简化TCP协议和UDP协议,并支持主动和被动连接、跨越网关,实现互联网接入,在被控设备与上位控制机之间提供了一条透明的传输通道,用户不需对原有串口设备或其他数字设备做任何修改,就可享受到网络的好处。目前,本文的系统已被成功使用在网络化的数据采集器中。


关键字:51单片机  网卡芯片  数据传输 引用地址:51单片机实现控制网卡芯片进行数据传输的设计

上一篇:51单片机驱动LCD1602程序详解
下一篇:AT89S51单片机发光二极管多功能闪烁的设计

推荐阅读最新更新时间:2024-11-12 10:22

第二课:8051单片机开发之程序下载
上回我们分析了单片机的最小硬件系统,那么在今天我们一起来学习一下单片机的程序下载流程。那么我们先看个单片机程序下载电路图,如下图所示: 图1 单片机最小系统完整电路图 图1 给出的是我们常用的一个单片机最小系统电路,比我们前面讲的单片机最小系统多了两个基本电路,那就是程序下载接口和P0口多了一排1K的上拉电阻(这排电阻有什么用,后面我们再分析)。 从图上我们看到,程序下载接口为一个10针的排针接口,这个接口把单片机的相关下载引脚引出来,是国际标准的统一接口,为了配合下载线接口而设置的(当然我们也可以随便用几个排针将下载的接口引出,但是我强烈的建议不要那样做,我们要走那标准的道路)。这个接口的实物图如下:
[单片机]
51单片机汇编学习和系统除错步骤
如果单片机系统出现问题,检修流程如下: 一、对硬件电路的检查 1、检查电源(40脚) 2、检查振荡(18、19脚) 3、检查地(20脚) 3、检查复位电路(9脚) 4、检查中断允许(31脚) 5、然后再检查是否有信号 6、信号是否正确 二、软件编写规则 1、只被调用一次的不要写成子程序 2、不比自己定义太多的ORG地址入口,只需定义两个,一个0000H,还有一个主程序入口, 3、中断程序需定义自己的程序入口地址, 中断源有INT0,定时器T0,INT1,定时器T1,串行口中断,共5种中断, 入口地址分别为,INT0 = 0003H, 定时器T0 = 000BH, INT1
[单片机]
PCF8591(AD-DA)芯片-51单片机程序
注: PCF8591 是8位AD-DA芯片 转换数据0---5 对应 0--255 通信协议IIC 模拟量输出值和电压的关系: 输出电压=(参考电压-基点电位)/255 //以下是源码如果在网页上显示格式错乱可以从这里下载: http://www.51hei.com/f/8591c.rar //12MHZ 晶振 #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int #include IIC.h //i2c库函数 code uchar seg ={0x2
[单片机]
PCF8591(AD-DA)<font color='red'>芯片</font>-<font color='red'>51单片机</font>程序
51单片机中断编写的4x4键盘程序
应用查询扫描编写键盘程序,由于要给按键去抖动,程序变得比较复杂和冗长(详见2013年9月29日博文《MSP430和AT89C51单片机4x4键盘C程序》),如果用中断编写,设置中断响应在下降沿时执行中断,则程序编写不用去抖动判断,所以相比较要简单很多!下面用汇编和C语言两种方式编写4X4键盘程序! 一、汇编程序 ORG 0000H LJMP MAIN ORG 0003h Ljmp ZD0 ORG 000Bh LJMP TZD0 ORG 0013h Ljmp ZD1 ORG 001Bh LJMP TZD1
[单片机]
用<font color='red'>51单片机</font>中断编写的4x4键盘程序
51单片机——DS18B20
DS18B20——温度传感器,单片机可以通过 1-Wire 和 DS18B20 进行通 信,最终将温度读出。1-Wire 总线的硬件接口很简单,只需要把 18B20 的数据引脚和单片 机的一个 IO 口接上就可以通信。最高12为的温度存储值,补码形式存储。 2字节,LSB低字节,MSB高字节,-55~125 1、初始化 检测存在脉冲:总线上存在DS18B20,总线会根据时序要求返回一个低电平脉冲。单片机要拉低这个引脚,持续大概 480us到960us之间 的时间即可,我们的程序中持续了 500us。然后,单片机释放总线,就是给高电平,DS18B20 等待大概 15 到 60us 后,会主动拉低这个引脚大概是 60 到 240u
[单片机]
<font color='red'>51单片机</font>——DS18B20
51单片机 DS18B20温度传感器的使用
重点 对于单片机来说,知道I/O口以及他们的工作方式,就很容易能编写出代码来控制他们按照自己的意愿来行动。 对于温度传感器来说,最重要的是要根据时序来写代码,按照时序来写代码就能很轻松的实现功能。对于我个人而言,在看到普中科技的官方文档的长篇解释的时候,我内心是有一种抵触感去看它的,它的长度给我一种很难和很麻烦的感觉。但事实上并没有我想的那么难,如果不想看这么长的文字,建议可以去B站看视频,里面讲的还是挺详细的。 工作时序 一、初始化 在这里要对温度传感器的个数和好坏进行检测,因为开发板只有一个温度传感器,所以就只检测温度传感器是否是好的就可以了。 二、写数据 三、读数据 这里添加一个数据转换的原理: 步骤
[单片机]
51单片机驱动1602程序
sbit LCD_RS=P3^4; // 定义IO口,具体1602的读控制线 sbit LCD_RW=P3^3; // 定义IO口,具体1602的写控制线 sbit LCD_EN=P2^0; // 定义IO口,具体1602的使能控制线 sbit Light=P3^7; // 定义IO口,具体1602的背光控制线(0:开通,1关闭) sbit D0 = P1^0; // 定义IO口,P1.0数据口1602LCD的D0口 sbit D1 = P1^1; // 定义IO口,P1.1数据口1602LCD的D1口 sbit D2 = P1^2; // 定义IO口,P1.2数据
[单片机]
基于51单片机的电压表-数码管显示
一.硬件方案 本设计基于STC89C52单片机的一种电压测量电路,该电路采用ADC0832A/D转换芯片,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单, 可以测量0~9V的电压值,并在四位LED数码管上显示电压值。如图: 二.设计功能 (1)ADC0832模数转换,0-9V电压测量; (2)4位数码管显示测量电压值; (3)10K可调电阻模拟电压测试; (4)当提供电源电源为精准的5V电源时,精度为正负0.02V; 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图: (2)Protues仿真图如下: 四.软件设计 (1)程序流程图 (2)主程序源码 /**************
[单片机]
基于<font color='red'>51单片机</font>的电压表-数码管显示
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved