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协议简介。(如果有错误,还请大家指出来,谢谢!)

相关推荐
吴声子夜歌16 分钟前
Linux命令——学习Shell(三)
linux·chrome·学习
小猪佩奇TONY1 小时前
Linux 内核学习(18) --- linux dma_buf 机制
linux·运维·学习
叶子野格1 小时前
《Verilog学习:数字系统设计基础》
学习·fpga开发
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day36|阿里云 OSS 文件上传、Spring 事务、全局异常思维导图复盘
java·学习·阿里云
LuminousCPP1 小时前
数据结构-排序(一):基础排序算法横向对比|冒泡、插入、希尔、堆与双向选择,详解二分 / Knuth 增量
c语言·数据结构·笔记·算法·排序算法
Linux-lucky1 小时前
33-Linux学习之旅之MySQL用户管理
java·linux·运维·学习·mysql·ubuntu
柳鲲鹏2 小时前
股票打新,中签为什么难?
笔记
亮工硬件2 小时前
1-8 简易串口通讯协议(UART + 自定义帧协议)
笔记·stm32·单片机·嵌入式硬件·学习
老猿讲编程2 小时前
【Eclipse OpenSOVD学习之二】 SOVD 协议原理与标准背景
学习·eclipse·嵌入式软件·车载·sovd
蓝天下的守望者2 小时前
ARM SOC architecture学习文档整理
arm开发·学习