Chinaunix首页 | 论坛 | 博客

fx

  • 博客访问: 1341682
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3964
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-02 14:36
文章分类
文章存档

2022年(2)

2019年(2)

2018年(10)

2017年(1)

2016年(50)

2015年(12)

2014年(9)

2013年(29)

分类: 嵌入式

2014-04-08 22:26:54


嵌入式网络接口

    以太网接口
        嵌入式系统通常使用的以太网协议是IEEE802.3标准。
        以太网接口电路主要由媒质接入控制MAC控制器和物理层接口两大部分构成


        传输编码:802.3版本的标准中,没有采用直接的二进制编码,而是用曼彻斯特编码或差分曼彻斯特编码。
        曼彻斯特编码的规律是:每位中间有一个电平跳变,从高
到低的跳变表示0,从低到高的跳变表示为1.
        以太网数据传输的特点
            所有数据位的传输由低位开始,传输的位流是用曼彻斯特编码。
            以太网是基于冲突检测的总线复用方法,冲突退避算法是由硬件自动执行的。
            通常的以太网卡可以接受3种地址的数据,
            一个是广播地址,一个是多播地址(或叫组播),一个是网卡自己的地址。
有时,
            网卡也可以设置为接受任何数据包。

            任何两个网卡的物理地址都是不一样的,是世界上唯一的,网卡地址由专门机构分配
            不同厂家使用不同地址段,同一厂家的任何两个网卡的地址也是唯一的。
            根据网卡的地址段(网卡地址的前3字节)可以知道网卡的生产厂家。

    嵌入式以太网接口的实现方法
        1:嵌入式处理器+网卡芯片:
            这种方法只要把以太网芯片连接到嵌入式处理器的总想上即可。
            通用性强,对嵌入式处理器无特殊要求,不收处理器的限制。

            但是嵌入式处理器和网络数据交换通过外部总线交换数据,速度慢,可靠性不高,
            电路板走线复杂。目前常见的以太网接口芯片有:CS8900,DM9008等。

        2:带有以太网接口的嵌入式处理器:
            带有以太网接口的嵌入式处理器通常是面向网络用用而设计的。
            要求嵌入式处理器有通用的网络接口_(如MII接口),

            处理器核网络数据的交换通过内部总线,速度快。
    嵌入式系统中主要的以太网协议
            TCP/IP是一个分层协议,包含有 应用层,传输层,网络层,数据链路层和物理层等。
            每一层实现一个明确的功能。对应一个或者几个传输协议。

            每层相对于其他的下层都作为一个独立的数据包来实现。
            TCP/IP协议的典型分层和协议
                应用层:套接字
                传输层:TCP UDP
                网络层:IP ICMP IGMP
                链路层: ARP RARP
                (1)ARP地址解析写协议
                        网络层用32位的地址来标识不同的主机(IP地址),
                        而链路层使用48位的物理(MAC)地址来标识不同的以太网或令牌环网接口。

                        只有知道目的主机的IP地址并不能发送数据帧给它,
                         必须知道目的主机网络接口的物理地址才能发送数据帧。

                            ARP的功能就是实现从IP地址到对应物理地址的转换。
                            源主机发送一份包含目的主句IP地址的ARP请求数据帧给网上的每个主机,称作ARP广播。

                            目的主机的ARP收到这份广播报文后,识别出这是发送端在询问他的IP地址。
                            于是发送一个包含目的主机的IP地址及对应的物理地址的ARP回答给源主机。

                            为了加快ARP协议解析的速度,
                            每台主机都有一个ARP cache存放最近的IP地址到硬件地址之间的映射记录。其中一项的生存

                            时间一般为20分钟。这样在ARP的生存时间之内连续进行arp解析的时候,
                            就不需要反复发送ARP请求了


                (2)ICMP网络控制报文协议
                        ICMP是IP层的附属协议,IP层用它来与其他主机或路由器交换错误报文和其他重要控制信息。
                        ICMP报文是在IP数据包内部被传输的在linux和windows中,
