esp32 sd卡 micropython_ESP32 下 micropython 使用 SD卡

此处讨论的是使用 SD 卡接口的使用,相对速度较快,不讨论以 SPI 方式的使用。

上下拉要求

直接使用会出现 CRC 校验错误的问题,报 0x107 或者 0x109 错误。见此Issues。

开启芯片的内置上拉也工作不稳定,偶尔会工作正常,但大部分还是出现了错误。

官方建议采取 10K 的外置上拉,但是会在 GPIO2 和 GPIO12 上会出现冲突。

GPIO2 在启动时下拉以进入 Flash 下载模式,但是采取外置上拉后会无法进入下载模式,不更新固件的话是没有问题的,可以正常使用,启动后直接开始运行程序。需要下载程序的话就需要去除外部上拉了,自行设计 pcb 的话需要用一个开关来选择是否连接上拉电阻。

GPIO12 需要在启动时下拉来选择 Flash 的工作电压为 3.3V。大部分模组的 Flash 工作电压都是 3.3V。所以这个选择是没有意义的,大部分的应用中应该都不会去更更换模组上的 Flash 吧。所以我们可以通过设置 efuse 来直接设置 Flash 工作电压,忽略 GPIO12,这样 GPIO12 直接上拉就可以了,不会干扰正常使用。

首先要安装 esptool,直接 pip 安装就可以了。之后进入安装路径,运行如下的 cmd 命令,COMX 替换为你的端口号。

注意!烧录 eFuses 是不可逆的,务必提前确定你的模组使用的 3.3V Flash。官方文档链接

esptool_py/esptool/espefuse.py --port COMX set_flash_voltage 3.3V

会输出如下日志:

espefuse.py v2.6

Connecting....

Enable internal flash voltage regulator (VDD_SDIO) to 3.3 V.

The following eFuses are burned: XPD_SDIO_FORCE, XPD_SDIO_REG, XPD_SDIO_TIEH.

This is an irreversible operation.

Type 'BURN' (all capitals) to continue.

BURN

VDD_SDIO setting complete.

完成后你可以使用如下命令检查 efuse 的状态:

components/esptool_py/esptool/espefuse.py --port COMX summary

设置完成后将 GPIO2 和 GPIO12 上拉到 3.3V,我使用的是 5.1K的电阻,因为手头没找到 10K 的,阻值大小数量级差不多即可。

然后就可以操作 sd 卡上的文件了

import os

os.mount(machine.SDCard(), "/sd") # 挂载 SD 卡

# your code here

os.umount("/sd") # 卸载 SD 卡

注意拔出卡前要关闭文件, 卸载 SD 卡,否则有可能损坏文件系统。

写入测速

读取测试文件

读取测速

写入:0.86 Mbyte/S

读取:1.26 Mbyte/S

注意,在使用 SD 卡,OLED 等有较大电流消耗的情况下启动 Wifi 可能会遇到 Brownout detector was triggered 错误,触发了电压保护,此时更换短一点,质量好一点的usb线,使用供电更充足的usb3.0口可以解决。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值