Ublox ZED-F9PをRaspberry Piで使う【シリアル接続編】


はじめに

ZED-F9PにDocomoのRTK補正信号を送信し
UDPで補正されたNMEA情報を送信するユニットを作成したので
作り方をメモ

ZED-F9Pの設定とかは出来る前提で話を書いています。
リクエストああればその辺の話も書くかも・・・

ハード構成

下図のとおりです。
今回はZED-F9PとRaspberryPi4との接続の部分を記載します。

必要な設定

プログラムの構成をNMEAパケット側とRTCM3パケット側で分けたかったので
この事例ではUARTを2本使用します。
そのために下記の操作が必要となります。

1.40pinのGPIOのUART端子を有効化
2.シリアルコンソールの無効化
3.GPIOのUARTをPL011に変更
4.UARTの追加

1.40pinのGPIOのUART端子を有効化

GUIで「RaspberryPiの設定」->「インターフェース」で下記のように設定

2.シリアルコンソールの無効化

上図参照

3.GPIOのUARTをPL011に変更

標準のままですとGPIOに接続されているUARTがminiUARTなのでPL011に変更します。
miniUARTでも動きましたが機能制限があるようなので変更しておきます
詳しくは下記をお読みください。
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.pdf

使用したいUART0をBluetoothのモデムが使用しているので 
「/boot/config.txt」に下記を追加してBluetoothを無効化します。

dtoverlay=disable-bt

 miniUARTにBluetoothを割り当てることも出来るようですが
 ボーレートが低下したり不具合もありそうなので無効化しておきます。

 次にモデムを初期化するシステムサービスを下記コマンドで無効化して
 モデムを接続しないようにします。

$ sudo systemctl disable hciuart

一度再起動します・・・

「/dev」の中を確認して

serial0 -> ttyAMA0
serial1 -> ttyS0

になっていれば完了です。

4.UARTの追加

普通に考えればUART2を追加すると思うのですがUART2のTX端子が遠いので
UART0のRX「GPIO15」に近いUART3を有効化させます

「/boot/config.txt」に下記を追加します。

dtoverlay=uart3

「/dev」の中を確認して「ttyAMA1」が追加されていれば成功です。

次回

シリアルでNMEAのパケットを受信してUDPで送信したいと思います。

おまけ

追加可能なシリアルは4個のUART2,UART3,UART4,UART5で下記で設定可能です。
「*」は有効にしたいUARTの数字です

設定

・フロー制御無し
dtoverlay=uart*

・フロー制御有り
dtoverlay=uart*,ctsrts

ピン割り当ては下記のようです

UART2 Tx(GPIO0) Rx(GPIO1) CTS(GPIO2) RTS(GPIO3)
UART3 Tx(GPIO4) Rx(GPIO5) CTS(GPIO6) RTS(GPIO7)
UART4 Tx(GPIO8) Rx(GPIO9) CTS(GPIO10) RTS(GPIO11)
UART5 Tx(GPIO12) Rx(GPIO13) CTS(GPIO14) RTS(GPIO15)