1、CHAPTER 8嵌入式系统网络接嵌入式系统网络接口口2022-1-192内容提要内容提要以太网接口以太网接口CAN总线接口总线接口2022-1-193内容提要内容提要以太网接口以太网接口CAN总线接口总线接口2022-1-194以太网接口o 嵌入式系统通常使用的以太网协议是IEEE802.3标准。从硬件的角度看,802.3模型层间结构如下图所示。o以太网接口电路主要由媒质接入控制MAC控制器和物理层接口(Physical Layer,PHY)两大部分构成。2022-1-195以太网接口o 1传输编码n在802.3版本的标准中,没有采用直接的二进制编码,而是采用曼彻斯特编码(Mancheste
2、r Encoding)或者差分曼彻斯特编码(Differential Manchester Encoding)2022-1-196以太网接口o 2 802.3Mac层的帧nPR:同步位,用于收发双方的时钟同步,同时也指明了传输的速率,是56位的的二进制数101010101010,最后2位是10。nSD:分隔位,表示下面跟着的是真正的数据而不是同步时钟,为8位的10101011nDA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给哪个网卡。如果为FFFFFFFFFFFF,则是广播地址。广播地址的数据可以被任何网卡接收到。nSA:源地址,48位,表明该帧的数据是哪个网卡发的,
3、即发送端的网卡地址,同样是6个字节。2022-1-197以太网接口o 2 802.3Mac层的帧nTYPE:类型字段,表明该帧的数据是什么类型的数据,不同协议的类型字段不同。如:0800H表示数据为IP包,0806H表示数据为ARP包,8137H为IPX/SPX包。小于0600H的值是用于IEEE802的,表示数据包的长度。nDATA:数据段,该段数据不能超过1500B。nPAD:填充位。由于以太网帧传输的数据包最小不能小于60B,除去DA、SA、TYPE的14B,还必须传输46B的数据,当数据段的数据不足46B时,后面通常是补0。nFCS:32位数据校验位。32位的CRC校验,该校验由网卡自
4、动计算,自动生成,自动校验,自动在数据段后面填入。不需要软件管理。通常,PR、SD、PAD、FCS都是网卡自动产生的,剩下的DA、SA、TYPE、DATA这4个段的内容是由上层的软件控制的。2022-1-198以太网接口o 3以太网数据传输的特点n所有数据位的传输由低位开始,传输的位流是用曼彻斯特编码。n以太网是基于冲突检测的总线复用方法,冲突退避算法是由硬件自动执行的。n以太网传输的数据段的长度,DA+SA+TYPE+DATA+PAD最小为60B,最大为1514B。n通常的以太网卡可以接收3种地址的数据,一个是广播地址,一个是多播地址(或者叫组播地址,在嵌入式系统中很少用到),一个是它自己的
5、地址。但有时,用于网络分析和监控,网卡也可以设置为接收任何数据包。n任何两个网卡的物理地址都是不一样的,是世界上唯一的,网卡地址由专门机构分配。不同厂家使用不同地址段,同一厂家的任何两个网卡的地址也是唯一的。根据网卡的地址段(网卡地址的前3个字节)可以知道网卡的生产厂家。2022-1-199嵌入式以太网接口的实现方法嵌入式以太网接口的实现方法o 在嵌入式系统中增加以太网接口,通常有如下两种方法实现:n(1)嵌入式处理器网卡芯片o 这种方法只要把以太网芯片连接到嵌入式处理器的总线上即可。此方法通用性强,对嵌入式处理器没有特殊要求,不受处理器的限制,但是,嵌入式处理器和网络数据交换通过外部总线(通
6、常是并行总线)交换数据,速度慢,可靠性不高,电路板走线复杂。目前常见的以太网接口芯片,如CS8900、RTL8019/8029/8039、DM9008及DWL650无线网卡等。n(2)带有以太网接口的嵌入式处理器o 带有以太网接口的嵌入式处理器通常是面向网络应用而设计的,要求嵌入式处理器有通用的网络接口(比如:MII接口),处理器和网络数据交换通过内部总线,速度快。2022-1-1910在嵌入式系统中主要处理的以太网协议在嵌入式系统中主要处理的以太网协议o TCP/IP是一个分层的协议,包含有应用层、传输层、网络层、数据链路层、物理层等。每一层实现一个明确的功能,对应一个或者几个传输协议。每层
7、相对于它的下层都作为一个独立的数据包来实现。典型的分层和每层上的协议如表所示。2022-1-1911在嵌入式系统中主要处理的以太网协议在嵌入式系统中主要处理的以太网协议1ARP(Address Resolation Protocol,地址解析协议)n网络层用32位的地址来标识不同的主机(即IP地址),而链路层使用48位的物理(MAC)地址来标识不同的以太网或令牌环网接口。只知道目的主机的IP地址并不能发送数据帧给它,必须知道目的主机网络接口的物理地址才能发送数据帧。nARP的功能就是实现从IP地址到对应物理地址的转换。源主机发送一份包含目的主机IP地址的ARP请求数据帧给网上的每个主机,称作A
8、RP广播,目的主机的ARP收到这份广播报文后,识别出这是发送端在询问它的IP地址,于是发送一个包含目的主机IP地址及对应的物理地址的ARP回答给源主机。n为了加快ARP协议解析的数据,每台主机上都有一个ARP cache存放最近的IP地址到硬件地址之间的映射记录。其中每一项的生存时间(一般为20分钟),这样当在ARP的生存时间之内连续进行ARP解析的时候,不需要反复发送ARP请求了。2022-1-1912在嵌入式系统中主要处理的以太网协议在嵌入式系统中主要处理的以太网协议2 ICMP(Internet Control Messages Protocol,网络控制报文协议)nICMP是IP层的附
9、属协议,IP层用它来与其他主机或路由器交换错误报文和其他重要控制信息。ICMP报文是在IP数据包内部被传输的。在Linux或者Windows中,两个常用的网络诊断工具ping和traceroute(Windows下是Tracert),其实就是ICMP协议。 3IP (Internet Protocol,网际协议)nIP工作在网络层,是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据包格式传输(IP封装在IP数据包中)。IP数据包最长可达65535字节,其中报头占32位。还包含各32位的源IP地址和32位的目的IP地址。nTTL(time-to-liv
10、e,生存时间字段)指定了IP数据包的生存时间(数据包可以经过的最多路由器数)。TTL的初始值由源主机设置,一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据包就被丢弃,并发送ICMP报文通知源主机重发。nIP提供不可靠、无连接的数据包传送服务,高效、灵活。2022-1-1913在嵌入式系统中主要处理的以太网协议在嵌入式系统中主要处理的以太网协议3IP (Internet Protocol,网际协议)n不可靠(unreliable)的意思是它不能保证IP数据包能成功地到达目的地。如果发生某种错误,IP有一个简单的错误处理算法:丢弃该数据包,然后发送ICMP消息报给信源端。任何要
11、求的可靠性必须由上层来提供(如TCP)。n无连接(connectionless )的意思是IP并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP数据包可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据包(先A后B),每个数据包都是独立地进行路由选择,可能选择不同路线,B可能在A达之前先到达。nIP的路由选择:源主机 IP接收本地TCP、UDP、ICMP、GMP的数据,生成IP数据包,如果目的主机与源主机在同一个共享网络上,那么IP数据包就直接送到目的主机上。否则就把数据包发往一默认的路由器上,由路由器来转发该数据包。最终经过数次转发到达目的主机。IP路由选择是
12、逐跳(hop-by-hop)进行的。所有的IP路由选择只为数据包传输提供下一站路由器的IP地址。2022-1-1914在嵌入式系统中主要处理的以太网协议在嵌入式系统中主要处理的以太网协议4 TCP(Transfer Control Protocol,传输控制协议)nTCP协议是一个面向连接的可靠的传输层协议。TCP为两台主机提供高可靠性的端到端数据通信。它所做的工作包括:o 发送方把应用程序交给它的数据分成合适的小块,并添加附加信息(TCP头),包括顺序号,源、目的端口,控制、纠错信息等字段,称为TCP数据包。并将TCP数据包交给下面的网络层处理。o 接受方确认接收到的TCP数据包,重组并将数
13、据送往高层。5UDP(User Datagram Protocol,用户数据包协议)nUDP协议是一种无连接不可靠的传输层协议。它只是把应用程序传来的数据加上UDP头(包括端口号,段长等字段),作为UDP数据包发送出去,但是并不保证它们能到达目的地。可靠性由应用层来提供。n因为协议开销少,和TCP协议相比,UDP更适用于应用在低端的嵌入式领域中。很多场合如网络管理SNMP,域名解析DNS,简单文件传输协议TFTP,大都使用UDP协议。2022-1-1915在嵌入式系统中主要处理的以太网协议在嵌入式系统中主要处理的以太网协议6端口nTCP和UDP采用16位的端口号来识别上层的TCP用户,即上层应
14、用协议,如FTP和TELNET等。常见的TCP/IP服务都用众所周知的1255之间的端口号。例如FTP服务的TCP端口号都是21,Telnet服务的TCP端口号都是23。TFTP(简单文件传输协议)服务的UDP端口号都是69。2561023之间的端口号通常都是提供一些特定的UNIX服务。TCP/IP临时端口分配10245 000之间的端口号。2022-1-1916网络编程接口网络编程接口o BSD套接字(BSD Sockets)是使用的最广泛的网络程序编程方法,主要用于应用程序的编写,用于网络上主机与主机之间的相互通信。o 很多操作系统都支持BSD套接字编程。例如,UNIX、Linux、VxW
15、orks。Windows的Winsock基本上是来自BSD Sockets。o 套接字(Sockets)分为Stream Sockets和Data Sockets。Stream Sockets是可靠性的双向数据传输,对应使用TCP协议传输数据;Data Sockets是不可靠连接,对应使用UDP协议传输数。2022-1-1917网络编程接口网络编程接口o 下面给出一个使用套接字接口的UDP通信的流程。o UDP服务器端和一个UDP客户端通信的程序过程:n(1)创建一个Socket:sFd =socket(AF_INET,SOCK_DGRAM,0)n(2)把Socket和本机的IP,UDP口绑定
16、:Bind(sFd,(struct sockaddr*)& serverAddr,sockAddrSize)n(3)循环等待,接收(recvfrom)或者发送(sendto)信息。n(4)关闭Socket,通信终止:close(sFd)2022-1-1918以太网的物理层接口及编程以太网的物理层接口及编程o 大多数ARM都内嵌一个以太网控制器,支持媒体独立接口(Media Independent Interface MII)和带缓冲DMA接口(Buffered DMA Interface,BDI),可在半双工或全双工模式下提供10M/100Mbps的以太网接入。在半双工模式下,控制器支持CSM
17、A/CD协议;在全双工模式下,支持IEEE802.3MAC控制层协议。ARM内部虽然包含了以太网MAC控制,但并未提供物理层接口,因此,需外接一片物理层芯片以提供以太网的接入通道。o 常用的单口10M/100Mbps高速以太网物理层接口器件均提供MII接口和传统7线制网络接口,可方便地与ARM接口。以太网物理层接口器件主要功能一般包括:物理编码子层、物理媒体附件、双绞线物理媒体子层、10BASE-TX编码解码器和双绞线媒体访问单元等。如CS8900、RTL8019/8029/8039等。2022-1-1919以太网的物理层接口及编程以太网的物理层接口及编程o CS8900A是Cirrus Lo
18、gic公司生产的16位以太网控制器,芯片内嵌片内RAM10BASE-T收发滤波器,直接ISA总线接口。该芯片的物理层接口、数据传输模式和工作模式等都能根据需要而动态调整,通过内部寄存器的设置来适应不同的应用环境。2022-1-1920以太网的物理层接口及编程以太网的物理层接口及编程oCS8900A工作原理nCS8900A有两种工作模式: MEMORY模式和I/O模式。MEMORY 模式下,CS8900A的内部寄存器和帧缓冲区映射到主机内存中连续的4KB的块中,主机通过这个块直接访问CS8900A的内部寄存器和帧缓冲区。I/O 模式下,对任何寄存器操作均要通过I/O端口写入或读出。I/O 模式在
19、硬件上实现比较方便,是芯片的默认模式。此模式下,PacketPage存储器被映射到CPU的8个16位的I/O端口上。nCS8900A在收到由主机发来的数据报后,侦听网络线路。如果线路忙,它就等到线路空闲为止,否则,立即发送该数据帧。在发送过程中,首先它添加以太网帧头(包括前导字段和帧开始标志),然后生成CRC校验码,最后将此数据帧发送到以太网上。n在接收过程中,它将从以太网收到的数据帧在经过解码、去帧头和地址检验等步骤后缓存在片内。在CRC校验通过后,它会根据初始化配置情况,通知主机CS8900A收到了数据帧,最后用某种传输模式(FO模式、Memory模式、DMA模式)传到主机存储区中。202
20、2-1-1921内容提要内容提要以太网接口以太网接口CAN总线接口总线接口2022-1-1922CAN总线概述总线概述o CAN(Controller Area Network,控制器局域网)是德国Bosch公司于1983年为汽车应用而开发的,它是一种现场总线(FieldBus),能有效支持分布式控制和实时控制的串行通信网络。o 一个理想的由CAN总线构成的单一网络中可以挂接任意多个节点,实际应用中节点数目受网络硬件的电气特性所限制。例如:当使用Philips P82C250作为CAN收发器时,同一网络中允许挂接110个节点。CAN可提供1 Mb/s的数据传输速率。CAN总线是一种多主方式的串
21、行通信总线。基本设计规范要求有高的位速率,高抗电磁干扰性,并可以检测出产生的任何错误。当信号传输距离达到10Km时CAN总线仍可提供高达50Kb/s的数据传输速率。CAN总线具有很高的实时性能,已经在汽车工业、航空工业、工业控制、安全防护等领域中得到了广泛应用。2022-1-1923CAN总线概述总线概述oCAN总线的通信介质可采用双绞线、同轴电缆和光导纤维,最常用的是双绞线。通信距离与波特率有关,最大通信距离可达10km,最大通信波特率可达1Mbps。CAN总线仲裁采用11位标识和非破坏性位仲裁总线结构机制,可以确定数据块的优先级,保证在网络节点冲突时最高优先级节点不需要冲突等待。CAN总线
22、采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。CAN总线上任意节点可在任意时刻主动向网络上其他节点发送信息而不分主次,因此可在各节点之间实现自由通信。oCAN总线信号使用差分电压传送,两条信号线被称为CAN_H和CAN_L,静态时均是2.5V左右,此时状态表示为逻辑1,也可以叫做“隐性”。采用CAN_H比CAN_L高表示逻辑0,称为“显性”,通常电压值为CAN_H=3.5V和CAN_L=1.5V。当“显性”位和“隐性”位同时发送的时候,最后总线数值将为“显性”。oCAN总线的一个位时间可以分成四个部分:同步段,传播时间段,相位缓冲段1和相位缓冲段2。每段的时间
23、份额的数目都是可以通过CAN总线控制器编程控制,而时间份额的大小tq由系统时钟tsys和波特率预分频值BRP决定:tq=BRP/tsys。2022-1-1924在嵌入式处理器上扩展在嵌入式处理器上扩展CAN总线接口总线接口o一些面向工业控制的嵌入式处理器本身就集成了一个或者多个CAN总线控制器。例如:韩国现代公司的hms30c7202(ARM720T内核)带有两个CAN总线控制器; Phillips公司的LPC2194和LPC2294(ARM7TDMI内核)带有4个CAN总线控制器。CAN总线控制器主要是完成时序逻辑转换等工作,要在电气特性上满足CAN总线标准,还需要一个CAN总线的物理层芯片
24、,用它来实现TTL电平到CAN总线电平特性的转换,即CAN收发器。o实际上,多数嵌入式处理器都不带CAN总线控制器。通常的解决方案是在嵌入式处理器的外部总线上扩展CAN总线接口芯片,例如:Phillips公司的SJA1000CAN总线接口芯片,Microchip公司的MCP251x系列(MCP2510和MCP2515)CAN总线接口芯片,这两种芯片都支持CAN2.0B标准。SJA 1000的总线采用的是地址线和数据线复用的方式,多数嵌入式处理器采用SJA 1000扩展CAN总线较为复杂。2022-1-1925在嵌入式处理器上扩展在嵌入式处理器上扩展CAN总线接口总线接口oMCP2510是由Mi
25、crochip公司生产的CAN协议控制器,完全支持CAN总线V2. OA/B技术规范。08字节的有效数据长度,支持远程帧;最大1Mb/s的可编程波特率;两个支持过滤器Filter,Mask)的接收缓冲区,三个发送缓冲区;支持回环(Loop Back)模式,便于测试;SPI高速串行总线,最大5MHz;3V到5.5V供电。oMCP2510主要由CAN协议引擎,用来为器件及其运行进行配置的控制逻辑,SRAM寄存器和SPI协议模块3部分组成。MCP2510支持CANT2、CAN2.0A、主动和被动CAN2.0B等版本的协议,能够发送和接收标准和扩展报文,还同时具备验收过滤以及报文管理功能。MCP251
26、0包含三个发送缓冲器和两个接收缓冲器,减少了处理器(CPU)的管理负担。CPU的通信是通过行业标准串行外设接口(SPI)来实现的,其数据传输速率高达5Mbps。oCPU通过SPI接口与器件进行通信。通过使用标准SPI读写命令对寄存器进行所有读写操作。器件上有一个多用途中断引脚以及各接收缓冲器专用的中断引脚,可用于指示有效报文是否被接收和载入各接收缓冲器。是否使用专用中断引脚由用户决定,若不使用,也可用通用中断引脚和状态寄存器(通过SPI接口访问)确定有效报文是否已被接收。2022-1-1926MCP2510 CAN控制器控制器o 1CAN协议引擎nCAN协议引擎的功能是处理所有总线上的报文发送
27、和接收。报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中。利用控制寄存器位、通过SPI接口或使用发送使能引脚均可启动发送操作。通过读取相应的寄存器可以检查通信状态和错误。任何在CAN总线上侦测到的报文都会进行错误检测,然后与用户定义的滤波器进行匹配,以确定是否将其转移到两个接收缓冲器之一中。nCAN协议引擎的核心是有限状态机(FSM)。该状态机逐位检查报文,当各个报文帧发生数据字段的发送和接收时,状态机改变状态。FSM确保了报文接收、总线仲裁、报文发送以及错误信号发生等操作过程依据CAN总线协议进行。总线上报文的自动重发送也由FSM处理。2022-1-1927MCP2510 CAN控
28、制器控制器o 2CAN报文帧nMCP2510支持CAN2.0B技术规范中所定义的标准数据帧、扩展数据帧以及远程帧(标准和扩展)。o 3寄存器映射表nMCP2510寄存器映射表如表所示。通过使用行(低4位)列(高4位)值可对映射表中的寄存器地址进行确定。寄存器的地址排列优化了寄存器数据的顺序读写。一些特定控制和状态寄存器允许使用SPI位修改命令进行单独位的设定。o 4SPI接口nMCP2510可以与许多微控制器的串行外设接口(SPI)直接相连。外部数据和命令通过SI引脚传送到器件中,而数据在SCK时钟信号的上升沿传送进去。MCP2510在SCK下降沿通过SO引脚发送。2022-1-1928MCP
29、2510 CAN控制器控制器o5报文发送nCAN报文发送函数为: void MCP2510_TX(int TxBuf,int IdType,unsigned intid, int DataLen,Char*data)nMCP2510采用三个发送缓冲器。通过TxBuf参数指定发送到哪个缓冲器(TXBUF0、TXBUF1或TXBUF2)。IdType决定发送报文帧的类型,STAN-DID表示标准数据帧,EXTID表示扩展数据帧。Id为帧ID,DataLen为待发送数据长度,必须小于等于8,data为待发送数据内容。o6报文接收nCAN报文接收函数为:nvoid MCP2510_RX(int RxB
30、uf,int * IdType,unsigned int * id, int * DataLen,char * data)nMCP2510具有两个全文接收缓冲器。通过RxBuf参数指定从哪个缓冲器接收(RX-BUF0或RXBUF1)。接收后的报文帧的类型、帧ID,数据长度以及数据内容分别保存在Id-Type、id、DataLen和data中。2022-1-1929S3C2410A与与MCP2510的的CAN通信接口电路通信接口电路o 1MCP2510 CAN通信接口电路n大多数嵌入式处理器都有SPI总线控制器,MCP2510可以3V到5.5V供电,能够直接和3.3V I/O口的嵌入式处理器连接
31、,电路结构形式如图所示。2022-1-1930S3C2410A与与MCP2510的的CAN通信接口电路通信接口电路o S3C2410A包含两个SPI接口,例如可以使用S3C2410A中的SPI0与MCP2510接口,连接电路如图所示。2022-1-1931S3C2410A与与MCP2510的的CAN通信接口电路通信接口电路o 2S3C2410A SPI接口编程n SPI接口函数有:o SPI初始化函数。BOOL SPI_Init(VOID)o 发送数据。BOOL SPI_SendByte(BYTE bData,BYTE*pData)o 读取数据。BOOL SPI_ReadByte(BYTE*pData)2022-1-1932谢谢 谢!谢!