通信协议整理之 IIC 通信
文章目录
- 通信协议整理之 IIC 通信
- 简介
- 工作原理
- 数据传输信号
- 数据有效条件
- 起始条件和终止条件
- 地址
- 读/写
- 应答
- 数据
- 传输步骤
- IIC 通信优缺点
- 补充
简介
IIC 是一种串行同步通信总线( 半双工 ),一般有两根信号线,一根是双向的串行数据线 SDA ,另一根是时钟线 SCL 。 IIC 总线可挂载多个主设备,多个从设备,且每个接到 IIC 总线上的器件都有唯一的地址。 IIC 总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号,这些信号中,起始信号是必需的,结束信号和应答信号, 都可以不要。 IIC 协议广泛应用在 OLED 显示器、气压传感器或陀螺仪/加速度计等模块的项目中。
SDA (串行数据):主机和从机发送和接收数据的线路。
SCL (串行时钟):传输时钟信号的线路。
根据串行通信及同步通信的特点可知, IIC 总线的数据沿着 SDA 逐位传输,且位的输出通过主机和从机之间共享的时钟信号与位采样同步,时钟信号始终由主站控制。
串行通信和同步通信详情请见:通信协议整理
工作原理
使用 IIC 通信时,数据在消息中传输。消息又被分解为数据帧。每条消息都有一个地址帧,其中包含从机的二进制地址,以及一个或多个有效数据的数据帧。该消息还包括每个数据帧之间的开始和停止条件、读/写位和 ACK/NACK 位。
数据传输信号
数据有效条件
IIC 总线进行数据传输时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的电平状态才允许改变。因此,在时钟信号为高电平期间即 SCL 为 1 时,读取到的为有效数据。
起始条件和终止条件
SCL 线为高电平期间, SDA 线由高电平向低电平的变化表示起始信号; SCL 线为高电平期间, SDA 线由低电平到高电平的变化表示终止信号。起始信号和终止信号都是由主机发送的。在起始信号产生之后,总线处于被占用的状态,在终止信号产生之后,总线处于空闲状态。
每次数据传送总是由主机产生的终止信号来结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。
起始条件:SCL:高电平期间; SDA:由高到低。
终止条件:SCL:高电平器件; SDA:由低到高。
地址
IIC 通过寻址来让从机知道数据正在发送给它,而不是另一个从机站。
地址帧始终是新消息中起始位之后的第一个帧。后面的字节都是数据,不再是寻址,除非又重新来一个起始信号。主机发送地址时,总线上的每个从机都将地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址。
地址帧:每个从机唯一的 7 位、 8 位或 10 位序列,当主机想要与其通信时,该序列标识从机。
读/写
地址帧在末尾包含的一个位,通知从机是要向其写入还是从中读出数据。如果主机要向从机写数据,则读/写位为低电平,反之该位为高电平。
读/写位: 指定主机是向从机发送数据还是从中请求数据的单个位。
应答
接收数据的 IIC 设备在接收到数据后,向发送数据的 IIC 设备发出特定的低电平脉冲,表示已收到数据。
ACK/NACK 位:消息中的每个帧后跟一个确认/不确认位。如果成功接收地址帧或数据帧,则从接收方向发送方返回 ACK 位,反之返回 NACK 位。
数据
在主机检测到来自从机寻址应答的 ACK 位后,数据帧就可以发送了。
数据帧的长度始终为 8 位,并且首先发送最高有效位。每个数据帧后紧跟一个 ACK/NACK 位,以验证是否已成功接收该帧。在发送下一个数据帧之前,ACK位必须由主机或从机接收。
发送完所有数据帧后,主机可以向从机发送停止条件以停止传输。
传输步骤
- 主机发送起始信号,将启动信号发送到每个连接的从机。
#mermaid-svg-vZeuzIsntbNoZv7b {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vZeuzIsntbNoZv7b .error-icon{fill:#552222;}#mermaid-svg-vZeuzIsntbNoZv7b .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vZeuzIsntbNoZv7b .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-vZeuzIsntbNoZv7b .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vZeuzIsntbNoZv7b .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vZeuzIsntbNoZv7b .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vZeuzIsntbNoZv7b .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vZeuzIsntbNoZv7b .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vZeuzIsntbNoZv7b .marker.cross{stroke:#333333;}#mermaid-svg-vZeuzIsntbNoZv7b svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vZeuzIsntbNoZv7b .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vZeuzIsntbNoZv7b .cluster-label text{fill:#333;}#mermaid-svg-vZeuzIsntbNoZv7b .cluster-label span{color:#333;}#mermaid-svg-vZeuzIsntbNoZv7b .label text,#mermaid-svg-vZeuzIsntbNoZv7b span{fill:#333;color:#333;}#mermaid-svg-vZeuzIsntbNoZv7b .node rect,#mermaid-svg-vZeuzIsntbNoZv7b .node circle,#mermaid-svg-vZeuzIsntbNoZv7b .node ellipse,#mermaid-svg-vZeuzIsntbNoZv7b .node polygon,#mermaid-svg-vZeuzIsntbNoZv7b .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vZeuzIsntbNoZv7b .node .label{text-align:center;}#mermaid-svg-vZeuzIsntbNoZv7b .node.clickable{cursor:pointer;}#mermaid-svg-vZeuzIsntbNoZv7b .arrowheadPath{fill:#333333;}#mermaid-svg-vZeuzIsntbNoZv7b .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vZeuzIsntbNoZv7b .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vZeuzIsntbNoZv7b .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-vZeuzIsntbNoZv7b .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-vZeuzIsntbNoZv7b .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vZeuzIsntbNoZv7b .cluster text{fill:#333;}#mermaid-svg-vZeuzIsntbNoZv7b .cluster span{color:#333;}#mermaid-svg-vZeuzIsntbNoZv7b div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vZeuzIsntbNoZv7b :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
起始信号
主机
从机
- 主机向每个从机发送它想要与之通信的从机的 7 位、 8 位或 10 位地址,以及读/写位。
#mermaid-svg-q4sY4pItdtNXwKCY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-q4sY4pItdtNXwKCY .error-icon{fill:#552222;}#mermaid-svg-q4sY4pItdtNXwKCY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-q4sY4pItdtNXwKCY .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-q4sY4pItdtNXwKCY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-q4sY4pItdtNXwKCY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-q4sY4pItdtNXwKCY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-q4sY4pItdtNXwKCY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-q4sY4pItdtNXwKCY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-q4sY4pItdtNXwKCY .marker.cross{stroke:#333333;}#mermaid-svg-q4sY4pItdtNXwKCY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-q4sY4pItdtNXwKCY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-q4sY4pItdtNXwKCY .cluster-label text{fill:#333;}#mermaid-svg-q4sY4pItdtNXwKCY .cluster-label span{color:#333;}#mermaid-svg-q4sY4pItdtNXwKCY .label text,#mermaid-svg-q4sY4pItdtNXwKCY span{fill:#333;color:#333;}#mermaid-svg-q4sY4pItdtNXwKCY .node rect,#mermaid-svg-q4sY4pItdtNXwKCY .node circle,#mermaid-svg-q4sY4pItdtNXwKCY .node ellipse,#mermaid-svg-q4sY4pItdtNXwKCY .node polygon,#mermaid-svg-q4sY4pItdtNXwKCY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-q4sY4pItdtNXwKCY .node .label{text-align:center;}#mermaid-svg-q4sY4pItdtNXwKCY .node.clickable{cursor:pointer;}#mermaid-svg-q4sY4pItdtNXwKCY .arrowheadPath{fill:#333333;}#mermaid-svg-q4sY4pItdtNXwKCY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-q4sY4pItdtNXwKCY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-q4sY4pItdtNXwKCY .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-q4sY4pItdtNXwKCY .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-q4sY4pItdtNXwKCY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-q4sY4pItdtNXwKCY .cluster text{fill:#333;}#mermaid-svg-q4sY4pItdtNXwKCY .cluster span{color:#333;}#mermaid-svg-q4sY4pItdtNXwKCY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-q4sY4pItdtNXwKCY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
地址及读写位
主机
从机
- 每个从机进行寻址,将主机发送的地址与自身地址进行比较,若匹配,则发送 ACK 位应答信号,反之从机将 SDA 线路保持不变维持在高电平。
#mermaid-svg-LZDoZxez7gHUl9UD {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LZDoZxez7gHUl9UD .error-icon{fill:#552222;}#mermaid-svg-LZDoZxez7gHUl9UD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LZDoZxez7gHUl9UD .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-LZDoZxez7gHUl9UD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LZDoZxez7gHUl9UD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LZDoZxez7gHUl9UD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LZDoZxez7gHUl9UD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LZDoZxez7gHUl9UD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LZDoZxez7gHUl9UD .marker.cross{stroke:#333333;}#mermaid-svg-LZDoZxez7gHUl9UD svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LZDoZxez7gHUl9UD .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LZDoZxez7gHUl9UD .cluster-label text{fill:#333;}#mermaid-svg-LZDoZxez7gHUl9UD .cluster-label span{color:#333;}#mermaid-svg-LZDoZxez7gHUl9UD .label text,#mermaid-svg-LZDoZxez7gHUl9UD span{fill:#333;color:#333;}#mermaid-svg-LZDoZxez7gHUl9UD .node rect,#mermaid-svg-LZDoZxez7gHUl9UD .node circle,#mermaid-svg-LZDoZxez7gHUl9UD .node ellipse,#mermaid-svg-LZDoZxez7gHUl9UD .node polygon,#mermaid-svg-LZDoZxez7gHUl9UD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LZDoZxez7gHUl9UD .node .label{text-align:center;}#mermaid-svg-LZDoZxez7gHUl9UD .node.clickable{cursor:pointer;}#mermaid-svg-LZDoZxez7gHUl9UD .arrowheadPath{fill:#333333;}#mermaid-svg-LZDoZxez7gHUl9UD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LZDoZxez7gHUl9UD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LZDoZxez7gHUl9UD .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-LZDoZxez7gHUl9UD .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-LZDoZxez7gHUl9UD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LZDoZxez7gHUl9UD .cluster text{fill:#333;}#mermaid-svg-LZDoZxez7gHUl9UD .cluster span{color:#333;}#mermaid-svg-LZDoZxez7gHUl9UD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LZDoZxez7gHUl9UD :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
主机
从机
寻址
产生 ACK 应答信号
地址匹配
地址不匹配
从机 SDA 维持高电平
- 主机发送或接收数据帧。
#mermaid-svg-F5uTLZysc1jayNxF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-F5uTLZysc1jayNxF .error-icon{fill:#552222;}#mermaid-svg-F5uTLZysc1jayNxF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-F5uTLZysc1jayNxF .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-F5uTLZysc1jayNxF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-F5uTLZysc1jayNxF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-F5uTLZysc1jayNxF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-F5uTLZysc1jayNxF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-F5uTLZysc1jayNxF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-F5uTLZysc1jayNxF .marker.cross{stroke:#333333;}#mermaid-svg-F5uTLZysc1jayNxF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-F5uTLZysc1jayNxF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-F5uTLZysc1jayNxF .cluster-label text{fill:#333;}#mermaid-svg-F5uTLZysc1jayNxF .cluster-label span{color:#333;}#mermaid-svg-F5uTLZysc1jayNxF .label text,#mermaid-svg-F5uTLZysc1jayNxF span{fill:#333;color:#333;}#mermaid-svg-F5uTLZysc1jayNxF .node rect,#mermaid-svg-F5uTLZysc1jayNxF .node circle,#mermaid-svg-F5uTLZysc1jayNxF .node ellipse,#mermaid-svg-F5uTLZysc1jayNxF .node polygon,#mermaid-svg-F5uTLZysc1jayNxF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-F5uTLZysc1jayNxF .node .label{text-align:center;}#mermaid-svg-F5uTLZysc1jayNxF .node.clickable{cursor:pointer;}#mermaid-svg-F5uTLZysc1jayNxF .arrowheadPath{fill:#333333;}#mermaid-svg-F5uTLZysc1jayNxF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-F5uTLZysc1jayNxF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-F5uTLZysc1jayNxF .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-F5uTLZysc1jayNxF .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-F5uTLZysc1jayNxF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-F5uTLZysc1jayNxF .cluster text{fill:#333;}#mermaid-svg-F5uTLZysc1jayNxF .cluster span{color:#333;}#mermaid-svg-F5uTLZysc1jayNxF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-F5uTLZysc1jayNxF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
数据帧
数据帧
主机
从机
- 传输完每个数据帧后,接收方向发送方返回 ACK 位应答信号,确认成功接收数据帧。
#mermaid-svg-1lONm2wJXmT4q1UW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1lONm2wJXmT4q1UW .error-icon{fill:#552222;}#mermaid-svg-1lONm2wJXmT4q1UW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1lONm2wJXmT4q1UW .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1lONm2wJXmT4q1UW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1lONm2wJXmT4q1UW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1lONm2wJXmT4q1UW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1lONm2wJXmT4q1UW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1lONm2wJXmT4q1UW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1lONm2wJXmT4q1UW .marker.cross{stroke:#333333;}#mermaid-svg-1lONm2wJXmT4q1UW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1lONm2wJXmT4q1UW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1lONm2wJXmT4q1UW .cluster-label text{fill:#333;}#mermaid-svg-1lONm2wJXmT4q1UW .cluster-label span{color:#333;}#mermaid-svg-1lONm2wJXmT4q1UW .label text,#mermaid-svg-1lONm2wJXmT4q1UW span{fill:#333;color:#333;}#mermaid-svg-1lONm2wJXmT4q1UW .node rect,#mermaid-svg-1lONm2wJXmT4q1UW .node circle,#mermaid-svg-1lONm2wJXmT4q1UW .node ellipse,#mermaid-svg-1lONm2wJXmT4q1UW .node polygon,#mermaid-svg-1lONm2wJXmT4q1UW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1lONm2wJXmT4q1UW .node .label{text-align:center;}#mermaid-svg-1lONm2wJXmT4q1UW .node.clickable{cursor:pointer;}#mermaid-svg-1lONm2wJXmT4q1UW .arrowheadPath{fill:#333333;}#mermaid-svg-1lONm2wJXmT4q1UW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1lONm2wJXmT4q1UW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1lONm2wJXmT4q1UW .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1lONm2wJXmT4q1UW .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1lONm2wJXmT4q1UW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1lONm2wJXmT4q1UW .cluster text{fill:#333;}#mermaid-svg-1lONm2wJXmT4q1UW .cluster span{color:#333;}#mermaid-svg-1lONm2wJXmT4q1UW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1lONm2wJXmT4q1UW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
主机
从机
传输完成
产生 ACK 应答信号
- 主机发送停止信号。
#mermaid-svg-uvDpub63jOuxTtV9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uvDpub63jOuxTtV9 .error-icon{fill:#552222;}#mermaid-svg-uvDpub63jOuxTtV9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uvDpub63jOuxTtV9 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-uvDpub63jOuxTtV9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uvDpub63jOuxTtV9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uvDpub63jOuxTtV9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uvDpub63jOuxTtV9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uvDpub63jOuxTtV9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uvDpub63jOuxTtV9 .marker.cross{stroke:#333333;}#mermaid-svg-uvDpub63jOuxTtV9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uvDpub63jOuxTtV9 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-uvDpub63jOuxTtV9 .cluster-label text{fill:#333;}#mermaid-svg-uvDpub63jOuxTtV9 .cluster-label span{color:#333;}#mermaid-svg-uvDpub63jOuxTtV9 .label text,#mermaid-svg-uvDpub63jOuxTtV9 span{fill:#333;color:#333;}#mermaid-svg-uvDpub63jOuxTtV9 .node rect,#mermaid-svg-uvDpub63jOuxTtV9 .node circle,#mermaid-svg-uvDpub63jOuxTtV9 .node ellipse,#mermaid-svg-uvDpub63jOuxTtV9 .node polygon,#mermaid-svg-uvDpub63jOuxTtV9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uvDpub63jOuxTtV9 .node .label{text-align:center;}#mermaid-svg-uvDpub63jOuxTtV9 .node.clickable{cursor:pointer;}#mermaid-svg-uvDpub63jOuxTtV9 .arrowheadPath{fill:#333333;}#mermaid-svg-uvDpub63jOuxTtV9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uvDpub63jOuxTtV9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uvDpub63jOuxTtV9 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-uvDpub63jOuxTtV9 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-uvDpub63jOuxTtV9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uvDpub63jOuxTtV9 .cluster text{fill:#333;}#mermaid-svg-uvDpub63jOuxTtV9 .cluster span{color:#333;}#mermaid-svg-uvDpub63jOuxTtV9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-uvDpub63jOuxTtV9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
停止信号
主机
从机
IIC 通信优缺点
优点:
- 仅使用两根信号线
- 支持多个主机和多个从机
- 可使用 ACK/NACK 位确认每帧是否成功传输
缺点:
补充
硬件 IIC 和 软件模拟 IIC
硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但是程序较为繁琐。
软件I2C一般是用GPIO管脚,用软件控制管脚状态以模拟I2C通信波形。
优缺点:
- 硬件IIC用法比较复杂,模拟IIC的流程更清楚一些。
- 硬件IIC速度比模拟快,并且可以用DMA
- 模拟IIC可以在任何管脚上,而硬件只能在固定管脚上。
- 硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。
至于如何区分它们,最关键的一点为,软件 IIC 没有寄存器配置的概念,所有时许都是通过 IO 口拉高拉低写时序完成。
软件 IIC 是使用程序控制 SCL , SDA 线输出高低电平,模拟 IIC 协议的时序。一般较硬件 IIC 稳定,但是程序较为繁琐。
硬件 IIC 只要调用 IIC 的控制函数即可,不用直接的去控制 SCL , SDA 高低电平的输出。但是有些单片机的硬件 IIC 不太稳定,调试问题较多。
通信协议整理之 IIC 通信相关推荐
- 通信协议整理之 SPI 通信
通信协议整理之 SPI 通信 文章目录 通信协议整理之 SPI 通信 简介 工作原理 通信连接方式 补充 硬件 SPI 和模拟 SPI 简介 SPI是串行外设接口(Serial Peripheral ...
- IIC通信协议(硬件实现IIC通信详解I)
IIC通信协议 什么是IIC协议 协议层 起始信号和停止信号 数据的有效性 什么是IIC协议 I2C(Inter-Integrated Circuit)通讯协议是由 Phiilps 公司开发的两线式串 ...
- 51单片机常用通信方式之IIC通信(二)
IIC通信是一种同步通信方式,同步通信是采用一个同步时钟线,连到收发双方,使收发双方达到完全同步.则IIC通信硬件连接就有四根线VCC.GND.SDA.SCL,SDA是传送数据的,SCL是控制时序的, ...
- 串口通信,IIC通信,SPI通信的简单区别
一.串口通信 串口通信就是RS-232通信,只有两根线txd和rxd,通信双方必须设定相同的波特率,传输距离比较近. 二.IIC通信 IIC通信是最简单的串行通信协议,只需要一根数据线和一根时钟线,就 ...
- iic通信的深入理解(主从设备通信)
虽然之前也研究了先iic同行基本的时序你弄明白了,可是在机子写at24c02驱动的时候由于理解不够透彻出了点问题. 一.写数据 24c02的写入数据,可以看到主从设备iic中写的过程:起始信号-> ...
- STM32 PAJ7620U2手势识别模块(IIC通信)程序源码详解
最近在自学设计下基于STM32单片机的项目,想用手势识别模块做一点好玩的,做个手势控制家居设备开关,另外正好借此巩固I²C 通信.因此,我想借这个机会在这里和大家分享一下自己学习STM32单片机时的所 ...
- STM32CubMX自学笔记(十)---IIC通信实验
STM32CubMX自学笔记(十)-IIC通信实验 I2C通信协议的简介 引脚少,硬件实现简单,可扩展性强,不需要外部收发设备,广泛用在多个集成电路通信. 物理层特点: 信号线SDA和时钟线SCL 1 ...
- 从IIC通信原理到使用 —— MPU6050
IIC通信详解 -- 基于MPU6050模块 从IIC通信原理到使用 -- MPU6050 IIC通信可以简单地理解成就是数据的通信,就是单片机(主机)与设备(从机)之间的一种通信协议,两者必须遵从这 ...
- Proteus仿真之IIC通信(AT24C02)
1.IIC通信简介:IIC是一种利用时钟线SCL和数据线SDA进行数据传输的通信协议.IIC的时序图如下所示: 我们需要看懂时序图中开始信号.数据传输.应答信号和停止信号. 开始信号:SCL为高电平时 ...
最新文章
- 简单工厂(SimpleFactory)模式简介
- Qt中为自己的程序建立一个消息循环
- 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)
- unity官方教程-TANKS(一)
- JAXB自定义绑定– Java.util.Date / Spring 3序列化
- java的classpath
- 【FICO 汇率】汇率
- 正则匹配承兑的html,正则匹配闭合HTML标签(支持嵌套)
- 数据爆炸时代,云存储在“破圈”!
- 博弈论学习笔记——拍卖原理
- OpenCV:图像平移
- 福大软工 · 真 · 最终作业
- “中国年龄最小的黑客”汪正扬资料介绍 写编程代码曾敲坏电脑
- pvt检查是什么意思_EVT、DVT、PVT是什么意思
- VMI - 供应商管理库存
- 一款APP从设计稿到切图过程全方位揭秘
- revit建模中两面墙贴在一起怎么插入门窗及隐框玻璃的做法
- Learning Hammerspoon中英文互译
- Unity 向目标移动,并朝向目标
- 图解CISCO 3550忘记密码解决方法
热门文章
- html隐藏换行,css强制换行和超出隐藏实现
- 计算机图形学期末考试嘉应学院,嘉应学院数学系模拟考试试卷一及参考答案
- omni graffle
- 插件 iOS开发之微信自动抢红包功能
- 【洛谷 4994】终于结束的起点
- C:\Program Files (x86)\Common Files\microsoft shared\DevServer\10.0
- AI如何赋能产业外勤工作(FSM)
- 实验九:按键控制无源蜂鸣器演奏《生日快乐》
- 苹果库克:我每天晚上 9 点半睡觉,凌晨 4 点起床。网友:太自律了
- 使用GHS MULTI新建工程并编译代码