1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【RaspberryPiPico (MicroPython)】microSDカードへの書き込み

Last updated at Posted at 2023-08-14

目次

  • はじめに
    • この記事の対象者
    • 動作環境
  • 事前準備
    • PicoとSDカードスロットの配線
    • SDカードのフォーマット
    • ラズパイPicoへライブラリを追加
  • プログラム制御
    • テキストファイルの出力
    • csvファイルの出力
  • 別キットで動かす:レベルシフタ付きブレークアウト基板キット
  • 参考リンク

はじめに

初投稿なので過不足等あればご指摘いただけると幸いです。
※当記事では以降「ラズパイPico」表記といたします。

この記事の対象者

・ラズパイPicoでmicroSDカードへの書き込みをしたい方
※とりあえず動けばいい人向けの内容となります。

動作環境

・MicroPython:v1.20.0
・micropython-lib/micropython/drivers/storage/sdcard/sdcard.py:2023/02/03版
 →https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/storage/sdcard

・マイクロSDカードスロットDIP化キット
 →秋月電子リンク:https://akizukidenshi.com/catalog/g/gK-05488/

事前準備

PicoとSDカードスロットの配線

当SDカードスロットではSPI通信でのデジタル通信が行われます。
ラズパイPicoのピン配置を参考に、以下表に従って接続します。

※空白は接続なし
※SPIはどこでもいいですが、バスは同一のものを使用(0 or 1)

SDカードスロット ラズパイPico(GPIO)
DAT2 ①
CD/DAT3 ② SPIx CSn
CMD ③ SPIx TX
VDD ④ 3V3(OUT)
CLK ⑤ SPIx SCK
VSS ⑥ GND
DAT0 ⑦ SPIx RX
DAT1 ⑧
カード検出スイッチB ⑨
カード検出スイッチA ⑩

SDカードのフォーマット

・[FAT32]形式でフォーマットをしておく([exFAT]形式だと読み込めなかった)

・windowsの場合は以下操作でフォーマット可能
 SDカードをPCに接続→[SDカードのドライブ]を右クリック
 →[フォーマット(A)]を選択→項目[ファイルシステム]を[FAT32]に設定して[開始]を押下

ラズパイPicoへライブラリを追加

・動作環境部分に記載した[sdcard.py]をラズパイPicoへ導入
 (筆者はThonnyでライブラリを開き、保存(Ctrl+s)した際に出てくる[Where to save to?]にて[Raspberry Pi Pico]を選択して導入しています)

プログラム側での制御

・サンプルとして以下接続をした場合のソースを記載いたします。
・サンプルの保存先はSDカードのルートとなります。

SDカードスロット ラズパイPico(GPIO)
CD/DAT3 ② GP5
CMD ③ GP3
VDD ④ 3V3(OUT)
CLK ⑤ GP2
VSS ⑥ GND
DAT0 ⑦ GP4

①テキストファイルとして出力する際のサンプル

OutFiletxt.py
from machine import Pin, SPI
import os, sdcard

spi = SPI(0,sck=Pin(2), mosi=Pin(3), miso=Pin(4))
sd = sdcard.SDCard(spi, Pin(5))
os.mount(sd, '/sd')

fp = open('/sd/test.txt', 'w')#ファイルが存在しない場合は新規作成
fp.write('test')#ファイルに書き込み

fp.close()#ファイルを閉じる

②csvファイルとして出力する際のサンプル

OutFilecsv.py
from machine import Pin, SPI
import os, sdcard

spi = SPI(0,sck=Pin(2), mosi=Pin(3), miso=Pin(4))
sd = sdcard.SDCard(spi, Pin(5))
os.mount(sd, '/sd')

fp = open('/sd/test.csv', 'w')#ファイルが存在しない場合は新規作成
fp.write("{},{}\r\n".format("ヘッダA","ヘッダB")) #ヘッダ書き込み
fp.write("{},{}\r\n".format("A", "B")) #データ部分書き込み

fp.close()#ファイルを閉じる

別キットで動かす:レベルシフタ付きブレークアウト基板キット

こちらの電子部品も同様に動作を確認しているので、ついでに記載いたします。
ラズパイPicoは3.3vの出力が利用できるので、[1]ピンは使用せず、[3]ピンに電源入力をしています。
(Arduino等の5v出力するものは[1]に電源入力するもの。と解釈しています。)

電子部品

・microSDカードスロット レベルシフタ付きブレークアウト基板キット
→秋月電子リンク:https://akizukidenshi.com/catalog/g/gK-14015/

PicoとSDカードスロットの配線

SDカードスロット ラズパイPico(GPIO)
[1]+5V電源入力(+4.0V~+6.5V)
[2]内部3.3Vレギュレータ ON/OFF
[3]内部3.3Vレギュレータ出力 3V3(OUT)
[4]GND GND
[5]SDカード クロック(CLK) SPIx SCK
[6]SDカード データ(DAT) SPIx RX
[7]SDカード コマンド(CMD) SPIx TX
[8]SDカード チップセレクト(CS) SPIx CSn
[9]SDカード カード検出スイッチ(SW 検出時GND)

参考リンク

・ラズパイPicoデータシート
https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf

・micropython-lib
https://github.com/micropython/micropython-lib

・クラス[SDCard]のドキュメント
https://micropython-docs-ja.readthedocs.io/ja/latest/library/machine.SDCard.html?highlight=sdcard

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?