学习心得之协议篇

任何涉及到设备之间的数据传输,都要制定一个协议,并且为了规范使用,出现了ISO/OSI国际标准化七层网络协议,分别是:

1.物理层

与传输介质相关,主要有物理链路的建立/拆除,介质所能承载的传输速率,数据传输的方式:单工,半双工,全双工。二进制数据流的电平,发送和接收端阻抗匹配,引脚数,端口类型等一些电气,机械特性的定义,以保证物理层面的通讯正常。

2.数据链路层

定义了接收端与发送端的数据格式,帧同步(发送与接收协调好数据帧),访问控制(控制访问数据的权了限),寻址(通过在需要传输的数据加入一些地址位,以在本网络中找到目标接收机),检错和流量控制(定义接收端与发送端统一发送和接收波特率,如9600bps.)。

3.网络层

定义了数据传输的最佳路径,实现路由或中继,以及流量的控制为避免流量过大影响通信性能,在数据链路层面上,扩大访问外网的功能。

4.传输层,为了保质保量的传输数据而增加了纠错检错等辅助功能。

5.会话层,设置一定的规定,规范数据传输,如发出信息后,如何回复一个信息,。

6.表示层,将用户的界面的信息翻译成传输的数据。如在用户界面点击一个按健用于对终端进行控制,那就要,将此按键先翻译成相应的数据。

7.应用层,在表示层基础上加一些信息,用于区分同一终端的不同进程。

网络拓扑结构:

1.环型,总线,星型,树型,网络型。

现在用到的一些协议,比如TCP/IP,CAN协议,RS232协议大多只含盖了其中的部分层次,很少有七层都用到的协议。

协议只是针对数据传输的规范,大家都来按这个规范来进行通信即可,协议只与接口的类型有关,一个特定接口的协议与硬件平台无关,如RS232协议,不管是在C51还是ARM平台上,这个协议都是这样的,并不会有改变,因为半导体制造商在制造C51或者ARM时,会遵循RS232协议来做RS232这块的硬件和软件。也就是先有协议后,然后大家都按照这个协议来制作端口。

RS232(异步串行通信)协议是最简单的网络协议,因为它基本上是电气协议,即只规范的电气层面的参数,相当只有一层标准网络协议:物理层,及部分数据链路层:如波特率的设置,一帧数据的格式(1位起始位为低电平,8位数据位(实际数据7位,奇偶校验位1位,如果无奇偶校验,则最高位为0,因为传的是从00H~7FH的共128个字符),数据位先传低位后传高位,选择加不加CRC奇偶校验位,1位/1.5位/2位停止位然后是不定长空闲位(无数据传输时),停止位和空闲位均为高电平,以保证起始时有个下降沿,位与位之间的间隔时间固定,数据帧之间的间隔时间不固定,由用户来控制,由于是异步通信方式,接收与发送均有各自的时钟源(即无需共用时钟源,允许两时钟源的时钟频率有一定的差异),主要靠起止位为界来控制一个数据帧接收的同步,另外,由于CPU与接口之间的通信是并行通信,因此接口还要将接收到的串行数据转为并行数据(接收移位寄存器向右移位一位一位的接收保存数据位,将先收到的低位数据移至最低位,之后的数据仿效移位保存,直到收满一个数据帧后,送往相应的数据寄存器),供CPU使用,发送以同样的原理移位寄存器向右移位,先将最低位移出去,然后之后的数据一位一位的向右移,实现并转串,这就是为什么数据是先发低位后发高位),其他的都可由用户协调上下位机来自行定义。RS232是点对点的通信方式,因为不涉及到整个网络的通信,数据帧设置的也就比较简单也称为起止式协议。

