串行通信协议(I2C、SPI、UART、SCCB)
创始人
2025-05-30 15:39:21

I2C(Inter-Integrated Circuit)

1.简单的双向两线制总线协议标准、半双工通信
2.双向串行数据线(SDA)用来表示数据,串行时钟线(SCL)用于数据收发同步
3.总线通过上拉电阻接到电源。当I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。

IIC
上拉

空闲状态

写数据

写数据

  1. 开始数据传输后,先发送一个起始位(S),主设备发送一个地址数据(由7bit的从设备地址,和最低位的写标志位组成的8bit字节数据,该读写标志位决定数据的传输方向),然后,主设备释放SDA线,并等待从设备的应答信号(ACK)。
  2. 从设备应答主设备后(表示有这个从设备存在),主设备再发送要读取的寄存器地址,从设备应答主设备(ACK),表示设备内有这个地址。
  3. 当写数据的时候,Master每发送完8个数据位,Slave设备如果还有空间接受下一个字节应该回答“ACK”,Slave设备如果没有空间接受更多的字节应该回答“NACK”,Master当收到“NACK”或者一定时间之后没收到任何数据将视为超时,此时Master放弃数据传送,发送“Stop”。

读数据

读数据

  1. 开始通讯时,主设备先发送一个起始信号(S),主设备发送一个地址数据(由7bit的从设备地址,和最低位的写标志位组成的8bit字节数据),然后,主设备释放SDA线,并等待从设备的应答信号(ACK)。
  2. 从设备应答主设备后(表示有这个从设备存在),主设备再发送要读取的寄存器地址,从设备应答主设备(ACK),表示设备内有这个地址。
  3. 主设备再次发送起始信号(S),主设备发送设备地址(包含读标志),从设备应答主设备,并将该寄存器的值发送给主设备。
  4. Slave设备每发送完8个数据位,如果Master希望继续读下一个字节,Master应该回答“ACK”以提示Slave准备下一个数据,如果Master不希望读取更多字节,Master应该回答“NACK”以提示Slave设备准备接收Stop信号。

起始信号和停止信号

SCL处于高电平时,SDA由高到低变化,这种信号是起始信号
SCL处于高电平,SDA由低到高变化,这种信号是停止信号

start-stop

数据的有效性

在数据传输期间(不包括起始信号和停止信号),I2C协议对数据的采样发生在SCL高电平期间。SCL为高电平时,SDA必须保持稳定,不允许改变,在SCL低电平时才可以进行变化。

数据的发送

应答信号

I2C数据以字节(即8bits)为单位传输,每个字节传输完后都会有一个ACK应答信号。应答信号的时钟是由主设备产生的。主机需要释放SDA总线,把总线控制权交给从机,由于上拉电阻的作用,此时为高电平。

  • 应答(ACK):拉低SDA线,并在SCL为高电平期间保持SDA线为低电平
  • 非应答(NOACK):不要拉低SDA线(此时SDA线为高电平),并在SCL为高电平期间保持SDA线为高电平

速率

  • 标准模式(Standard):100kbps
  • 快速模式(Fast):400kbps
  • 快速模式+(Fast-Plus):1Mbps
  • 高速模式(High-speed):3.4Mbps
  • 超快模式(Ultra-Fast):5Mbps(单向传输)

实现

  • I2C总线协议的软件模拟实现方法–单片机
  • Linux内核中I2C模块的实现方法

SPI(Serial Peripheral interface)

全双工数据传输、没有规定最大传输速率、没有地址方案、也没规定通信应答机制

SPI

  • MISO(Master input slave output): 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
  • MOSI(Master output slave input): 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
  • SCLK(Serial Clock):串行时钟信号,由主设备产生。
  • CS/SS(Chip Select / Slave Select):从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

SPI数据发送接收

