IIC通信详解——STM32 IIC实验(野火指南者)

一、简介  

       ​   iic是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路 (IC) 间的通讯。

二、物理层

iic只由两条总线构成:     

        SDA(Serial Data)是数据线,D代表Data也就是数据,用来传输数据的串行总线

        SCL(Serial Clock)是时钟线,C代表Clock也就是时钟,控制数据收发时序的串行总线

物理层特点:

(1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连
     接多个 I2C 通讯设备,支持多个通信主机及多个通讯从机
(2) 一个 I2C 总线只使用两条总线线路,一条双向串行数据线 (SDA) ,一条串行时钟线 (SCL) 。数
     据线即用来表示数据,时钟线用于数据收发同步。
(3) 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访          问。
(4) 总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都
     输出高阻态时,由上拉电阻把总线拉成高电平。
(5) 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线
(6) 具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达
      3.4Mbit/s,但目前大多 II C 设备尚不支持高速模式。
(7) 连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制

三、协议层

        I2C 的协议定义了通讯的起始和停止信号、数据有效性、响应、仲裁、时钟同步和地址广播等环节。

3.1基本读写过程

        先简单看看 IIC 通讯过程的基本结构,它的通信过程见图 主机写数据到从机 、图 主机由从机中读数 据及图 IIC 通信复合格式 。

3.1.1 写数据
        若配置的方向传输位为“写数据”方向,广播完地址,接收到应答信号后,主机开始正式向从机传输数据 (DATA) ,数据包的大小为 8 位,主机每发送完一个字节数据,都 要等待从机的应答信号 (ACK) ,重复这个过程,可以向从机传输 N 个数据,这个 N 没有大小限 制。当数据传输结束时,主机向从机发送一个停止传输信号 (P) ,表示不再传输数据。
3.1.2 读数据
        若配置的方向传输位为“读数据”方向,广播完地址,接收到应答信号后, 从机开始向主机返回数据 (DATA) ,数据包大小也为 8 位,从机每发送完一个数据,都会等待主 机的应答信号 (ACK) ,重复这个过程,可以返回 N 个数据,这个 N 也没有大小限制。当主机希 望停止接收数据时,就向从机返回一个非应答信号 (NACK) ,则从机自动停止数据传输。

3.1.3 复合读写格式
        除了基本的读写,I2C 通讯更常用的是复合格式,该传输过程有两次起始信 (S) 。一般在第一次传输中,主机通过 SLAVE_ADDRESS 寻找到从设备后,发送一段“数据”, 这段数据通常用于表示从设备内部的寄存器或存储器地址 ( 注意区分它与 SLAVE_ADDRESS 区别 ) ;在第二次的传输中,对该地址的内容进行读或写。也就是说,第一次通讯是告诉从机读 写地址,第二次则是读写的实际内容。

3.2 起始信号和停止信号

        前文中提到的起始 (S) 和停止 (P) 信号是两种特殊的状态,见下图 。当 SCL 线是高 电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。当 SCL 是高电平时 SDA 线由 低电平向高电平切换,表示通讯的停止。起始和停止信号一般由主机产生。

3.3 数据有效性

        I2C 使用 SDA 信号线来传输数据,使用 SCL 信号线进行数据同步。见下图 SDA 数据 线在 SCL 的每个时钟周期传输一位数据。传输时, SCL 为高电平的时候 SDA 表示的数据有效, 即此时的 SDA 为高电平时表示数据“ 1 ”,为低电平时表示数据“ 0 ”。当 SCL 为低电平时, SDA 的数据无效,一般在这个时候 SDA 进行电平切换,为下一次表示数据做好准备。

3.4 地址及数据方向

        I2C 总线上的每个设备都有自己的独立地址,主机发起通讯时,通过 SDA 信号线发送设备地址(SLAVE_A

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值