tshell_blog

ソフトウェアと車輪がついた乗り物のはなし

Raspberry Pi にSDカードスロットを増設する

f:id:tshell:20190904194539j:plain

Raspberry Pi Compute Module 3+(CM3+)にSDカードスロットを増設しました。

CM3+の開発ボード,Compute Module IOにはMicroSDカードスロットが実装されていますが,付近にSD CARD ONLY FOR MODULES WITHOUT ON-BOARD FLASHと書いてあり,eMMCが搭載されているCM3+ではこのスロットが使えません。
CM3+を使うにあたってOSの起動はeMMCから,データの記録はSDカードへ,ということがしたい場合にはGPIOにSDカードを接続して使うことができます。
CM3+と開発ボードを使いましたが,ほかのRaspberry Piでも可能だと思います。

環境

以下のものを使いました。

  • Raspberry Pi Compute Module 3+
  • Compute Module IO rev 3
  • Raspbian Buster-lite

配線

Raspberry PiではGPIO22-27またはGPIO34-39にSDカードを接続するとセカンダリSDとして使用することができます。今回はGPIO22-27に接続しました。

SDカードのピンアサインは以下のようになっています。

f:id:tshell:20190904195247p:plain

CM3+のGPIO22-27には後述する設定により,以下機能を割り当てることができるので,SDカードのピンの対応するものを接続します。
なお,VCCには3.3Vを,VSSはGNDに接続します。

GPIO 機能 SD
22 SD1_CLK CLK
23 SD1_CMD CMD
24 SD1_DAT0 DAT0
25 SD1_DAT1 DAT1
26 SD1_DAT2 DAT2
27 SD1_DAT3 DAT3

設定

ここのソースをダウンロードします。sdio22-overlay.dtsに名前を変えて,以下のコマンドを実行します。

sudo dtc -@ -I dts -O dtb -o sdio22.dtbo sdio22-overlay.dts

作成されたsdio22.dtboを/boot/overlaysに移動します。

sudo mv sdio22.dtbo /boot/overlays/

/boot/config.txtに以下を追記して再起動します。

dtoverlay=sdio22,poll_once=off,bus_width=1,sdio_overclock=50

接続確認

dmesg | grep mmcを実行し,以下のような表示があれば増設したSDがmmc1として認識されています。mmc0はCM3+に実装されているeMMCです。

[    2.554010] mmc1: host does not support reading read-only switch, assuming write-enable
[    2.573205] mmc1: new high speed SDHC card at address aaaa
[    2.616025] mmcblk1: mmc1:aaaa SA08G 7.40 GiB
[    2.705981]  mmcblk1: p1

Raspberry PiにSDカードを増設したかったらUSBに接続してしまうのが手っ取り早いと思いますが,CM3+を使って自分で基板を起こすとかRaspberry Pi Zeroを使うという場合には以上のような方法が使えると思います。