IIC

博客详细介绍了IIC通信中如何调整速率,这涉及到可编程时钟和上拉电阻的配置。接着,讨论了数据传递的过程,包括7位设备地址、读写位的定义,以及在SCL高电平时SDA必须保持稳定状态的数据传输规则。文章还提到了高效的数据交换时序,如连续的写后读或读后写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、IIC速率调整

      IIC速率的调整是根据可编程时钟进行速率的调整,同时也跟上拉电阻阻值有一定关系。

2、数据传递

设备的地址位为7位地址位,然后把最低位定为读写位(数据传输方向),0表示主设备向从设备写操作,1表示主设备向从设备读操作。

数据的传输是要求scl高时候sda要保持稳定状态(高或者低,即sda的状态应该包住scl的一个半个钟),在时钟为低时,进行sda的数据翻转。

主设备向从设备写操作之后紧接着就进行读操作,或者从设备从主设备读紧接着就开始写。则时序如下:

这些的操作比停止在进行起始状态效率高。

 

 

 

待续。。。。。

 

### IIC协议概述 IIC(Inter-Integrated Circuit)是一种同步串行通信总线,用于连接微控制器及其外围设备。该协议由Philips公司开发,在同一总线上支持多个主控器和从属设备之间的双向数据交换[^1]。 #### 物理层特性 在物理层面,IIC仅需两根信号线即可实现全双工通讯: - **SDA (Serial Data Line)**:负责传输数据; - **SCL (Serial Clock Line)**:提供时钟脉冲以同步数据传送过程中的位移操作; 这两条线路均采用开漏极驱动方式工作,并通过上拉电阻接至正电源电压。这种设计使得任何时刻都允许任一节点成为发送方或接收方,而不会造成冲突现象发生。 #### 协议特征 与其他类型的接口相比,IIC具有如下显著优点: - 支持多主机架构; - 只需要两条连线就能完成所有功能需求; - 数据速率范围广,标准模式下可达100 kbit/s, 快速模式则可提升到400 kbit/s甚至更高; - 设备地址分配灵活,理论上最多可以挂载多达128个不同器件; - 内置应答机制确保每次传输都能被确认无误地接收下来。 #### 数据传输流程 当进行具体的数据交互活动时,整个过程遵循严格的顺序规则来进行: 对于写入动作而言,首先是启动条件触发之后紧接着发出目标装置的7-bit地址加上读/写控制位(R/W),随后才是实际要存储进去的一系列字节内容直到停止标志出现为止。 而对于读取请求来说,则是在同样的起始条件下指定好源端口位置以后等待对方回应ACK/NACK反馈信息并据此决定是否继续获取下一个单元格里的资料直至结束为止。 ```python import smbus from time import sleep def iic_write(bus, address, register, value): bus.write_byte_data(address, register, value) def iic_read(bus, address, register): return bus.read_byte_data(address, register) # 创建I2C对象实例化 bus = smbus.SMBus(1) device_address = 0x68 # 假设这是你要访问的设备地址 register_to_access = 0x00 try: while True: data = iic_read(bus, device_address, register_to_access) print(f"Read from Register {hex(register_to_access)}: {data}") new_value = int(input("Enter a byte to write or 'q' to quit: ")) if str(new_value).lower() == 'q': break iic_write(bus, device_address, register_to_access, new_value) except KeyboardInterrupt: pass finally: bus.close() ``` 为了保证稳定性和可靠性,在编写涉及底层硬件操控的应用程序代码期间需要注意适当加入延迟处理措施来应对可能出现的竞争状况问题,特别是在改变状态之前应该给予足够的时间间隔让电路有时间响应变化[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值