通信方式(UART,I2C)

通信方式分为串行通信和并行通信。串行通信用一根数据线就可以完成信息的传输,而并行通信需要8根数据线(一个字节8位数据,同时发送8位数据),由于并行数据线无法携带时钟信息,为了保证信号时序一致,需要额外的时钟信号线。并行通信速度快,但线成本也更高,抗干扰能力差,通信距离有限。串行通信外设简单,成本低并且传输距离更远。

一,串行通信

串行通信有Sbus,PPM,JTAG,UART,I2C,CAN,SPI,MIDI,USB,RS232,Morse Code

根据使用时钟不同可以把串行通信方式分为同步通信和异步通信

1,同步通信

典型代表:I2C,SPI。同步通信需要使用频率一致的时钟,接收方需要时刻准备好接收数据,此通信方式只需要辅助bit串作为启停标识。传输效率高,也可以一对多进行通信

同步通信也是总线通讯,是为了解决多个设备间通讯使用串口通信而线路复杂的问题。

I2C通信

I2C通信一般采用一主多从模式,如下图。

I2C采用时钟线(SCL)和数据线(SDA),一帧数据是由两根线共同作用的,也就是在同一时间它要么就是在发送信息,要么就是在读取信息,所以说I2C属于半双工通信,即通信双方可以互相传输数据,但必须分时复用一根数据线

以下图所示写帧来看I2C工作原理

当处于空闲状态时,时钟线SCL和数据线SDA都为高电平,如下图

起始位,也就是起始信号。此时必须时钟信号为高电平期间,数据信号位下降沿。

 起始信号结束,接下来的7为数据位设备地址码,确定要与哪一位设备进行通讯

下图所示时钟线为高电平数据线为低电平为数据0,时钟线和数据线均为高电平则为数据1

 

 比如一下数据所示

 接下来的一位位读/写数据位。想要写数据则置为0,想要读数据则置为1.再下一位为应答信号,这个信号是从机发送给主机的,如果从机收到了之前的信息他会回复0,如果没收到或者(主机)读取接收完成会回复1

再下面8位为设备寄存器的地址 ,比如这八位为0x01,则会在设备地址0x01的寄存器中写数据,然后单片机需要设备返回一个应答信号,接下来8位是要给这个寄存器写入的数据,发送完数据后,需要再给主机发送应答信号0,告诉主机写入成功,最后再写入停止位

停止位和起始位相反

 

这样一个写数据帧就完成了,那怎么读数据那?读数据和写数据其实差不多 ,以下是一个标准的读数据帧

 首先写入设备地址,然后写数据,接下来是寄存器地址,在收到从机应答后,主机需要再发送一个起始信号,然后需要再发送一遍设备的地址,然后才能发送读数据,接下来存储器就会把寄存器的数据发送给单片机。

 

2,异步通信

典型代表:UART。异步通信的双方使用各自的时钟,接收方是通过识别数据包中的起始位和结束位来实现信息同步,数据效率低,只能一对一进行通信。异步通信也是串口通信

UART

UART只需要三根线,发送数据线TX,接收数据线RX,参考线GND。在通信之前双方要知道通信的波特率,数据长度,开始位和停止位。UART是全双工的通信模式,也就是可以同时发送和接收数据。与I2C不同的是UART不需要时钟线

比如说要发送198这个数据,转换为二进制为11000110。将此数据(要发送的数据)加载到数据位中,如下图

进行通信时我们还需要一个 起始位和结束位。我们通常用高信号表示通信截至,当接收器检测到信号从高到低就表示开始通信,如下图。然后就开始读取数据,我们还需要配置一个波特率参数,常用波特率位9600波特/s,也就是每秒发送9600个码元,1/9600=104us,也就是每104us读取一位数据。但开始读取数据时,通常延后52us再开始读取数据,这是因为刚开始的数据可能不稳定,之后接收器要做的就是每104微秒采集一次数据

二,并行通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值