【嵌入式学习】串口通信:UART,I2C,SPI

UART

简单双向串口通信有两根通信线(发送端TXD和接收端RXD)
TXD与RXD要交叉连接
当只需单向的数据传输时,可以直接一根通信线
当电平标准不一致时,需要加电平转换芯片

图片名称

数据格式

UART数据包包含有一个起始位,5到9个数据位(取决于UART),一个可选择的奇偶检验位以及一个或两个停止位:

  • 起始位
    UART数据传输线通常在不传输数据时保持在高电平电平。开始传输时发送UART在一个时钟周期内将传输线从高电平拉低到低电平,当接收UART检测到高电压转换时,他开始以波特率的频率读取数据帧中的位。
  • 数据帧
    数据帧内包含正在传输的实际数据。使用奇偶校验位是5-8位,不使用最多可以是9位。
  • 校验位
    奇偶校验位是接收UART判断传输期间是否有任何数据更改的方式。接收UART读取数据帧后,它将对值为1的数进行技术,并且检查总数是偶数还是奇数,是否与数据相匹配。
  • 停止位
    向数据包的结尾发出信号,发送UART将数据传输线从低电压驱动到高电压至少两位的时间。

通讯方式

  • SBUF用来缓存信息,即用来发送又用来接受
  • TI,RI这两个寄存器位会引发对应的中断
  • 发送时,将数据写入SBUF,并通过观察TI来知道是否发送完成
  • 接收时,来了数据时会触发中断(RI=1)通过中断函数读取SBUF
图片名称

SPI

SPI可以无中断传输数据,可以连续地发送或接收任意数量的位。但是I2C和UART中,数据以数据包的形式发送,有限定位数。
SPI信号线有四种:

  • MOSI-信号线:主机输出,从机输入;
  • MISO-信号线:主机输入,从机输出;
  • SCLK-时钟信号;
  • SS/CS-片选信号;

优点:

  • 无起始位和停止位,因此数据可以持续传输不会中断;
  • 数据传输速率快(比I2C快几乎两倍)。
  • 独立的MISO、MOSI可以同时发送和接收数据。

缺点:

  • 使用四根线(I2C使用两根线)
  • 没有信号接收成功的确认(I2C由此功能)
  • 没有任何形式的错误检查(UART中的奇偶校验位)
图片名称

I2C总线

I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线
仅需要两根通信线:SCL(Serial Clock)、SDA(Serial Data);所有I2C设备的SCL连在一起,SDA连在一起
特点:

  • 同步(需要给clock信号作为通讯时的时钟信号)
  • 半双工(同一时间只能一个方向通讯)
  • 带数据应答(ACK)
图片名称

核心思想

开漏输出模式,引脚处:
图片名称
端口处想置1,则不接地(通过SDA,SLC的上拉电阻实现高电平);置0,则接地

设备的SCL和SDA均要配置成开漏输出模式

  • SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右;所有设备引脚处默认不接地
  • 默认不通信时线路是高电平,谁想通信谁接地(置0)

关键时序结构

主要思想:在SCL为高时,SDA线上的信号为有效信息!!!

  • 开始通信:SCL高电平期间,SDA从高电平切换到低电平

  • 结束通信:SCL高电平期间,SDA从低电平切换到高电平
    图片名称

  • 发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节
    图片名称

  • 接收一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
    图片名称

  • 发送应答:在接收完一个字节之后,主机在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

  • 接收应答:在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
    图片名称

I2C 数据帧

发送一帧数据
图片名称

接收一帧数据
图片名称

优缺点

I2C优点

  1. 仅仅使用两根线
  2. 支持多个主机和从机
  3. 硬件比UART更简单

I2C缺点

  1. 数据传输比SPI慢
  2. 数据帧大小限制为8位
posted @   shiiiilong  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示