对主设备的SPI模式进行配置,通过配置时钟极性和相位设置主设备的通信模式,决定读取数据的方式,比如信号上升沿读取数据还是信号下降沿读取数据;

时钟极性 CKP/Clock Polarity/CPOL

  • CPOL=0:时钟空闲SCLK=0;
  • CPOL=1:时钟空闲SCLK=1;

时钟相位 CKE /Clock Phase (Edge)/CPHA

  • CPHA=0:在时钟的第1个跳变沿(上升沿或下降沿)进行数据采样,在第2个跳变沿(上升沿或下降沿)数据发送
  • CPHA=1:在时钟的第1个跳变沿(上升沿或下降沿)进行数据发送,在第2个跳变沿(上升沿或下降沿)数据采样

4种模式

  • CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,即数据采样在上升沿,数据发送是在下降沿

  • CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,即数据发送是在上升沿,数据采样是在下降沿

  • CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采样是在第1个边沿,也就是SCLK由高电平到低电平的跳变,即数据采样在下降沿,数据发送在上升沿

  • CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,即数据发送是在下降沿,数据采样在上升沿

通信过程

  1. 拉低对应SS信号线,表示与该设备进行通信
  2. 主机(Master)将要发送的数据写到发送数据缓存区,缓存区经过移位寄存器(0~7),串行移位寄存器通过MOSI信号线将字节一位一位的移出去传送给从机,从机的MISO接口接收到的数据经过移位寄存器一位一位的移到接收缓存区。
  3. 从机(Slave)也将自己的串行移位寄存器(0~7)中的内容通过MISO信号线返回给主机。

参考
通信过程

UART

通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议。

UART

通信协议

数据包由起始位、数据帧、奇偶校验位和停止位组成。
通信协议
在这里插入图片描述

起始位
当不传输数据时,UART数据传输线通常保持高电压电平。
若要开始数据传输,发送UART会将传输线从高电平拉到低电平并保持1个时钟周期。当接收UART检测到高到低电压跃迁时,便开始以波特率对应的频率读取数据帧中的位。

数据帧
数据帧包含所传输的实际数据。
如果使用奇偶校验位,数据帧长度可以是5位到8位。
如果不使用奇偶校验位,数据帧长度可以是9位。
在大多数情况下,数据以最低有效位优先方式发送。

奇偶校验

  • 奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’。
  • 偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。

停止位

为了表示数据包结束,发送UART将数据传输线从低电压驱动到高电压并保持1到2位时间。

参考

波特率
数据传输速率使用波特率来表示,单位bps(bits per second)。
9600bps:传输一个比特需要的时间是1/9600≈104.2us。

SCCB

Serial Camera Control Bus,串行摄像头控制总线,有两种工作模式,一主多从,一主一从模式。一主多从,即3线操作;一主一从,即2线操作。

在这里插入图片描述
在这里插入图片描述
通信协议
通信协议

相关内容

热门资讯

