最近在学习2440的时候,做了一些通信协议方面的实验。横向着做一总结。
本篇总结总一下几个方面叙述:
1、何为协议,何为通信协议?
2、何为串行、何为并行?
3、何为同步、何为异步?
4、何为数据的采样和输出(时序问题)?
5、其他
一、何为协议,何为通信协议?
所谓协议,简单来说就是一群人事先定好的标准,大家都按照这个标准来,这样,大家说出来的话,做出来的东西,发出来的数据就可以被其他人理解。所以,广义上说,协议存在于生活的方方面面。在计算机系统中,协议也分为软件协议和硬件标准等等。
计算机系统中的通信协议是计算机协议的一种,它的目标是使接受双方(或多方)能够正确“理解“并传输想要“交流”的数据。不同的通信协议具有不同的特点,它们能提供不同的通信效率,同时也需要不同的软硬件设施。 这里要讨论的Uart、I2C和SPI就是用于计算机系统中的有线通信协议。
二、何为串行、何为并行?
一般来说,通信协议中有几个标准。串并行就是其中的一个。所谓串行通信,就是基本数据并不是一下都发送完毕,而是分时发送,一次发送基本数据的一部分。而并行通信,就是一次发送完一整个基本数据。
对于并行通信,其发送效率较高,一次即可发送一个基本数据。但是需要较高的硬件通信成本,即数据线路。比如:一个8位的并行通信系统,其最少需要8根数据线进行同步通信。
对于串行通信,其发送效率没有前者高,但是其布线成本较低。同样的8位串行通信系统,其最少只需要一根线就可以把数据一位一位的发送完毕(不考虑信号同步等线)。
这里要注意的是,以上区分串行、并行通信的一个重要概念:基本数据。所谓基本数据,就是需要发送的一个最小单元,也就是通信双方约定的最小数据单元,一般为8位、16位、32位等。
区分并行和串行的重点是基本数据单元和数据线的宽度。并不能认为只有一根数据线的就是串行通信,没准它的数据单元就是一个bit。也不能认为有8根数据线的就是并行通信,没准它的基本传输单元是64位。
对于普通的Uart、I2C和SPI来说,他们都是串行通信,因为它们的数据线都只有1位(只考虑单方向),而它们的传输单元一般都超过1位。
总的来说,串行通信是那时间来换空间的一种通信手段。
三、同步、何为异步?
通信协议中还有一个标准,就是异步和同步。同步指的是通信双方按照一个基准进行发送和接受数据。异步就是通信双方按照各自不同的基准进行数据传输。
咳咳,敲黑板了。。。
异步通信只是各自的基准不一样,并不是没有各自的基准。高大上一点说是同步信号。注意,一般来说,只要是通信都需要同步信号,用来协调数据传输,简单来说,就是辨别从哪到哪是一位数据。
一般来说,同步通信采用时钟信号作为基准(同步信号),I2C的SCL、SPI的SCK时钟信号。而异步通信有的采用单位时间(通过事先约定好的波特率),如Uart,也有的采用发送特定的同步数据帧(_,这个我一时没想到例子)。
所以,Uart是异步通信,I2C和SPI是同步通信。
四、何为数据的采样和输出(时序问题)?
对于同步通信来说(一般就是有时钟信号的),其协议的一个重点就是何时进行数据的采样和输出。所谓采样,简单来说,就是什么时候从总线上取得数据。所谓输出,就是什么时候把数据输出到总线上。要注意,这两个不是一回事。(┭┮﹏┭┮,我就在这上面花了好长好长的时间)
对于I2C来说,其数据传输时的协议是:SCL为高电平是,SDA保持不变。SCL为低电平时,SDA可以改变。换句话说,就是在时钟信号的上升沿进行数据的采样,即可以从SDA上读取数据。在时钟的下降沿进行数据的传输,即把SDA值发送到总线上。
对于SPI来说,其提供了时钟极性和时钟相位的机制,可以通过这种方式有用户进行选择何时采样、何时输出,不过一般使用SPI模式0和模式3。(这么巧,模式0和模式3也是上升沿采样,下降沿输出,里面有蹊跷,我现在还不知道。)
五、其他
1、关于存储器写入:一般来说,存储器的写入花费的时间都比读出的时间长。有可能会达到ms级别,这一点在编程时要注意,适当延时。(┭┮﹏┭┮,我就在这上面也花了好长好长的时间)
啊,好,没了就到这吧。
注:以上是我自己学习总结所得,未经仔细考证。若有错误,希望指正。