当前位置: 首页 > news >正文

FPGA学习笔记——IIC协议简介

目录

一、IIC概述

二、IIC物理层

三、IIC协议层

(1)字节传送与应答

(2)数据帧格式

四、写操作

五、读操作


一、IIC概述

        IIC (I2CInterIntegrated Circuit)即集成电路总线,由PHILIPS公司开发,使用主从架构,是由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而开发的两线式串行通信总线。IIC总线具备广泛用途,比如数据采集领域的串行AD,图像处理领域的摄像头配置,EEPROM的使用,更重要的是IIC总线上可以挂载非常多的外设。 对于一些低速器件的访问非常节省IO资源,由于是标准的总线接口,使用起来非常方便。

二、IIC物理层

SDA:双向串行数据线,传输通讯数据;

SCL:串行时钟线,用于同步通讯数据。

 物理层特点:

1IIC总线物理连接是由SDA(串行数据线)SCL(串行时钟线)上拉电阻构成,其空闲状态SCLSDA均为高电平
2IIC总线支持多主多从,总线上挂载的多个设备其中任何一个能够进行发送和接收的设备都可以成为主机。一个主控能够控制信号的传输和时钟频率,但是在任何时间点只能一个主控。所有接到IIC总线上的从设备的串行数据SDA分别接到IIC总线的SDA上,从设备的时钟线SCL分别接到IIC总线的SCL上。IIC总线上的每个从设备都有自己一个唯一的地址,来确保不同设备之间访问的准确性。
3)传输速率:IIC 总线上数据的传输速率在标准模式下可达 100kbit/s ,在快速模式下可达 400kbit/s, 在高速模式下可达 3.4Mbit/s。

三、IIC协议层

(1)字节传送与应答

每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)

1.开始条件:主设备SCL高电平时,将SDA的电平由高拉低,这种情况表示起始条件,标志着一次数据传输开始。若有两个主设备同时想控制总线先拉低SDAmaster获得控制权
2.停止条件:masterSCL 保持高电平期间,SDA 被释放,返回高电平,这种情况表示停止条件,标志着一次数据传输的终止。停止信号由master主动建立的,建立该信号之后,IIC 总线将返回空闲状态。
3.数据传输: IIC 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行时钟的配合下,在 SDA 线上逐位地串行传送每一位数据,首先传输数据最高位(MSB。进行数据传送时,在SCL 高电平期间 SDA 上的电平必须保持稳定,只有在 SCL 为低电平期间才允许 SDA 上的电平改变状态。即数据在 SCL 的上升沿到来之前就必须准备好,并在在下降沿到来之前必须保持稳定。
4.应答ACK/ NACKIIC 总线上的所有数据都是以字节传送的,发送端每发送一个字节,就必须在9SCL脉冲期间释放SDA,由接收端反馈一个应答信号。

(2)数据帧格式

        在起始信号后必须传送一个从机的地址(7位)第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T)(写数据)“1”表示主机接收数据(R)(读数据)每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址

一个从机的7位寻址位有4位是固定位3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该I2C总线系统中。

这是交流特性(AC特性),可以根据这个来写时序。


四、写操作

        进行写操作时,首先发送该器件的7位地址码写方向位“0”(共8位,即一个字节),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为相应,单片机收到应答后就可以传送数据了。

        传送数据时,首先发送一个字节的被写入器件的存储区首地址(Word Address),收到存储器器件的应答后,就逐个发送各数据字节,但每发送一个字节后都要等待应答。

字节写:主设备发送从机的地址+“0”,等待从设备响应(在第9个时钟周期等待从设备将SDA拉低),再发送寻址地址(这里我理解的就是在EEPROM里面的哪个位置开始写,相当于RAM里面的随机存),然后发送要写入的数据,最后发送停止信号。

页写:发送多个要写入的字节数据(两个及其以上)。


五、读操作

      这里的读操作分为三种:

1.当前地址读取

2.随机读取

3.顺序读取

当前地址读取:先发送该器件的7位地址码和读方向位“1”,发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为回应。

然后,从设备发送一个字节数据,主设备应返回“非应答”(高电平),并发出停止信号以结束读出操作。

随机读取:先发送该器件的7位地址码和写方向位“0”(“伪写”),发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为回应。

然后,再发一个字节的要读出器件的存储区的首地址,收到应答后,主设备要重复一次起始信号并发出器件地址和读方向位(“1”),收到器件应答后就可以读出数据字节,每读出一个字节,主设备都要回复应答信号。

当最后一个字节数据读完后,主设备应返回以“非应答”(高电平),并发出停止信号以结束读出操作。

顺序读取:先发送该器件的7位地址码和读方向位“1”,发送完后释放SDA线并在SCL线上产生第9个时钟信号。被选中的存储器器件在确认是自己的地址后,在SDA线上产生一个应答信号作为回应。

然后,从设备发送一个字节数据,主设备应返回“应答”(低电平),收到应答后,从设备就开始发送数据,每发送一个字节数据,主设备都要回应“应答”(低电平),

当最后一个字节数据读完后,主设备应返回以“非应答”(高电平),并发出停止信号以结束读出操作。


以上就是IIC协议简介。(如果有错误,还请大家指出来,谢谢!)

http://www.dtcms.com/a/337780.html

相关文章:

  • ​​​​​​​专精特新企业数据(附参考文献, 2013-2023)
  • [openvela] Hello World :从零开始的完整实践与问题复盘
  • linux-高级IO(中)
  • Python数据容器(列表,元组,字典) 从入门到精通
  • 基于Python的就业信息推荐系统 Python+Django+Vue.js
  • 封装,继承,多态
  • 【CV 目标检测】Fast RCNN模型③——模型训练/预测
  • day44_2025-08-18
  • iOS 性能监控全流程实践,从开发到上线的多工具组合方案
  • RabbitMQ ,消息进入死信交换机
  • QT 字节大小端转序方法
  • Qt5基础控件详细讲解
  • VSCode REST Client 使用总结
  • 【力扣-轮转数组 Java / Python】
  • leetcode415. 字符串相加
  • 【论文阅读】-《HopSkipJumpAttack: A Query-Efficient Decision-Based Attack》
  • Jenkins全链路教程——Jenkins调用Maven构建项目
  • 北京朝阳公园——夏日清凉来袭
  • 第7节 神经网络
  • 登上Nature!清华大学光学神经网络研究突破
  • FastAPI + React:现代 Web 前后端分离开发的全栈实践指南
  • 【原理】Unity GC 对比 C# GC
  • 电竞酒店和高校宿舍对AI云电竞游戏盒子的需求有什么不同?
  • 静态资源保存插件横评:Save All Resources 与 ResourcesSaverExt 哪个更适合你?
  • 无人机基础知识
  • 测绘级组合导航如何重新定义大型无人机的高精度导航标准?
  • 用本地代理 + ZIP 打包 + Excel 命名,优雅批量下载跨域 PDF
  • PDF转图片需要用到什么技术?苹果手机怎样将PDF转为jpg?
  • HTML/CSS 实战知识点总结:从基础到常用效果全解析
  • 2025 世界机器人大会启示录:机构学 × AI × 视频链路的融合之路