两个常用的网络诊断工具ping和
                            traceroute其实就是ICMP协议。

                (3)IP 网际协议
                        IP工作在网络层,是TCP/IP协议中最为核心的协议。
                        所有TCP,UDP,ICMP,IGMP数据都是以IP数据包格式传输的。

                        IP数据包最长可达65536字节,其中报头占32位。还包含各32位的源IP地址和32位的目的IP地址 
                        TTL生存时间段:指定了IP数据包的生存时间(数据包可以经过的最多路由器)。
                        TTL的初始值由源主机设置,一旦经过一个处理他的路由器,它的值就会减1.

                        当该字段为0时,数据包就被丢弃,并发送ICMP报文通知源主机重发。
                        IP提供不可靠,无连接的数据包传送服务,高效,灵活
                        不可靠的意思是它不保证IP数据包能成功到达目的地,如果发生错误,
                         IP只是简单的丢弃该数据包然后发送ICMP给信源端。任何要求的可靠性必须由上层来提供(如TCP)。

                         无连接是指IP并不维护任何关于后续数据包的状态信息。每个数据包的处理时相互独立的。
                            IP数据包可以不按发送顺序接受如先发A后发B。可能是先接受到B后在接受到A

                        IP的路由器选择:源主机IP接受本地TCP,UDP,ICMP,IGMP的数据,生成IP数据包,
                                如果目的主机与源主机在同一个网络上,那么IP数据包就直接送到目的主机上。否则就吧

                           数据包发送到默认的路由器上。由路由器来转发该数据包。IP路由器是逐跳进行的。
                            所有的IP路由器选择只为数据包传输提供下一站路由器的IP地址。

                 (4)TCP传输控制协议
                        TCP协议是一个面向连接的可靠的传输协议。TCP为两台主机提供高可靠性的端到端的数据通信。
                    他所作的工作包括有

                         :发送方吧应用程序交给他的数据分成合适的小块,并添加附加信息(TCP头),包括顺序号,
                            源,目的端口,控制,纠错信息等字段。称为TCP数据包。并将TCP数据包交给下面的网络层处理。

                        :接受方确认接收到的TCP数据包,重组并将数据送往高层。
                (5)UDP用户数据包协议
                        UDP协议是一种无连接不可靠的传输层协议。它只是把应用程序传来的数据包发送出去,
                        但是并不保证他们能到达目的地。可靠性由应用层来提供。

                        因为协议开销少,和TCP协议相比,UDP更适用于应用在低端的嵌入式领域中。
                        很多场合如网络管理SNMP,域名解析DNS,简单文件传输TFTP大都使用UDP协议。

                (6)端口
                        TCP和UDP采用16位的端口号来识别上层的TCP用户,即上层应用协议,如FTP和TELENT等。
                        常见的TCP/IP服务都用众所周知的1-255之前的端口号。例如FTP服务的TCP端口号都是21,
                        Telnet服务的TCP端口号都是23。

                        TFTP服务的UDP端口号都是69,256-1023之间的端口号通常都是提供一些特定的unix服务。
                        TCP/IP临时端口分配1024-5000之间的端口号。

                (7)网络编程接口
                        套接字是使用最广泛的网络程序编程方法,主要用于应用程序的编写,
                        用于网络上主句与主机之间的相互通信。

                        套接字分为stream sockets和data sockets。 stream sockets是可靠性的双向数据传输,
                        对应使用TCP协议传输数据。data sockets是不可靠连接,对应使用UDP协议传输数据。

    以太网的物理层接口及编程
            大多数ARM都内嵌一个以太网控制器,支持媒体独立接口(MII)和带缓冲DMA接口(BDI).
            可在半双工或全双工模式下提供10M/100Mbps的以太网接入。在半双工模式下,控制器支持CSMA/CD协议。
                在全双工模式下,支持IEEE802.3 MAC控制层协议。

            ARM内部虽然包含了以太网MAC控制,但未提供物理层接口。
            因此还需外接一片物理层芯片以提供以太网接入通道。

            常用的单口10M/100Mbps高速以太网物理层接口器件均提供MIT接口和传统7线制网络接口。
            可方便的与ARM连接。
