Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

CM5をI/Oボードで使っています。事前にネットで知った冷却ファンの挙動がそのままだった。どうやらブートローダーが古いみたい。

挙動とは、シャットダウン後に冷却ファンが高速に回り、起動すると止まるというものです。

ブートローダーを最新に変更し、冷却ファンの設定も確認してみました。

ブートローダーの更新

前置きしておきたいのが、sudo rpi-eeprom-configで分かる内容が書き換わってしまったこと。保存しておかなかったので分からない。更新させたら変わってしまった。問題無く動作はします。ブート順序の項目が違っていた気がする。eMMCが非搭載だからなのか分からない。

ともかく購入時のバージョンを調べてみます。

vcgencmd bootloader_version

2024/09/23 14:02:56
version 2682625908f5585e5f4832bb82e74e7d757ec48f (release)
timestamp 1727096576
update-time 0
capabilities 0x0000007f

2024−09-23でした。

コマンドで更新もできるけど、手軽にsudo raspi-configから更新します。

最新のブートローダーを選びます。

どうやら、2025-05-08にしてくれるみたい。 やってみよう。

*** CREATED UPDATE /usr/lib/firmware/raspberrypi/bootloader-2712//latest/pieeprom-2025-05-08.bin  ***

   CURRENT: 2024年  9月 23日 月曜日 13:02:56 UTC (1727096576)
    UPDATE: 2025年  5月  8日 木曜日 14:13:17 UTC (1746713597)
    BOOTFS: /boot/firmware
'/tmp/tmp.CqvgrAWrdy' -> '/boot/firmware/pieeprom.upd'

UPDATING bootloader. This could take up to a minute. Please wait

*** Do not disconnect the power until the update is complete ***

If a problem occurs then the Raspberry Pi Imager may be used to create
a bootloader rescue SD card image which restores the default bootloader image.

flashrom -p linux_spi:dev=/dev/spidev10.0,spispeed=16000 -w /boot/firmware/pieeprom.upd
Verifying update
VERIFY: SUCCESS
UPDATE SUCCESSFUL

成功した。促されて再起動します。

eepromの設定

eepromの設定はこれがデフォルトだと思う。(購入時はBOOT_ORDER=0xf2146)

sudo rpi-eeprom-config

[all]
BOOT_UART=1
BOOT_ORDER=0xf461
NET_INSTALL_AT_POWER_ON=1

POWER_OFF_ON_HALT=0を追記する。

sudo rpi-eeprom-config --edit

[all]
BOOT_UART=1
BOOT_ORDER=0xf461
NET_INSTALL_AT_POWER_ON=1
POWER_OFF_ON_HALT=0 #追記

とりあえずはこれで電源がOFFで冷却ファンも止まります。

冷却ファンの設定

冷却ファンは、既にファームウェアで自動設定になっているため、I/Oボードに繋げばそれでOKみたい。

Pi 5の時も設定したけれど、ヒートシンクもあって冷却効果が高いため、細かな設定はあまり意味がありません。試して結果、自動設定で行くことにしました。

設定は書式が決まっていて、一人のレベルで3行必要。

これを0~3の4パターンのみ有効です。5つ以上書いても無視されます。

追記するのはConfig.txtの最下部へ。

sudo nano /boot/firmware/config.txt

[All]以下へ、先ず冷却ファンをONとし、その下から回転数などのレベル設定を書きます。

# Fan PWM
dtparam=cooling_fan=on

以下、デフォルト(標準)設定になります。

つまり、自動設定と同じなので、これで良ければ書かなくてもOKです。

dtparam=fan_temp0=50000
dtparam=fan_temp0_hyst=5000
dtparam=fan_temp0_speed=75
dtparam=fan_temp1=60000
dtparam=fan_temp1_hyst=5000
dtparam=fan_temp1_speed=125
dtparam=fan_temp2=67500
dtparam=fan_temp2_hyst=5000
dtparam=fan_temp2_speed=175
dtparam=fan_temp3=75000
dtparam=fan_temp3_hyst=5000
dtparam=fan_temp3_speed=250

設定の解説

自分なりの解釈で少し解説しておきます。

dtparam=fan_temp0=50000

設定レベルのトリガー温度ミリ℃(例:50000=50℃) 温度がこの温度に達すると冷却ファンが動作します。設定未満なら停止。

dtparam=fan_temp0_hyst=5000

温度ヒステリシス(Hysteresis、ミリ℃)で、冷却ファンはこの値±の範囲内で設定レベルが有効になる。 (例:5000=5℃)

ヒステリシスは、調節感度しきい値という言葉が分かりやすい。

ヒステリシスの設定幅がないと、設定温度を行ったり来たりした場合にONとOFFを繰り返すことになり、安定せず故障を招きやすいからとされてます。

