我们都知道数据通讯就是两个通讯主体之间发送、接收数字信号。假设要发送以下数据:12,23,34,45,56,67,78,89。接收方要正确接收这些数据,就必须知道数据什么时候开始发送,什么时候结束,要不然,可能会将数据接收成22,33,44,55,66,77,88。
对于同步通讯协议,发送方在发送数据之前先发出一个特殊的电信号,让接收方准备好接收数据,然后发送方就将以上数据全部连续发出,发送完毕后,再发送一个特殊的电信号表示数据发送结束。我们可以用以下图表示同步信号通讯。
数据包
然后,接收方按照事先约定,即每两位一个数值,将数据包分成一个个数值。
对于异步通讯协议,发送方每发送一个数据都要发一“开始”标志,每个数据发送结束后都发出一个“结束”标志。用下图表示异步通讯信号:
因此,POS通讯中的同步、异步是两种不同的通讯协议,它是信号发送方和信号接收方的一种约定。通信过程中,同步信号的作用非常重要,尤其对于串行方式的数据通信。同步信号的作用简单讲有两个作用,1是“尺子”的作用,用于丈量一个比特的宽度;2是决定丈量的“起点”位置。收发双方必须采用相同的“尺子”,从相同的“起点”开始丈量数据线上的电平变化,才能保证数据通信的正确。
因此,任何方式的串行通信,同步的过程必须有,也就是说通信双方必须保持“同步”。 我们看最典型的SPI、I2C,在这两种方式中,都专门有一个CLK信号线,由通信的一方产生一个CLK,通过CLK信号线传到另一方,双方就就按这个CLK的控制工作,CLK的宽度就是一个数据位的宽度,而CLK的上升或下降沿,就是“起点”标志。这种在通信过程中明显有个CLK线专门传送同步信号的方式,就是同步通信。同步通信由于有专用的CLK线控制,因此通信双方比较容易实现“同步”,因此速度比较快。但是对于长距离的通信,同步方式就不行了,1是由于需要专门一个信号线,成本提高。2是通信线越长,上面的干扰就越多,通信的速度也上不去。因此同步方式多是作为同一PCB板上芯片级之间的通信接口使用。而长距离通信多使用“异步”通信方式,这里的“异步”不是指通信双方不需要同步,而是指通信双方之间不使用专用的同步信号线传送CLK,而是各自仅依赖于自己的系统时钟(这个就是异步的!),再根据约定的规程,调节自己的“步伐”达到双方的同步。同步通信通常要比异步通信快速得多。接收方不必对每个字符进行开始和停止的操作。一旦检测到帧同步字符,它就在接下来的数据到达时接收它们。另外,同步通信的开销也比较少。例如,一个典型的帧可能有500字节(即4000比特)的数据,其中可能只包含100比特的开销。这时,增加的比特位使通信的比特总数增加2.5%,这与异步通信中25 %的增值要小得多。随着数据帧中实际数据比特位的增加,开销比特所占的百分比将相应地减少。但是,数据比特位越长,缓存数据所需要的缓冲区也越大,这就限制了一个帧的大小。另外,帧越大,它占据通信媒体的连续时间也越长。在极端的情况下,这将导致其他用户等得太久。
如果掌握这些最基本的概念,那么你能了解和面对通信中出现的问题,找到解决办法。比如对于UART的通信,你就知道为什么要规定双方要采用相同的帧结构,波特率了,如果设置错误会导致什么现象?而此时对双方的系统时钟不仅要求要更加准确和稳定,而且还要使用11.0592这些特殊的晶体,如果使用12M晶体,会产生什么后果等等。
最后总结一下1,异步通信是面向字符的通信,而同步通信是面向比特的通信。2,异步通信的单位是字符而同步通信的单位是桢。3,异步通信通过字符起止的开始和停止码抓住再同步的机会,而同步通信则是以数据中抽取同步信息。4,异步通信对时序的要求较低,同步通信往往通过特定的时钟线路协调时序。5,异步通信相对于同步通信效率较低。