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を使うという場合には以上のような方法が使えると思います。

Nano Pi NEO 2のセットアップ

Frendly ArmのNano Pi NEO 2 WikiのInstall OSの項を参照
nanopi-neo2_sd_friendlycore-xenial_4.14_arm64_20190430.img.zipをダウンロード

Nano Pi NEOでは書き込むイメージが違うので注意
Frendly ArmのNano Pi NEO Wiki

Win32DiskImagerで書き込む。
イメージを指定して,下部のWriteボタンを押す。
f:id:tshell:20190612203256p:plain

確認ダイアログが表示されるので,Yesを選択する。
f:id:tshell:20190612203403p:plain

書き込み中
f:id:tshell:20190612203437p:plain

終了するとダイアログが出る。
f:id:tshell:20190612203507p:plain

書き込み済みのマイクロSDをマウントしようとするが,Windowsが対応していないファイルシステムのため,フォーマットするか聞かれる。キャンセルを選択して,マイクロSDをPCから取り出す。
f:id:tshell:20190612203532p:plain

マイクロSDカードを本体に挿入して起動する。
IPアドレスDHCPで設定されるが,何に設定されたかわからない場合はシリアルコンソールで接続して調査する。
シリアルコンソール用のピンはUSB端子の近く,2.54mmピンヘッダ,外側からGND,5V,RX, TX(RX,TXはNano Pi NEO 2側,シリアルケーブルはクロスになるようにつなぐ) ボーレートは115200bps

ifconfigでipアドレスを調べる。
f:id:tshell:20190612203609p:plain

ssh接続する。ユーザー名,パスワードともにpi
f:id:tshell:20190612203637p:plain

ログインすると以下のような画面が表示される。
f:id:tshell:20190612203704p:plain

固定IPの設定

公式Wikiの以下ページを参考に固定IPの設定を行う。
Use NetworkManager to configure network settings

NetworkManagerで設定する。
nmcli connection showで現在の設定を見る。
f:id:tshell:20190612203823p:plain

nmcli connection modifyで設定し,再起動する。
f:id:tshell:20190612203902p:plain

あとは自由に使えます。

PSoC 5LP Prototyping Kit プログラム書き込み手順

PSoC Programmerの使い方

PCとの接続

基盤の左側はUSB端子になっているので,PCのUSBポートに差し込む。
f:id:tshell:20190526181604j:plain

以下のようなイメージになる。
f:id:tshell:20190526181646j:plain

PSoC Programmerの起動

f:id:tshell:20190526181742p:plain

以下の赤丸のアイコンをクリックし,書き込みたいHexファイルをロードする。 PSoC Creatorでのビルドが成功すると,以下の場所にHexファイルが作成される。
C:\Users\ユーザー名\Documents\PSoC Creator\CE195352_PSoC_5LP_Blinking_LED01\CE195352_PSoC_5LP_Blinking_LED01.cydsn\ARM_GCC_541\Debug

Hexファイルの読み込み後,右側のMemory TypesグループボックスにあるLoad from hexをクリックする。
f:id:tshell:20190526181851p:plain

以下の赤線部をクリックするとKitProg(PSoCプログラム書き込み器)に接続する。
f:id:tshell:20190526182011p:plain

接続に成功すると以下のような画面になる。赤丸のアイコンをクリックしてHexファイルを書き込む。
f:id:tshell:20190526181915p:plain

書き込みが成功するとProgramming Succeededが表示される。
f:id:tshell:20190526182056p:plain

Hexファイルの書き込み後は基板上の青色LEDが一定間隔で点滅し,プッシュボタンを押している間は消灯するような動作になる。

PSoC Creatorの使い方

PSoC 5LP Prototyping Kitの開発環境を構築したときに入ったPSoC Creatorの使い方。
とりあえずサンプルを開いてビルドするところまで
tshell.hatenablog.com

新規プロジェクトの作成

Create Projectアイコンをクリックする。
f:id:tshell:20190525085033p:plain

Target kitを選択する。CY8CKIT-059以外は選択できない。
f:id:tshell:20190525085108p:plain

Code Exampleを選択する。
f:id:tshell:20190525085138p:plain

Blinking LEDを選択する。
f:id:tshell:20190525085228p:plain

プロジェクト名とプロジェクトの保存場所を選択する。
f:id:tshell:20190525085252p:plain

生成されたプロジェクトの確認

ピンアサイン設定を確認する。
pin63がPWM出力,pin64がKillスイッチに割り当てられている。
f:id:tshell:20190525085321p:plain

