この記事では、Teraterm等を使ってPCと基板間でUART通信する際に、UARTの論理を反転して入出力する方法について記載しています。
今回の作業について
昨日、pcbgogoにてATSAMD21/ATMEGA328のプリント基板を作成したのですが、 デバッグシリアルポート(UART)の論理を反転し忘れて実装してしまいました。。
そのため、teratermが文字化けしてしてしまって基板とうまく通信できません。
マイコン側にUARTの論理反転機能があればよかったのですが、残念ながらSAMD21にはそんな機能はありません。
(※SAMD51であればCTRLAのTXINV/RXINVビットを使って論理反転できます)
尚、基板とPC間は以下のシリアルケーブル(FTDIのチップが乗ったUSB-TTL変換ケーブル=FT232RL)を使用して通信しています。
どうしたもんかと色々調査したところ、シリアルケーブルに載っている FTDIチップには論理反転機能がある ということがわかりました。 論理の逆転問題は、この機能を使って解決していきたいと思います。
ちなみに、世の中に出回っているほとんどのUSBシリアル変換ケーブルにはFTDIのチップが乗っています。(たぶん) そのため、この記事の内容は他のケーブルを使っている方にも参考になると思います。
論理反転の手順
以下にUARTの論理反転する手順を示します。
① FT_PROGのインストール
以下からFT_PROG(FTDIのチップの書き換えツール)をダウンロードし、インストールします。
https://ftdichip.com/wp-content/uploads/2023/01/FT_Prog_v3.12.31.639-Installer.exe_.zip
もしリンクが切れていたら FT_PROGでググって、以下の画像を参考にダウンロードしてください。
② 設定するシリアルケーブルの選択
論理を変えたいシリアルケーブルが刺さった状態でFT_PROGを起動し、虫眼鏡アイコンをクリックします。
検索中表示が出た後に、該当のシリアルケーブルが出てくるはずです。
③ シリアルケーブルの設定
左ペインの "Device Tree" から "Invert RS232 Signals" を選択すると、右ペインに "Invert XXX" と出てきます。
ここで論理反転したいポートにチェックを入れます。
TXD/RXDだけでなくDTR/DTS/CTS/RTSといった制御線も論理反転できるみたいですね。
④ 設定値の書き込み
設定ができたら、カミナリマークみたいなボタンを押します。するとシリアルケーブル側に設定がプログラミングされます。
ちなみに、シリアルポートが使用中だと失敗します。 また、一度書き込んだ設定はずっと有効になります(次回書き換えるまでずっと有効)。 なので、そのうち論理反転したことを忘れてひどい目にあう気がするので、ケーブルにラベルでも貼っておくとよいでしょう。(自戒)
⑤ シリアルケーブルの抜き差し
書き込んだ設定を有効にするには、シリアルケーブルをPCから抜き差しする必要があるようです。いったん抜き差ししましょう。
⑥ 通信の確認
Teratermだと他の要因(例えば文字コードや改行コード、フォント設定など)の影響で文字化けしている可能性もあるので、以下の Serister というソフトを使って生データを確認します。
https://www.vector.co.jp/soft/win95/hardware/se423507.html
[注釈]
Teratermでも生データを確認することはできますが、以下のような苦い思い出があるために Serister を使っています。
⇒ Teratermのα版と通常版を入れた状態で通常版を起動したときに、α版でしか設定できない設定値を通常版が読みに行って文字化けしてしまい、通常版の設定をいくら見直しても永遠に文字化けが直ることはなかった。。。
とりあえず今日はここまで。