Stm32F103R6之I2C
目录
概述
I2C(芯片间)总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的时序、协议、仲裁和定时。支持标准和快速两种模式,同时与SMBus 2.0兼容。
I2C模块有多种用途,包括CRC码的生成和校验、SMBus(系统管理总线—System Management Bus)和PMBus(电源管理总线—Power Management Bus)。
图 1I2C功能框图
I2C功能
网上有评论说stm32的硬件I2C有bug,经我实测使用stm32的硬件I2C读写都没有出现问题。也可以使用IO口模拟I2C通讯,需要注意的点是:
- 起始位和停止位的模拟;
- 数据保持时间,与波特率有关;
- 应答;
- I2C默认工作在从模式,。从从模式切换到主模式,需要产生一个起始条件,主设备负责产生时钟。
Stm32的I2C支持7/10地址,支持广播呼叫。
SMBus
系统管理总线(SMBus)是一个双线接口。通过它,各设备之间以及设备与系统的其他部分之间可以互相通信。它基于I2C操作原理。SMBus为系统和电源管理相关的任务提供一条控制总线。一个系统利用SMBus可以和多个设备互传信息,而不需使用独立的控制线路。
系统管理总线(SMBus)标准涉及三类设备。从设备:接收或响应命令的设备。主设备:用来发送命令、产生时钟和终止发送的设备。主机:一种专用的主设备,它提供与系统CPU的主接口。主机必须具有主-从机功能并且必须支持SMBus提醒协议。一个系统里只允许有一个主机。
SMBus和I2C之间的相似点
● 2条线的总线协议(1个时钟,1个数据) + 可选的SMBus提醒线;
● 主-从通信,主设备提供时钟;
● 多主机功能;
● SMBus数据格式类似于I2C的7位地址格式。
SMBus和I2C之间的不同点
图 2SMBus和I2C的不同点
SMBus应用用途
利用系统管理总线,设备可提供制造商信息,告诉系统它的型号/部件号,保存暂停事件的状态,报告不同类型的错误,接收控制参数,和返回它的状态。SMBus为系统和电源管理相关的任务提供控制总线。