先週、Raspberry Pi PicoのMicroPythonにFATFSのサポートが追加されました。 これで FAT 形式の SD カードの読み書きが可能になります。
というわけで早速試してみました。
利用するのは手元にあったArduino用(たぶん)の SD カードリーダです。 これはmicroSD カードを SPI モードで読み書きするものです。(MISOがMOSOになっているあたり、微妙な製品ですが・・・)
最新のMicroPythonをPicoにインストールし、次にSDカードドライバをMicroPythonのシステムに追加します。このドライバはSDカードをブロックデバイスとして読み書きするもので、MicroPythonで書かれています。(これ自体は以前から提供されています。)Thonnyなどでこのドライバ(sdcard.py)をMicroPython側のファイルシステムに保存すれば準備完了です。
カードリーダとPicoの結線は、以下のようにしました。現状、PicoのMicroPythonはSPIで使用するピンが決まっています。CSは任意のピンが使えますが、私は先人の業績を拝借したのでGP28を使っています。
Pico | Pin | Function | SD-Card |
6 | GP4 | SPI RX | MISO |
9 | GP6 | SPI CLK | SCK |
10 | GP7 | SPI TX | MOSI |
34 | GP28 | SPI CS | CS |
39 | VSYS | +5V | VCC |
GND | GND |
今回使ったカードリーダモジュールは電源が5V系だったので(信号線は3.3V/5V両用)、VCCはVSYSにつないでいます。
これで、以下のコードを実行すると、無事microSDにアクセスできました。
【2021/4/22追記】
現在のところ、microSDカードによってエラーになることがありますが、以下のリンクにあるように、タイムアウトを調整することで回避できる場合もあるようです。
Re: sdcard.py, no sd card error
At the beginning of the “sdcard.py” program I’m using is this code:
Code: Select allfrom micropython import const
import time
_CMD_TIMEOUT = const(100)
I have a black 8GB SanDisk card that looks much like several in your “not working” pile. My card also did not work.I changed that _CMD_TIMEOUT value in sdcard.py from 100 to 1000, and then my card worked!
(Not right away, after changing the code I also had to pull it out and re-insert, but then it did work.)
So that is probably worth a try.There was a saying where I used to work about the reliability of systems that need various “magic numbers” for time delays.
A timeout limit is not quite the same as a fixed delay, but the idea still seems applicable here.
コメント