IIC,SPI,UART,单总线
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我觉得优点可以有以下几点
- 高速率,传输bit频率最大与系统的时钟频率相当
- 传输bit无限制,对于IIC每次传输8位一个字节,而SPI是一位一位的传输,所以避免了某些无意义位的传输
- 硬件软件的配置比较轻便简单,硬件方面,没有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,单总线相关推荐
- 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. 输出引脚的两 ...
- 开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板
开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板 发个方便测试I2C.SPI.1Wire接口的工具模块 总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成 ...
- XR20M1170实现FPGA 的SPI/IIC转UART
最近基于FPGA实现UART通讯,因为项目中UART的各项参数需要可配置,使用verilog直接实现一个UART会麻烦一些,稳定性也会降低,因此使用了更为方便的方案,FPGA加上一块SPI/IIC转U ...
- 单片机通信——spi、iic、uart
一.uart 通用异步收发器,就是常说的串口通信,常常用在异步通信并且是一种全双工的通信方式,不需要严格的时间限制,两个设备之间连线简单,往往只需要将RX,TX端交叉相连即可.现实中利用面很广,多用于 ...
- 单片机-硬件接口(UART/IIC/SPI/RS232/USB/CAN)异同
1.中文名 USART:通用同步异步收发器 UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) I2C(INTER IC BUS ...
- 总线协议一(UART/RS232/RS485/IIC/SPI)
目录 基础概述: 一.UART(为串口通信方式) 二.RS232协议 三.RS485协议 四.I2C总线协议 五.SPI总线 六.I2C和SPI的区别 基础概述: 总线的本质就是一根导线,传递的是电信 ...
- SPI、IIC、UART区别
第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal ...
- FPGA:三大协议(IIC、UART、SPI)之IIC
摘要:1.本文讲述IIC的物理层面的结构(使用iic工作的物理层面的连接):2.本文讲解协议层面的通信交流格式(IIC时序):3.提供一个主机和从机的一个verilog代码:4.本文的主从机指的是:板 ...
- 韦东山 嵌入式Linux应用开发基础知识 下【串口 IIC SPI
10 串口 因为UART没有时钟信号,无法控制何时发送数据,也无法保证双方按照完全相同的速度接收数据.因此,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步: 双方还必须事 ...
最新文章
- 使用border-collapse:collapse;属性新建一个细线表格
- vue项目封装axios
- java swing 注册事件_比较Java Swing中三种注册事件的方法
- 官网Tensorflow 移动开发流程
- LNMP架构的搭建--源码编译(MYSQL,PHP,nginx)
- AutoMap1.0发布
- Linux中强大的top命令
- aop面向切面编程(aspectJweaver)
- 条件概率密度与条件均值
- Atitit保证架构超前性 前瞻性 目录 第一章 简单抽象原则 道和术的区别	1 第一节 原则 kiss	1 第二节 提升到层次哲学层次	1 第三节 命名也要通用抽象 隐藏细节	1 第二章 通用性原
- Cesium 修改默认地球贴图的两种方式
- C语言 qsort的用法 模拟EXCEL排序
- Flink 网络流控与反压机制
- 如何下载安装与火狐浏览器不兼容的火狐浏览器插件
- G - RMQ and RAQ (cugb2023-s)
- 魔兽世界最新服务器人数,魔兽世界过气?全球服务器人口普查带你了解真正的魔兽世界现状...
- 火星辩证派第1期·精华版:为什么在DeFi这个赛道上国外项目异常火爆,中国市场却反应迟缓?...
- Fast load times系列翻译——将性能预算合并到构建过程中
- springboot高校社团管理系统
- 渗透测试-中间件解析漏洞分析
热门文章
- Python 通用爬虫 和讯博客 scrapy
- MySQL Windows安装教程
- 关系代数中的除操作怎么用SQL语句表示?
- c语言综合程序设计省市邮政编码,《C语言程序设计课程设计报告》_课程教学大纲...
- Python自然语言处理(3):更多词汇关系:部分、整体、集合、蕴含等
- 360buy android 首页打开网络监控数据分析
- 4.案例 - NIO实现TCP通信
- Cat5 KVM切换器线材的优势
- 金链盟中国区块链应用大赛正式启动,200万奖金将花落谁家?
- PHP 如何安装ionCube扩展