在樹莓派的官方作業系統 Raspbian 中內建了一個名為 vcgencmd 的指令,可以透過 CLI 介面取得 Boradcom SoC 的硬體資訊。名為 vc 開頭意思是樹莓派內部 Vide Core GPU 核心的意思,所以這指令是跟 Video Core 來交換資訊,取得的資料也會跟 Video Core 相關的為主。但基本上樹莓派的 Broadcom SoC 把 CPU 跟 GPU 封裝在一起,對於 CPU 來說參考價值也是有的。本篇的測試環境使用樹莓派 4B 1GB 版本,不同硬體版本的樹莓派數值會有所不同。

指令列表

vcgencmd 參數 commands 會列出所有的子命令,但依據我們團隊的測試結果,並非所有命令都是有效的。再者,許多子命令並沒有額外的說明或是使用方式,推估應該是原廠內部拿來做工程測試之用,各位有興趣也可以逐一測試把玩看看,玩壞掉可以再買一片(誤)。以下會列出幾個常用的指令參考。

 

取得溫度資訊

樹莓派 4B 最令人詬病的地方就是溫度過高,即便更新了新韌體溫度明顯還是比 3B+ 高上許多,這也是不少玩家所擔憂的地方。 measure_temp 會回傳目前的 SoC 溫度,以樹莓派 4B 來說沒平常五十幾度算是正常狀態,若超過 80°C 就會開始降頻運作了。而 3B+ 則是 60°C 會開始降頻。所以留意一下平常的工作溫度,如果溫度持續攀升則應該考慮加上散熱片或風扇等降溫裝置了。

pi@raspberrypi:~ $ vcgencmd measure_temp
temp=56.0'C

取得電壓資訊

在性能提高功能更多的樹莓派上,電源的供應也越趨講究,若沒有給予合適的電源輕則效能不彰,重則造成系統損害。 measure_volts 配合 core, sdram_c, sdram_i, sdram_p等不同參數,可以取得各類電壓。或是透過簡易 shell script 腳本來取得所有電壓資訊。這邊的 core 指的是 video core,並非 ARM CPU 喔。

pi@raspberrypi:~ $ vcgencmd measure_volts core
core:   volt=0.8350V

pi@raspberrypi:~ $ for id in core sdram_c sdram_i sdram_p ; do echo -e "$id:\t$(vcgencmd measure_volts $id)" ;  done
core:   volt=0.8350V
sdram_c:        volt=1.1000V
sdram_i:        volt=1.1000V
sdram_p:        volt=1.1000V

取得當前運作時脈

可以透過 vcgencmd measure_clock 取得的時脈資訊非常多,包含 arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi 等,除了下達單一參數取得特定時脈外,一樣可以使用 shell script 一次取得眾多參數。這邊可以看到運作中的 CPU 工作頻率是 1.5G ,而 GPU 頻率 500M。若是閒置狀態的 CPU 跟 GPU 會降頻以保持省電(當然溫度過高也會降頻)。

pi@raspberrypi:~ $ vcgencmd measure_clock arm
frequency(48)=1500345728 
pi@raspberrypi:~ $ for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do echo -e "$src:\t$(vcgencmd measure_clock $src)" ;  done
arm:    frequency(48)=1500398464
core:   frequency(1)=500000992
h264:   frequency(28)=500000992
isp:    frequency(45)=500000992
v3d:    frequency(46)=500000992
uart:   frequency(22)=47988280
pwm:    frequency(25)=107143064
emmc:   frequency(50)=250000496
pixel:  frequency(29)=150002928
vec:    frequency(10)=0
hdmi:   frequency(0)=0
dpi:    frequency(4)=0

系統降頻資訊

誠如前段所述, Broadcom SoC 在一些特殊情況如過熱、電壓不穩等時會將系統時脈降低,可以使用 get_throttled 查詢目前是否有時脈調節之情形。此命令呈現的數值是以 bit field 的方式表示,每一個情況以一個 bit 表示。

Bit

Meaning

0

Under-voltage detected

1

Arm frequency capped

2

Currently throttled

3

Soft temperature limit active

16

Under-voltage has occurred

17

Arm frequency capping has occurred

18

Throttling has occurred

19

Soft temperature limit has occurred

偵測Camera模組

