IIC与SPI通信

  • IIC
  • SPI通信
  • IIC与SPI的比较
  • UART
  • 单总线

因为面试时被问到IIC和SPI通信,所以又重新学习了一下。

IIC

IIC顾名思义就是两根线,一根SCL(时钟线),一根SDA(数据线)。时钟线用来通过电平变化来标志数据传输过程,SDA线传输数据。
通信过程

  • 首先,SCL处于高电平,SDA从高电平变化为低电平表示START信号,此时将SCL线拉低便可通过SDA线读写数据(SCL线高电平时无法读写)。
  • 然后,由于IIC通信分为主设备(比如单片机),从设备可能会有多个,这时候我们在读写数据之前要先确定从设备,每个从设备会对应一个特定的地址,所以主设备需要传输一个七位地址(好像现在有10位的地址)和一位R/W读写位,每个从设备接受到地址会和自己的地址进行对比,相同就会传输一个应答信号给主机。
  • 主机收到应答信号确认从设备后可以进行数据传输。数据传输一般一帧数据为为8位,尾随一位应答位。从设备收到应答位,做出应答或非应答信号表示数据的接收成功与否(读操作主从应答相反)。
  • 主机接收到应答,选择STOP信号输出便可以结束一帧的传输。

SPI通信

与IIC不同的是SPI通信有四根线,MOSI(master input slave output,主发从收),MISO(主收从发),SCLK(时钟线)和SS(serial select)(片选信号,每个从机都需要单独的一条SS线与主机相连,而不是所有从机共用一条)。

通信过程

  • 首先,主机拉低SS线选择要通信的从机。
  • 开始发送数据,时钟线不断输出脉冲,MOSI和MISO可以在相应时钟沿同时进行数据(1bit)的传输,所以SPI是全双工通信。
  • SS线被拉高,结束传输。

SPI_MOD
此外在数据传输时钟沿选择上有四种方式

CKP(时钟极性)//0–>ss休闲状态为低电平,1–>ss休闲状态为高电平
CKE(时钟相位) //0–>第一个时钟沿采集信号,1–>第二个时钟沿采集信号

理论上,SPI通信的速率取决于时钟频率,所以就这一点来说会比IIC的传输速率要快得多,硬件设备的最大时钟频率的大小可以影响SPI通信。

IIC与SPI的比较

对于SPI我觉得优点可以有以下几点

  1. 高速率,传输bit频率最大与系统的时钟频率相当
  2. 传输bit无限制,对于IIC每次传输8位一个字节,而SPI是一位一位的传输,所以避免了某些无意义位的传输
  3. 硬件软件的配置比较轻便简单,硬件方面,没有IIC从机对应的逻辑地址,一根SS线连接一个从机;软件方面也没有过多复杂的时序,IIC中的起始应答停止的信号反复转换显得有点复杂。

缺点我觉得就是SPI通信没有应答,可能导致数据传输无效,或者在从机出现故障时主机依旧发送数据,就显得有点盲目。还有主机设备需要更多的引脚接口才能容纳更多的从设备。而且主设备只能有一个。

UART

通用异步收发器,三根线RX(接收数据端),TX(发送数据端),GND。


通信过程

  • 数据线上休闲时为高电平,将其拉低表示起始信号,从而可以开始通信。

单总线

1-wire通信,如DS18B20(温度传感器),DHT11(温湿度传感器)

这是DS18B20的单总线电路图,由图中可以看到单总线是收发双向的,但是也不能同时进行收发,所以是半双工。


以上传输过程

  • 初始化,主机发送复位脉冲(拉低总线一段时间),从机产生应答脉冲(拉低总线一段时间)。
  • 写bit,低电平时为写0,高电平时为写1

单总线的数据传输速率一般为16.3Kbit/s,最大可达142 Kbit/s,通常情况下采用100Kbit/s以下的速率传输数据。相比于IIC和SPI传输速率比较慢,但是硬件结构比较简单。

