0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解析IIC专题原理及应用篇(一)

FPGA之家 来源:CSDN技术社区 作者:Angelia_cfq 2021-06-01 11:43 次阅读

一、操作

1.1、系统的概述

I2C系统使用串行数据线(SDA)和串行时钟线(SCL)进行数据传输。连接到这两个信号的所有设备必须具有漏极开路或集电极开路输出。这两条线上的逻辑“与”功能都通过外部上拉电阻器来实现。

数据在主机和从机之间以字节为单位同步传输到SDA线上。每个数据字节为8位长。每个数据位都有一个SCL时钟脉冲,并且首先发送MSB。每个传送的字节后都有一个应答位。在SCL的高电平期间对每个位进行采样;因此,只能在SCL的低电平期间更改SDA线路电平,并且必须在SCL的高电平期间保持稳定。若SCL为高电平时,SDA线上存在跳变则被解释为命令(请参见START和STOP信号)。

1.2、IIC协议

从宏观的角度讲,IIC协议可以包含以下四个部分:

1、开始信号的产生(START)

2、从机地址传输

3、数据传输

4、停止信号产生(STOP)

1.2.1 开始信号(START)

当总线空闲/就绪时,这意味着没有主机设备正在使用总线(SCL和SDA线均为高电平),主机可以通过发送START信号来启动传输。START信号(通常称为STA-bit)定义为:SCL为高电平时,SDA从高到低的跳变。START信号表示新数据传输的开始。Repeated START是一种启动信号,但没有先产生一个停止信号。主机使用这种方法在不释放总线的情况下,以不同的传输方式(例如,从写入设备到从设备读取)与另一个从机或同一从机通信

当命令寄存器中的STA-bit置1且RD或WR位置1时,内核产生一个START信号。根据SCL线的当前状态,将生成START或Repeated START。

1.2.2 地址线传输

在START信号之后,主机立即传送的数据的第一个字节是从机地址。这是一个7位的调用地址,后跟RW位(7address+1RW)。RW位向从机发送数据传输方向信号。一个系统中的两个从机不能具有相同的地址。只有地址与主机发送的地址匹配的从机会通过在第9个SCL时钟周期将SDA拉为低电平来返回一个应答位来做出响应。(从机拉低SDA作为ACK)

内核将从地址传输视为写操作。将从设备的地址存储在发送寄存器中,并将WR位置1。然后,内核将在总线上传输从机地址。

1.2.3 数据传输

一旦成功完成从机寻址,就可以按照主机发送的RW位指定的方向逐字节进行数据传输。在第9个SCL时钟周期中,每个传输的字节后都有一个应答位。如果从机发出“无应答”信号,则主机可以产生一个STOP信号来中止数据传输,或者产生一个Repeated START信号并开始一个新的传输周期。

如果作为接收设备的主机未应答从机,则从机释放SDA线供主机产生STOP或Repeated START信号。

要将数据写入从机,将要发送的数据存储在发送寄存器中,并将WR位置1。要从从机读取数据,请将RD位置1。在传输过程中,核心设置了TIP标志(Transfer in progress),指示正在进行传输。传输完成后,将重置TIP标志,设置IF标志(Interrupt Flag),并在使能时产生中断。设置IF标志后,接收寄存器包含有效数据。当TIP标志复位时,用户可以发出新的写或读命令。

1.2.4 停止信号

主机可以通过产生一个STOP信号来终止通信。STOP信号(通常称为P位)定义为SCL为逻辑1时SDA从低到高的跳变。

1.3、仲裁过程

1.3.1 时钟同步化

I2C总线是真正的多主机总线,可以在其上连接多个主机。如果两个或多个主机同时尝试控制总线,则时钟同步过程将确定总线时钟。由于I2C信号采用“线与”连接,从高到低的跳变会影响连接到总线的所有设备。因此,SCL线上从高电平到低电平的转换会导致所有相关设备都将其低电平周期计算在内。一旦设备时钟变低,它将使SCL线保持在该状态,直到达到时钟高状态为止。由于采用“线与”连接,因此SCL线将由具有最短低电平周期的设备保持低电平,并由具有最短高电平周期的设备保持高电平。

665fc762-c238-11eb-9e57-12bb97331649.png

1.3.2 时钟伸展

从设备可以使用时钟同步机制来降低传输比特率。主机将SCL拉低后,从机可以拉低SCL为所需的时间,然后释放它。如果从机的SCL低电平周期大于主机的SCL低电平周期,则将延长所得到的SCL总线信号低电平周期,从而插入等待状态。

编辑;jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IIC
    IIC
    +关注

    关注

    11

    文章

    285

    浏览量

    37795
  • SDA
    SDA
    +关注

    关注

    0

    文章

    122

    浏览量

    27541
  • SCL
    SCL
    +关注

    关注

    1

    文章

    238

    浏览量

    16866
  • MSB
    MSB
    +关注

    关注

    0

    文章

    13

    浏览量

    8214