樹莓派上提供給鏡頭模組的 CSI 介面也是連接到 Video Core ,可以透過 get_camera 子命令來取得鏡頭模組功能有沒有開啟,以及有沒有偵測到鏡頭模組。1代表有, 0 則是沒有。如果要開啟 Camera 功能記得要先執行命令 raspi-config 或是桌面環境的 Raspberry Pi Configuration 中去設定。

pi@raspberrypi:~ $ vcgencmd get_camera
supported=0 detected=0

取得韌體版本資訊

version 子命令可以獲取 Video Core 韌體版本與日期, bootloader_version 則可以獲得樹莓派啟動程式的版本。若您手中樹莓派的韌體版本不是最新版本,務必趕緊更新方能讓樹莓派運作在比較好的狀態!

pi@raspberrypi:~ $ vcgencmd version
Feb 12 2020 12:36:21
Copyright (c) 2012 Broadcom
version c3c8dbdf147686fb0c3f32aece709d0653368810 (clean) (release) (start)
pi@raspberrypi:~ $ vcgencmd bootloader_version
Sep 10 2019 10:41:50
version f626c772b15ba1b7e0532a8d50a761b3ccbdf3bb (release)
timestamp 1568112110

控制影像輸出

display_power子命令可用來控制樹莓派上不同影像輸出介面的啟閉,以 4B 來說影像輸出介面包含 HDMI0、HDMI1、DSI 與類比輸出等。鍵入 vcgencmd  display_power 0 可關閉目前的影像介面,開啟則可以鍵入 vcgencmd display_power 1 。若要指定影像輸出介面,可再多帶入一個 ID 參數來指定,該 ID 列表如下:

Display

ID

Main LCD

0

Secondary LCD

1

HDMI 0

2

Composite

3

HDMI 1

7

印出 OTP 資訊

樹莓派 SoC 內部有一塊 OTP(One Time Programmable) 記憶體,這大小雖僅有 264Byte,但卻存放著不少重要資訊,諸如硬體版本、產品序號、啟動模式、網路卡MAC位址等,此一資訊也可以透過 otp_dump 子命令從 vcgencmd 取得。傾印出來的資料都是以16進位表示,需要對照說明文件才能理解其意義,如 28-29 為硬體序號,30 為版本編號、 64-65 為網路 MAC 位址等。如果你是透過樹莓派來做二次產品開發,裡面也有提供欄位可以做寫入自己的 OTP 資料,這部分需要透過專有介面指令來完成,如各位讀者有興趣我們可以在日後做進一步介紹。

pi@raspberrypi:~ $ vcgencmd otp_dump
08:00000000
09:00000000
10:00000000
11:00000000
12:00000000
13:00000000
14:00000000
15:00000000
16:00280000
17:000008b0
18:000008b0
19:ffffffff
20:ffffffff
21:ffffffff
22:ffffffff
23:ffffffff
24:ffffffff
25:ffffffff
26:ffffffff
27:00005d5d
28:be61af4f
29:419e50b0
30:00a03111
31:00000000
32:00000000
33:00000000
34:00000000
35:00000000
36:00000000
37:00000000
38:00000000
39:00000000
40:00000000
41:00000000
42:00000000
43:00000000
44:00000000
45:00000000
46:00000000
47:00000000
48:00000000
49:00000000
50:00000000
51:00000000
52:00000000
53:00000000
54:00000000
55:00000000
56:00000000
57:00000000
58:00000000
59:00000000
60:00000000
61:00000000
62:00000000
63:00000000
64:21240000
65:dca63256
66:00000000

結論

本篇說明了 vcgencmd 指令中幾個常用的子命令,有興趣的朋友可以逐一把玩看看,雖然部分指令並沒有相應的說明文件,也不見得能順利執行成功,不過這樣也才更會有 hack 的感覺吧! enjoy and have fun!

 

 

若喜歡我們的文章歡迎進一步追蹤我們:

Facebook粉絲頁:亞堤教育

Facebook社團:創客閣樓

PChome商店街:亞堤商城

有疑惑也歡迎到FB社團中提問喔!

 

Reference:

[1] RPI vcgencmd usage

[2] vcgencmd

[3] Thermal testing Raspberry Pi 4

[3] VideoCore