UART、IIC以及SPI通信协议
目录
一、UART总线通信协议
二、IIC总线时序图
2.1IIC总线时序图
2.1.1起始信号和终止信号时序图
2.2数据传输时序图
2.3字节传输和应答信号
2.4I2C的寻址
2.2IIC总线通信协议
2.2.1主机给从机发生一个字节的通信协议
2.2.2主机给从机发生连续的多个字节的通信协议
2.2.3主机从从机读一个字节的通信协议
2.2.4主机从从机读连续的多个字节的通信协议
三、SPI总线通信协议
3.1SPI基本的通信协议
3.2SPI共有4种通信模式
一、UART总线通信协议
起始位:发送数据的开始信号,由发送器产生;
数据位:要发送的数据,先发送低位,再发送高位;
校验位:校准数据的,常用奇偶校验位;
奇校验:数据位和校验位中,1的个数之和为奇数;
eg : 假设数据位为0x55, 校验位自动补1;假设数据位为0x51, 校验位自动补0;
偶检验:数据位和校验位中,1的个数之和为偶数;
eg : 假设数据位为0x55, 校验位自动补0;假设数据位为0x51, 校验位自动补1;
停止位:一帧数据发送结束,最重要的功能是用来校准时钟的。
由于串口采用的是异步通信,通信的双方各自采用各自独立的时钟源,虽然要求时钟的频率保持一致,
但是也会存在一定的误差,每发送一个bit位数据之后,误差就会进行累积,因此发送一帧数据完成之后,
需要通过停止位校准时钟。
常用的串口协议为:8N1(8位数据位,没有校验位,1个停止位);
波特率(比特率):表示串口通信的数据的传输速率,每s钟传输数据的bit位数,单位为bps。
常用的波特率为:115200bps或者9600bps
二、IIC总线时序图
2.1IIC总线时序图
2.1.1起始信号和终止信号时序图
1> SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号
2> SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号
3> 起始和终止信号都是由主机发出,起始信号产生后,总线就处于占用的态;终止信号产生后,总线就处于空闲态。
2.2数据传输时序图
1> I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
2> 在SCL为低电平期间,发送器可以向数据线上写入输入,因此数据线上的数据允许发生变化;
3> 在SCL为高电平期间,接收器从数据线上读取数据,因此必须保持数据线上的数据保持稳定。
2.3字节传输和应答信号
1> 每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
2> 在第9个时钟周期的低电平期间,接收器向数据线上写入数据,在第9个时钟周期的高电平期间,发送器从数据线上读取数据,如果读到的是高电平,则表示非应答信号;如果读到的是低电平,则表示应答信号。
3> 应答信号是由接收器产生的。
2.4I2C的寻址
1> I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。
2> 主机在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/W),用“0”表示主机发送数据(W),“1”表示主机接收数据(R)。总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器。
2.2IIC总线通信协议
2.2.1主机给从机发生一个字节的通信协议
”8位数据“ 被写到 “寄存器的地址” 中。
2.2.2主机给从机发生连续的多个字节的通信协议
第1个 ”8位数据“ 被写到 “寄存器的地址” 中。
第2个 ”8位数据“ 被写到 “寄存器的地址+1” 中。
第3个 ”8位数据“ 被写到 “寄存器的地址+2” 中。
..............(地址会自动增加1)
2.2.3主机从从机读一个字节的通信协议
从机将 “寄存器地址”中的数据发送给主机
从机只能被动的进行数据的收发,如果从机给主机发送一个字节数据之后,如果主机给从机发送应答信号之后,则从机会认为主机还想接收下一个字节的数据,因此从机会将下一个字节的数据再次发送给主机;如果从机收到的是非应答信号,则从机不会发送下一个字节的数据给主机。
2.2.4主机从从机读连续的多个字节的通信协议
第一次, 从机将 “寄存器地址”中的数据发送给主机;
第二次, 从机将 “寄存器地址+1”中的数据发送给主机;
..........
三、SPI总线通信协议
3.1SPI基本的通信协议
设备选择线/片选线 : CS SS NCS NSS
时钟线 : SCK SCL SCLK
串行输出数据线 : MOSI
串行输入数据线 : MISO
M : Master I : Input S : Slave O : Output
MOSI:主器件数据输出,从器件数据输入
MISO:主器件数据输入,从器件数据输出
SCLK :时钟信号,由主器件产生
/SS:从器件使能信号,由主器件控制(片选)
1> 起始信号: NSS信号线由高变低,是SPI通讯的起始信号
2> 结束信号:NSS信号线由低变高,是SPI通讯的停止信号
3> 数据传输:SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。
MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。
SPI每次数据传输可以 8 位或 16 位为单位,每次传输的单位数不受限制。
SPI总线发送的数据既有地址信息,命令信息和数据相关的信息。
3.2SPI共有4种通信模式
在SPI操作中,最重要的两项设置就是时钟极性(CPOL)和时钟相位(CPHA)这两项即是主从设备间数据采样的约定方式。
3.2.1时钟极性CPOL : 设置时钟空闲时的电平的状态
当CPOL = 0 ,SCK引脚在空闲状态保持低电平;
当CPOL = 1 ,SCK引脚在空闲状态保持高电平。
3.2.2时钟相位CPHA :设置数据采样时的时钟边沿
当 CPHA=0 时,MOSI或 MISO 数据线上的信号将会在 SCK时钟线的奇数边沿被采样
当 CPHA=1时, MOSI或 MISO 数据线上的信号将会在 SCK时钟线的偶数边沿被采样
UART、IIC以及SPI通信协议相关推荐
- 关于iic、spi通信协议的概述
目录 一.IIC 1.通信模式 2.软件iic通信方式与步骤 a.通讯的起始和停止信号: b.数据有效性 c.响应信号 d.数据的读写 e.上诉情况对oled屏幕的读写(本人的实操举例而已) 2.硬件 ...
- 常用通信时序之UART、IIC、SPI(基于STM32)
常用通信时序(UART.IIC.SPI,RS232.RS485)及协议(Modbus) 通讯时序 1. UART 2. IIC 3. SPI 4. RS323 5. RS485 通信协议 1. Mod ...
- 常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(一)
一.概述 通信协议是两个(或多个)设备之间进行通信,必须要遵循的一种协议.通讯协议分为物理层和协议层. 物理层:规定通讯系统中具有机械.电子功能部分的特性,确保原始数据在物理媒体的传输: 协议层:规定 ...
- 杂七杂八的整理——STM32、Proteus使用、UART、IIC、SPI、LIN
简要介绍两款ARM架构单片机 一. S32K1xx 系列单片机 S32K系列单片机是NXP比较新的车规级单片机,有S32K11x(基于ARM Cortex-M0+)和S32K14x(基于ARM Cor ...
- UART、RS232、RS485、IIC、SPI、CAN、CANFD、LIN、flexray、以太网等总线介绍
目录 A.基础概念 A.1 字节 A.2 波特率 A.3 QoS A.4 AVB A.5 TSN A.6 DDS A.7 SOME/IP A.8 SOME/IP与DDS的差异点 A.9 以太网帧 A. ...
- (123)FPGA面试题-介绍低速接口(UART、IIC、SPI),SPI有几根线,每根线的作用?(三)
1.1 FPGA面试题-介绍低速接口(UART.IIC.SPI),SPI有几根线,每根线的作用?(三) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-介 ...
- (92)低速接口UART、IIC、SPI介绍,面试必问(十六)(第19天)
(92)低速接口UART.IIC.SPI介绍,面试必问(十六)(第19天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)低速接口UART.IIC.SPI介绍,面 ...
- 常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(二)
2.IIC (1)基本概念 IIC总线是一种串行.半双工总线,同步通信.主要用于近距离.低速的芯片之间的通信. IIC串行总线一般有两根信号线,一根是双向的数据线SDA收发数据,另一根是时钟线SCL双 ...
- 1024之牛客之错误笔记+uart/IIC/232/485/SPI总结
目录 牛客之错误笔记: uart/IIC/232/485/SPI总结: 牛客之错误笔记: [1.转义字符 \" %% "是用\转义 % ...
- 开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板
开发调试工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板 发个方便测试I2C.SPI.1Wire接口的工具模块 总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成 ...
最新文章
- LIME:一种解释机器学习模型的方法
- 服务器市场步步为营:Intel发布新款至强Xeon E5-4600v4四路处理器
- GitHub for windows使用教程(三) 团队协作流程
- SVM之交叉验证【转】
- java 中batch_java相关:Mybatis中使用updateBatch进行批量更新
- chrome浏览器安装vue调试插件dev-tools
- “云”话数字经济:2020 腾讯全球数字生态大会定档 9 月!​
- 翻译【mysqladmin --help】
- java爬取html过快,需要输入验证码
- python源代码文件_Python代码编译与反编译
- 重装的电脑360打补丁都是智能忽略
- beamer插入图片_用Latex制作幻灯片(beamer)
- SpringBoot项目resources下指定目录的所有文件下载到Centos服务器上,浏览器访问API后资源包直接下载本地磁盘,Java删除linux文件,zip文件打包
- Flex ikev2
- UV、PV、IP意思及区别解释
- 18、try...catch
- 计算机偏置,深度学习中偏置的作用
- level升级打怪是什么意思_工业平板电脑的常规升级是什么意思?以液晶屏来说明...
- PHPExcel读取表格内容
- Unity与3ds Max的单位关系(使用FBX文件)