线程安全问题,两种锁(sync... 安全问题 多个线程同时操作一个共享数据时,就有可能造成错误,如重复操作&...
神经网络算法 SamNum = 100; % 总样本数 TestSamNum = 101; % 测...
奔腾B70怎么样-车主点评-真... 今天给各位分享奔腾B70怎么样-车主点评-真实评价-口碑的知识,其中也会对奔腾b70这车质量到底怎么...
乐驰1.0油耗真实油耗多少(乐... 本篇文章极速百科给大家谈谈乐驰1.0油耗真实油耗多少,以及乐驰10几个油对应的知识点,希望对各位有所...
女人梦见老虎是什么预兆,女人梦... 女人梦见老虎是什么预兆目录女人梦见老虎是什么预兆女人梦到老虎预示着什么意思梦见老虎是什么意思女人梦见...
出门旅游必带的物品有哪些,旅游... 出门旅游必带的物品有哪些目录出门旅游必带的物品有哪些旅游带些什么必备用品出行旅游应该带些什么?出门旅...
数据分析Numpy之布尔索引 布尔数据:只有两种值,即真(True)或假&...
深入理解JVM虚拟机(二) 目录: (1)堆 (2)堆-内...
【Java SE】变量的本质 目录一. 前言二. 变量(variable)2.1 性质2.2 变量类型2.2.1 核心区别2.3 ...
金属的截止频率(红限)是什么,... 金属的截止频率(红限)是什么目录金属的截止频率(红限)是什么极限频率的介绍什么是金属的截止频率光电效...
曾国藩有那七句最著名的名言,曾... 曾国藩有那七句最著名的名言目录曾国藩有那七句最著名的名言曾国藩说过的名言名句。曾国藩的名言曾国藩名言...
二八佳人打一生肖(二八佳人打一... 今天给各位分享二八佳人打一生肖的知识,其中也会对二八佳人打一生肖是什么进行解释,如果能碰巧解决你现在...
水晶底是什么材质,nike 篮... 水晶底是什么材质目录水晶底是什么材质nike 篮球鞋水晶底氧化吗?水晶是什么材料玻璃杯水晶底和烧厚底...
从0开始学python -67 Python3 pip pip 是 Python 包管理工具,该工具提供了对 Pyth...
接入HMS Core应用内支付... 华为HMS Core应用内支付服务(In-App Purchases,I...
怎么用pscs6的路径选择工具... 怎么用pscs6的路径选择工具目录怎么用pscs6的路径选择工具ps如何选择路径ps如何选择路径区域...
电动车后面总是哒哒响asdad... 本篇文章极速百科给大家谈谈电动车后面总是哒哒响asdad1,以及电动车后面总是哒哒响维修视频对应的知...
新起亚K3的CVT耐用吗?起亚... 今天给各位分享新起亚K3的CVT耐用吗?起亚K3七速双离合到底好不好的知识,其中也会对起亚k314t...
职场kpl是什么意思,kpl在... 职场kpl是什么意思目录职场kpl是什么意思kpl在工作中是什么意思?职场kpl是什么意思职场kpl...
那些我在初级程序员阶段犯过的错 学习鉴别,形成习惯,避免犯错我要先说清楚一件事。如果你是一个初级程序员&...
完全小白的pycharm深度学... 完全小白的pycharm深度学习调试+for循环断点条件设置写在最前面基础方法pycharm...
MongoDB增加计算列并修改... 1. 增加、删除列 通过聚合,使用操作符$set增加列;修改结果...
阿里云PAI-DeepRec ... 阿里云联合英特尔举办的“创新大师杯”全球AI极客挑战赛——PAI-DeepRec CTR模型性能优化...
评价老师上课的评语有哪些,对上... 评价老师上课的评语有哪些目录评价老师上课的评语有哪些对上课教师课堂的评价怎样用专业术语评价任课老师讲...
噬血代码ign评分,噬血代码有... 噬血代码ign评分目录噬血代码ign评分噬血代码有缺陷是什么意思IGN评分是什么意思噬血代码能力值怎...
java并发 AQS 什么是AQS? 为什么它是核心?AQS的核心思想是什么? 它是怎么实现的? 底层数据结构等AQS有哪...
长喙的意思长喙解释(长喙的意思... 今天给各位分享长喙的意思长喙解释的知识,其中也会对长喙的意思和拼音进行解释,如果能碰巧解决你现在面临...
广西壮族自治区出租汽车司机崔腿... 今天给各位分享广西壮族自治区出租汽车司机崔腿粗师傅在四十四棵死涩...的知识,其中也会对广西壮族自治...
开发中常用多线程异步操作场景解... 场景一:批量操作,事务控制部分回滚 第一步:创建现场池,注意不同业务场景...
信息系统项目管理师 第2章 信... 1.信息技术及其发展 可分为硬技术(物化技术)传感器、服务器、智能手机、通信卫星和软技术(非物化技术...