ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

SSD1306 屏幕使用-Micropython

2022-08-21 00:35:46  阅读:213  来源: 互联网

标签:Micropython addr 器件 总线 地址 屏幕 I2C readfrom SSD1306


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

标签:Micropython,addr,器件,总线,地址,屏幕,I2C,readfrom,SSD1306
来源: https://www.cnblogs.com/kitesong/p/16609136.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有