UART、SPI和I2C

在做单片机开发时UART、SPI和I2C都是我们最经常使用到的硬件接口。

参考博客:SPI、I2C和UART_wx5acb22bb13aec的技术博客_51CTO博客UART、SPI和I2C详解 - 简书

一、UART

UART是一种通用串行数据总线,用于异步通信,通过起始位和停止位及波特率进行数据识别。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。

接口

在单片机中UART可以说是一种最基本的配置,很多与电脑进行通信的设备都采用到它,按计算机最常规的说法就是串行通信。

  • TX - 数据发送接口
  • RX - 数据接受接口

两个设备间将TX与RX相连,RX与TX相连即可正常工作。最常用到的就是我们电脑上的USB那就是个最典型的UART接口。

优缺点

优点

  1. 只使用两条信号线;
  2. 不需要时钟信号;
  3. 有校验位进行错误检测;

缺点

  1. 传输速率比较低。

二、SPI

SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。

接口

SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。如图1所示,其使用的4条信号线分别为:

  •  SCLK:串行时钟,用来同步数据传输,由主机输出;
  •  MOSI:主机输出从机输入数据线,通常先传输MSB;
  •  MISO:主机输入从机输出数据线,通常先传输LSB;
  •  CS:片选线,低电平有效,由主机输出。

在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。

工作模式

  • CPOL位表示初始时钟极性:

      CPOL = 0表示时钟初始为低电平,所以开始的第一(leading)边缘是上升沿,第二边缘(trailing)是下降沿。 
      CPOL = 1时的时钟启动为高电平,所以第一(leading)的边缘是下降沿。

  • CPHA的指示用于采样数据的时钟相位(注意是采样数据,采样是指的将数据线上的数据所存起来)

      CPHA = 0时表示边沿超前
      CPHA = 1表示边沿滞后

  1. 模式0:CPOL = 0 CPHA = 0 主机从机的数据均是在下降沿改变,上升沿锁存
  2. 模式1:CPOL = 0 CPHA = 1 主机从机的数据均是在上升沿改变,下降沿锁存
  3. 模式2:CPOL = 1 CPHA = 0 主机从机的数据均是在上升沿改变,下降沿锁存
  4. 模式3:CPOL = 0 CPHA = 1 主机从机的数据均是在下降沿改变,上升沿锁存

优缺点

SPI接口具有如下优点:

  1. 支持全双工操作;
  2. 操作简单;
  3. 数据传输速率较高。

同时,它也具有如下缺点:

  1. 需要占用主机较多的口线(每个从机都需要一根片选线);
  2. 只支持单个主机。

三、I2C

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

软件框架

在这里插入图片描述

        1、应用层通过标准的 open 调用进行 IIC 设备的操作;
        2、每一个 i2c_client 对应一个实际硬件上的 IIC device(比如 EEPROM)
        3、每一个 i2c_driver 描述一种 IIC 设备的驱动
        4、i2c_dev 是注册的字符类型的设备
        5、i2c_core 是 IIC 核心层,提供了总线、驱动、通信方式等的注册和钩子函数的设置
        6、i2c_adapter 用于描述一个 SoC 的一个 IIC 控制器
        7、i2c_algorithm 用于底层对接实际的控制器,产生 IIC 硬件波形的函数
        8、下面对接的就是实际的 SoC 的 IIC 控制器(寄存器)和硬件

APP访问-->驱动层(iic_client,iic_driver,iic_dev)-->iic核心层(iic_core)-->访问抽象层(i2c_adapter,i2c_algorithm)--> 硬件实现控制层-->soc内部的iic模块-->挂载iic总线上的硬件

接口

  • SCL - 串行时钟线
  • SDA - 串行数据线接口

I2C接口包括时钟线(SCL)和数据线(SDA)。这两条线都是漏极开路或者集电极开路结构,使用时需要外加上拉电阻,可以挂载多个设备。每个设备都有自己的地址,主机通过不同地址来选中不同的设备。

优缺点

优点

  1. 只使用两条信号线;
  2. 支持多主机多从机;
  3. 有应答机制。

缺点

  1. 速率比SPI慢。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值