ラズパイ5: セットアップからシリアルコンソールまで
はじめに
ラズパイ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ポートです。
config.txtの編集
以下をSDカードのbootfsパーティションにあるconfig.txt
ファイルに追加します。
dtparam=uart0_console
enable_uart=1
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