![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]