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

SSD1306 屏幕使用-Micropython的更多相关文章

  1. 深入学习 OLED Adafruit_SSD1306库(8266+arduino)

    QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 单片机菜鸟博哥CSDN 1.前言 SSD1306屏幕驱动库,最出名应该就是u8g2,读者可以参考 玩转u ...

  2. U8g2图形库与STM32移植(I2C,软件与硬件)

    U8g2图形库 简介 U8g2 是一个用于嵌入式设备的简易图形库,可以在多种 OLED 和 LCD 屏幕上,支持包括 SSD1306 等多种类型的底层驱动,并可以很方便地移植到 Arduino .树莓 ...

  3. 2022-08-12-esp32把玩记-②_用Micropython点ssd1306_oled屏幕

    layout: post cid: 8 title: esp32把玩记-② 用Micropython点ssd1306 oled屏幕 slug: 8 date: 2022/08/12 15:12:39 ...

  4. esp32驱动SSD1306的oled显示汉字(micropython)

    1.完整源码: 主函数oled.py from ssd1306 import SSD1306_SPI from ssd1306 import SSD1306 import font import ma ...

  5. micropython驱动sh1106点亮oled

    继上一帖给esp32刷入micropython之后,忍不住给以esp12e也刷了micropython 这里先说一下webrepl: 通过wifi可以和esp8266交互,以及便携的传输文件 首次使用 ...

  6. 树莓派 PICO基础教程(基于MicroPython)

    目录 1 树莓派 PICO 简介 1.1 简介 1.2 配置 [^2] 1.3 引脚图 1.4 尺寸 2 安装 2.1 烧录固件 2.2 安装IDE(Thonny IDE) 2.3 离线运行程序 3 ...

  7. SSD1306驱动的OLED实验

    [转]http://bbs.21ic.com/icview-434543-1-1.html 前面几章的实例,均没涉及到液晶显示,这一章,我们将向大家介绍OLED的使用.在本章中,我们将使用战舰STM3 ...

  8. MicroPython之TPYBoard v102开发板控制OLED显示中文

    转载请以链接形式注明文章来源,公众号:MicroPython玩家汇 0x00前言 之前看到一篇文章是关于TPYBoardv102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近 ...

  9. 玩转X-CTR100 l STM32F4 l OLED显示-SSD1306无字库

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      OLED显示屏具有自发光特性,不需要背光, ...

  10. oled屏幕模块

    oled屏幕模块似乎是厂家提供的 也许可以根据屏幕驱动芯片去写 根据现在了解的芯片一般有两个:SH1106和SSD1306 不过这次我们用的是SSD1306芯片驱动的屏幕 下面是从裸屏到模块的pcb: ...

随机推荐

  1. ASP.NET Core知识之RabbitMQ组件使用(二)

      近期,业务调整,需要内网读取数据后存入到外网,同时,其他服务器也需要读取数据,于是我又盯上了RabbitMQ.在展开业务代码前,先看下RabbitMQ整体架构,可以看到Exchange和队列是多对 ...

  2. JZOJ 3737. 【NOI2014模拟7.11】挖宝藏

    \(\text{Solution}\) 当 \(h=1\) 时显然是斯坦纳树板子,最方案必然是树形的 \(h > 1\) 时,考虑在每一层新建一个状态表示上一层宝藏全部挖完到这层某个点的答案 同 ...

  3. 三星为其基于 RISC-V的 Tizen平台移植.NET

    最近.NET团队在这篇文章中介绍了对.NET移植的一般政策:https://devblogs.microsoft.com/dotnet/why-dotnet/#binary-distributions ...

  4. vue中所有的封装方式总结

    如何确定我需要封装呢? 1.复用,如果觉得以后还会用到 2.你觉得方便,别的地方可能也需要用 3.如果不封装,页面代码臃肿的时候 1.封装API 使用场景:业务中最常见最普通的封装 详细在这篇:htt ...

  5. (五) Mysql 之锁详细篇

    一.锁的分类1.范围:全局锁.表级锁.行级锁2.功能分类:共享锁.排它锁 二.数据库的全局锁 加锁:mysql> flush tables with read lock; 释放锁:mysql&g ...

  6. 张量局部保留投影TensorLPP

    Tensor locality preserving projection for hyperspectral image classification 复现的代码python:https://git ...

  7. 查询自增ID断点的地方

    方法一 SELECT id+1 AS ID FROM table WHERE id+1 not in (SELECT id FROM table);

  8. idea插件连接数据库失败问题

    idea插件连接数据库失败问题 一.现象 连接失败,显示时区不正确 二.解决办法 这里的时区改成亚洲上海(Asia/Shanghai) 三.测试连接 连接成功

  9. 【剑指Offer】【数组】数组中出现次数超过一半的数字

    题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果 ...

  10. vue框架08 vue3

    vue3的介绍 # vue项目的版本,新项目使用vue3,部分老项目使用vue2 # vue3的变化 1.性能的提升 - 打包大小减少41% - 初次渲染快55%,更新渲染块133% - 内存减少54 ...