IIC 通信协议 (一)
目录
引言
IIC协议
1、历史
2、特点
3、信号线
4、主从关系
5、通信过程
6、协议规范
地址
1、器件地址
2、存储器地址
读写时序
1、写时序
1.1、单字节写时序
1.2、连续写时序
2、读时序
2.1、单字节读时序
2.2、连续读时序
参考声明
引言
这个专栏闲置好久了,最近忙里偷闲想学一下IIC通信的协议以及对应的FPGA实现。顺便以博客的形式记录一下~
本篇博文主要就是介绍与 IIC 通信相关的基础内容。
IIC协议
1、历史
IIC总线由飞利浦公司在上世纪80年代推出的总线协议。
2、特点
IIC总线属于串行、同步、低速、低距、半双工、多主机的通信协议。
3、信号线
2根信号线,一根时钟线(SCL),一根数据(地址)线(SDA)。
4、主从关系
IIC总线上相互通信的设备,可以分为两类,即主设备和从设备。
主设备有权利主动发起、结束一次通信。从设备只能被动响应。如果总线上有多个设备同时启用总线,IIC有自身的检测和仲裁机制,防止产生错误。
连接在IIC总线上的设备都有一个唯一的地址(典型的地址位宽:7bits,也有10bits),每个设备都可以作为主机或从机,BUT,同一时刻只能有一个主机存在。
对于7位地址线位宽的地址寻址:
5、通信过程
- 主机发送起始信号 启用IIC总线;
- 主机发送一个字节数据指示从机地址以及读写方向;
- 被寻址的从机发送应答信号回应主机;
- 发送器发送一个字节的数据;
- 接收器发送应答信号回应接收器;
- 重复4 5 步骤;
- 主机发送停止信号释放 IIC 总线;
6、协议规范
1、时钟信号为高电平期间,数据总线必须保持稳定,时钟信号为低电平时,数据总线才能变化。示意图如下:
2、时钟信号为高电平时,数据信号由高电平跳变到低电平为总线的 起始信号;由低电平跳变到高电平为总线的停止信号。示意图:空闲时,SCL信号和SDA信号均为高电平。
3、当IIC 主机(不一定是发送端还是接受端)将8 位数据或命令传出后,会将数据总线(SDA)释放,然后等待从机应答(低电平0 表示应答,1 表示非应答),此时的时钟仍然是主机提供的。示意图:
4、数据帧格式,I2C 器件通讯的时候首先是要发送“起始信号”,紧跟着就是七位器件地址,第八位是数据传送方向位(0:代表写,1:代表读),再后面就是等待从机的应答。当然传送结束后,“终止信号”也是由主机来产生的。发送数据的时候是高位先发送。IIC 一帧数据有9位,8个数据位加1个应答位。
地址
1、器件地址
从机的器件地址,一般是器件本身在制造完成就已经确定,或者部分确定。以AT24C64为例:
2、存储器地址
这个存储器地址分为单字节和双字节两种:
单字节:
双字节:
读写时序
典型时序图:
1、主机——>从机
蓝色表示数据源自主机,黄色表示数据源自从机。绿色表示数据循环发送。S表示起始信号,P表示结束信号,A表示应答信号。在主机发送停止信号前的应答信号一般为不应答。
2、从机——>主机
蓝色表示数据源自主机,黄色表示数据源自从机。绿色表示数据循环发送。S表示起始信号,P表示结束信号,A表示应答信号。在主机发送停止信号前的应答信号一般为不应答。
3、主机——>从机 (先) 从机——>主机 (后)
注意此处重新发起通信 更改发送方向,主从机并没有改变,可以不发送停止信号。即使从机更改了,主机也可以不发送停止信号,直接与另一个从机开始新的通信。因为如果主机发送了停止信号,总线被释放,释放后可能被其他的主机抢下总线的使用权。
1、写时序
1.1、单字节写时序
单字节 存储器地址:
时序过程描述:
1、主机设置SDA 为输出;
2、主机发起起始信号;
3、主机传输器件地址字节,其中最低位为0,表明为写操作;
4、主机设置SDA 为三态门输入,读取从机应答信号;
5、读取应答信号成功,主机设置SDA 为输出,传输1 字节地址数据;
6、主机设置SDA 为三态门输入,读取从机应答信号;
7、读取应答信号成功,主机设置SDA 为输出,传输待写入的数据;
8、设置SDA 为三态门输入,读取从机应答信号;
9、读取应答信号成功,主机产生STOP 位,终止传输。
双字节 存储器地址:
时序过程描述:
1、主机设置SDA 为输出;
2、主机发起起始信号;
3、主机传输器件地址字节,其中最低位为0,表明为写操作;
4、主机设置SDA 为三态门输入,读取从机应答信号;
5、读取应答信号成功,主机设置SDA 为输出,传输地址数据高字节;
6、主机设置SDA 为三态门输入,读取从机应答信号;
7、读取应答信号成功,主机设置SDA 为输出,传输地址数据低字节;
8、设置SDA 为三态门输入,读取从机应答信号;
9、读取应答信号成功,主机设置SDA 为输出,传输待写入的数据;
10、设置SDA 为三态门输入,读取从机应答信号;
11、读取应答信号成功,主机产生STOP 位,终止传输。
1.2、连续写时序
单字节 存储器地址:
1、主机设置SDA 为输出;
2、主机发起起始信号;
3、主机传输器件地址字节,其中最低位为0,表明为写操作;
4、主机设置SDA 为三态门输入,读取从机应答信号;
5、读取应答信号成功,主机设置SDA 为输出,传输1 字节地址数据;
6、主机设置SDA 为三态门输入,读取从机应答信号;
7、读取应答信号成功,主机设置SDA 为输出,传输待写入的第1 个数据;
8、设置SDA 为三态门输入,读取从机应答信号;
9、读取应答信号成功后,主机设置SDA 为输出,传输待写入的下一个数据;
10、设置SDA 为三态门输入,读取从机应答信号;n 个数据被写完,转到步骤11,若数据未被写完,转到步骤9;
11、读取应答信号成功,主机产生STOP 位,终止传输。
双字节 存储器地址:
1、主机设置SDA 为输出;
2、主机发起起始信号;
3、主机传输器件地址字节,其中最低位为0,表明为写操作;
4、主机设置SDA 为三态门输入,读取从机应答信号;
5、读取应答信号成功,主机设置SDA 为输出,传输地址数据高字节;
6、主机设置SDA 为三态门输入,读取从机应答信号;
7、读取应答信号成功,主机设置SDA 为输出,传输地址数据低字节;
8、设置SDA 为三态门输入,读取从机应答信号;
9、读取应答信号成功,主机设置SDA 为输出,传输待写入的第1 个数据;
10、设置SDA 为三态门输入,读取从机应答信号;
11、读取应答信号成功后,主机设置SDA 为输出,传输待写入的下一个数据;
12、设置SDA 为三态门输入,读取从机应答信号;n 个数据被写完,转到步骤13,若数据未被写完,转到步骤11;
13、读取应答信号成功,主机产生STOP 位,终止传输。
2、读时序
2.1、单字节读时序
单字节 存储器地址:
1、主机设置SDA 为输出;
2、主机发起起始信号;
3、主机传输器件地址字节,其中最低位为0,表明为写操作;4、主机设置SDA 为三态门输入,读取从机应答信号;
5、读取应答信号成功,主机设置SDA 为输出,传输1 字节地址数据;
6、主机设置SDA 为三态门输入,读取从机应答信号;
7、读取应答信号成功,主机发起起始信号;
8、主机传输器件地址字节,其中最低位为1,表明为读操作;
8、设置SDA 为三态门输入,读取从机应答信号;
9、读取应答信号成功,主机设置SDA 为三态门输入,读取SDA 总线上的一个字节的数据;
10、产生无应答信号(高电平)(无需设置为输出高电平,因为总线会被自动拉高);
11、主机产生STOP 位,终止传输。
双字节 存储器地址:
1、主机设置SDA 为输出;
2、主机发起起始信号;
3、主机传输器件地址字节,其中最低位为0,表明为写操作;
4、主机设置SDA 为三态门输入,读取从机应答信号;
5、读取应答信号成功,主机设置SDA 为输出,传输地址数据高字节;
6、主机设置SDA 为三态门输入,读取从机应答信号;
7、读取应答信号成功,主机设置SDA 为输出,传输地址数据低字节;
8、设置SDA 为三态门输入,读取从机应答信号;
9、读取应答信号成功,主机发起起始信号;
10、主机传输器件地址字节,其中最低位为1,表明为读操作;
11、设置SDA 为三态门输入,读取从机应答信号;
12、读取应答信号成功,主机设置SDA 为三态门输入,读取SDA 总线上的一个字节的
数据;
13、主机设置SDA 输出,产生无应答信号(高电平)(无需设置为输出高电平,因为总
线会被自动拉高);
14、主机产生STOP 位,终止传输。
2.2、连续读时序
单字节 存储器地址:
1、主机设置SDA 为输出;
2、主机发起起始信号;
3、主机传输器件地址字节,其中最低位为0,表明为写操作;
4、主机设置SDA 为三态门输入,读取从机应答信号;
5、读取应答信号成功,主机设置SDA 为输出,传输1 字节地址数据;
6、主机设置SDA 为三态门输入,读取从机应答信号;
7、读取应答信号成功,主机发起起始信号;
8、主机传输器件地址字节,其中最低位为1,表明为读操作;
9、设置SDA 为三态门输入,读取从机应答信号;
10、读取应答信号成功,主机设置SDA 为三态门输入,读取SDA 总线上的第1 个字节的数据;
11、主机设置SDA 输出,发送一位应答信号;
12、设置SDA 为三态门输入,读取SDA 总线上的下一个字节的数据;若n 个字节数据
读完成,跳转到步骤13,若数据未读完,跳转到步骤11;(对于AT24Cxx,一次读取长度最大为32 字节,即n 不大于32)
13、主机设置SDA 输出,产生无应答信号(高电平)(无需设置为输出高电平,因为总线会被自动拉高);
14、主机产生STOP 位,终止传输。
双字节 存储器地址:
1、主机设置SDA 为输出;
2、主机发起起始信号;
3、主机传输器件地址字节,其中最低位为0,表明为写操作;
4、主机设置SDA 为三态门输入,读取从机应答信号;
5、读取应答信号成功,主机设置SDA 为输出,传输地址数据高字节;
6、主机设置SDA 为三态门输入,读取从机应答信号;
7、读取应答信号成功,主机设置SDA 为输出,传输地址数据低字节;
8、设置SDA 为三态门输入,读取从机应答信号;
9、读取应答信号成功,主机发起起始信号;
10、主机传输器件地址字节,其中最低位为1,表明为读操作;
11、设置SDA 为三态门输入,读取从机应答信号;
12、读取应答信号成功,主机设置SDA 为三态门输入,读取SDA 总线上的第1 个字节的数据;
13、主机设置SDA 输出,发送一位应答信号;
14、设置SDA 为三态门输入,读取SDA 总线上的下一个字节的数据;若n 个字节数据读完成,跳转到步骤15 ,若数据未读完,跳转到步骤 13 ;(对于 AT24Cxx ,一次读取长度最大为 32 字节,即 n 不大于 3215、主机设置 SDA 输出,产生无应答信号(高电平)(无需设置为输出高电平,因为总线会被自动拉高);
16、主机产生 STOP 位,终止传输。
参考声明
【1】 创客学院视频;
【2】芯路恒开发板教程;
IIC 通信协议 (一)相关推荐
- IIC 通信协议 (二)
目录 引言 子模块设计 思路 单字节 IIC 发送模块 思路 Verilog 源码 多字节发送控制模块 思路 Verilog 源码 仿真 思路 test bench 仿真结果 参考声明 引言 本篇博文 ...
- IIC通信协议详解 PCF8591应用(Verilog实现FPGA)
IIC通信协议详解 & PCF8591应用(Verilog实现/FPGA) 该文章结合PCF8591 8-bit AD/DA 模数/数模转换器来详细介绍IIC通信协议,尽量做到条理清晰,通俗易 ...
- IIC通信协议(硬件实现IIC通信详解I)
IIC通信协议 什么是IIC协议 协议层 起始信号和停止信号 数据的有效性 什么是IIC协议 I2C(Inter-Integrated Circuit)通讯协议是由 Phiilps 公司开发的两线式串 ...
- 基于STM32F103C8T6的IIC通信协议及硬件通信和软件OLED温度显示项目
#一.IIC协议简介 #二.IIC总线系统结构 #三.IIC总线物理层特点 #四.软/硬件IIC总线 #五.IIC总线协议层 #六.IIC通信结构 ##1.空闲状态 ##2.开始信号 ##3.停止信号 ...
- IIC通信协议,搞懂这篇就够了
注:公众号后台发送 "IIC" 即可获取基于STM32上实现软件模拟IIC的完整代码. I2C(IIC)属于两线式串行总线,由飞利浦公司开发用于微控制器(MCU)和外围设备(从设备 ...
- STM32基于IIC通信协议的OLED模块使用(详解)
目录 前言 一.项目内容 实验简介 二.IIC模块 1.IIC协议简介 2.物理层 3.协议层 4.硬件IIC代码配置 5.软件模拟IIC配置 1.起始信号与停止信号 2.从机应答信号 3.数据的有效 ...
- 51单片机IIC通信协议
IIC头文件 /*------------------------------------------------------------------------------* @file I2C.H ...
- 进阶项目(9)IIC通信协议程序设计讲解
写在前面的话 IIC的通信协议和通信接口在很多工程中有广泛的应用,如数据采集领域的串行AD,图像处理领域的摄像头配置,工业控制领域的X射线管配置等等.除此之外,由于IIC协议占用的IO资源特别少,连接 ...
- IIc通信协议(一)
-->物理结构: -->通信原理:通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递.在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高 ...
最新文章
- 基克的聚合 机器人_新版本辅助装大改 基克的聚合不能错过
- 【带你玩转主题模型Topic Model】—— 之 利用sklearn 实现Latetnt Dirichlet Allocation(LDA)主题模型
- android sql 顺序执行问题,怎么才能执行第一个完毕,才能继续执行第二个
- ASP.NET AJAX Client Library: 更繁?更简?
- vim中开shell
- POJ 3250 Bad Hair Day (单调栈)
- python实时数据流设计_Python读取实时数据流示例
- Kubernetes之yaml文件详解(汇总-详细)
- mysql 插入当前时间_MySql优化之前期探索
- 基本属性---Linux
- vue多选框点击其中一个控制div隐藏_Vue 零碎知识点
- 学计算机的专属表白方式,九个学科专属表白句子-花式表白公式【蜜匠婚礼】...
- 基于JAVA+Servlet+JSP+MYSQL的航空订票系统
- android - 调用系统分享功能分享图片
- ASP.NET Core管道深度剖析
- 数据库设计三范式的举例及四大特性说明
- LeetCode题解(1818):绝对差值和(Python)
- magic4升级鸿蒙系统,Magic UI 4.0将于9月中旬内测招募 后续可升鸿蒙系统
- 【今日爆点】华为HDC开发者大会上正式发布深度欧拉V1.0
- keepalive+nginx搭建主从负载服务器