背景介紹:
Sugar 曾發過一篇《怎樣讓自己的 stm32 開發板支持 micropython》,按照推文中的方法做大家都會有屬於自己的 pyboard。
近期有讀者向 Sugar 反饋用 pyboard 向 MicroSD 卡寫文件怎麼都寫不進去,本篇 Sugar 就來給出用 MicroPython 讀寫 MicroSD 卡的正確方法。
看原理圖確認 MicroSD 卡槽是 SDIO 方式。
1、編譯時指明「有 SD 卡」,方法是:在 mpconfigboard.h 中加入:
#define MICROPY_HW_ENABLE_SDCARD (1)列如:
#define MICROPY_HW_BOARD_NAME "SUGAR-PYB"#define MICROPY_HW_MCU_NAME "STM32F407"
#define MICROPY_HW_HAS_SWITCH (1)#define MICROPY_HW_ENABLE_SDCARD (1)#define MICROPY_HW_HAS_FLASH (1)#define MICROPY_HW_ENABLE_RNG (1)#define MICROPY_HW_ENABLE_RTC (1)#define MICROPY_HW_ENABLE_DAC (1)#define MICROPY_HW_ENABLE_USB (1)2、用 cd 命令進入 stm32 文 件夾,用以下命令重新編譯:
3、進入 build 出的文件夾,讓開發板進入 dfu 模式,用以下命令燒寫固件:
dfu-util -d 0483:df11 -a 0 -D firmware.dfuSDIO 接口 MicroSD 卡的使用方法一、先在 Linux 下用讀卡器格式化 MicroSD 卡
sudo sufdisk -u -lumount /dev/sdd1mkfs.fat /dev/sdd1二、3 種使用方式
1、默認方式:插卡從 SD 卡啟動,不插卡從內部 Flash 啟動
2、無論如何都從內部 Flash 啟動:先不插卡,在 Flash 內建一個名為 SKIPSD 的空文件即可。
3、從內部 Flash 啟動後向 MicroSD 卡寫文件
先掛載、再寫入。
import os, pybsd = pyb.SDCard()os.mount(sd, '/sd')f = open("/sd/hello.txt", "w")f.write("Hello World from Micro Python to SUGAR-PYB")f.close()提醒:在當前的 MicroPython 版本下,當插入 MicroSD 卡時可以分別向 MicroSD 卡和內部 Flash 寫文件。向 MicroSD 卡寫文件時用 f = open("/sd/hello.txt", "w"),向內部 Flash 寫文件時用 f = open("/flash/hello.txt", "w")
注意:通過 MicroPython 寫入的文件要重新將 pyboard 拔插一次才能看到新文件內容。
SPI 接口 MicroSD 卡SPI 接口的 MicroSD 卡在 micropython 源碼的 /drivers/sdcard/ 路徑下有驅動 sdcard.py。使用時將其拷貝到 Pyboard 裡並重啟 Pyboard 就可以使用了,使用 RT-Thread IoT 開發板(既正點原子潘多拉開發板)測試的例程如下:
import pyb, sdcard, os sd = sdcard.SDCard(pyb.SPI(1), pyb.Pin('C3'))pyb.mount(sd, '/sd')print(os.listdir('/sd'))SPI 接口 MicroSD 卡的使用方法一、先在 Linux 下用讀卡器格式化 MicroSD 卡
sudo sufdisk -u -lumount /dev/sdd1mkfs.fat /dev/sdd1二、2 種使用方式
1、從內部 Flash 啟動後向 SD 卡裡寫文件
先掛載、再寫入。
import pyb, sdcard, os sd = sdcard.SDCard(pyb.SPI(1), pyb.Pin('C3'))pyb.mount(sd, '/sd')print(os.listdir('/sd'))f = open("/sd/hello.c", "w")f.write("Hello World from Micro Python to SPI-SDCard")f.close()2、運行 MicroSD 卡裡的 python 程序
先建一個測試程序,命名為 blink.py 放到 MicroSD 卡中,程序內容如下:
import pyb
led = pyb.LED(1)
while(True): led.on() pyb.delay(500) led.off() pyb.delay(500)將 MicroSD 卡插到開發板上,然後運行下面的程序:
import pyb, sdcard, os sd = sdcard.SDCard(pyb.SPI(1), pyb.Pin('C3'))pyb.mount(sd, '/sd')print(os.listdir('/sd'))
import sys sys.path.append("/sd/")import blink這種修改 sys.path 的方法也適用於 SDIO 接口的 MicroSD 卡,只不過 SDIO 接口的卡要從卡裡運行的話直接從 MicroSD 卡啟動就行了,不用這麼麻煩。
PSMicroPython 工程在 github 上有 500MB 多一點,從 github 上 clone 慢的讀者可以在公眾號後臺回復 code得到 Sugar 用天翼雲盤的共享連結,速度比 github 快不少。
關注作者歡迎掃碼關注我的公眾號MultiMCU EDU。
提示:在公眾號「關於我」頁面可加作者微信好友。喜歡本文求點讚,有打賞我會更有動力。