通信协议之IIC总线
文章目录
- 前言
- 物理层
- 协议层
- 基本读写过程
- 起始信号和停止信号
- 数据有效性
- 地址及数据方向
- 响应
- 实例
前言
IIC通信协议是Philips公司开发的,由于其引脚少,硬件简单,无须收发设备,因此应用广泛。本文主要简单介绍一下IIC协议。
本文主要参考一下资料:
- 刘火良, 杨森. STM32库开发实战指南——基于STM32F4.机械工业出版社
- NXP Semiconductors.PCF8574手册
物理层
IIC的物理层有以下几个特点:
- 支持多个设备 。在同一个IIC总线中,可以挂载多个主机和从机。每个连接到总线的设备都有单独的地址,主机可以通过不同的地址来访问不同的从机。
- IIC总线只有两条线路:SCL和SDA。其中,SCL为时钟线,SDA为数据线。两者都通过上拉电阻连接到2-15V的正电平。上拉电阻一般取1.8k,4.7k以及10k。
- IIC总线分成三种模式:标准模式:100kbit/s,快速模式:400kbit/s,高速模式:3.4Mbit/s。但是目前大多数设备并不支持高速模式。
- 多个设备同时使用总线时,会通过仲裁的方式决定哪个设备占用总线。
- 当IIC设备空闲时,所有设备都为高阻态,则上拉电阻会将总线拉成高电平。
协议层
基本读写过程
上图展示了基本的数据包格式,具体表示如下:
- S:起始信号
- SLAVE ADDRESS:从机地址
- R/W:读写选择位,1为读,0为写
- A/A:应答信号
- P:停止信号
在通信开始,首先发送起始信号,所有的从机设备都会接收该信号。
紧接着,主机就发送从机地址,当从机的地址与主机发送的地址一致时,该设备被选中,其余的设备忽略接下来的信息。根据IIC协议,从机地址可以为7位或者10位。在实际使用中,7位更加常用。该7位地址和后面一位读写选择位整好组成一个字节。
读写选择位,该位控制数据流的方向。当该位为0时,表示从主机发送到从机。当该位为1时,表示数据由从机发送到主机。
若传输方向为 “写方向” 时,主机继续传输数据,每个数据包为8位 。主机每一次发送完成后,都要等待从机响应。当主机传输结束后,主机向从机发送一个停止信号§,表示不再传输数据。可以用如下图示:
其中,黑色字体为主机发送数据,绿色字体为从机发送数据。
若传输方向为 “读方向” 时,主机接收到应答信号之后,从机开始发送数据,每个数据包为8位 。从机每一次发送完成后,主机返回应答信号。当主机传输结束后,主机首先返回一个非应答信号,然后发送一个停止信号§,表示不再传输数据。可以用如下图示:
其中,黑色字体为主机发送数据,绿色字体为从机发送数据。
除了以上的两种方式,IIC更加常用的为 “复合格式” 。如下图所示:
在复合模式中,同一帧数据有两个起始位。一般在第一次传输中,主机通过从机地址找到从设备之后,发送一段数据。然后,在没有发送结束信号P的情况下,重新发起一次起始信号S,后面跟着相同的从机地址,而数据的传输方向可以发生改变。通常用于以下情况,第一次传输的数据位从设备内部的寄存器或者存储器地址,第二次传输的为对改地址的内容进行读取或者写入。最常用的情况如下图所示:
即主机先向从机发送寄存器地址,然后读取寄存器地址中的数据。
起始信号和停止信号
起始信号和停止信号是两种特殊的状态,如上图所示。起始信号的定义为:当SCL信号为高电平时,SDA信号由高电平切换到低电平;停止信号的定义为:当SCL信号为高电平时,SDA信号由低电平切换到高电平。
数据有效性
IIC使用SDA信号传输数据,使用SCL进行时钟同步。SDA在SCL每个时钟传输一位数据。SCL为高电平时,表示数据有效。SCL为低电平时,SDA数据无效,用于SDA的电平切换。当数据有效时,SDA高电平表示数据1,低电平表示数据0。
地址及数据方向
IIC总线上的每个设备都有自己的地址,主机发起通信时,通过SDA信号线发送从机地址来查找从机。IIC设备地址为7位或者10位,在实际中,7位使用的范围更广泛。在每个字节中,先发送高位,再发送低位。
响应
IIC的响应包括“应答”和“非应答”两种信号。此信号由数据接收端发送,当接收端(无论是主机还是从机)希望对方继续发送数据时,则需要向对方发送“应答”信号;否则,若想结束数据传输,则向对方发送“非应答”信号,发送方接受到该信号会产生一个停止信号,结束信号传输。
实例
8574是一款支持100K的IIC芯片。其展示的IIC时序如下所示:
通信协议之IIC总线相关推荐
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析
关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 -- IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Ci ...
- iic总线从机仲裁_IIC协议底层原理超详细解析!示波器,逻辑分析仪多图预警
1. 协议基础 1.1. 协议简介 IIC-BUS(Inter-IntegratedCircuit Bus)最早是由PHilip半导体(现在被NXP收购)于1982年开发.主要是用来方便微控制 ...
- Linux底层IIC 总线的理解、调用函数以及常见面试问题
对 IIC 总线的理解.调用函数以及常见面试问题 一.IIC 总线概述: IIC 即Inter-Integrated Circuit(集成电路总线) I2C总线是PHLIPS公司推出的一种串行总线, ...
- 对 IIC 总线的理解、调用函数以及常见面试问题
一.IIC 总线概述: IIC 即Inter-Integrated Circuit(集成电路总线) I2C总线是PHLIPS公司推出的一种串行总线, I2C总线只有两根双向信号线.一根是数据线SDA, ...
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 (iic驱动框架,i2c驱动框架)...
转载于 : http://blog.csdn.net/zqixiao_09/article/details/50917655 关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸 ...
- 通信协议之IIC协议(eeprom)_通俗易懂篇!
1.IIC(Inter-Integrated Circuit),是IICBus简称,是一种串行通信总线. 2.IIC协议:遵循主机master和从机slave的主从关系机制,区别于SPI通信协议,II ...
- 关于IIC总线的若干问题
IIC是飞利浦提出的一种通信总线结构,其硬件架构比较简单,仅包含SCL和SDA两条线.根据最新的IIC总线标准,IIC总线包含Standard-mode(100kbit/s).Fast-mode(40 ...
- stm32之IIC总线概述
1.IIC通信协议定义 IIC通讯协议(Inter----Integrted Circuit)是由Phiips飞利浦公司开发的, 由于他引脚少,硬件实现简单,可拓展性强,不需要UASRT,CAN通讯协 ...
- STC89C52的IIC总线写EEPROM
串行通信中的IIC总线工作原理 51本身不带IIC总线 ,使用程序模拟IIC通信协议 常用的串行总线协议 UART.1-wire.I2C和SPI总线 UART:是以异步方式进行通信(一条数据输入线,一 ...
- IIC总线协议,7位,8位,10位地址
IIC总线 1.1. 概述 IIC开发于1982年,当时是为了给电视机内的CPU和外围芯片提供更简易的互连方式.电视机是最早的嵌入式系统之一,而最初的嵌入系统是使用内存映射(memory-mapped ...
最新文章
- 进行短视频app开发工作时,可以加入它来保护青少年...
- /etc/rc.d 与 /etc/profile或者./.bash_profile的区别
- Linux源码编译(一):从头文件说起
- Ansible16:Playbook高级用法
- 提高篇 第五部分 动态规划 第4章 状态压缩类动态规划
- 关于Jeecg互联网化dubbo改造方案(上)
- 值得收藏!动图演示神经架构搜索
- 又被分治题卡住好几个小时!用最笨的方法搞懂分治法边界,告别死循环!
- 大学生创业计划书PPT模板在哪免费下?经典商业计划书PPT模板大全
- 系统集成项目管理工程师(软考中级)重点知识、背诵版
- Postgresql Bloom索引
- 【最全的】BAT 批处理脚本教程
- 卸载系统应用动画气泡特效创建守护服务进程管理(ActivtyManager提供批量操作)桌面小控件AppWidget
- 短距离无线通信设备的天线设计
- JAVA实现在面板中添加图表_java-如何在不制作新图表的情况下将jzy3d图表添加到JFrame?...
- Hrbust2294修建传送门(尺取法)
- 小学奥数 7833 幂的末尾 python
- [转]MOSS 2007 整合運用 - Office System 2007 整合應用秘訣
- 《Linux就该这么学》培训笔记_ch00_认识Linux系统和红帽认证
- 可控硅失效现象_晶闸管常见损坏原因分析(全)