概述
按数据同步的方式,通信可以分为同步通信和异步通信。
同步通信:发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。通信速率由时钟信号决定,时钟信号越快,传输速度就越快,常见的SPI、 I2C
异步通信:需要收发双方提前统一通信速率,异步通信的做法是对数据进行封装,在数据开头加上起始信号,在数据结尾加上终止信号,比如UART、 1-Wire
同步通信与异步通信区别:
1、同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
2、同步通信效率高,异步通信效率较低。
3、同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
4、同步通信只适用于点对点,异步通信可用于点对多点。
全双工/半双工/单工传输
按照数据传输的方向,通信可以分为全双工、半双工和单工。全双工指双方都可以同时收发信息;半双工双方都可以收发信息,但同一时刻只能一方发送信息;单工指只能一方发信息,一方接受信息,通信是单向的。
全双工就像电话通信, 双方任意时刻都可以同时收发信息;半双工就像对讲机通信, 双向都可得到信息,但是同一时刻只能是一方发射另一方接收,发射和接收不能同时进行;单工就像收音机, 只能由广播站发送给收音机,单向不可逆的,
时钟对通信的重要性
例子:假设发送端时钟频率为1Mhz,对应时钟周期则为1us, 接收端
时钟频率为10Mhz,对应时钟周期则为0.1us。现在发送端发送一个数据0x1,就会产生一个持续时间为1us高电平,接收端接收到这个1us的高电平时,会当作是10个0.1us的高电平,认为收到了10个0x1。这时双方数据就乱套了,因此需要一个统一的时钟标准。
通常使用比特率来描述通信速率的快慢,与之容易混淆的是波特率。
比特率( Bitrate) : 系统在单位时间内传输的比特位(二进制0或1)个数,通常用Rb表示,单位是比特/秒( bit/s),缩写为bps;
波特率( Baudrate) :系统在单位时间内传输的码元个数,通常用RB表示,单位是波特( Bd)100bit/s即是一秒钟传输100个0或1, 100Bd即是一秒钟传输100个码元。
码元就是“ 承载信息量的基本信号单位”,以一条电线上传输的信号为例,码元就是电线上的电平值。
串口电平标准
就是为了适应不同的环境条件,使用了不同的电平标准如RS232、 RS422、 RS485
串口传输协议
以TTL电平的接口为例讲解串口怎么传输数据,对于RS232/RS422/RS485等接口,仅仅是把TTL电平转换为不同的电平值,或者转换为差分信号。
串口传输中的一些概念如下:
波特率:一般选波特率都会有9600,19200,115200等选项。其实意思就是每秒传输这么多个比特位数(bit);
起始位: 先发出一个逻辑”0”的信号,表示传输数据的开始;
数据位:可以是5~8位逻辑”0”或”1”,先传输bit 0,在传输bit 1,依次类推;
校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数传送的正确性。 校验位是可选的,可以不传输;
停止位:它是一个字符数据的结束标志,数据线变回逻辑”1”;
怎么发送一字节数据
比如“ A”? “A”的ASCII值是0x41, 二进制就是01000001,怎样把这8位数据发送给对方呢?
双方约定好波特率、数据格式(数据位个数、停止位个数、是否使用校验位、奇校验还是偶校验),
假设数据位是8,停止位是1,校验位是1;
1. 初始电平为逻辑1;
2. 发送方输出逻辑0,并保持1位的时间;接收方检测到逻辑0,就知道对方准备发送数据了;
3. 发送方根据数据的bit 0设置引脚电平,并保持1位的时间;接收方读取引脚电平,得到bit 0;
4. 发送方根据数据的bit 1设置引脚电平,并保持1位的时间;接收方读取引脚电平,得到bit 1;
5. 以此类推,发出8位数据;
6. 发送方计算出校验值,设置引脚,并保持1位的时间;接收方读取引脚电平,得到校验值; 注意,这步可以省略;
7. 发送方输出逻辑1,并保持1位的时间;接收方读取引脚电平,知道数据传输结束;
常见通信协议
最后
以上就是专注大雁为你收集整理的1.串口通信的全部内容,希望文章能够帮你解决1.串口通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复