SPI协议,同样是串行通信协议,但由于要接收双方要等待时钟上升沿或者下降沿到来再发送或者接收数据,因此SPI为同步串行通信方式。为了实现同步,需要共用时钟源,于是有一条时钟线SCLK;为了实现全双工,数据的收和发,分别占用一条线:SDI(在主设备为接收,在从设备上为发送),SDO(在主设备上为发送,在从设备上为接收);为了实现多设备之间的通信,一条线用于片选CS,(通常低电位表示从设备)其中时钟和片选信号,均只能由主设备来产生,这样SPI总共有四条线。由于是串行通信,因此数据的传输与RS232一样,是一位一位的传,不同的是,RS232数据帧之间时间不固定,随时都可以选择发一帧数据,因此接收端随时都要准备着接收,因为它不知道,什么时候会有数据进来。而SPI通信,数据是一包一包的传输的,一包数据由许多个数据帧组成,为了标明数据起始和数据停止,数据包还有数据头帧和尾帧,数据帧间的时间固定,每一帧数据内没有起始位和停止位,大量减少了系统开销,因此SPI比RS232效率要高,还可以自行定义,是否从上升沿发送数据,下降沿接收数据,即发送端在上升沿时,进行数据采样,而接收端在接下来的下降沿进行数据采样。另外,采用的是双向移位寄存器,发送过程中,将移位寄存器向左移将高位数据移出一位,同时将收到的数据移进空位从而实现全双工通信,既同一时间,主从设备均可以传送数据,这样一个时钟下来,最多可实现16位数据的传输,因为在全双工模式下,数据发送的同时数据寄存器也在接收,而数据寄存器的值如果没有读出来,第二次发送时,又会接收到一个字节的数据,此时,当发现数据寄存器RXNE为1,就会产生一个数据溢出事件,从而影响数据的发送,因此,数据发送为空时,要将接收到的数据寄存器的值及时读出来,其实我们并不关心此值是多少;同样,由于在全双工下,数据发送和接收是同时进行的,并且是先发后才能收,因此在读模式时,要想接收到数据,必须先发送数据,而且我们并不关心发的是多少,此处的发送,只是起一个同步时钟的作用。空闲状态时,时钟线SCK为高电平。因为有CS片选信号,从而实现了单主多从的通信方式,(主设备用不同的IO输出口分别连接从设备的CS端口,从设备们共用主设备的SDI,SDO,SCK,同一时间只能对一个从设备进行操作,因此要将要控制的从设备其CS拉低,其它的设备均拉高)由于传输速度很快,因此适用于经常传输数据流的系统,缺点是没有应答机制,从而无法确认数据正确与否,因此增加了软件设计的复杂度。

 

IIC协议,与SPI一样也是串行同步通信,收发共用时钟,所有有一条时钟线SCL,因为只有一条数据线SDA,同一时间只能收或者发,因此是半双工模式。数据传输的过程:1.起始条件的产生,SCL高电平期间,侦测到SDA从高到低,即为开始;2.数据传输:地址字节(地址(7bit)+R1/w0 bit+(N)ACKbit) 后传输数据,数据传输过程中,无论是读数据还是写数据,SCL在高电平期间SDA保持稳定状态,SCL在低电平期间才允许SDA有变化,因为数据是在SCL为低电平时发送/接收,在SCL为高电平时进行采样,采样时,必须要保证数据的稳定。8bit数据位后跟随一个应答位,应答位的产生:在SCL高电平期间,从设备在SDA上传输一个稳定的低(ACK)/高(NACK)电平,因此,如果主设备一个字节数据传输完成,就要将SCL拉高,将时钟线释放给从设备,从设备这时掌握时钟线控制权,就要将SCL拉低,并返回一个应答位,发完后,再将时钟线拉高,将时钟线的控制权转交给主设备,这时主设备如果采样到SDA为一个低电平则为ACK否则为NACK,因为如果从设备没有发出数据就会发出SDA的空闲状态电平,高电平,3.停止条件的产生,SCL在高电平期间,侦测到SDA从低到高;

由于I2C数据传输时,有7bit的地址位,因此I2C可以实现多主多从的通信方式,但是,当有多个主设备同时对一个从设备进行操作时,如果进行仲裁管理呢。下面讲讲I2C的仲裁机制,I2C是两线SCK,SDA总线,即这两条线上,挂有多个设备,所有设备间的SCK和SDA是线与关系,因此根据0与任何数相与均得零的原理推出,总线只要有一个设备为低电平,则整个总线的状态呈线低电平,因此低电平持续时间最长,高电平持续时间最短的设备决定了整个总线的状态。仲裁是在SCL为高电平时根据SDA的状态而进行的,发送地址数据阶段,各设备发出数据后与SDA上实际的数据对比,如果相同则继续,如果不同,则立即退出竞争,将主模式转换为从模式,以防获得主控权的设备对自己进行访问。当数据发出后,与SDA实际不一样,要立即关闭输出,将SCL拉高,释放总线。这样保证了,同一时间只能存在两个设备间的完整通信,而且不会有数据丢失。IIC是两线传输,因此节约了资源,但是由于收发共用一条线,使得通信的抗干扰能力下降,因此适合短距离IC之间的通信。

 

 上面的协议结构比较简单,传输速度较慢,不适合超大流量的数据传输,由于寻址功能设计简单,没有路由,不能实现网络中的通信,下一章将讲解网络协议有TCP/IP协议栈。

各种总线应用时的注意事项:进行数据通信相关的开发时,一定要清楚发方的数据时序以及收方实际能接受的时序,如果两方不匹配的话,就容易导致通讯异常。即正常的通信一定要保证时序的正确。这是个基本条件,然后才是收方的数据处理工作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值