【雕爷学编程】MicroPython手册之 esp8266 esp32 特定端口库 esp.flash_id()

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

MicroPython的esp是指针对ESP8266和ESP32芯片的MicroPython固件和相关软件库。ESP8266和ESP32是一类广泛应用于物联网和嵌入式系统的低成本、低功耗的Wi-Fi和蓝牙模块。MicroPython的esp为这两种芯片提供了高级的脚本编程环境,使开发者能够使用Python语言进行快速原型设计和开发。

ESP8266:是一款低成本、低功耗的Wi-Fi模块/芯片,由Espressif Systems开发。它内置了TCP/IP协议栈,可以用于连接互联网,并具备较强的处理能力。MicroPython的esp提供了针对ESP8266的固件和相关软件库,使开发者可以使用MicroPython语言进行ESP8266应用的开发。

ESP32:是Espressif Systems推出的一款高度集成的Wi-Fi和蓝牙模块/芯片,与ESP8266相比,它具备更强大的处理能力、更多的外设接口和更多的内存。MicroPython的esp也提供了针对ESP32的固件和相关软件库,使开发者可以使用MicroPython语言进行ESP32应用的开发。

MicroPython的esp固件:是专门针对ESP8266和ESP32芯片的MicroPython固件版本。这些固件经过了针对性的优化,使得它们可以在ESP8266和ESP32上运行,并提供了与硬件交互、网络通信和外设控制等功能的API。

软件库:MicroPython的esp还提供了一系列与ESP8266和ESP32硬件相关的软件库,用于简化和加速开发过程。这些软件库提供了丰富的功能接口,涵盖了Wi-Fi、蓝牙、GPIO(通用输入输出)、I2C、SPI、PWM等常用的硬件和通信协议,使开发者可以方便地访问和控制硬件资源。
在这里插入图片描述
MicroPython 的 esp.flash_id() 是一个用于读取 ESP8266 芯片的闪存 ID 的函数。闪存 ID 是一个 32 位的值,由闪存的厂商 ID 和设备 ID 组成,可以用来识别不同的闪存类型和容量。

esp.flash_id() 的主要特点是:

它是一种简单而方便的闪存 ID 对象操作方式,可以用 esp.flash_id() 的形式来读取闪存 ID,不需要指定任何参数。
它是一种有用而实用的闪存 ID 对象获取方式,可以用来检测芯片上的闪存是否正常工作,或者选择合适的闪存操作参数。
它是一种兼容而可扩展的闪存 ID 对象接口方式,可以用其他模块或函数来访问或修改闪存 ID 对象的属性和方法,可以用 esp.flash_size() 方法来获取闪存的大小。

esp.flash_id() 的应用场景有:

用于检测芯片上的闪存是否正常工作,如在烧写固件之前,使用 esp.flash_id() 来读取闪存 ID,并与预期的值进行比较,以确保芯片上的闪存没有损坏或错误。
用于选择合适的闪存操作参数,如在使用 esp.flash_erase() 或 esp.flash_write() 方法之前,使用 esp.flash_id() 来读取闪存 ID,并根据不同的厂商和设备选择合适的擦除或写入参数,以提高操作效率和稳定性。
用于识别不同的闪存类型和容量,如在使用 esp.flash_user_start() 方法之前,使用 esp.flash_id() 来读取闪存 ID,并根据不同的厂商和设备计算出用户可用的闪存起始地址和大小,以分配合适的存储空间。

esp.flash_id() 的需注意事项有:

在使用 esp.flash_id() 之前,需要确保 ESP8266 开发板已经正确地连接到电源和电脑,并且已经安装了 MicroPython 的固件。
在使用 esp.flash_id() 时,需要注意不同厂商和设备可能有不同的闪存 ID 值,不能简单地根据值判断闪存类型和容量,需要参考相关的文档或资料进行对照和分析。
在使用 esp.flash_id() 时,需要注意与其他模块或函数的协调和兼容问题,避免造成功能冲突或干扰。例如,如果使用 esp.flash_id() 方法,则不能同时使用 machine.deepsleep() 方法。

以下是几个使用 esp.flash_id() 的实际运用程序案例:

案例一:使用 esp.flash_id() 来读取并打印 ESP8266 芯片上的闪存 ID。代码如下:

