🍓

ラズパイ5: セットアップからシリアルコンソールまで

2024/02/23に公開

はじめに

ラズパイ5が届いたので、セットアップからシリアル用のUARTのピンアサイン、シリアルコンソールへのアクセスまでを本記事にまとめておきます。

購入物

今回はスイッチサイエンスで一式購入しました。メインはベアメタルやる目的だったので、メモリは4GBもあれば十分だったのでそれにしました。

ラズパイ5ボード

公式ケース

ラズパイ5の公式ケースなかなか良い...

とりあえずRaspberry Pi OSをインストールするなら

Raspberry Pi Imagerを使えばSDカードに何の問題もなくOSがインストールされます。ただラズパイ5の場合は、SDカードの容量が最低でも8GBはないとフラッシュ後の動作が遅すぎ(スワップ領域が足りないとか?、もしかしたら利用していたSDカードが故障していた可能性も。。)て使えなさそうです。8GB以上のSDカードを用意しましょう。

シリアル(UART)コンソールを利用する

もしかしたら(もしかしなくても)、Raspberry Pi デバッグプローブ の方がデバッグにもシリアルコンソールとしても簡単そうなのですが、ないので愚直にUARTにUSBシリアルを接続してみます。

40ピンヘッダ

ラズパイ5の40ピンヘッダのピンアサインはラズパイ4と完全互換?があるみたいなので、少なくともシリアルUARTはラズパイ4と同じピンアサインと設定で使うことができました。