CY8CKIT-059_Schematics.pdfを確認すると以下のように,pin63に青色LEDが接続され,pin64にプッシュボタンが接続されているので,これでOK
f:id:tshell:20190525085408p:plain

f:id:tshell:20190525085424p:plain

ビルド

メニューからBuild - Build プロジェクト名を選択する。
(スクショ間違った)
f:id:tshell:20190525085456p:plain

OutputにBuild Succeededが表示されればビルド成功。
f:id:tshell:20190525085521p:plain

PSoC 5LP Prototyping Kit 開発環境の構築

公式サイトから以下のインストーラをダウンロードする。Cypressのユーザー登録を行わないとダウンロードできない(名前と会社名,メールアドレスの登録でOK)

f:id:tshell:20190524235407p:plain

インストーラを実行する。
f:id:tshell:20190524235444p:plain

Nextをクリックする。
f:id:tshell:20190524235516p:plain

f:id:tshell:20190524235519p:plain

Installation Type からTypicalを選択してNextをクリックする。
f:id:tshell:20190524235600p:plain

CypressのEULAに同意する。
f:id:tshell:20190524235621p:plain

armのEULAに同意する。
f:id:tshell:20190524235642p:plain

インストールが始まる。結構時間がかかる。途中でコマンドプロンプトが表示されてもあわてない。
f:id:tshell:20190524235709p:plain

名前とメールアドレスの入力
メールアドレスはユーザー登録したアドレスであってもなくてもOK
f:id:tshell:20190524235727p:plain

インストールされたソフトに更新があればアップデートしておく。
f:id:tshell:20190524235757p:plain

以上で環境構築は終了。

サンプルプロジェクトを開く

WindowsのスタートメニューなどからPSoC Creatorを起動する。
初回起動時にユーザー登録画面が表示される。とりあえずRegister Laterをクリックして先に進める。
f:id:tshell:20190525000036p:plain

サンプルプロジェクトはC:\Program Files (x86)\Cypress\PSoC Creator\4.2\PSoC Creator\examples\sampleprojectsに保存されている。
この場所を開こうとすると以下のようなエラーが出るので,マイドキュメントなどにコピーしてからPSoC Creatorで開く必要がある。(インストール時にマイドキュメントの下にPSoC Creatorフォルダが作成されているのでそこにコピーするのがよさそう)
f:id:tshell:20190525000203p:plain

File - Open - Project/Workspaceを選択する。
f:id:tshell:20190525000242p:plain

PWMxampleを開く
f:id:tshell:20190525000325p:plain

プロジェクトを開くと以下のように,左側のツリーに構成ファイルが表示される。
f:id:tshell:20190525000404p:plain

PSoC 5LP Prototyping KitでFreeRTOSを使う

PSoC 5LP評価キットでFreeRTOSを動かしたときのメモ
PSoC 5LP Prototyping Kit公式ページ

必要なもの

ソースのダウンロード

FreeRTOSのダウンロードページからダウンロードする。
以下にリンクされているので,直接行っても可
SourceForge

自己解凍形式のexeを実行する。
f:id:tshell:20190523210706p:plain

解凍するとFreeRTOSv10.2.0\FreeRTOS\Demoの中にいろいろなCPU向けのプロジェクトが入っている。
PSoC Creator向けのCORTEX_CY8C5588_PSoC_Creator_GCCを開く

f:id:tshell:20190523210841p:plain

コンポーネントのアップデート

以下のようにコンポーネントが見つからないエラーが大量に出るので,コンポーネントをアップデートする。
f:id:tshell:20190523210941p:plain

Project - Update Componentsを選択する。
f:id:tshell:20190523211015p:plain

コンポーネントをどのバージョンにアップデートするか選択する。
特に何も変更せずNextをクリックする。
f:id:tshell:20190523211111p:plain

コンポーネントがアップデートされると,以下のようにエラーが消える。
f:id:tshell:20190523211228p:plain

プロジェクトを右クリックし,Device Selectorを選択する。
f:id:tshell:20190523211314p:plain

評価キットに搭載されているCY8C5888LTI-LP097を選択する。
f:id:tshell:20190523211348p:plain

ピン設定

UARTのRXが12[6],TXが12[7]になるようにピンアサインを変更する。
f:id:tshell:20190523211426p:plain

実行

ビルドし,PSoC Programmerで書き込む。

Teratermなどのターミナルエミュレータを接続するとA-Zが連続して表示される。ボーレートは57600
FreeRTOSのPSoCサンプルとしてはこのような動作になるらしい
f:id:tshell:20190523211511p:plain

YZがない?アンチYAMAHA