单片机实现串口协议的网络化
网卡RAM区如图2所示,我们设置PSTART和PSTOP,就决定了接收区域在46和7F之间,剩下6页作为发送缓冲区,可以满足一次发送容量为1514byte的最大以太网数据包的要求。CURR初始值设为47,BNRY初始值设为46。当收到新的数据包时(例如3页),网卡将它们依次放到47、48和49页,CURR自动指向4A页。当我们读完这3页的数据包后,要将BNRY改为49,以通知网卡数据包已经读完了。
网卡芯片接收到以太网数据包后,存在CURR指向的页面中。一个数据包可以占据一页,也可以占据多页。在接收包的包头里,保存有该包的信息。包头格式如表1:
读完这个包头,我们就能知道本包的接收状态,包长度,以及下一个包的位置。在接收循环中,检查中断状态寄存器ISR状态,发现有新包来,先读取包头信息,接着按照包头指示读取全包,然后改写BNRY,再接着读下一个包,这样循环,直到达到CURR位置。注意,一个包有可能占据接收缓冲区的首、尾页面,此时须小心读取。
发送数据包比较简单,将准备好的数据用DMA传到发送缓冲区,然后设置发送长度到TBCR1和TBCR0中,再设置传输开始页面,即令TPSR=0x40,最后,使CR=0x26,就开始传送了。
传送完成后要清掉中断状态寄存器ISR的发送完成标志。值得注意的是,发送包的包长度不能小于以太网规定的60byte,否则网卡不会将其发出。
3 TCP/IP协议在单片机上的软件设计
3.1 TCPIP协议栈和链路层格式
Internet上使用的是TCP/IP协议簇,由下至上包含四层:数据链路层、网络层(IP)、传输层(TCP)和应用层。我们在单片机上能实现的是数据链路层的功能,上层协议鉴于单片机有限的资源,只能实现部分功能。TCP/IP协议栈如表2:
数据链路层处于协议栈的最低层,传输以太网的物理传输帧,其帧格式如表3:
数据链路层是所有TCP/IP包的基础,所有它上层的包都被封装到链路层帧的数据段中。链路层就是MAC对MAC的通信。
3.2 PING命令在单片机上的实现
PING是网络层(IP层)的命令,网络层就是IP对IP之间的通信。主机对一个目标IP地址发出状态请求,后者发出回应,这样,就可以用来检查两者之间的线路是否畅通。这里涉及到两个网络层协议:
ARP和ICMP。首先,网络中要知道目标IP的MAC地址,才能发送数据。为了获取该地址,我们向整个网络发送一个ARP广播包,询问该IP对应的MAC地址,然后目标IP应答,我们就从应答信息中得到MAC地址。其次,发送一个ICMP包,请求目标IP状态,目标IP回应,就完成网络连接测试。在我们的实验中,发出PING命令的是网络中的PC主机,接收信号并产生响应的是我们的单片机系统。我们假定单片机系统控制的网卡的IP为192.168.0.176。
第一步,实现ARP协议。ARP协议是AddressResolutionProtocol(地址解析协议)的缩写,它的作用是将IP地址转换成物理地址(就是常说的MAC地址)。协议ARP的分组格式如表4:
当单片机主处理器处理网卡收到的ARP广播请求时,如果发现是请求“192.168.0.176”的MAC地址,于是按要求打一个ARP应答包,将自己的MAC地址放到应答包中,发送回网络就完成了PING的第一步。注意,要在应答包尾加18byte的补丁,否则应答包长度不满足最小60byte的要求。
第二步,实现ICMP协议。ICMP是“InternetControlMessageProtocol”(Internet控制消息协议)的缩写。用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP是封装在IP协议中,所以有IP包头。
ICMP协议结构如表5:
网络主机在收到ARP的应答包后,取出其中的MAC地址,然后向该MAC发出ICMP请求。主处理器处理该请求时,将请求包的标识和序列号对应填入ICMP应答包,其它部分按要求填写。校验和的计算有成熟的公式,容易计算,只要先把校验和部分置0,将包头的计算结果再填入校验和就可以了。
最后将该ICMP应答包送入网络,这样就完成了PING的全过程。此时,发出PING命令的网络主机就会得到“Replyfrom192.168.0.176:bytes=32time10msTTL=128”的信息。
4 串行数据与网络的数据交换的讨论
网络层之上,有两种传输层协议:TCP(Trans2missionControlProtocol)和UDP(UserDatagramProtocol)。对于数据传输要求高的场合,需要使用TCP协议作为双方通信方式,但此种方式较为复杂。而对于一些实时信号及其反向控制信号的传递,实现UDP协议就可以满足要求了。表6是UDP协议结构:
当原始数据从串口送到到主处理器后,主处理器将其打包成UDP报文,发送到网
- 软件化和网络化的基于Linux的雷达终端系统(10-19)
- 工业控制系统网络化的浪潮加速物联网的实现(12-21)
- C2采用1个CPU+3个DSP架构实现网络化多媒体平(12-21)
- 基于现场总线的开放式网络化数控系统的设计(12-20)
- 飞行控制总线数据网络化处理软件设计(10-29)
- 基于嵌入式技术的网络化DNC系统研究(04-09)