太网物理层接口器件主要功能包括:物理编码子层,物理媒体附件,
            双绞线物理媒体子层,10BASE-TX编码/解码器和双绞线媒体访问单元等。如CS8900等

            CS8900a介绍
                    16位以太网控制器,芯片内嵌片内RAM10BASE_T收发滤波器,直接ISA总线接口。
                    该芯片的物理层接口,数据传输模式和工作模式等都能根据需要而动态调整,
                    通过内部寄存器的设置来适应不同的应用环境。

                    具有全双工通信方式,可编程发送功能,自动切换于DMA和片内RAM,提前产生中断便于数据帧处理,
                    数据流可降低CPU消耗,自动阻断错误包,可跳线控制EEPROM功能,启动编程支持无盘系统,
                    边沿扫描和回环测试,待机和睡眠模式,支持广泛的软件驱动。

            cs8900a工作原理
                    cs8900a有两种工作模式:memory mode 和i/o mode模式
                        memory mode模式操作时,cs8900a内部的寄存器和帧缓冲区映射到主机内存中连续的4Kb的块中,
                        主机可以通过这个块直接访问cs8900a的内部寄存器和帧缓冲区。
                        memory模式需要硬件上多跟地址线和网卡相连。

                        而在 I/O mode模式下,对任何寄存器操作均要通过i/o端口0写入或读出。
                        I/O 模式在硬件上实现比较方便,而且这也是芯片的默认模式。在I/O模式下,
                        PacketPage存储器被映射到CPU的8个16位的I/O端口上,芯片加电后,I/O基地址默认值为300H

                        使用CS8900A作为以太网的物理接口,在收到由主机发来的数据报后,侦听网络线路。
                        如果线路忙,它就等到线路空闲为止,否则,立即发送该数据帧。在发送过程中,
                        首先它添加以太网帧头(包括前导字段和帧开始标志),然后生成CRC检验码,
                        最后将此数据发送到以太网上。

                        在接收过程中,他将从以太网收到的数据帧在经过解码,去帧头和地址检验等步骤后缓存在片内。
                        在CRC校验通过后,它会根据初始化配置情况,通知主机CS8900A收到了数据帧,最后,
                        用某种传输模式(FO模式,Memory,DMA模式)传到主机的存储区中。

  CAN总线接口
       CAN(控制局域网)是为汽车应用而开发的,他是一种现场总线。
       能有效支持分布式控制和实时控制的串行通信网络。

      一个理想的由CAN总线构成的单一网络中可以挂接任意多个节点,实际应用中节点数目受网络硬件的电器特性所限制。
      CAN总线是一种多主方式串行通信总线。
      基本设计规范要求有高的位速率,搞抗电磁干扰性,并可以检测出产生的任何错误。CAN总线具有很高的实时性能。

        CAN总线的通信介质课采用双绞线,同轴电缆和光导纤维,最常用的双绞线。
        CAN总线仲裁采用11位标识和非破坏性位仲裁总线结构机制,可以确定数据块的优先级,
            保证在网络节点冲突时最高优先级节点不需要冲突等待。

        CAN总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。
        CAN总线上任意节点可在任意时刻主动想网络上其他节点发送信息而部分主持,
        因此可在各节点之间实现自由通信。

        CAN总线信号使用差分电压传送,两条信号线被称为CAN_H和CAN_L。静态时均为2.5V左右,此时表示逻辑1,
        称为隐性。当CAN_H比CAN_L高时表示逻辑0,称为显性。
        当显性和隐性位同时发送时,最后总线将为显性。

        CAN总线的一个位时间可以分成四个部分:同步段,传播时间段,相位缓冲段1和相位缓冲段2.
        每段的时间份额的数目都是可以通过CAN总线控制器编程控制,
        而时间份额的大小Tq由系统时钟tsys和波特率预分频值BRP决定:tq=BRP/tsys。

        同步段,传播时间段,相位缓冲段1和相位缓冲段2的设定和CAN总线的同步,仲裁等信息有关。
        其思想是要求各个节点在一定范围内保持同步。必须考虑各个节点时钟的误差和总线的长度带来的延迟。

    在嵌入式处理器上扩展CAN总线接口
         一些面向工业控制的嵌入式处理器本身就集成了一个或者多个CAN总线控制器。
        CAN总线控制器主要是完成时序逻辑转换等工作,要在电气特性上满足CAN总线标准,
        还需要一个CAN总线的物理层芯片,用他来实现TTL电平到CAN总线电平特性的转换,即CAN收发器。

        实际上多数嵌入式处理器都不带CAN总线控制器。
        通常的解决方案是在嵌入式处理器的外部总线上扩展CAN总线接口芯片。

        CAN总线控制器芯片介绍:MCP2510芯片
            MCP2510 为Microchip生产的CAN协议控制器,完全支持CAN总线V2.OA/B技术规范。
            0-8字节的;有效数据长度,支持远程帧。最大1Mb/s的可编程波特率。
            两个支持过滤器的接收缓冲器,三个发送缓冲器。支持

            回环模式,便于测试。SPI高速串行总线,最大5MHz。
            MCP2510主要由CAN协议引擎,用来为器件及其运行进行配置的控制逻辑,
            SRAM寄存器和SPI协议模块3部分组成。
            MCP2510支持CANT2,CAN2.0,主动和被动CAN2.0B等版本的协议,能够发送和接收标准的扩展报文,
            还同时具备验收过滤以及报文管理功能。

            CPU通过SPI接口与器件进行通信,通过使用标准SPI读/写命令对寄存器进行所有读/写操作。
            器件上有一个多用途中断引脚以及各接收缓冲器专用的中断引脚。
            可用于指示有效报文是否被接收和载入各缓冲器。是否使用专用中断引脚有用户决定,若不使用。
            也可用通用中断引脚和状态寄存器(通过SPI接口访问)确定有效报文是否已经被接收。

        CAN协议引擎
            CAN协议引擎的功能是处理所有总线上的报文发送和接收。
            报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中。
            利用控制寄存器位,通过SPI接口或使用发送使能引脚均可启动发送操作。
            通过读取相应的寄存器可以检查通信状态和错误。任何在CAN总线上侦听到的报文都会进行错误检测,
            然后与用户定义的滤波器进行匹配,以确定是否将其转移到两个接收缓冲器之一种。

            CAN协议引擎的核心是有限状态机(FSM)。该状态机逐位检查报文,
            当各个报文帧发生数据字段的发送和接收时,状态机改变状态。FSM确保了报文接收,总线仲裁,
            报文发送以及错误信号发生等操作过程依据CAN总线协议进行。总线上的报文的自动重发送也由FSM处理。


阅读(5014) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~