非公式Rock研究所

Radxaのシングルボード(主にRock4c+)について書いています

Uart Communication-準備編

注意:当サイトに掲載されている手順は動作を保証するものではないもの、また、当サイトに掲載されている情報をもとに電子回路を作成した結果によって生じたことについて、一切の責任を負えないことをご了承ください。

【Article】「GPIOページに掲載する記事について」 - 非公式Rock研究所
https://informal-r-labo.net/posts/article005



ここではプログラミングによるUart通信を行うために必要な事前設定を紹介する。

Uartに対応するPin

Rock4c+ではUartに対応しているPinが決められており、『Radxa Rack 4C + Product Brief』にUartに対応するPinについて記載がある。

『Radxa Rack 4C + Product Brief』のスクリーンショット
-『Radxa Rack 4C + Product Brief』より

記載内容から、

がUartに対応したPinとなっている。

設定方法について

Uartの設定方法はRadxa wikiに記載があり、ここで行う手順もRadxa wiki(以下リンク)を参考にしている。

Rockpi4/hardware/devtree overlays - Radxa Wiki
https://wiki.radxa.com/Rockpi4/hardware/devtree_overlays
(Pwmの事前設定でも紹介したページである。)

Rockpi4/dev/use-uart2-as-application-uart - Radxa Wiki
https://wiki.radxa.com/Rockpi4/dev/use-uart2-as-application-uart
(ページにはoutdated(時代遅れ)と記載があるが、このページの手順が私の環境ではうまくいった。また、ページとしても必要なことが簡潔に書かれている。)

Uartの有効化(Uart2,Uart4共通)

Rock4c+は初期状態ではUartが無効化されており、Rock4c+のUartを有効化するにはデバイス機能を設定するデバイスツリーオーバーレイで行う。その設定ファイルである「/boot/hw_intfc.conf」を編集する。ちなみにこの設定は【GPIO】『Fading a LED-フェード点滅』の記事でも出てきている。

参考:【GPIO】Fading a LED-フェード点滅 - 非公式Rock研究所
https://informal-r-labo.net/posts/gpio004/


まず、以下のコマンドでhw_intfc.confファイルを管理者権限で開く。

$ sudo vi /boot/hw_intfc.conf

ファイルを開くと下の図のような記載のある個所がある。

hw_intfc.confファイルの中身

そのなかにUartに関する設定があるが、いずれも"off"になっており、Uartが無効化されている。

hw_intfc.confファイルの中身(Uart部分)

有効化させるには以下のように、有効化させたいPinのUartを"on"に書き換えて保存する。

intfc:uart2=on      #(uart2を有効化する場合)
intfc:uart4=on      #(uart4を有効化する場合)

ただし、Radxa wikiには使わないPinをみだりに有効化すると"望ましくない動作が発生する可能性がある"と記載されている。

N.B. It is recommended to only ebable those bus interfaces that are needed. Leaving all interfaces enabled can lead to unwanted behaviour.
- Rockpi4/hardware/devtree overlays - Radxa Wikiより

そのため、使わないUartは有効化しないほうがよい。

hw_intfc.confファイルの中身(デバイスツリーuart4をonへ変更)

Uart4の場合は以上で設定は終了だが、Uart2をonにする場合は以下のコンソールアクセスの無効化の設定も必要になる。

コンソールアクセスの無効化(Uart2のみ)

Uart2は初期状態ではコンソールアクセスが有効化されているため、mraaを使ったUart通信を行う場合は、コンソールアクセスの設定を無効化する必要がある。

先ほどの設定ファイルである「/boot/hw_intfc.conf」から、以下の記載のある部分を探す。

intfc:dtoverlay=console-on-ttyS2
hw_intfc.confファイルの中身(console-on-ttyS2部分)

コンソールの出力を停止させるため、この部分をコメントアウトして保存する。

hw_intfc.confファイルの中身(console-on-ttyS2部分コメントアウト)

次に、以下のコマンドで「/boot/extlinux/extlinux.conf」ファイルを管理者権限で開く。

$ sudo vi /boot/extlinux/extlinux.conf

ファイルを開くと下の図のような記載のある個所がある。

extlinux.confファイルの中身 extlinux.confファイルの中身(append部分)

元の行をコメントアウトし、代わりに"console=ttyFIQ0,1500000n8"と"console=ttyS2,1500000n8"を削除したコマンドを入力する。

# append earlyprintk console=ttyFIQ0,1500000n8 rw init=/sbin/init rootfstype=ext4 rootwait  root=UUID=(ここはデバイスによって異なる文字列) console=ttyS2,1500000n8
append earlyprintk rw init=/sbin/init rootfstype=ext4 rootwait  root=UUID=(ここはデバイスによって異なる文字列)
extlinux.confファイルの中身(append部分変更)

ただし、この設定を行うとコンソールアクセスができなくなる。もし、本設定を行った後にコンソールアクセスしたいのであれば、このページで行った設定を戻す必要がある。

【Config】コンソールアクセス(シリアル接続)- 非公式Rock研究所
https://informal-r-labo.net/posts/config011

Uart2よりUart4を優先するようにし、どうしてもUart2でなければならない時だけ有効にするとよいだろう。