IIC,SPI,UART,单总线相关推荐

  1. I/O接口和外部通信接口——嵌入式系统 GPIO/IIC/SPI/UART/USB/HDMI/RS-232/RS-485/CAN

    I/O接口:GPIO.IIC.SPI.UART.USB.HDMI (1)GPIO         通用输入输出接口,General Purpose Input Output, GPIO. 输出引脚的两 ...

  2. 开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板

    开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板 发个方便测试I2C.SPI.1Wire接口的工具模块 总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成 ...

  3. XR20M1170实现FPGA 的SPI/IIC转UART

    最近基于FPGA实现UART通讯,因为项目中UART的各项参数需要可配置,使用verilog直接实现一个UART会麻烦一些,稳定性也会降低,因此使用了更为方便的方案,FPGA加上一块SPI/IIC转U ...

  4. 单片机通信——spi、iic、uart

    一.uart 通用异步收发器,就是常说的串口通信,常常用在异步通信并且是一种全双工的通信方式,不需要严格的时间限制,两个设备之间连线简单,往往只需要将RX,TX端交叉相连即可.现实中利用面很广,多用于 ...

  5. 单片机-硬件接口(UART/IIC/SPI/RS232/USB/CAN)异同

    1.中文名  USART:通用同步异步收发器   UART(Universal Asynchronous Receiver Transmitter:通用异步收发器)  I2C(INTER IC BUS ...

  6. 总线协议一(UART/RS232/RS485/IIC/SPI)

    目录 基础概述: 一.UART(为串口通信方式) 二.RS232协议 三.RS485协议 四.I2C总线协议 五.SPI总线 六.I2C和SPI的区别 基础概述: 总线的本质就是一根导线,传递的是电信 ...

  7. SPI、IIC、UART区别

    第一个区别当然是名字:      SPI(Serial Peripheral Interface:串行外设接口);      I2C(INTER IC BUS)      UART(Universal ...

  8. FPGA:三大协议(IIC、UART、SPI)之IIC

    摘要:1.本文讲述IIC的物理层面的结构(使用iic工作的物理层面的连接):2.本文讲解协议层面的通信交流格式(IIC时序):3.提供一个主机和从机的一个verilog代码:4.本文的主从机指的是:板 ...

  9. 韦东山 嵌入式Linux应用开发基础知识 下【串口 IIC SPI

    10 串口 因为UART没有时钟信号,无法控制何时发送数据,也无法保证双方按照完全相同的速度接收数据.因此,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步: 双方还必须事 ...

最新文章

  1. 使用border-collapse:collapse;属性新建一个细线表格
  2. vue项目封装axios
  3. java swing 注册事件_比较Java Swing中三种注册事件的方法
  4. 官网Tensorflow 移动开发流程
  5. LNMP架构的搭建--源码编译(MYSQL,PHP,nginx)
  6. AutoMap1.0发布
  7. Linux中强大的top命令
  8. aop面向切面编程(aspectJweaver)
  9. 条件概率密度与条件均值
  10. Atitit保证架构超前性 前瞻性 目录 第一章 简单抽象原则 道和术的区别 1 第一节 原则 kiss 1 第二节 提升到层次哲学层次 1 第三节 命名也要通用抽象 隐藏细节 1 第二章 通用性原
  11. Cesium 修改默认地球贴图的两种方式
  12. C语言 qsort的用法 模拟EXCEL排序
  13. Flink 网络流控与反压机制
  14. 如何下载安装与火狐浏览器不兼容的火狐浏览器插件
  15. G - RMQ and RAQ (cugb2023-s)
  16. 魔兽世界最新服务器人数,魔兽世界过气?全球服务器人口普查带你了解真正的魔兽世界现状...
  17. 火星辩证派第1期·精华版:为什么在DeFi这个赛道上国外项目异常火爆,中国市场却反应迟缓?...
  18. Fast load times系列翻译——将性能预算合并到构建过程中
  19. springboot高校社团管理系统
  20. 渗透测试-中间件解析漏洞分析

热门文章

  1. Python 通用爬虫 和讯博客 scrapy
  2. MySQL Windows安装教程
  3. 关系代数中的除操作怎么用SQL语句表示?
  4. c语言综合程序设计省市邮政编码,《C语言程序设计课程设计报告》_课程教学大纲...
  5. Python自然语言处理(3):更多词汇关系:部分、整体、集合、蕴含等
  6. 360buy android 首页打开网络监控数据分析
  7. 4.案例 - NIO实现TCP通信
  8. Cat5 KVM切换器线材的优势
  9. 金链盟中国区块链应用大赛正式启动,200万奖金将花落谁家?
  10. PHP 如何安装ionCube扩展