PSoC5LP KitProgのUARTブリッジで921,600baud接続

PSoC Advent Calender 2017の21日目の記事です。

1. PSoC 5LP Prototyping KitのUARTブリッジ機能

PSoC 5LP Prototyping Kit(CY8CKIT-059)に付いているKitProgには、プログラムを書き込む機能以外に、PCとPSoC間をUARTとI2Cで接続してくれるブリッジ機能が内蔵されています。これは、デバッグやPCとのデータ転送にとても便利です。

KitProgのUARTブリッジ機能(USB-UART)からは、予めPSoC(ターゲット)にTX/RXが配線されているので、PSoC側にUARTコンポーネントを追加して、PSoC Creator上で下記のようにピンを接続するだけでOKです。

UARTコンポーネントのTX:P12_7ピン
UARTコンポーネントのRX:P12_6ピン

あとは、UARTコンポーネントに設定したボーレートとPC側のターミナルソフトのボーレートを合わせればよいのです・・・がっ!

やってみると分かるのですが、115,200より高いボーレートだと文字化けしてしまい、あまり高速に接続できないのです(´;ω;`)ウッ…
でも、できればもっと高速に接続したいですよねー。

2. KitProgのUSB-UARTの実際のボーレート

何故文字化けしてしまうのかというと、PC側のターミナルソフトのボーレートが115,200より高いとき、KitProgとPSoC間のボーレートが一般的なシリアル通信の速度と若干異なる速度になるからだそうです。


KitProgとPSoC間の
実際のボーレート
PC側のターミナルソフトの
設定ボーレート
20000002000000
10000001000000
1000000921600
500000460800
250000230400
115200115200
5760057600
3840038400
1920019200
96009600
48004800
24002400
12001200
参考(Cypressのコミュニティ):https://community.cypress.com/thread/14568

ということは、PSoCのUARTを上表左側のボーレートに設定すれば、文字化けせずに通信できるはずです。ところが、PSoCのUARTコンポーネントの設定で選べる速度は、一般的なシリアル通信の速度(上表右側)だけなんですよね・・・


2. 解決策

ではどうすればいいのかというと、UARTコンポーネントに「外部クロック」を与えてやればいいそうです!

1. UARTコンポーネントの「Advanced」タブで「External clock」を選択します。このとき「Oversampling rate」で「通信に使用するボーレートの何倍のクロックを与えるか」を指定できますが、デフォルトの「8x」で大丈夫だと思います。


2. クロックコンポーネントを作成して、通信したいボーレートの8倍(あるいはOversampling rateを16xにしていれば16倍)のクロックを設定し、UARTコンポーネントのclockに接続します。


この例では8MHzを与えているので、UARTコンポーネントのボーレートは1Mbaudになります。このとき、上記の対応表を見ると、PC側のターミナルソフトを921,600baud(あるいは1Mbaud)に設定すればよいことが分かります。実際にPC側のTeraTermを921,600baudにして試してみましたが、ちゃんと文字化けせずにPSoCと通信できましたヽ(´▽`)ノ


3. おわりに

PSoC 5LP Prototyping KitのKitProgを使って、115,200より高いボーレートでPCとPSoCをシリアル接続する方法をご紹介しました。デバッグ用途だとそんなに高いボーレートは必要ないかもしれませんが、シリアル経由でお手軽に高速通信したい!という時に、少しでもお役に立てば幸いです!

コメント

このブログの人気の投稿

Arduinoでステレオ電子ボリューム(FM62429)

ESP32: Visual Studio CodeでESP-IDFを使う(Windows編)

PSoC5LP Prototyping Kitで作るUSBオーディオI/F(I2S出力対応)