[其他ST产品]
stm32 IIC详解
[复制链接]
3236|23
电梯直达
楼主
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:50
|
只看该作者
|只看大图
|倒序浏览
|阅读模式
iic, ic, STM32, STM, ST
IIC的基本介绍
IIC的简介
IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。它是半双工通信方式。
IIC总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
IIC总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
8254664ea2d677c892.png (60.19 KB, 下载次数: 0)
下载附件
2023-8-27 00:50 上传
回复
收藏0
举报
相关帖子
• ATFs 文件系统与 MDMA 结合使用 SD 卡时异常
• IIC读数据出错
• WFI32E02的MCC问题
• 【WFI32E04分享】-1-开箱
• 如何将某个函数或变量放在固定的地址 ?
• STM32 IDE 存在 “表达式求值失败” 的异常问题
• 【WFI32E04分享】-2-UART串口驱动
• 同时实现功能正常的 USB和性能最优的 ADC
• STM32 IDE 中如何调出函数 / 变量的提示列表
• 深圳&上海 | STM32三相永磁同步电动机无位置传感器控制方案线下实训
沙发
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:51
|
只看该作者
IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。
7294664ea2d88291d2.png (14.74 KB, 下载次数: 0)
下载附件
2023-8-27 00:51 上传
一般情况下,数据线SDA和时钟线SCL都是处于上拉电阻状态。因为:在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。
回复
收藏0
举报
板凳
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:51
|
只看该作者
STM32的IIC接口
目前绝大多数的MCU都附带IIC总线接口,STM32也不例外。但是在本文中,我们不使用STM32的硬件IIC来读取24C02,而是通过软件的方式来模拟。
原因是因为:STM32的硬件IIC非常复杂,更重要的是它并不稳定,故不推荐使用。
回复
收藏0
举报
地板
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:52
|
只看该作者
IIC协议
IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。同时我们还要介绍其空闲状态、数据的有效性、数据传输。
回复
收藏0
举报
5楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:52
|
只看该作者
先来看一下IIC总线的时序图:
8061964ea2dbcbc32d.png (30.7 KB, 下载次数: 0)
下载附件
2023-8-27 00:52 上传
回复
收藏0
举报
6楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:52
|
只看该作者
这可能会比较复杂,可以先看一份简化了的时序图:
5812064ea2dcbc9f61.png (25.06 KB, 下载次数: 0)
下载附件
2023-8-27 00:52 上传
回复
收藏0
举报
7楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:52
|
只看该作者
空闲状态
当IIC总线的数据线SDA和时钟线SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
回复
收藏0
举报
8楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:52
|
只看该作者
起始信号与停止信号
起始信号:当时钟线SCL为高期间,数据线SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号;
停止信号:当时钟线SCL为高期间,数据线SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。
回复
收藏0
举报
9楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:53
|
只看该作者
8563564ea2de540dc6.png (52.21 KB, 下载次数: 0)
下载附件
2023-8-27 00:52 上传
应答信号
发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。
回复
收藏0
举报
10楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:53
|
只看该作者
应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;
应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
1941464ea2dfeeedee.png (67.13 KB, 下载次数: 0)
下载附件
2023-8-27 00:53 上传
回复
收藏0
举报
11楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:53
|
只看该作者
对于反馈有效应答位ACK的要求是:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个停止信号P。
回复
收藏0
举报
12楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:53
|
只看该作者
数据有效性
IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定;只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
回复
收藏0
举报
13楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:54
|
只看该作者
即:数据在时钟线SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。
9959764ea2e247334e.png (57.01 KB, 下载次数: 0)
下载附件
2023-8-27 00:53 上传
回复
收藏0
举报
14楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:54
|
只看该作者
数据的传达
在IIC总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。
回复
收藏0
举报
15楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:54
|
只看该作者
延时时间
4225764ea2e3dc19b7.png (103.81 KB, 下载次数: 0)
下载附件
2023-8-27 00:54 上传
回复
收藏0
举报
16楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:54
|
只看该作者
IIC总线的数据传送
IIC总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(地址通过物理接地或者拉高),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。
回复
收藏0
举报
17楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:54
|
只看该作者
也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0表示主设备向从设备写数据,1表示主设备向从设备读数据。
回复
收藏0
举报
18楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:55
|
只看该作者
5735664ea2e601f6eb.png (20.16 KB, 下载次数: 0)
下载附件
2023-8-27 00:54 上传
回复
收藏0
举报
19楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:55
|
只看该作者
主设备往从设备中写数据。数据传输格式如下:
3212764ea2e70a5325.png (12.7 KB, 下载次数: 0)
下载附件
2023-8-27 00:55 上传
淡蓝色部分表示数据由主机向从机传送,粉红色部分则表示数据由从机向主机传送。
回复
收藏0
举报
20楼
楼主|
舒伯特玫瑰
发表于 2023-8-27 00:55
|
只看该作者
写用0来表示(高电平),读用1来表示(低电平)。
主设备从从设备中读数据。数据传输格式如下:
2788064ea2e821dfb0.png (12.43 KB, 下载次数: 0)
下载附件
2023-8-27 00:55 上传
回复
收藏0
举报