sdcard --- SD卡

安全数字或SD卡和微型microSD卡价格低廉,可为设备增加大量存储空间。MicroPython,只有1M的闪存来存储代码和数据。 如果你拥有更大的闪存空间,可以将micro SD卡通过SPI通讯方式连接到掌控板来扩展其存储空间。

https://www.digikey.com/maker-media/520920e2-79cd-4b23-8e89-1acc572496e8

SD卡

SDCard类

class sdcard.SDCard(spi, cs)

创建SDCard对象,初始化SD卡。

首先,须确保SPI总线的引脚与micro SD卡物理连接正确。确保您的micro SD卡使用FAT或FAT32文件系统格式化。然后,用os.mount(),将SD卡虚拟新的FAT文件系统挂载到指定的目录中。 挂载完成后,你就可以使用Python 的文件操作(如打开,关闭,读取和写入)来访问文件。

  • spi - machine.SPI对象
  • cs - SPI的CS控制引脚
示例-挂载SD卡
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from machine import Pin, SPI
import machine, sdcard, os

# 创建SPI对象,spi引脚如下述
spi = SPI(1, baudrate=10000000, polarity=0, phase=0, sck=Pin(Pin.P13), mosi=Pin(Pin.P15), miso=Pin(Pin.P14))
# 构建SDCard对象
sd = sdcard.SDCard(spi, Pin(Pin.P16))
# 挂载sd到 '/sd' 路径
os.mount(sd, '/sd')

# 创建文件并写数据
with open("/sd/test.txt", "w") as f:
    f.write("Hello world!\r\n")
示例-列出所有文件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from machine import Pin, SPI
import machine, sdcard, os

spi = SPI(1, baudrate=10000000, polarity=0, phase=0, sck=Pin(Pin.P13), mosi=Pin(Pin.P15), miso=Pin(Pin.P14))
sd = sdcard.SDCard(spi, Pin(Pin.P16))

os.mount(sd, '/sd')

def print_directory(path, tabs = 0):
    for file in os.listdir(path):
        stats = os.stat(path+"/"+file)
        filesize = stats[6]
        isdir = stats[0] & 0x4000
    
        if filesize < 1000:
            sizestr = str(filesize) + " by"
        elif filesize < 1000000:
            sizestr = "%0.1f KB" % (filesize/1000)
        else:
            sizestr = "%0.1f MB" % (filesize/1000000)
    
        prettyprintname = ""
        for i in range(tabs):
            prettyprintname += "   "
        prettyprintname += file
        if isdir:
            prettyprintname += "/"
        print('{0:<40} Size: {1:>10}'.format(prettyprintname, sizestr))
        
        # recursively print directory contents
        if isdir:
            print_directory(path+"/"+file, tabs+1)


print("Files on filesystem:")
print("====================")
print_directory("/sd")