• 公開日:2021年03月24日
  • | 更新日:2022年11月30日

UARTからUARTへの変換をマイコンで実現してみた!

はじめに

本記事は、以下の記事の続きとなります。既に準備が完了している方、ひとまず動作結果を確認したい方はこのままお読みください。

ブリッジICをマイコンで実現してみた!

今回は25種類の中の、UARTからUARTへのブリッジの例を実際に動かしてみたいと思います。

UARTからUARTへの変換

この例では、マイコンのシリアル通信機能とTimer+GPIO機能を使用して、通信速度の異なる2つのUART間のボーレートの変換を実現します。片方のデバイスから受け取ったデータをもう片方のデバイスへ転送、またはその逆を行うことができます。

MSP430FR2000は、シリアル通信機能を1つしか搭載していないため、UARTは1chしか対応出来ません。そこで、Timer機能を使用して適切な時間にあわせてGPIOピンを操作することで擬似的にUARTの通信を実現します。今回、シリアル通信機能を使用したものをUART1、Timer+GPIO機能を使用したものをUART2とします。


ブロック図

今回はMSP-EXP430FR2433を1台使用して、下図のようにPCと接続します。このときUART1側で受信したデータを確認するためのコンソール画面をTeraTerm1、UART2側をTeraTerm2とします。

MSP-EXP430FR2433がブリッジICとして動作し、2種類のUARTのボーレートの変換を行う役割となります。UART1側では、最大921600[bps]で送受信を行い、UART2側では、最大38400[bps]で送受信を行うことが出来ます。

TTL-232R-3V3はPCとMSP-EXP430FR2433 を繋ぐ役割となり、内蔵されているUSB-シリアル変換ICが”UART2 device”となります。TTL-232R-3V3を経由してPCに送信されたデータはTeraTermを使用して確認する事ができます。本来、USB-シリアル変換ICを2つ用意する必要がありますが、評価ボード上(点線より上側)にUSBシリアル変換ICが搭載されており、こちらが”UART1 device”となります。
※注意点:点線より上側とはジャンパーで分離ができる状態となっていますので、下図のように接続してください!


実際の接続図


ジャンパーの接続状態

実際にPC上で片方のTeraTermにデータを入力すると、入力したデータがもう一方のTeraTermに表示されます。ここでは、以下のような流れでPC、MSP-EXP430FR2433の間でデータのやり取りが行われています。

  • 例:TeraTerm1から、TeraTerm2への送信時:TeraTerm1に入力>>PCからアスキーデータが送信>>USBケーブル>>
    >>評価ボード上のUSB-シリアル変換IC>>UART1>>MSP-EXP430FR2433>>UART2>>外部のUSB-シリアル変換IC>>
    >>USBケーブル>>PCがアスキーデータを受信>>TeraTerm2に表示

TeraTerm2から、TeraTerm1への送信時については逆の動作となります。


TeraTerm上の動作

サンプルプロジェクトがどのような動作になるのかをなんとなくイメージ出来たところで、ブリッジICのプログラムの動作やデータの処理部分をもう少し詳しく見ていきましょう。また、準備編では解説できなかったプログラムの修正点についても解説させていただきます。

フローチャート

2種類のUARTはそれぞれでデータを受信したタイミングで、データの処理を開始します。

UART1では、受信したデータをマイコン内部のバッファーへ格納します。その後、格納したデータは、Timer+GPIO機能を使用して、擬似的にUARTのプロトコルに従ったデータ・フォーマット(スタートビット+8ビットデータ+ストップビット)で転送されます。


UART1でデータ受信時のフローチャート

UART2では、スタートビットの立ち下がりをGPIOで監視することでデータの受信を開始します。以降8ビット分のデータはGPIOへの入力のHigh/Low状態から決定し、変数(内部メモリ)へ格納します。このデータをシリアル通信機能へ渡したタイミングで、自動的にもう一方のUART通信でのデータの送信が開始されます。


UART2でデータ受信時のフローチャート

Timer+GPIO機能を使用した擬似的なUART通信の実現方法についてですが、信号波形としては下図のようになります。


疑似UART通信の信号波形

 

送信処理では、Timer機能を用いて、一定時間ごとにGPIOの出力状態をデータに合わせて切り替えます。受信処理では、Timer機能を用いて、一定時間ごとにGPIOの入力状態をデータとして格納します。Timer機能で1ビット長の時間を調整することで、その他のボーレートにも対応することが出来ます。

ソースコードの変更部分

今回提供されているサンプルコードは、MSP430FR2000用に構成されていますので、FR2433(またはそれ以外の型番)で使用する場合には、シリアル用のピン番号やGPIOのピン番号、Timerのモジュール番号を調整してあげる必要があります。

難易度が高いように聞こえますが、同じMSP430FR2xxxシリーズですので、データシートを確認し、差分を埋めてあげるだけです。下記に今回の変更点を記載いたしますが、ソフトウェアの全体像を変更する必要はありません。

  • ピンアサインの変更点
    • SPI_MOSI_PIN:7 → P1.4
    • SPI_MISO_PIN:6 → P1.5
    • SPI_CLK_PIN:5 → P1.6
    • SW_TX_PIN:0 → P1.1
    • SW_RX_PIN:1 → P1.2
  • モジュールの変更点
    • Timer B0 → Timer A0
      • 例:TB0CT → TA0CTL
    • PORT2 → PORT1
      • 例:P2DIR → P1DIR

ソースコードの修正後、プロジェクトのビルドと書き込みに成功しましたら、実際に動作確認を行いたいと思います。

動作確認

TeraTermの動作を確認するために、評価ボードとPCを最初にお見せした接続図のように接続し、PC上で2つのTeraTermを立ち上げます。TeraTerm1(UART1)の設定は”115200/8bit/パリティ無し”となり、TeraTerm2(UART2)の設定は”9600/8bit/パリティ無し”となります。


TeraTermの設定

配線、ソフトウェアの修正、プロジェクトの書き込み、TeraTermの設定などすべての工程に問題が無いようであれば、TeraTerm1に文字を入力すると、入力した文字がそのままTeraTerm2に表示されます。TeraTerm2に入力した場合は、TeraTerm1に表示されます。


TeraTerm上の動作

TeraTerm1(UART1)に1,2,・・・を入力した時と、TeraTerm2(UART2)に1,2,・・・を入力した時の波形を確認すると、ボーレートが変換されていることが確認出来ました。画像の右上の時間に関する縮尺率を見ていただくと分かる通り、1bit分の時間が約10倍異なっており、ボーレートの比と一致していることが分かります。


信号波形

 

おわりに

今回はUARTからUARTへのブリッジICの例を実際に動かしてみました。使用するデバイスによってはソースコードに少し修正が必要になりますが、評価ボードとPCさえあればすぐに動作を確認することが出来ます。この記事を見て、「何とか自力で確認できそう!」と思った方は、是非自分自身で試してみてください!

下記の記事では、UARTからSPIへのブリッジICの動作確認に解説しておりますので、ご興味がありましたらご確認ください。