冷却ファンの場合はその度に回転数が変わることになる。幅があることで、ONとOFFを繰り返す間隔を長くできるというわけですね。

自動設定の例だと、50℃、60℃、67.5℃、75℃と4パターンの設定値があり、しきい値(≒ヒステリシス)はすべて5℃なので、45℃、55℃、62.5℃、65℃、72.5℃、70℃、80℃を±超えた後に次の設定レベルへ移行する理屈だと思う。

実際に手動で計測してみると、60℃では回転数が変わっても、59℃でも50℃の設定のままだった。多分ヒステリシスの5℃を±経由して且つ60℃を超えないとダメということですね。だから設定した温度で回転数が上がる。

一方で、設定値50℃に対して45℃〜55℃ではなく、49.9℃でファンは止まった。

54℃を超えて、そこから-5℃だったから次のレベル=設定がないから0になった気がする。

ヒステリシスで設定した温度分(例:5℃)を経由して、次に温度が設定したレベルの範囲内なら、レベルに応じて上下する(回転数が変わる)ということらしい。この辺はよく分からない。

ヒステリシスは一般的に5℃や10℃といった値が多い。

dtparam=fan_temp0_speed=75

設定レベルの冷却ファンのPWM値(例:0〜255、255=100%) この値を元にファンが回転する。

75の場合は最大255の約30%の値なので、回転数が30%という計算になる。

あとで調べるコマンドで、max RPM 5853等とあったので、30%なら1756回転くらいになる。

ヒートシンクと併用しているため、アイドル時は50℃以下が多く冷却ファンは滅多に回転しない。

YouTubeの再生は温度上昇として分かりやすい。 再生すると概ね50℃〜60℃まで上がるため、動画再生後にファンが回っていることが分かります。

多くのマルチタスクでなければ、常に60℃前後で済みました。

■Pi 5は8GBモデルがオススメ

ファン関連のコマンドまとめ

冷却ファンの挙動を確認したり、いくつもコマンドを使いました。忘れがちなので、まとめておきます。

vcgencmd measure_temp
pinctrl FAN_PWM op dh
pinctrl FAN_PWM op dl
pinctrl FAN_PWM a0
cat /sys/devices/platform/cooling_fan/hwmon/*/fan1_input
sudo vclog -m

お馴染みの温度を調べるコマンド:

vcgencmd measure_temp

temp=41.1’Cなどと返ってきます。

CM5のI/Oボード専用ケースの冷却効果

専用ケースの冷却ファンと、専用ヒートシンクも併用しているため、冷却効果は抜群です。

起動後のアイドル時は概ね42℃前後でした。室温が22℃くらいまでの季節なので文句はありませんね。敢えて冷却ファンを止めても、25℃室温で47.2℃でした。

ある程度の負荷がかかっても58℃〜60℃で、60℃前半までといった具合です。70℃などはなかなか達しません。とても効果があって安心です。特にヒートシンクはオススメで、ケースのファンは無くても良いくらいです。

一時的なファン制御:

再起動するまで有効なので、あくまでも一時的な実行コマンドです。pinctlコマンドはRaspberry Pi OSだとsudoは要らないみたい。

ファンを止める(0%)

pinctrl FAN_PWM op dh

ファンを全開(100%)

pinctrl FAN_PWM op dl

ファンの自動設定(標準)

pinctrl FAN_PWM a0

ファンの回転数を調べる

コマンド実行で回転数が返ってきます。アスタリスクには恐らくhwmon1が入ると思いますが、複数ある場合に異なるみたいなのでアスタリスクでOKでした。

cat /sys/devices/platform/cooling_fan/hwmon/*/fan1_input

0と返ってくれば停止してい、回っていれば1660とか返ってきます。

先程の温度を調べるコマンドと繋げて実行すれば、分かりやすいかも。

起動時のGPUログ

vclogは公式のドキュメントによると、GPUのログです。

起動時にファンの回転速度(および最大値)も、Config.txで適用されているGPU絡みの設定も分かります。

vclog は、Arm 上で動作する Linux から VideoCore GPU からのログメッセージを表示します。root 権限で実行する必要があります。

sudo vclog –msg はメッセージログを出力し、sudo vclog –assert はアサーションログを出力します。

sudo vclog -m

vclogの出力例

