IIC通信协议总结(详细说明完整过程)

IIC通信协议总结(详细说明完整过程)IIC协议简介IIC(inter-integratedCircuit集成电路总线)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它需要两根信号线来完成信息交换。IIC的一个特殊工艺优势是微控制器只需要两个通用I/O引脚和软件即可控制芯片网络。IIC最早是飞利浦在1982年开发设计并用于自己的芯片上,一开始只允许100Khz、7-bit标准地址,1992年,IIC的第一个公共规范发行,增加了400Khz的快速模式以及10bit地址扩展。IIC协议IIC协议把传输的消息分为两种类型

大家好,又见面了,我是你们的朋友全栈君。

IIC协议简介

IIC(inter-integrated Circuit集成电路总线)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它需要两根信号线来完成信息交换。IIC的一个特殊工艺优势是微控制器只需要两个通用I/O引脚和软件即可控制芯片网络。IIC最早是飞利浦在1982年开发设计并用于自己的芯片上,一开始只允许100Khz、7-bit标准地址,1992年,IIC的第一个公共规范发行,增加了400Khz的快速模式以及10bit地址扩展。

IIC协议内容

IIC协议把传输的消息分为两种类型的帧:
地址帧–用于master指明消息发往哪搁slave;
数据帧(单个或者连续)– 由master发往slave的数据或者是接收到来自于slave的数据。一次读写单位为8bit,高位先发
注:IIC读写是相对于master来说的。
IIC总线的数据传送
1、数据位有效性的规定:
IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟电平为低电平期间,数据线上的高电平或者低电平状态才允许变化。
即数据在时钟线SCL的上升沿到来之前就需要准备好,并在下降沿到来之前必须保持稳定。
2、空闲状态:
当IIC总线的数据线SDA和时钟线同时处于高电平时,规定为总线的空闲状态。此时各个器件输出级场效应管均处在截止状态,即释放总线,由两条信号线的上拉电阻把电平拉高。
3、起始和终止信号:
SCL为高电平期间,SDA信号线由高电平向低电平的变化表示起始信号;SCL为高电平期间,SDA由低电平向高电平的变化表示终止信号。
SDA:由低到高 – 起始信号
SDA:由高到低 – 终止信号
起始信号和终止信号都是由主机发送的,起始信号产生之后,总线处于被占用的状态,在终止信号产生之后,总线就处于空闲状态。
在这里插入图片描述

4、应答信号:
发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
应答信号为低电平时,规定为有效应答(ACK,简称应答位),表示接收器已经成功地接受了该字节
应答位为高电平时,规定为非应答信号(NACK),一般表示接收器接收该字节没有成功。
对于反馈的有效应答信号ACK的要求是:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。如果接受器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个停止信号P。
5、数据传送格式:
(1)字节传输与应答:每一个字节必须保证是8bit长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随1bit的应答位(即每一帧数据一共有9bit)
(2)在IIC总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。
6、总线寻址:
(1)IIC协议规定采用7bit的寻址字节(寻址字节是起始信号后的第一个字节)其位定义如下:
| bit | 7 | 6 | 5 | 4 |3 |2|1| 0|
D7 ~ D1位组成从机地址。
D0位是数据传送的方向,0:表示主机向从机写数据,1:表示主机由从机读数据。
(2)主设备往从设备中写寄存器。数据传输格式如下:
在这里插入图片描述
1)首先由由主机发送一个开始信号,
2)然后主机在数据线上广播从机地址
3)确定数据的传输方向(是读还是写)
4)“A”代表应答,表示主机找到了从机。
5)主机发送一个字节数据,从机接收到后,会返回给主机一个应答信号,直到主机发送完数据,或者从机返回一个NACK信号,表示从机不再接收主机发送的数据。主机发送一个stop信号。此次数据传输完成。
(2)主机读取从机寄存器值:
在这里插入图片描述
1)首先由主机发送一个开始信号
2)然后主机在数据总线上广播地址
3)确定数据的传输方向(读1)
4)从机返回一个“A”代表应答,表示主机找到了从机。
5)从机返回读的数据
6)主机返回一个应答信号,表示成功接收从机发出的一个数据
7)当主机接收数据完毕,返回一个非应答信号“NACK”,从机释放数据总线,接着主机发送一个“P”信号,表示此次数据传输结束。
在这里插入图片描述
1)主机首先产生START信号
2)然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令,
3)主机等待从机的应答信号(ACK)
4)当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号,
5)当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送)所以主机重新发送一个开始start信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设 置成接收模式开始读取数据,
6)主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不在接收数据
7)主机进而产生停止信号,结束传送过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134472.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 分布式爬虫部署[通俗易懂]

    分布式爬虫部署[通俗易懂]【服务器端】1.下载redis,RedisDesktopManagerredis。2.修改配置文件(找到redis下的redis.windows.conf双击打开,找到bind并修改为0.0.0.0,然后protected-mode“no”3.打开cmd命令行进入redis的安装目录,输入redis-server.exeredis.windows.conf回车,保持程序一直开着。如果不是这个界面,证明redis服务已经开启了,需要redis-clishutdow

    2022年10月26日
  • vscode-前端插件

    vscode-前端插件文章目录AutoCloseTagAutoRenameTagBeautifyBracketPairColorizerDebuggerforChromeESLintHTMLCSSSupportHTMLSnippetsJavaScript(ES6)codesnippetsjQueryCodeSnippetsMarkdownPreviewEnhancedmarkdownlintMaterialIconThemeopeninbrowserPathIntellisenseRe

  • weblogic的热部署「建议收藏」

    weblogic的热部署「建议收藏」1、为什么要热部署大家在进行web开发的时候,都希望自己修改的内容在不手动编译、不重启服务的时候立即生效,这样可以极大的方便开发和调试。这个就是我今天要讲的weblogic的热部署。一.Weblogic热部署相关配置项 Weblogic能实现热部署功能,而且有自己的热部署机制,一般的应用在Weblogic的控制台中有如下三个配置项: servlet-reload-check-secs resour…

  • FileInputStream分析

    FileInputStream分析我们先写个简单的Demo,代码如下:packagecom.lg.io;importjava.io.FileInputStream;importjava.io.IOException;publicclassFileInputStreamDemo{publicstaticvoidmain(String[]args)throwsIOException{…

  • Web后端开发入门(1)

    Web概述:    在英语中web表示网页的意思,它用于表示Internet主机上供外界访问的资源。Internet上供外界访问的Web资源分为:    1.静态Web资源(如html页面):指web页面中始终不变的数据。    2.动态Web资源:指web页面中供人们浏览的数据是由程序产生的,也就是实时变化的数据。动态Web应用的实现手段:    静态web开发技术有html,常用动态web开发…

  • C语言和Java哪个难学?[通俗易懂]

    C语言和Java哪个难学?[通俗易懂]有人说:世界上有两种程序员,一种用Tab键,另一种用Space键。在程序员圈子有这样一条鄙视链(小道传说):C++程序员看不起C程序员,C程序员看不起Java程序员,Java程序员看不起C#程序员,C#程序员看不起美工。为什么大家普遍认为C语言比Java难?我认为原因如下:C属于底层代码,能窥探到底层,也就是说可以拿它写硬件驱动,学习C语言前面的内容比Java简单但是到了后来特别是指针、…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号