Banana Pi BPI-Leaf-S3 在MicroPython中使用 machine.SDCard(),无需额外的驱动库

![BPI-Leaf-S3-V0.1.2|666x500, 75%](upload://l5AjnLOMf7XlNpodDMCNSf8sTBM.jpeg)

BPI-Leaf-S3 板载8MB Flash ROM,安装完micropython固件后,可用容量仍有5MB左右,可以存放大量的python脚本文件,或少量的多媒体内容。

如果有超过5MB的使用需求,或想要节约Flash的读写寿命,使用一张SD卡扩展存储容量是最经济实惠的选择,而且SD卡 SPI接口模块也很廉价。

## 准备

以下例程需要使用一块micro SDCard 与一个Micro SD卡SPI接口模块,一个已经安装了MicroPython固件的开发板,例如BPI-Leaf-S3。

![microSDCard|666x500, 50%](upload://nZ6WE6kGsuj3MieqACDEJpZgE2h.jpeg)

![microSDCard_SPI_Module|666x500, 50%](upload://9VZjSR724x1VfaSVpVHghIEyZWW.jpeg)

python环境,mpremote安装, VScode打开终端,mpremote连接开发板, 基本文件操作参考此帖:

[BPI-Leaf-S3使用mpremote工具在VScode IDE中编程,基础应用示例。 ESP32-S3 & MicroPython](https://forum.banana-pi.org.cn/t/topic/3943)

> 推荐也尝试一下 [PyCharm Community](https://www.jetbrains.com/pycharm/download/),此为社区版,可免费使用。

## 接线参考

|SD卡SPI接口模块|BPI-Leaf-S3开发板|

| --- | --- |

|GND|GND|

|VCC|3.3V|

|MISO|15|

|MOSI|16|

|SCK|17|

|CS|18|

![Leaf-S3_board|564x500](upload://3dd3I6naFfzYNVTTZcyDIat9S2Z.jpeg)

> 接线对应以下例程中的代码,可按需修改GPIO。

## MicroPython

**class SDCard**

```py

machine.SDCard(slot=1, width=1, cd=None, wp=None, sck=None, miso=None, mosi=None, cs=None, freq=20000000)¶

```

* slot 选择接口,0和1使用 内置SD/MMC硬件,而2和3使用SPI接口。

* sck,miso,mosi,cs用于设置SPI接口所用GPIO。

* freq 设置通信频率,默认的20Mhz不一定适配所有SD卡,如果无法正常使用,可以尝试降低频率,例如使用15Mhz。

> 更多信息参考 [MicroPython DOCs: machine.SDCard](https://docs.micropython.org/en/v1.19.1/library/machine.SDCard.html)

1. 在PC本地新建一个文件夹,新建 boot.py 文件,代码如下。

```py

import os

import machine

try:

sd = machine.SDCard(slot=2, miso=15, mosi=16, sck=17, cs=18, freq=15000000)

vfs = os.VfsFat(sd)

os.mount(vfs, "/sd")

except OSError as e:

print("OSError:", e)

print("SDCard failed.")

else:

print("/sd:", os.listdir('/sd'))

finally:

print("/:", os.listdir('/'))

```

2. 在终端中,进入此文件夹所在的路径,使用mpremote拷贝文件到开发板的flash中,命令如下。

```sh

mpremote connect COM21 cp boot.py :

```

3. 进入REPL,使用快捷键 ctrl+D 使开发板软复位,如果SD卡正常工作,则会看到以下内容。

```

MPY: soft reboot

/sd: []

/: ['sd','boot.py']

```

4. 如果提示了报错信息,则需确定接线是否正确,SD卡是否有格式化为FAT32格式。若已检查确认无接线问题和格式问题,则可尝试降低SPI通信频率,例如以下代码。

```py

sd = machine.SDCard(slot=2, miso=15, mosi=16, sck=17, cs=18, freq=1320000)

```

5. 当确认SD卡正常工作后,新建一个 test.py 文件,代码如下。

```py

import time

from machine import Pin

from neopixel import NeoPixel

pin_48 = Pin(48, Pin.OUT)

np = NeoPixel(pin_48, 1, bpp=3, timing=1)

RED = (255, 0, 0)

ORANGE = (255, 100, 0)

YELLOW = (255, 255, 0)

GREEN = (0, 255, 0)

CYAN = (0, 255, 255)

BLUE = (0, 0, 255)

PURPLE = (180, 0, 255)

WHITE = (255, 255, 255)

OFF = (0, 0, 0)

color_list = [RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE, OFF]

brightness = 0.1

while True:

for i in color_list:

color = (round(i[0] * brightness), round(i[1] * brightness), round(i[2] * brightness))

np[0] = color

np.write()

print(color)

time.sleep(1)

```

6. 将其拷贝至sd卡中,命令如下。

```sh

mpremote connect COM21 cp test.py :sd/test.py

```

7. 再新建一个 main.py 文件,代码如下。拷贝到开发板后,此程序将读取并执行 sd/test.py 文件中的程序代码。

```py

with open('sd/test.py', 'r') as file:

exec(file.read())

```

8. 将其拷贝至开发板的flash中,命令如下:

```sh

mpremote connect COM21 cp main.py :

```

9. 复位开发板,板载RGB LED应点亮,打开REPL,能看到输出的RGB信息。

----

* [BPI-Leaf-S3 开发板(ESP32S3) - Banana Pi Wiki (banana-pi.org)](https://wiki.banana-pi.org/BPI-Leaf-S3_%E5%BC%80%E5%8F%91%E6%9D%BF)

* [官方淘宝](https://item.taobao.com/item.htm?spm=a2126o.success.0.0.29034831FGnLQW&id=677287234553)

* [官方速卖通](https://www.aliexpress.com/item/1005004428945296.html?spm=5261.ProductManageOnline.0.0.48af4edfYbyEoI)

* OEM&OEM 定制服务请邮件联系: [email protected]

猜你喜欢

转载自blog.csdn.net/sinovoip/article/details/128931603