import esp # 导入 esp 模块
flash_id = esp.flash_id() # 读取闪存 ID
print(flash_id) # 打印闪存 ID

这个程序可以读取并打印 ESP8266 芯片上的闪存 ID。你可以用其他方法来处理或显示这个值。

案例二:使用 esp.flash_id() 来根据不同的厂商和设备选择合适的擦除参数,并擦除指定的闪存扇区。代码如下:

import esp # 导入 esp 模块
flash_id = esp.flash_id() # 读取闪存 ID
vendor = flash_id & 0xff # 获取厂商 ID
device = flash_id >> 16 # 获取设备 ID
sector_no = 10 # 设置要擦除的扇区号
if vendor == 0x20 and device == 0x4017: # 如果是 XM25QH64C
    esp.flash_erase(sector_no, 0x20) # 使用 0x20 作为擦除参数
elif vendor == 0xef and device == 0x4016: # 如果是 W25Q32
    esp.flash_erase(sector_no, 0x52) # 使用 0x52 作为擦除参数
else: # 如果是其他类型
    esp.flash_erase(sector_no) # 使用默认的擦除参数

这个程序可以根据不同的厂商和设备选择合适的擦除参数,并擦除指定的闪存扇区。你可以用其他方法来修改或验证这个操作。

案例三:使用 esp.flash_id() 来计算用户可用的闪存起始地址和大小,并打印在终端上。代码如下:

import esp # 导入 esp 模块
flash_id = esp.flash_id() # 读取闪存 ID
vendor = flash_id & 0xff # 获取厂商 ID
device = flash_id >> 16 # 获取设备 ID
if vendor == 0x20 and device == 0x4017: # 如果是 XM25QH64C
    flash_size = 8 * 1024 * 1024 # 设置闪存大小为 8 MB
elif vendor == 0xef and device == 0x4016: # 如果是 W25Q32
    flash_size = 4 * 1024 * 1024 # 设置闪存大小为 4 MB
else: # 如果是其他类型
    flash_size = esp.flash_size() # 获取闪存大小
user_start = esp.flash_user_start() # 获取用户闪存空间开始处的内存偏移量
user_size = flash_size - user_start # 计算用户闪存空间的大小
print('User flash start:', user_start) # 打印用户闪存空间开始处的内存偏移量
print('User flash size:', user_size) # 打印用户闪存空间的大小

这个程序可以计算用户可用的闪存起始地址和大小,并打印在终端上。你可以用其他方法来处理或显示这些值。

案例四:打印flash芯片ID:

import esp

print("Flash chip ID: ", esp.flash_id())

案例五:检查flash芯片类型:

import esp

flash_id = esp.flash_id()
if flash_id==0x16:
print("ESP32 flash chip")

案例六:根据ID选择flash操作:

import esp

id = esp.flash_id()
if id==0x16:

ESP32 specific flash operations
esp.flash_write(...)
elif id==0x17:

ESP32-S2 specific operations
esp.flash_write_encrypted(...)

第一个例子简单打印flash ID。

第二个例子根据ID识别芯片类型。

第三个例子根据ID选择不同的flash写操作。

该函数利用ID可识别ESP平台,并选择适当的flash函数调用。

案例七:打印Flash ID

import esp

print(esp.flash_id())

这个例子将直接打印出ESP8266的Flash芯片ID。

案例八:校验Flash型号

import esp

VENDOR_ID = 0xEF
DEVICE_ID = 0x4016 

flash_id = esp.flash_id()

if flash_id[0] != VENDOR_ID or flash_id[1] != DEVICE_ID:
  print("Warning! Flash chip not matched.")

这个例子会校验Flash的厂商ID和设备ID,以确保使用了正确的Flash芯片。

案例九:备份固件到不同Flash芯片

import esp

def backup_firmware(flash_id):
  if flash_id == (0xEF, 0x4016): 
    # 备份命令
  elif flash_id == (0xC8, 0x4016):
    # 备份命令
  else:
    print("Warning! Flash chip not supported.")

backup_firmware(esp.flash_id()) 

这个例子中会根据esp.flash_id()的返回值来区分不同的Flash芯片型号,并使用不同的命令来备份固件。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132905126