1、I2C总线是什么?

I2C:俗称集成电路总线,是一种简单、双向二线制同步串行通信总线,使用多主从架构。它只需要两根线即可在连接于总线上的器件之间传送信息。

主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下,主机负责产生定时时钟和终止数据传送。

2、I2C总线由什么构成?

I2C分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻构成。

通信原理:通过控制SCL和SDA高低电平来产生I2C总线协议所需要的信号进行数据传输。在总线空闲时,SCL和SDA会上拉电阻拉高,保持着高电平。

3、I2C总线的特征?

IC总线上的每一个设备都会对应这唯一的I2C地址,部分从设备可以通过外围电路来改变I2C地址,主从设备之间就是通过这个地址来确定与哪个器件进行通信。主设备和从设备之间以字节(8位)位单位进行双向的数据传输。

4、I2C总线的通讯频率?

标准模式(Standard):100kbps
快速模式(Fast):400kbps
快速模式+(Fast-Plus):1Mbps
高速模式(High-speed):3.4Mbps
超快模式(Ultra-Fast):5Mbps(单向传输)
注:高速设备可以向下兼容,如支持快速模式的设备也可以在标准模式下进行通信。

5、RP2040的(I2C)主要参数:

支持主模式和从模式(默认主模式)
支持标准模式、快速模式和快熟模式+
默认从地址为0x55
主模式下支持10bit地址
16位接收缓冲区
16位发送缓冲区
可使用DMA驱动
可生成中断
1、machine.I2C(id,scl ,sda ,freq = 40000)

#I2C对象构造函数,作用为初始化对应的I2C通道和引脚

#id :标识特定的 I2C 外设。如果填入 id = -1,即选择软件模拟的方式实现 I2C,这时可以使用任意引脚来模拟 I2C 总线 ,这样在初始化时就必须指定 scl 和 sda 。 软件 I2C 的初始化方式可参考 软件 I2C 示例。 可为0或1

#scl : 应该是一个 Pin 对象,指定为一个用于 scl 的 Pin 对象。(I2C0默认为9,I2C1默认为7)

#sda : 应该是一个 Pin 对象,指定为一个用于 sda 的 Pin 对象。(I2C0默认为8,I2C1默认为6)

#freq :应该是为 scl 设置的最大频率

2、I2C.scan()

#扫描所有 0x08 和 0x77 之间的 I2C 地址,然后返回一个有响应地址的列表。如果一个设备在总线上收到了他的地址,就会通过拉低 SDA 的方式来响应

3、I2C.readfrom(addr,nbytes,stop = True)

#readfrom函数其作用为通过I2C总线从设备读取数据并返回字节串

#addr :从设备地址

#nbytes :读取字符长度

#stop :是否在接收完成数据后发送结束信号

4、I2C.readfrom_into(addr, buf, stop=True)

#readfrom_into :可以将读取数据存放在指定的字符数组中

#buf :字符数组,用于存放数据

5、I2C.writeto(addr, buf, stop=True)

#writeto :函数其作用为向从设备写入数据

内存操作

1、I2C.readfrom_mem(addr, memaddr, nbytes, *, addrsize=8)

#readfrom_men :函数其总用为读取从设备的寄存器中数据

#addr :从设备地址

#memaddr :寄存器地址

#nbytes :读取字节长度

#addrsize :寄存器地址长度


2、I2C.readfrom_mem_into(addr, memaddr, buf, *, addrsize=8)

#从 addr 指定的从设备中 memaddr 地址读取数据到 buf 中,,读取的字节数是 buf 的长度。 这个方法没有返回值。


3、I2C.writeto_mem(addr, memaddr, buf, *, addrsize=8)

#将 buf 里的数据写入 addr 指定的从机的 memaddr 地址中。 这个方法没有返回值。
# @Time : 2022.3.28
# @Author : Xa_L
# @FileName: I2C_1.py

from machine import I2C,Pin
#初始化I2C通道1 ,使用GPIO6和GPIO7 分别作为SDA 和SCL 引脚,频率为10KHZ
i2c = I2C(id = 1 ,scl = Pin(7) ,sda = Pin(6), freq = 10000)
#扫描I2C总线下所有设备地址,并返回对应的列表
addr_list = i2c.scan()


if len(addr_list) == 1:
#尝试读取该设备的0x00寄存器
who = i2c.readfrom_mem(addr_list[0],0x00,1)
#如果读取数值为0xEA
if who[0] == 0xEA:
print("Just a ICM20948 connected")
else:
print("Have a device connected but it is not ICM20948")
elif len(addr_list) == 0:
print("Nothing connected")
else:
print("More than one device is conneted ")

————————————————
版权声明:本文为CSDN博主「Xa_L」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39530692/article/details/123803531

最新文章

  1. go语言注释
  2. js中函数的一些理论知识
  3. Window10+VS2015+DevExpress.net 15.1.7完美破解(图)
  4. Java对象创建阶段的代码调用顺序
  5. Android Studio在线安装Android SDK注意事项
  6. JSON数据转换为字典型
  7. chrome 修改标签页
  8. url 参数的加号变成空格处理
  9. sybase下convert函数第三个参数(时间格式)
  10. oracle查询和编写数据字典
  11. 两种高性能 I/O 设计模式 Reactor 和 Proactor
  12. centOS7服务管理与启动流程
  13. Redis集群 - Sentinel与RAFT算法
  14. Centos rpm包安装PHP所需包
  15. Java内存模型-final域的内存语义--没明白,预留以后继续理解
  16. 使用ycsb对hbase1.4.9 benchmark
  17. 若是汉字的一半,就舍弃这个汉字输出,例如:“js3范ad啊asd”,截取4,则输出:“js3”
  18. Linux 中计划任务-at-cron
  19. 【OfficeWebViewer】在线预览Word,Excel~
  20. 在Windows Server 2012 R2域环境中禁用(取消)密码复杂策略

热门文章

  1. ArcGIS Pro SDK 003 如何调用Toolbox
  2. UI自动化中上传与唤醒弹窗
  3. Android中drawable和mipmap到底有什么区别
  4. MySQL错误锦集【持续更新】
  5. DomDom
  6. 原子类Atomic
  7. JavaSE基础 (全网最全知识点)
  8. 模拟浏览器与服务器交互(简易TomCat框架)
  9. classmethod 修饰符
  10. lg7335 [JRKSJ R1] 异或 题解