M5Stack(ESP32)学习笔记(3)—— microSD

microSD插槽使得M5Stack的数据可以方便的存储在外部存储空间(SD卡)并且能够方便的同其他设备(比如PC)交换数据。 所以我打算在继续深入学习M5Stack的其他部分之前,先看看怎样挂载SD卡到系统中。

首先找到一个8G的microSD卡(先用Windows格式化为FAT32格式),插入到M5Stack中。(插入的时候注意点,microSD插座好像同外壳的插槽稍有错位,不小心会把卡插到塑料壳中,而不是插座内。)

M5Stack(ESP32)学习笔记(3)—— microSD_第1张图片

官方资料说,M5Stack不支持超过16G的卡,这一点得到了日本友人的证实:

M5Stack(ESP32)学习笔记(3)—— microSD_第2张图片

—— 使用谷歌翻译,翻译自如下链接

https://raspberrypi.mongonta.com/howto-start-m5stack-m5burner-lovyanlauncher/

一开始并不是很顺利,我在官方文档中并没有找到如何在MicroPython中挂载SD卡。Arduino倒是有,可是我暂时并不想跑Arduino。

后来在官网论坛上得到前辈指点,使用os.mountsd

>>> os.mountsd()
W (20141) sdspi_host: spi bus changed (1 -> 2)
E (20141) sdspi_host: spi bus 2 not available
E (20141) vfs_native: Failed to initialize SDcard (258).
Traceback (most recent call last):
File "", line 1, in 
OSError: [Errno 5] EIO

却得到了报错。

然后在论坛中求助,又到处搜索,在mountsd命令之前也用os.sdconfig(...)尝试了各种模式,os.SDMODE_4LINE, os.SDMODE_1LINE and os.SDMODE_SPI ,都不行。

又按照LoBo的wiki上的指引,尝试如下指令,也不行。

uos.sdconfig(uos.SDMODE_SPI,clk=18,mosi=23,miso=19,cs=4)

难道是我的M5Stack坏了???

抱着试试看的心态,我尝试用M5Burner重新刷写了 UIFlow-v1.3.1-Beta和UIFlow-v1.2.3。然后竟然可以mountsd了。

如下各种尝试都可以。

 UIFlow-v1.3.1-Beta下:

>>> import uos
>>> uos.sdconfig(uos.SDMODE_SPI,clk=18,mosi=23,miso=19,cs=4)
I (53596) gpio: GPIO[23]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pull             down: 0| Intr:0
I (53596) gpio: GPIO[19]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pull             down: 0| Intr:0
I (53604) gpio: GPIO[18]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pull             down: 0| Intr:0
>>> uos.mountsd()
W (65959) sdspi_host: spi bus changed (1 -> 2)
I (65959) gpio: GPIO[4]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulld             own: 0| Intr:0
---------------------
 Mode: SPI
     Name: SU08G
     Type: SDHC/SDXC
    Speed: default speed (25 MHz)
SPI speed: 40 MHz
     Size: 7580 MB
      CSD: ver=1, sector_size=512, capacity=15523840 read_bl_len=9
      SCR: sd_spec=2, bus_width=5

>>> 

UIFlow-v1.2.3下:

>>> import uos
>>> uos.sdconfig(uos.SDMODE_SPI,clk=18,mosi=23,miso=19,cs=4)
>>> uos.mountsd()
W (104277) sdspi_host: spi bus changed (1 -> 2)
---------------------
 Mode: SPI
     Name: SU08G
     Type: SDHC/SDXC
    Speed: default speed (25 MHz)
SPI speed: 20 MHz
     Size: 7580 MB
      CSD: ver=1, sector_size=512, capacity=15523840 read_bl_len=9
      SCR: sd_spec=2, bus_width=5

>>>

或者:

>>> import uos
>>> uos.mountsd()
W (497494) sdspi_host: spi bus changed (1 -> 2)
---------------------
 Mode: SPI
     Name: SU08G
     Type: SDHC/SDXC
    Speed: default speed (25 MHz)
SPI speed: 20 MHz
     Size: 7580 MB
      CSD: ver=1, sector_size=512, capacity=15523840 read_bl_len=9
      SCR: sd_spec=2, bus_width=5

或者干脆:

>>> os.mountsd()
W (121709) sdspi_host: spi bus changed (1 -> 2)
---------------------
 Mode: SPI
     Name: SU08G
     Type: SDHC/SDXC
    Speed: default speed (25 MHz)
SPI speed: 20 MHz
     Size: 7580 MB
      CSD: ver=1, sector_size=512, capacity=15523840 read_bl_len=9
      SCR: sd_spec=2, bus_width=5

>>>

好吧,是不是可以说明原机自带的UIFlow系统是有问题的?……

然后列出SD卡中的目录,尝试改个文件名,证实挂载成功。

>>> os.listdir('/')
['flash', 'sd']
>>> os.listdir('/sd')
['System Volume Information', 'A.TXT']
>>> os.rename('/sd/A.TXT','/sd/B.TXT')
>>> os.listdir('/sd')
['System Volume Information', 'B.TXT']
>>>

那么,刚拿到的M5Stack,重新刷个机,是不是个好习惯?

不管怎样,用完了SD卡,unmount一下应该是个好习惯。

>>> os.umountsd()

[Update 20190609 19:39] 实验结果umountsd会影响lcd显示。

好啦,虽然有点波折,SD卡搞定了。

参考资料:

https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo/wiki/filesystems
https://forum.micropython.org/viewtopic.php?t=4551
https://loboris.eu/forum/showthread.php?tid=85

 

----

又买了一个M5StickC,下次把玩一下。

 

M5Stack(ESP32)学习笔记(3)—— microSD_第3张图片

 

你可能感兴趣的:(M5Stack(ESP32)学习笔记(3)—— microSD)