GPIO14 (Pin #08), GPIO15 (Pin #10)がUARTポートです。

https://community.element14.com/products/raspberry-pi/m/files/148385

config.txtの編集

以下をSDカードのbootfsパーティションにあるconfig.txtファイルに追加します。

dtparam=uart0_console
enable_uart=1

enable_uart:

enable_uart=1 (in conjunction with console=serial0 in cmdline.txt) requests that the kernel creates a serial console, accessible using GPIOs 14 and 15 (pins 8 and 10 on the 40-pin header). Editing cmdline.txt to remove the line quiet enables boot messages from the kernel to also appear there. See also uart_2ndstage.

cmdline.txt

Linuxカーネルのブート時のログを有効にするには、bootfsパーティションにあるcmdline.txtファイルからquietを削除する必要があります(デフォルトでログ出力なしになっているため)。

シリアルコンソールにアクセス

Debian GNU/Linux 12 raspberrypi ttyAMA0

raspberrypi login: hidenori
Password: 
Linux raspberrypi 6.1.0-rpi8-rpi-2712 #1 SMP PREEMPT Debian 1:6.1.73-1+rpt1 (2024-01-25) aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Feb 23 10:38:32 JST 2024 on tty1
hidenori@raspberrypi:~$ 

pinctrlコマンド

何も設定変更していないインストール直後のpinctrlコマンドの実行結果

pinctrl 
 0: ip    pu | hi // ID_SD/GPIO0 = input
 1: ip    pu | hi // ID_SC/GPIO1 = input
 2: no    pu | -- // PIN3/GPIO2 = none
 3: no    pu | -- // PIN5/GPIO3 = none
 4: no    pu | -- // PIN7/GPIO4 = none
 5: no    pu | -- // PIN29/GPIO5 = none
 6: no    pu | -- // PIN31/GPIO6 = none
 7: no    pu | -- // PIN26/GPIO7 = none
 8: no    pu | -- // PIN24/GPIO8 = none
 9: no    pd | -- // PIN21/GPIO9 = none
10: no    pd | -- // PIN19/GPIO10 = none
11: no    pd | -- // PIN23/GPIO11 = none
12: no    pd | -- // PIN32/GPIO12 = none
13: no    pd | -- // PIN33/GPIO13 = none
14: no    pd | -- // PIN8/GPIO14 = none
15: no    pd | -- // PIN10/GPIO15 = none
16: no    pd | -- // PIN36/GPIO16 = none
17: no    pd | -- // PIN11/GPIO17 = none
18: no    pd | -- // PIN12/GPIO18 = none
19: no    pd | -- // PIN35/GPIO19 = none
20: no    pd | -- // PIN38/GPIO20 = none
21: no    pd | -- // PIN40/GPIO21 = none
22: no    pd | -- // PIN15/GPIO22 = none
23: no    pd | -- // PIN16/GPIO23 = none
24: no    pd | -- // PIN18/GPIO24 = none
25: no    pd | -- // PIN22/GPIO25 = none
26: no    pd | -- // PIN37/GPIO26 = none
27: no    pd | -- // PIN13/GPIO27 = none
28: ip    pd | lo // PCIE_RP1_WAKE/GPIO28 = input
29: no    pu | hi // FAN_TACH/GPIO29 = none
30: no    pu | -- // HOST_SDA/GPIO30 = none
31: no    pu | -- // HOST_SCL/GPIO31 = none
32: op dh pd | hi // ETH_RST_N/GPIO32 = output
33: no    pd | lo // GPIO33 = none
34: op dl pd | lo // CD0_IO0_MICCLK/GPIO34 = output
35: no    pd | lo // CD0_IO0_MICDAT0/GPIO35 = none
36: no    pd | lo // RP1_PCIE_CLKREQ_N/GPIO36 = none
37: no    pd | lo // GPIO37 = none
38: ip    pd | hi // CD0_SDA/GPIO38 = input
39: ip    pd | hi // CD0_SCL/GPIO39 = input
40: ip    pd | hi // CD1_SDA/GPIO40 = input
41: ip    pd | hi // CD1_SCL/GPIO41 = input
42: a2    pd | hi // USB_VBUS_EN/GPIO42 = VBUS_EN1
43: a2    pu | hi // USB_OC_N/GPIO43 = VBUS_OC1
44: op dh pd | hi // RP1_STAT_LED/GPIO44 = output
45: a0    pd | hi // FAN_PWM/GPIO45 = PWM1_CHAN3
46: op dl pd | lo // CD1_IO0_MICCLK/GPIO46 = output
47: no    pd | lo // 2712_WAKE/GPIO47 = none
48: no    pd | lo // CD1_IO1_MICDAT1/GPIO48 = none
49: op dl pd | lo // EN_MAX_USB_CUR/GPIO49 = output
50: no    pd | -- // GPIO50 = none
51: no    pd | -- // GPIO51 = none
52: no    pu | -- // GPIO52 = none
53: no    pu | hi // GPIO53 = none
100: ip    pd | lo // GPIO0 = input
101: op dh pu | hi // 2712_BOOT_CS_N/GPIO1 = output
102: a6    pn | hi // 2712_BOOT_MISO/GPIO2 = VC_SPI0_MISO
103: a5    pn | hi // 2712_BOOT_MOSI/GPIO3 = VC_SPI0_MOSI
104: a6    pn | lo // 2712_BOOT_SCLK/GPIO4 = VC_SPI0_SCLK
105: ip    pd | lo // GPIO5 = input
106: ip    pd | lo // GPIO6 = input
107: ip    pd | lo // GPIO7 = input
108: ip    pd | lo // GPIO8 = input
109: ip    pd | lo // GPIO9 = input
110: ip    pd | lo // GPIO10 = input
111: ip    pd | lo // GPIO11 = input
112: ip    pd | lo // GPIO12 = input
113: ip    pd | lo // GPIO13 = input
114: a1    pd | lo // PCIE_SDA/GPIO14 = SPI_S_MOSI_OR_BSC_S_SDA
115: a1    pd | lo // PCIE_SCL/GPIO15 = SPI_S_SCK_OR_BSC_S_SCL
116: ip    pd | lo // GPIO16 = input
117: ip    pd | lo // GPIO17 = input
118: ip    pd | lo // GPIO18 = input
119: ip    pd | lo // GPIO19 = input
120: ip    pu | hi // PWR_GPIO/GPIO20 = input
121: ip    pd | lo // 2712_G21_FS/GPIO21 = input
122: ip    pd | lo // GPIO22 = input
123: ip    pd | lo // GPIO23 = input
124: a3    pn | lo // BT_RTS/GPIO24 = UART_RTS_0
125: a4    pu | lo // BT_CTS/GPIO25 = UART_CTS_0
126: a4    pn | hi // BT_TXD/GPIO26 = UART_TXD_0
127: a4    pu | hi // BT_RXD/GPIO27 = UART_RXD_0
128: op dh pd | hi // WL_ON/GPIO28 = output
129: op dh pd | hi // BT_ON/GPIO29 = output
130: a4    pn | lo // WIFI_SDIO_CLK/GPIO30 = SD2_CLK
131: a4    pu | hi // WIFI_SDIO_CMD/GPIO31 = SD2_CMD
132: a4    pd | hi // WIFI_SDIO_D0/GPIO32 = SD2_DAT0
133: a3    pu | hi // WIFI_SDIO_D1/GPIO33 = SD2_DAT1
134: a4    pn | hi // WIFI_SDIO_D2/GPIO34 = SD2_DAT2
135: a3    pn | hi // WIFI_SDIO_D3/GPIO35 = SD2_DAT3
200: ip    pd | hi // RP1_SDA/AON_GPIO0 = input
201: ip    pd | hi // RP1_SCL/AON_GPIO1 = input
202: op dh pd | hi // RP1_RUN/AON_GPIO2 = output
203: op dl pd | lo // SD_IOVDD_SEL/AON_GPIO3 = output
204: op dh pd | hi // SD_PWR_ON/AON_GPIO4 = output
205: a6    pu | lo // SD_CDET_N/AON_GPIO5 = SD_CARD_PRES_G
206: ip    pd | hi // SD_FLG_N/AON_GPIO6 = input
207: ip    pd | lo // AON_GPIO7 = input
208: ip    pd | lo // 2712_WAKE/AON_GPIO8 = input
209: op dl pd | lo // 2712_STAT_LED/AON_GPIO9 = output
210: ip    pd | lo // AON_GPIO10 = input
211: ip    pd | lo // AON_GPIO11 = input
212: ip    pd | lo // PMIC_INT/AON_GPIO12 = input
213: a3    pu | hi // UART_TX_FS/AON_GPIO13 = VC_TXD0
214: a3    pu | hi // UART_RX_FS/AON_GPIO14 = VC_RXD0
215: ip    pd | lo // AON_GPIO15 = input
216: ip    pu | hi // AON_GPIO16 = input
232: a1    -- | hi // HDMI0_SCL/AON_SGPIO0 = HDMI_TX0_BSC_SCL
233: a1    -- | hi // HDMI0_SDA/AON_SGPIO1 = HDMI_TX0_BSC_SDA
234: a1    -- | hi // HDMI1_SCL/AON_SGPIO2 = HDMI_TX1_BSC_SCL
235: a1    -- | hi // HDMI1_SDA/AON_SGPIO3 = HDMI_TX1_BSC_SDA
236: a2    -- | hi // PMIC_SCL/AON_SGPIO4 = BSC_M2_SCL
237: a2    -- | hi // PMIC_SDA/AON_SGPIO5 = BSC_M2_SDA

参考文献

Discussion