原文标题:IIC专题原理及应用篇(一)

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA实现IIC协议的设计

    今天给大家带来的是IIC通信,IIC协议应用非常广泛,例如与MPU6050进行通信,配置OV5640摄像头、驱动OLED屏幕等等,都需要使用到IIC协议,所以掌握它是非常必要的,废话不多说,接着往下看。
    的头像 发表于 03-04 10:49 578次阅读
    FPGA实现<b class='flag-5'>IIC</b>协议的设计

    IIC总线的FPGA实现说明

    DE2_TV中,有关于寄存器的配置的部分,采用的方法是通过IIC的功能,这里对IIC总线的FPGA实现做个说明。
    的头像 发表于 01-05 10:16 313次阅读
    <b class='flag-5'>IIC</b>总线的FPGA实现说明

    硬件iic对比模拟iic是好用点吗?

    硬件iic对比模拟iic是好用点么?为什么很多库函数里面都自带硬件的,而没有模拟的?
    发表于 11-08 06:31

    STM32基础知识:IIC概述与软件模拟IIC

    内部集成电路(Inter Integrated circuit )的简称叫做IIC,是一种简单的、半双工同步通信的串行通信接口,IIC总线是上世纪80年代(1982年)由飞利浦公司设计出来,当时的目的是为了给MCU和外围芯片提供更简单的交互方式。
    的头像 发表于 10-26 11:47 673次阅读
    STM32基础知识:<b class='flag-5'>IIC</b>概述与软件模拟<b class='flag-5'>IIC</b>

    只有iic,但有两个设备需要用到iic,那iic可以分时复用吗?

    请问,我要是只有iic,但有两个设备需要用到iic,那iic可以分时复用,会不会有冲突??????
    发表于 10-26 07:39

    请问硬件IIC和软件IIC驱动EEPROM哪个好些?

    硬件IIC和软件IIC驱动EEPROM哪个好些?
    发表于 10-23 06:08

    STM32的软件模拟IIC和硬件IIC有什么区别?

    STM32的软件模拟IIC和硬件IIC有什么区别
    发表于 10-10 06:09

    用面向对象思想封装IIC、AT24C64驱动

    使用面向对象的编程思想封装IIC驱动,将IIC的属性和操作封装成一个库,在需要创建一个IIC设备时只需要实例化一个IIC对象即可,本文是基于STM32和HAL库做进一步封装的。
    的头像 发表于 10-08 15:35 497次阅读

    HarmonyOS资料下载专题

    HarmonyOS资料下载专题:从鸿蒙出世到现在,对于鸿蒙资料查询下载,大家是否有点迷茫-不知去何处查找。为此,本专题汇集了HarmonyOS从入门到精通的各种开发资料,内容包括:设计参考、程序源码、开发实例、教程笔记等等,为大家节省了大量的资料搜索时间,方便大家轻松下载
    发表于 10-08 14:23
    HarmonyOS资料下载<b class='flag-5'>专题</b>

    FPGA-基础电路专题

    专题为FPGA基础电路内容合计,这里有算法电路的基础电路与典型电路,还有时序逻辑电路和组合逻辑电路,如果您是刚入门的新手开发者,那么这个专题一定适合你!
    发表于 09-25 15:40
    FPGA-基础电路<b class='flag-5'>专题</b>

    IIC总线学习笔记

    IIC是飞利浦提出的一种通信总线结构,其硬件架构比较简单,仅包含SCL和SDA两条线。根据最新的IIC总线标准,IIC总线包含Standard-mode(100kbit/s)、Fast-mode
    发表于 09-20 15:18 504次阅读
    <b class='flag-5'>IIC</b>总线学习笔记

    iic的时钟信号哪里来的?

    iic的时钟信号哪里来的? IIC(Inter-Integrated Circuit)总线是一种基于同步串行通信的通信标准。在IIC总线上,每条线路上都有两个信号,一个是时钟信号(SCL),另一个
    的头像 发表于 09-19 17:16 856次阅读

    社区说 | 精益求精: Flutter 技巧专题

    Flutter 作为深受欢迎的跨平台开发框架,迄今为止已有超过 70 万款使用 Flutter 打造的应用上架。开源生态社区更是有超过 20% 的中国开发者作出贡献。 本次 Flutter 专题
    的头像 发表于 07-25 17:45 286次阅读
    社区说 | 精益求精: Flutter 技巧<b class='flag-5'>专题</b>篇

    STM32 IIC读写AT24C02(一)

    要用IIC读写AT24C02,首先要了解IIC是什么。
    发表于 07-22 10:28 577次阅读
    STM32 <b class='flag-5'>IIC</b>读写AT24C02(一)

    基于STM32和HAL库创建一个IIC设备

    使用面向对象的编程思想封装IIC驱动,将IIC的属性和操作封装成一个库,在需要创建一个IIC设备时只需要实例化一个IIC对象即可,本文是基于STM32和HAL库做进一步封装的。
    的头像 发表于 06-26 17:15 1247次阅读