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

目录

一、IIC概述

二、IIC物理层

三、IIC协议层

(1)字节传送与应答

(2)数据帧格式

四、写操作

五、读操作


一、IIC概述

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


二、IIC物理层

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

SCL:串行时钟线,用于同步通讯数据。
物理层特点:
( 1 ) IIC 总线物理连接是由 SDA(串行数据线)SCL (串行时钟线)上拉电阻 构成,其空闲状态 SCL 和 SDA均为高电平
( 2 ) IIC 总线支持多主多从 ,总线上挂载的多个设备其中任何一个能够进行发送和接收的设备都可以成为主机。 一个主控能够控制信号的传输和时钟频率,但是在任何时间点只能一个主控。所有接到 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 的电平 由高拉低 ,这种情况表示起始条件 ,标志着一次数据传输开始。若有两个主 设备同时想控制总线先拉低SDA 的 master 获得控制权
2. 停止条件: master在SCL 保持高电平 期间, SDA 被释放 ,返回高电平,这种情况表示停止条件,标志着一次数据传输的终止。停止信号由master主动建立的,建立该信号之后,IIC 总线将返回空闲状态。
3. 数据传输: 在 IIC 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行时钟的配合下,在 SDA 线上逐位地串行传送每一位数据,首先传输数据最高位( MSB 。进行数据传送时,在SCL高电平期间, SDA 上的电平必须保持稳定,只有在 SCL 为低电平期间才允许 SDA 上的电平改变状态。即数据在 SCL 的上升沿到来之前就必须准备好,并在在下降沿到来之前必须保持稳定。
4. 应答 ACK/ NACK IIC 总线上的所有数据都是以字节传送 的,发送端每发送一个字节 ,就必须在 9个SCL脉冲期间释放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协议简介。(如果有错误,还请大家指出来,谢谢!)

相关推荐
2401_876907523 小时前
Python基础笔记
笔记
牧子与羊3 小时前
自学中医笔记(二)
笔记
lingggggaaaa3 小时前
小迪安全v2023学习笔记(六十二讲)—— PHP框架反序列化
笔记·学习·安全·web安全·网络安全·php·反序列化
我们从未走散5 小时前
JVM学习笔记-----StringTable
jvm·笔记·学习
胡萝卜3.05 小时前
数据结构初阶:排序算法(一)插入排序、选择排序
数据结构·笔记·学习·算法·排序算法·学习方法
xinzheng新政6 小时前
纸板制造制胶工艺学习记录4
学习·制造
我们从未走散8 小时前
JVM学习笔记-----类加载
笔记·学习
前路不黑暗@10 小时前
C语言:操作符详解(二)
c语言·开发语言·经验分享·笔记·学习·学习方法·visual studio
蜡笔小电芯10 小时前
【STM32】STM32H750 CubeMX 配置 USB CDC 虚拟串口笔记
笔记·stm32·嵌入式硬件