004718.695: *** Restart logging
004733.152: Initial voltage 800000 temp 46073
004933.269: avs_2712: AVS pred 8558 855800 temp 46073
004936.872: vpred 855 mV +0
004950.533: FB framebuffer_swap 1
004970.255: Select resolution HDMI0/2 hotplug 1 max_mode 2
004986.682: HDMI0 edid block 0 offset 0
004989.065: 00ffffffffffff0006b3a9243c930000
004994.737: 131e010380351e782a0ef5a555509e26
005000.410: 105054bfef00d1c0b300950081808140
005006.083: 81c0714f0101023a801871382d40582c
005011.756: 4500132b2100001e000000ff004c354c
005017.429: 4d54463033373639320a000000fd0030
005023.102: 4b185412000a202020202020000000fc
005028.774: 004153555320565032343851470a01cf
005046.830: HDMI0 edid block 1 offset 128
005049.385: 02032bf14f0102031112130414050e0f
005055.057: 1d1e1f90230917078301000065030c00
005060.730: 1000681a00000101304be66842806a70
005066.403: 38274008209804132b2100001a011d00
005072.076: 7251d01e206e285500132b2100001e01
005077.749: 1d00bc52d01e20b8285540132b210000
005083.422: 1e8c0ad090204031200c405500132b21
005089.094: 000018000000000000000000000000d7
005094.786: HDMI0: best-mode 2 (limit 2) 1920x1080 60 Hz CEA modes 3ec01fe0000000000000000000000000 extensions 1
005106.379: Select resolution HDMI1/2 hotplug 0 max_mode 2
005113.301: FB0 disp 0 max-fb 2 1920x1080 stride 3840 base 0x3f800000
005987.293: initramfs (initramfs_2712) loaded to 0x2dec3000 (size 0x113cfcf)
006002.659: dtb_file 'bcm2712-rpi-cm5l-cm5io.dtb'
006088.563: Loaded overlay 'bcm2712d0'
006175.611: dtparam: i2c_arm=on
006191.031: dtparam: audio=on
006196.775: Unknown dtparam 'audio' - ignored
006261.068: Loaded overlay 'vc4-kms-v3d-pi5'
006381.277: Loaded overlay 'dwc2'
006383.140: dtparam: dr_mode=host
006388.042: dtparam: cooling_fan=on
006417.318: dtparam: fan_temp0=45000
006434.763: dtparam: fan_temp0_hyst=5000
006452.556: dtparam: fan_temp0_speed=75
006472.050: dtparam: fan_temp1=55000
006489.552: dtparam: fan_temp1_hyst=5000
006507.409: dtparam: fan_temp1_speed=125
006526.998: dtparam: fan_temp2=65000
006544.535: dtparam: fan_temp2_hyst=5000
006562.427: dtparam: fan_temp2_speed=175
006582.026: dtparam: fan_temp3=75000
006599.598: dtparam: fan_temp3_hyst=5000
006617.525: dtparam: fan_temp3_speed=250
006718.119: Read command line from file 'cmdline.txt':
006724.624: 'console=serial0,115200 console=tty1 root=PARTUUID=d8dc4f7a-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=JP'
006937.382: RPM 5685, max RPM 5685
008776.696: Device tree loaded to 0x2deaf300 (size 0x13c3f)
008850.160: Starting OS 8850 ms
008855.685: 00000040: -> 00000480
008857.536: 00000030: -> 00100080
008862.248: 00000034: -> 00100080
008866.961: 00000038: -> 00100080
008871.674: 0000003c: -> 00100080
008981.244: sdram: sdram refresh 2081->4162 (2)
068939.030: initial_turbo of 60 deactivated

ファンの回転数の最大値を知りたくて実行しました。このログはファンの設定も分かりますし、意外と重宝しますね。

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

I/OボードにあるRTCは、電池を装着した状態でコマンドを実行して確認できます。

sudo hwclock -r
2025-05-15 22:43:58.786992+09:00

これ、システムに合わせるのはどうするのか?

hwclockでよく使うオプション:r、w、s、v

sudo hwclock -r #表示(=--show)
sudo hwclock -w #RTCをシステムの時計に合わせる
sudo hwclock -s #システムをRTCに合わせる
sudo hwclock -v #詳細を表示

RTCをシステムクロックに合わせようと思い、NTPの設定をしました。

sudo nano /etc/systemd/timesyncd.conf

最初は何も設定できておらず、コメントアウトされています。

[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
#ConnectionRetrySec=30
#SaveIntervalSec=60

日本のサーバで有名なNTP2つを設定することにしました。

NTP=ntp.nict.jp ntp.jst.mfeed.ad.jp

サービスを再起動した後、ステータスを確認すると、ntp.nict.jpになっているのが確認できます。

sudo systemctl restart systemd-timesyncd.service
sudo systemctl status systemd-timesyncd.service
systemd-timesyncd[2843]: Contacted time server [2001:df0:232:eea0::fff3]:123 (ntp.nict.jp).

最後に、RTCをこのNTPで合わせたシステムクロックに同期させます。

sudo hwclock -w

確認は、sudo hwclock -vで詳細をみて、ズレがなければOKです。

Time since last adjustment is 7014576 seconds
Calculated Hardware Clock drift is 0.000000 seconds

次はCM5専用I/OボードでもSSDドライブ起動をしてみます。