Raspberry Pi にSDカードスロットを増設する
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カードのピンアサインは以下のようになっています。
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を使うという場合には以上のような方法が使えると思います。