IIC协议层

IIC的协议层才是掌握IIC的关键。现在简单概括如下:

a.数据的有效性

在时钟的高电平周期内,SDA线上的数据必须保持稳定,数据线仅可以在时钟SCL为低电平时改变。

如图(2)所示:

图(2)

b.起始和结束条件

起始条件:当SCL为高电平的时候,SDA线上由高到低的跳变被定义为起始条件,结束条件:当SCL为高电平的时候,SDA线上由低到高的跳变被定义为停止条件,要注意起始和终止信号都是由主机发出的,连接到I2C总线上的器件,若具有I2C总线的硬件接口,则很容易检测到起始和终止信号。总线在起始条件之后,视为忙状态,在停止条件之后被视为空闲状态,对起始条件和结束条件的描述如下图(3)所示。

图(3)

c.应答

每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据,从机应答主机所需要的时钟仍是主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答,如图(4)所示。


图(4)

d.数据帧格式

I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。

在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。{这里小编在驱动MPU6050模块的时候,就犯过这样的错误,它写的MPU6050从机地址是0x68,因为发送从机地址的时候,要加一位读写方向位,因为刚开始应该是向这个MPU6050里写从机里某个寄存器的地址,所以应该是7位地址   0x68(1101000)+二进制位0=11010000)也就是0xD0,表示要向该IIC设备里写东西,然后再紧接着写入IIC设备里的寄存器地址,而我直接写入了0x68,导致出错},每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。

在总线的一次数据传输过程中,可以有以下几种组合方式:

[1]

主机向从机发送数据,数据传送方向在整个传送过程中不变:

注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。

    A表示应答(低电平), A非表示非应答(高电平)。S表示起始信号,P表示终止信号。

[2]主机在第一个字节后,立即从从机读数据:


[3]在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相:


一般情况下,[3]是比较常见的,比如MPU6050模块,

发送起始信号

等待从机应答

写一个从机地址+0(表示写),

等待从机应答

发送一个字节的MPU6050加速度存储寄存器地址,

等待从机应答

再发送一次起始信号

等待从机应答

写一个从机地址+1(表示读)

等待从机应答

读取MPU6050传感器数据

主机非应答

原文地址:https://www.cnblogs.com/whs-bk/p/8387556.html

时间: 2024-11-16 06:37:39

IIC协议层的相关文章

IIC协议解释(转)

IIC协议解释 推荐资源: http://m.elecfans.com/article/574049.html       and       https://blog.csdn.net/firefly_cjd/article/details/51921129  (动态图讲解) (1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有

[转] TCPIP 网络协议层对应的RFC文档

TCPIP网络协议层对应的RFC文档 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data Link Layer ARP  - Address Resolution Protocol RFC826   ( EN CN ) RARP  - Reverse Address Resolution Protocol RFC903   ( EN CN ) Internet Protocol Layer IP  - In

大型网站的 HTTPS 实践(四)——协议层以外的实践

1 前言 网上介绍https的文章并不多,更鲜有分享在大型互联网站点部署https的实践经验,我们在考虑部署https时也有重重的疑惑. 本文为大家介绍百度HTTPS的实践和一些权衡, 希望以此抛砖引玉. 本文最早发表于百度运维部官方博客 2 协议层以外的实践工作 2.1 全站覆盖https的理由 很多刚接触https的会思考,我是不是只要站点的主域名换了https就可以?答案是不行. https的目的就是保证传输过程的安全,如果只有主域名上了https,但是主域名加载的资源,比如js,css,

FPGA基础设计(四):IIC协议

很多数字传感器.数字控制的芯片(DDS.串行ADC.串行DAC)都是通过IIC总线来和控制器通信的.不过IIC协议仍然是一种慢速的通信方式,标准IIC速率为100kbit/s,快速模式速率为400kbit/s.本文致力于讲述如何用计数器控制和分频时钟控制两种方式完成IIC的读写操作. IIC协议 ??IIC协议是一种多机通讯,由SDA数据线和SCL时钟线构成串行总线,所有的IIC设备都可以挂载到总线上,但每个设备都有唯一的设备读地址和设备写地址.在使用IIC作为数字接口的芯片datasheet中

IIC协议理解(转)

目录 IIC协议理解(转) 个人小结记录 (记一下这个就够了) 以下为转载记录 概述 概述 输出级 主设备与从设备 速率 时序 空闲状态 起始位与停止位 数据的有效性 数据的传送 工作过程 主设备向从设备发送数据 主控器读取数据的过程 以C语言理解IIC title: IIC协议理解(转) date: 2019/1/28 17:50:13 toc: true --- IIC协议理解(转) 原文地址 https://www.cnblogs.com/BitArt/archive/2013/05/28

基于STM8的IIC协议--实例篇--时钟模块(DS3231)读取

1. 综述 由上篇博客可知道IIC协议如何用代码实现,本篇博客就不涉及协议内容,只讲解如何使用. 本次的实验传感为:DS3231(时钟模块),对于时钟模块的具体信息我也就不多介绍大家可以自行度娘,具体功能无非就是在单片机中起到一个获取时间的作用.然后该模块是可以由IIC协议去驱动的,再加上所要的操作也是比较简单,适合部分刚接触IIC协议而找不但传感练手的一个模块. 2. 明确任务顺序 个人习惯,在每驱动一个新传感的时候,我会将我要完成的传感分为几个任务点.接下来我就展示以下我在写DS3231模块

IIC协议

参考文章:简单的I2C协议理解.http://blog.csdn.net/zmq5411/article/details/6085740 ? 文中以EEPROM为例,且以master角度阐述. 一. 技术性能: 工作速率有100K和400K两种: 支持多机通讯: 支持多主控模块,但同一时刻只允许有一个主控: 由数据线SDA和时钟SCL构成的串行总线: 每个电路和模块都有唯一的地址: 每个器件可以使用独立电源 ? 二. 基本工作原理: 以启动信号START来掌管总线,以停止信号STOP来释放总线:

模拟IIC协议时序

IIC是飞利浦公司开发的两线式串行总线,主要应用在单片机和外围电子器件之间的数据通讯. IIC总线优点是节约总线数,稳定,快速,是目前芯片制造上非常流行的一种总线,大多数单片机已经片内集成了IIC总线接口,无需用户自己模拟,只需配置相关寄存器即可使用,但是,为了更好地理解IIC总线协议,可以自行按照IIC时序图进行模拟,加深理解. IIC总线有两条串行线,其一是时钟线SCK,其二是数据线SDA. 在寻常的应用之中,单片机常常作为主机,外围器件作为从机使用. 每一个从机器件都拥有唯一的一个地址,这

【tcp-ip学习笔记】关于IP协议层、IP地址

关于IP协议 IP协议是一种无连接不可靠的数据包传输协议,因为IP协议不能保证数据包能正确的传输到目标主机,他只负责在网路层传输,但是回尽最大努力传输.而且每次传输所走的路线都不一样. 关于IP地址 现在ipv4网络地址是一组32位的二进制数. IP地址结构 因为上面的地址前面网络号占8位,所以在互联网中只能定义256个网络,那是相当不够用的.所以有划分了下面中IP类型 A类地址主要用在大型网络中 B类地址主要用在中行网络中 C类地址主要用在小型网络中 一些特殊用途的IP地址 ①A类主机的IP地