I2C
RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。
本实例将演示如何使用I2C进行设备地址扫描。
1、I2C介绍
I2C总线是两线串行接口,由串行数据线SDA和串行时钟 SCL组成。 这些线路在连接到总线的设备之间传输信息。 每个设备都由一个唯一的7位地址识别,并且可以作为“发送器”或“接收器”运行,具体取决于设备的功能。 在执行数据传输时,设备也可以被视为主机或从机。 主机是在总线上启动数据传输并生成时钟信号以允许传输的设备。 数据传输中的第一个字节始终包含7位地址和LSB位置的读/写位。 该 API 负责切换读/写位。 在此之后,任何被寻址的设备都被视为从设备。它有许多不寻常的属性:
- SCL可以在任何时间、任何时间、由总线的任何成员(不一定是传输的目标或发起者)保持为低电平。 这称为时钟延长。 在所有驱动程序释放时钟之前,总线不会前进。
- 总线成员可以成为一个传输的目标并启动其他传输(主/从角色不固定)。 然而,大多数I2C硬件对此的支持很差。
- SCL不是边沿敏感时钟,而是SDA必须在SCL为高电平的整个时间内有效
- 尽管SDA对SCL是透明的,但SCL为高时SDA的转换用于标记传输的开始和结束(开始/停止),或一个内的新地址阶段(重新启动