0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XbeeモジュールXB24CシリーズでのUARTハードフロー制御の設定について

Last updated at Posted at 2025-05-20

UARTのハードフロー制御について

UARTではハードフロー制御を取り入れることでデータを確実に伝達することができます。
詳しくは以下の記事にまとめてあるのでそちらを参考にしてください。

本記事ではXCTUを用いたXB24Cモジュールでのハードフロー制御の設定について記述します。

本記事の環境

  • IDE:DIGI XCTU Version: 6.5.13 @ Windows11
  • Xbeeモジュール:XB24CZ7WIT-004

↓使用したモジュール

XB24Cでのハードウェアフロー制御

無線通信においては、電波障害による無線不通等によってMCUから無線モジュールへ渡したデータが相手通信機へ送信されないままデータを逸失する蓋然性が非常に高いため、UART通信でのハードフロー制御の採用が強く推奨されます。
今回取り上げる無線モジュールであるXB24Cではハードフロー制御付きのUARTペリフェラルをサポートしています。しかしながら、公式の設定用ソフトであるXCTUの挙動が 非常にクソな上にドキュメントが壊滅的にない 大変独創的な振る舞いをなさる上に貴重な資料しかないので、苦行の果に突き止めたハードフロー制御の設定についての一連の作業を投稿しました。

XCTUでのハードウェアフロー制御の設定

XB24Cでのハードフロー制御の有効化には以下の2つの手順が必要です。

1. Serial Interfacing欄の設定
2. I/O Setting欄の設定

DIGI公式リファレンスに従って設定を進めたにもかかわらず、まったく動作しなかった。
原因は、公式リファレンスには「手順1」しか記載されておらず、実際には「手順2」も必要だった点にあった。
この「手順2」に到達するためには様々なパラメータを総当りする必要があり、その結果として解決に丸一日を費やすこととなった。
この徒労感と、そこから生じた激しい怒り衝動にかられて本記事を執筆している。
さらに、XCTU特有のもっさりとした挙動がデバッグ作業に終始フラストレーションを加え続け、"衝動"をより一層燃え上がらせる結果となった。

1. Serial Interfacing欄の設定

Serial Interfacing内のD6,D7にて各RTS/CTSの有効化[1]を設定します。
両方必要がない場合はDisable[0]を選択すれば大丈夫です。

image.png

2. I/O Setting欄の設定

手順1を実行した後もI/O SettingにてPR,PDにて内部プルアップ抵抗の設定する必要があります。
適切に設定を行わないとRTSが勝手にプルアップ(High)にされ永遠に送信許可が降りないという最悪な事態を引き起こします。

名前 概要 説明
PR プルアップ有効化 対応するピンのビットを1にすると、対象ピンのプルアップが有効化されます。
PD プル方向 対応するピンのビットを1にするとプルアップ、0にするとプルダウンになります。

image.png

PR(プルアップ有効)の設定

まずはPRにてRTS/CTSのプルアップを無効にします。この作業を行わないと、せっかく手順1で有効にしたRTS/CTSピンが勝手にGPIOペリフェラルの接続に上書きされ、RTSが常にHighを出力するために永久に送信許可が降りないという大変素敵な事態に陥ります。
PRの内容は以下の表の通りで、今回は接続状態インジケータRSSI出力のみプルアップを有効にしたいので0x0900を入力します。

ビット番号 ピン名 備考(機能名)
Bit 0 DIO4
Bit 1 DIO3 / AD3 アナログ入力兼用
Bit 2 DIO2 / AD2
Bit 3 DIO1 / AD1
Bit 4 DIO0 / AD0
Bit 5 DIO6 / RTS UART RTS(送信許可)
Bit 6 DIO8 / nDTR / Sleep_Rq スリープ制御端子
Bit 7 DIO14 / DIN / nConfig データ入力
Bit 8 DIO5 / Associate 接続状態インジケータ
Bit 9 DIO9 / nOn_Sleep スリープ出力通知
Bit10 DIO12
Bit11 DIO10 / PWM0 / RSSI PWMまたはRSSI出力
Bit12 DIO11 / PWM1 PWM1出力
Bit13 DIO7 / CTS UART CTS(受信許可)
Bit14 DIO13 / DOUT UART TX出力

PD(プル方向)の設定

次にPDにてRTSのプルアップ方向をプルアップに設定します。
PRにてプルアップを無効化したにも関わらず、XB24CのUARTのハードフローペリフェラルはオープンドレインのTTL出力な上、内部プルアップ抵抗を必要とし、更にデフォルトの設定数値はCTSのみプルダウンという大変クソみたいに我儘な大変お茶目な仕様となっていまるので設定を変更します。
とりあえず全てのピンがプルアップ方向になる0x7FFFを設定しました。
この作業を行わないとXB24CのCTSが常に不定 or Lowとなり、通信相手のUARTペリフェラルが全力で受信モードで待機しようとするために通信が止まります。

XB24Cへの書き込み

すべての設定が終わったらWriteボタンを押して書き込みましょう。
これで設定は完了です。

おわりに

もともとSTM32マイコンとUART通信を行うために、この作業を執り行い無事沼りました。
下の二記事はその副産物であり、激しい怒り衝動の成果物です。
STM32マイコンとXB24C間のハードフロー制御付きUART通信は無事動作したので記念に執筆しました。

ともかく、Xbeeのような無線モジュールの通信を確実に行うにはハードフロー制御は必要不可欠です。
この記事によって私と同じような沼に沈む犠牲者が少なくなりましたら幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?