木曜日、5月 21、2020

閑話休題(その2) eMMCとmicroSDカード

microSDカードには産業用(最近ではドライブレコーダ用)として耐久性が高い製品が販売されています。SLCと呼ばれるメモリ構造を使用したタイプが60,000回のR/Wに耐えられるということで販売されていますがmicroSDタイプのものは少なく8GBの容量でCM3 +を3枚買っておつりがくるような価格です。これに対しeMMC(embedded Multi Media Card:基板実装型マルチメディアカード)という名称が示しているようにNAND型のマルチメディアカードを基板上に実装できるようにBGAなどのパッケージに入れたものです。
[more]
MMCはもともと[more]SDカードとサイズが同一でインターフェイスも下位互換であったところからマイコンボードなどの外部ストレージとして使用されることがありました。SDカードのライセンス料を払えないマイコンボードベンダがMMC互換インターフェイスを使用してSDカードを使用していました。MMCはmicroSDに押されて市場からはなくなりましたが、スマートフォンなどの内部にeMMCとして組み込まれるようになりました。したがって、アクセススピードや耐久性はmicroSDとそれほど変わりませんが、ソケットなどの機械的な部分や接点がない分安定して使用できると思われます。

[img=images/dscf7485-300x175.jpg]
[url=https://www.ratocsystems.com/products/triple_r/prot/products.php?id=42ca4d4e5dea471ca8933510f2821424&no=mb2]RPi-CM3MB2シリーズ[/url]
推奨ケース(タカチ電機工業社製 PF18-4-12)に組み込みました。
コネクタパネルも当社Webサイトより販売しています。

[img=images/dscf7488.jpg scale=10%]
[url=https://www.ratocsystems.com/products/triple_r/prot/products.php?id=58f273a819d425757feaae973abdc5e9&no=mb3]RPi-CM3MB3[/url]
推奨ケース(タカチ電機工業社製 MAX4-13-9)に組み込みました。
コネクタパネルも当社Webサイトより販売しています。

閑話休題(その1) Windows10_PCからSSHでCM3MBxにloginするには

 Windows10にはWindows PowerShellというUNIXのターミナル風のUtilityが組み込まれています。左下のWindowsアイコン -> [Programの一覧]からWindows PowerShellを起動してください。  

PowerShellが起動したら’>’のプロンプトに続けて   
[b]
[code]arp -a[/code][/b]
注)はリターンキーを示します。
[more]

と入力してください。arpテーブルの内容がズラズラと表示されます。その中で物理アドレスが00-c0-d0-e0-xx-xxが含まれている行に注目してください。00-c0-d0は当社に割り当てられているIEEEアドレスコードです。これを含む同一行の左側に表示されている’192.168.xx.xx’がCM3MBxのIPアドレスです。  

Windows10(Pro Ver1909 build 18363.535以降)にはsshがinstallされていますので’>’に続けて   

[b][code]ssh pi@raspberry[/code][/b]

もしくは

[b][code]ssh pi@192.168.xx.xx[/code][/b]

と入力してください(xx.xxはarpコマンドで表示された実際の値を入力します)。Passwordの入力が要求されますので初期passwordのraspberryと入力してください。  

Passwordが認証されればRaspbianが起動します。  CM3MBxとのsshによる接続を解除する場合は、

[b][code]exit[/code][/b]

と入力すればPower Shellの入力プロンプトが’PS C:Usersxxxxx>’に戻りsshコマンドが終了したことを確認できます。  

PowerShellそのものを終了させるにはwindowの右上の’X’をClickすればOKです。

Computer Module 3 + を使う

Raspberry pi 3 B と同じCPUを搭載したCM3 +(Plus)シリーズが発表されたのは昨年(2019年)1月でした。Raspberry pi 3 Bと同様にmicroSDカードベースのCM3 + Lite(eMMCなし)モデル以外に8GB、16GB、32GBのeMMCを搭載した4種類のモデルが発売されました。CM3では4GB搭載モデルしかありませんでしたので、Raspbian Buster Lite(最新版、2019年以降 リリースでないとCM3 +が動作しません)しかインストールできませんが、8GB以上あればRspbian Buster with desktopもinstall可能です。機器組込用途では
[more]microSDへのアクセスが続くことによる「ヘタリ」やホコリや周囲温度によるトラブルに気を遣うことがなくなります。これらのeMMC搭載モデルが最近国内でも入手しやすくなりましたのでCM3MB2,CM3MB3に搭載し、Raspbianのinstallなどの方法を紹介します。

なお、Audio機器組込用に開発されたCM3MB1への搭載方法については[url=https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=161133]【RAL_Raspi Blog】[/url]ページを参照して下さい。
[hr][/hr]

機器組込用としてRaspberry pi 3 Bなどの標準外形モデルを使用する場合、四方からコネクタが出ていたり、microSDカードソケットの位置にも気を遣わねばなりません。Photo-1はRaspberry pi 2Bを組込んだ一例です。

[img=images/img_3723.jpg scale=20%]

[Photo-1][url=https://www.ratocsystems.com/solution/vango/index.html]【ナンバー呼出システムVango】[/url]の内部配線の様子。

USBやHDMIの配線が入り組んでいます。また、写真では見づらいですがRaspberry pi 基板下側の裏側(白いコネクタの裏側)にmicroSDのスロットがあります。メディアの着脱を考えると、この部分も考慮する必要があります。

[img=images/rex-vansw1.jpg scale=40%]

[url=https://www.ratocsystems.com/solution/vango/index.html]【ナンバー呼出システム「Vango」】[/url]の外観

もっとスマートにRaspberry piを組み込むにはどうすればよいかということで、私たちは電源まわりやRealtime Clock,Battery Backupなどの周辺回路を搭載したCM3MBシリーズを提供しています。今回発売されたeMMC搭載のCM3 +はまさに「鬼に金棒」と言えます。

[img=images/rpi-cm3mb2l-poe_s.jpg]

[url=https://www.ratocsystems.com/products/triple_r/prot/products.php?id=42ca4d4e5dea471ca8933510f2821424&no=mb2]【RPi-CM3MB2シリーズ】[/url]
バックアップ電池搭載の多機能キャリアボード。写真はPoE対応版(約166mm x 112 mm 約206g)

[img=images/rpi-cm3mb3_cm3mb3l_s.jpg]「photo」

[url=https://www.ratocsystems.com/products/triple_r/prot/products.php?id=58f273a819d425757feaae973abdc5e9&no=mb3]【RPi-CM3MB3】[/url]
小型キャリアボード(約120mm x 84mm 約82g)

[hr][/hr]

[h4][color=#009933]Step.1[/color][/h4]

基本となるOS Raspbianのdownload、解凍、CM3 +上のeMMCへのOSの書き込みを実行するためにWindow10PCを用意してください。microSDカードに書き込む場合と同様に

【SDFormatter】
【Win32DiskImager】

のinstallも必要です。CM3+上のeMMCにRaspbianを書き込むためにはWindws10からeMMCをmicroSDカードとして認識させるためのrpiboot.exeというDeviceDriverが必要です。

詳しくは、【Flashing the Compute Module eMMC】という記事を参照して下さい。その記事中のリンクをクリックしてRPiBoot.exeをダウンロードし、インストールしておいて下さい。

[hr][/hr]

[h4][color=#009933]Step.2[/color][/h4]
CM3MBxにeMMC付きのCM3 +(CM3 4GBも同様です)を装着して下さい。J6(USB Boot)の1-2間に短絡プラグを差し込み、【Enable】に設定 して下さい(Photo-2、3参照、CM3MB2/MB3共通)。

[img=images/enable1-300x211.jpg]

[Photo-2][url=https://www.ratocsystems.com/products/triple_r/prot/products.php?id=42ca4d4e5dea471ca8933510f2821424&no=mb2]
【RPi-CM3MB2シリーズ】[/url]

[img=images/enable2-300x211.jpg]

[url=https://www.ratocsystems.com/products/triple_r/prot/products.php?id=58f273a819d425757feaae973abdc5e9&no=mb3]
【RPi-CM3MB3】[/url]

[hr][/hr]

[h4][color=#009933]Step.3[/color][/h4]
CM3MBxのmicroUSBコネクタ(cn2)とWindows10PCのUSB-Aポートを接続しCM3MBxの電源をONにして下さい。

[hr][/hr]

[h4][color=#009933]Step.4[/color][/h4]
Windows10PC上で【rpiboot.exe】を実行してください。「コマンドプロンプト」のWindowが表示され、CM3+の接続待ちとなります。数秒後にCM3+上のeMMCが認識され、ドライブ名がアサインされますのでexplorerで確認して下さい。

[hr][/hr]

[h4][color=#009933]Step.5[/color][/h4]
アサインされたドライブに対してSDFormatterを実行し、microSDに見せかけたeMMCをフォーマットして下さい。

[img=images/sd-formatter.jpg]
SD Card Formatter

[hr][/hr]

[h4][color=#009933]Step.6[/color][/h4]
Formatが終了したら【Win32DiskImager】を実行、書き込み先としてStep.4で確認したドライブ名を指定し、あらかじめdownload、解凍しておいたRaspbianのimageをeMMCに書き込んで下さい。Raspbianの最新版は[color=#FF9900]【Raspbian Buster 4.19 2019-09-26】[/color]ですが、CM3(4GB)に書き込む場合はLiteを選択しないとイメージが収容できません。CM3+(8GBもしくは16GB,32GB)の場合は”with Desktop”も書き込めますが、”with Dsktop”や”with Desktop and Recomennded Software”版はRaspbery piをLinux デスクトップ機としてPCライクに使用するためのものですので、機器組込み用には”Lite”が最適です。

[img=images/diskimage.jpg]
Win32 Disk Imager

[hr][/hr]

[h4][color=#009933]Step.7[/color][/h4]
書込みが正常終了したらexplorerでアサインされたドライブをクリックしてみて下さい。ドライブには【boot【というラベル(Volume名、Raspberry piでは/bootという名称のFAT32のフォルダ)が付けられておりその下のファイルが表示されます。そこにあらかじめPC上に作成しておいたssh(もしくはSSH)という名前の空の拡張子がないファイル(何かのtextがはいっていてもよい)をcopyしておきます。このsshというファイルが/bootに存在しないと同一Networtk上のPCやMacからSSHを使用してlogfinできませんのでCM3+の初期設定などが難しくなります。sshという名称のファイルはPC上ではテキストエディタ(‘メモ帳’など)を使って作成できますが、必ず’名前の変更’を選択して拡張子を削除しておいて下さい。

[hr][/hr]

[h4][color=#009933]Step.8[/color][/h4]
同様にPC上でテキストエディタを使用してあらかじめPC上にuserconfig.txtという名称のテキストファイルを作成しておき、そのファイルをeMMC(Raspbianの/bootフォルダ)にコピーして下さい。userconfig.txtの内容は下記ですが、一つの文中にスペースは入れないで下さい。スペースがあるとセパレータとして認識され記述した内容が正しく実行されません。またタイプミスがあってもbootの実行は止まらずそれらを無視して続行されますので正確に記述して下さい。

[code]
dtoverlay=pi3-act-led,gpio=16
dtoverlay=gpio-poweroff,gpiopin=5
[/code]

Windows10上のTextエディタでboot/config.txtを読み出し、最終行にinclude userconfig.txtという記述を追加しておいて下さい。

[hr][/hr]

[h4][color=#009933]Step.9[/color][/h4]
以上の作業が終了したらCM3MBxの電源を切り、PCとの接続ケーブル(microB to USB-A)を外し、J6(USB Boot)の2-3間に短絡プラグを戻してDISableに設定 して下さい(Photo-4,5参照)。

[img=images/disable1-300x211.jpg]
[Photo-4]RPi-CM3MB2シリーズ

[img=images/disable-300x211.jpg]
[Photo-5]RPi-CM3MB3

[hr][/hr]

[h4][color=#009933]Step.10[/color][/h4]
LANケーブル、必要に応じてHDMIケーブル、キーボードなどを接続した後、電源をONにして下さい。Power_LEDが点灯しその横のAct_LEDが点滅してRaspbianがLoadされればStep.9までの操作が正しく実行されたことがわかります。最初はファイルシステムの構築などが行われるため数分かかる場合もありますが正常にRaspbianが起動することを確かめて下さい。初回はHDMIディスプレイ(HD-TVでOK)とUSBキーボードを接続しておくことを推奨します。起動時いろんなMessageが次々と表示され最終的に画面の左上隅にUserとPasswordの入力prompt messageが表示されます。CM3Mbxに接続されたHDMIディスプレイとキーボードでStep.12以降の作業を行う場合はUser,PWの初期値としてそれぞれ pi, raspberryを入力して下さい。 User,PWが認証され Raspbianが起動したのちifconfig と入力すればCM3MBxのIPアドレスが表示されます。

[hr][/hr]

[h4][color=#009933]Step.11[/color][/h4]
同様な作業をCM3MBxに直接HDMIディスプレイとキーボードを接続せずに行う場合は同一LAN内のPCもしくはMacからSSHを使用してLoginする必要があります。

[hr][/hr]

[h4][color=#009933]Step.12[/color][/h4]
ここまでのStepで’CM3 +’上のeMMCメモリにはRaspbianが正しくinstallされました。続いて、CM3MBxのShutdownボタンを有効にするための設定や、時刻(Time Zone)の設定を行います。CM3MBxのShutdownボタンは機器に組み込んでHeadless(CM3Mbxにキーボード、マウス、HDMIディスプレイを接続しないで)で運用している場合に電源を外部からOFFにしたい場合などにとても便利です。

物理ボタンで電源のON/OFFを制御する

上記で、システムシャットダウン時のLED制御を設定しましたが、今度は本体にある電源ボタンを使った制御を設定します。
この設定をおこなうと、電源ボタンを長押しすることでシャットダウンを検知し、本体の電源をOFFさせることが可能になります。
[more]

[b][color=#009933]シャットダウン用プログラムの作成[/color][/b]
システムシャットダウンのプログラムはPythonのプログラムで作成します。以下のソースコードをつかって、ファイルを作成してください。
ここでは、ファイル名を "shutd_btn.py" とし、ファイルを/ratoc 以下に保存します。
ディレクトリはあらかじめ作成しておきます。
[code]$ mkdir ratoc
$ cd ratoc
[/code]

[code]#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# RPi-CM3MB2/MB3 Shutdown Button handler
# "shutd_btn.py"
# 2018/03/13 R1.0
# RATOC Systems, Inc. Osaka, Japan
#
import RPi.GPIO as GPIO
import os, time

shutd_ctl = 6 #GPIO 06 for Shutdown Control

GPIO.setmode(GPIO.BCM) # Use Broadcom pin numbering
GPIO.setup(shutd_ctl, GPIO.IN, pull_up_down=GPIO.PUD_UP)
print( "RPi-CM3MBx Shutdown Button handler" )

def isr_shutdown(self):
print( "Shutdown Button is activated !!" )
os.system( "sudo shutdown -h now" )

GPIO.add_event_detect(shutd_ctl, GPIO.FALLING, callback=isr_shutdown, bouncetime=2000)

while(True):
time.sleep(1)

GPIO.cleanup()
[/code]

スクリプトファイルの作成がおわれば、ファイルの属性を変更します。
[code]~/ratoc/ $ sudo chmod 755 ./shutd_btn.py[/code]

次に、先ほど作ったファイルをサービス登録るためにサービスファイルを作成します。
以下のコードを使ってサービスファイルを作成してください。
ここでは、ファイル名を "shutd_btn.service" とします。
[code][Unit]
Description=RPi-CM3MB2/MB3 Shutdown button service
Wants=network.target

[Service]
ExecStart=/home/pi/ratoc/shutd_btn.py
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target
[/code]

ファイルの作成が終われば、サービスファイルを システムにコピーします。
[code]~/ratoc/ $ sudo cp shutd_btn.service /etc/systemd/system/shutd_btn.service[/code]

[b][color=#009933]サービスの開始[/color][/b]
先ほどコピーしたサービスを開始させます。
[code]~/ratoc/ $ cd
$ sudo systemctl start shutd_btn.service
[/code]

[b][color=#009933]サービスの自動実行化[/color][/b]
次に、サービスを自動実行するための設定をおこないます。
[code]$ sudo systemctl enable shutd_btn.service[/code]

自動実行を有効にしたのち、サービスが正しく動作しているかをかくにんします。
[code]$ sudo systemctl status shutd_btn.service[/code]

[quote][color=#00ff00]●[/color] shutd_btn.service - RPi-CM3MB2/MB3 Shutdown button service
Loaded: loaded (/etc/systemd/system/shutd_btn.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-03-15 11:57:55 JST; 5min ago
Main PID: 349 (python3)
CGroup: /system.slice/shutd_btn.service
mq349 python3 /home/pi/ratoc/shutd_btn.py

3月XX XX:XX:XX raspberrypi systemd[1]: Started RPi-CM3MB2/MB3 Shutdown button service.
[/quote]

上記のように●が緑になっていれば、正常に動作しています。

動作確認後、電源ボタンを3秒間長押しして、連動してシャットダウンが実行されることを確認します。
電源ボタンを押して起動後に、再度以下のコマンドを入力してください。

[code]$ sudo systemctl status shutd_btn.service[/code]
コマンド入力後、サービスが正しく動作しているかを確認してください。
※●が緑になっていればOKです。


[b][color=#009933]おまけ:システム起動時のサービス自動実行を無効化したいとき[/color][/b]
自動実行を無効化する際は、以下のコマンドを入力してください。
[code]sudo systemctl disable shutd_btn.service[/code]

リアルタイムクロックの設定

[h4][color=#009933]RTCの有効化[/color][/h4]
ラトックの Raspberry Pi キャリアボードには、RTC(リアルタイムクロック)の機能が標準で搭載されています。
ここでは、リアルタイムクロックを動作させるためのセットアップをおこないます。
セットアップについては [url=https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=161133]www.raspberrypi.org/forums/viewtopic.php?f=63&t=161133[/url] に記載されていますが、要点をここで記載します。
[more]


はじめに、Raspberry Piを起動し、"LxTerminal"を起動します。
ターミナルが起動したら以下のコマンドを入力し、アプリケーションを起動してください。

vi を使用する場合
[code]$ sudo vi /boot/config.txt[/code]
nano を使用する場合
[code]$ sudo nano /boot/config.txt[/code]
leafpad を使用する場合
[code]$ sudo leafpad /boot/config.txt[/code]

それぞれエディタが起動すれば、以下の文字列を追加します。

[quote][b][color=#3399cc]dtoverlay=pi3-act-led,gpio=16
dtoverlay=gpio-poweroff,gpiopin=5
dtoverlay=i2c-rtc,mcp7941x
[/color][/b][/quote]

上記の文字列を追加した後、保存しアプリケーションを終了させてください。


次に、ハードウェアクロックのセッティングをおこないます。
先ほどと同じように、ターミナルからアプリケーションを起動してください。

vi を使用する場合
[code]$ sudo vi /lib/udev/hwclock-set[/code]
nano を使用する場合
[code]$ sudo nano /lib/udev/hwclock-set[/code]
leafpad を使用する場合
[code]$ sudo leafpad /lib/udev/hwclock-set[/code]

エディタの起動後、以下の文字列をコメントアウトさせてください。
[quote][color=#3399cc][b]if [ -e /run/systemd/system ] : then
exit 0
fi[/b][/color][/quote]

コメントアウトするとこのような文字列になります。

[quote][color=#3399cc][b]# if [ -e /run/systemd/system ] : then
# exit 0
# fi[/b][/color][/quote]

上記のようにコメントアウトができたら、保存、アプリケーションを終了させてください。
終了したら、再起動をおこなってください。


Raspbianが起動した後 "LXTerminal" から以下のコマンドを入力し、状態の確認をおこないます。

[code]$ sudo i2cdetect -y 1[/code]

上記のコマンド入力後、表示される I2Cの一覧にある 0x6F が "UU"、0x57(EEPROM)が "57"であることを確認してください。

[img=./img/v04/i2cdetect.png]
i2cの状態を確認した例

[h4][color=#009933]おまけ: hwclockコマンドでRTCへ直接アクセスする[/color][/h4]
RTC機能をコマンドラインで直接動作確認させることが可能です。
主なコマンドライン

RTCの時刻読み出し
[code]$ sudo hwclock -r[/code]

システムの時間をRTCへ書き込む
[code]$ sudo hwclock -w[/code]

RTCの時間をシステムhw書き込む(スタートアップ時に実行)
[code]$ sudo hwclock -s[/code]

RTCから10秒間隔で時刻を読み出す(終了はCTRL+C)
[code]$ sudo hwclock -c[/code]