2021年11月27日

UART I2Cプロトコルブリッジ代替品

今回はUART I2Cプロトコルブリッジのリニューアル版について紹介します。

UART I2CプロトコルブリッジはUART通信をI2Cマスタに変換する変換ICです。マイコンやPC等からUARTコマンドをICに送ることでI2Cデバイスを制御することができます。UART I2CプロトコルブリッジはNXPからSC18IM700として販売されています。ただ、最近、NXPの製品ページではSC18IM700が新規設計非推奨となっており、将来的に供給されなくなる通知が出ていました。代替品をどうするか悩んでいたところ、リニューアルして販売されることが分かりました。

リニューアル版はSC18IM704となって別の製品として販売されるようです。データシートが公開されていたため、 SC18IM700とSC18IM704で差を比較してみました。


項目SC18IM700SC18IM704
コマンド、レジスタSC18IM700と互換有
バッファサイズ16Byte256Byte
IO電圧
2.4~3.6V
(入力5V耐圧)
1.71~3.6V
(入力5V耐圧)
GPIOモード
双方向モード
入力モード
プッシュプル出力モード
オープンドレイン出力
入力モード
プッシュプル出力モード
オープンドレイン出力
ピンアサインSC18IM700と互換なし

大きなメリットとしてバッファサイズが16Byteから256Byteに大幅に増えています。これまでI2C通信を小分けに読み書きする必要がありましたが、一度にI2Cの読み書きをすることができるようになります。通信速度のパフォーマンスが大幅に改善しそうです。

また、最低電圧が1.71Vからとなったため、FPGAやカメラモジュール等のインタフェースと親和性が良くなっています。

GPIOの機能では双方向モード(quasi-bidirectionalモード)がサポートされなくなっていますが、通常の使用法であれば入力か出力か決まっていることが多いため、そこまで問題にはならないと思います。

唯一、残念な点としてピンアサインの互換がなく、I2Cや電源等のピン番号が異なっているため、フットプリントを変更する必要があります。ここは互換性を維持して欲しかった点です。


SC18IM700USBシリアルI2C変換基板で使用しています。移行のタイミングは検討中ですが、今後入手安定性や性能向上を鑑みてSC18IM704に移行することを検討したいと思います。まだ、21年11月の現時点ではSC18IM704は販売されていないため、検討もできませんが、販売され次第、検討してみたいと思います。
posted by Crescent at 00:00| Comment(8) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2021年11月06日

PIC32マイコンSYS_CONSOLE

今回はPIC32MX270F256BをターゲットにMPLAB X v5.45+Harmony3+XC32 v2.50を使用して、SYS_CONSOLEの使用方法について紹介します。

マイコンのデバッグをする場合、デバッガーを使って確認する方法の他にUART等を介してシリアルコンソールに情報を表示させる方法があります。個人的にはデバッガーよりもUARTとシリアルコンソールを使ったデバッグの方が早く、必要な情報を取り出せるため、よく利用しています。PIC32のHarmony3で利用可能なSYS_CONSOLEはシリアル出力のラッパー機能となっています。UARTの関数を直接呼び出してシリアル出力するよりも汎用性高く、利用しやすくなっています。システムに応じてコンソールの出力先のUARTを変更したり、USBCDCの出力に変更することも容易です。また、コンソールのデバッグレベルを使い分けることで、必要なコンソール出力のみに制限したりすることも容易にできます。


Harmony3ではSystem ServiceのConsole、Debugとしてライブラリが準備されています。今回はConsoleをUART2に接続して利用しました。Harmony3のプロジェクトグラフは下記の通りです。

sys_console1.jpg

必要に応じてUART2のボーレートやピンアサインの設定を行います。

出力のレベルはSYS_ERROR_FATAL、SYS_ERROR_ERROR、SYS_ERROR_WARNING、SYS_ERROR_INFO、SYS_ERROR_DEBUG から選択できます。デフォルトはSYS_ERROR_DEBUGとなっており、プロジェクトグラフのDebugから出力レベルを変更できます。コードではconfiguration.h内で下記のように定義が出力されています。

#define SYS_DEBUG_ENABLE
#define SYS_DEBUG_GLOBAL_ERROR_LEVEL SYS_ERROR_DEBUG

例えば、デバッグ時はSYS_ERROR_DEBUGにして、デバッグ終了後はSYS_ERROR_INFOにすると、SYS_ERROR_INFO以下のコンソールが出力されるようになり、SYS_ERROR_DEBUGのコンソール出力は出力されなくなります。コンソール出力をコメントアウトしたりせずに一括で変更できるため、非常に便利です。


コンソール出力の使い方は下記の通りです。
ヘッダのインクルードを追加します。
#include "system/debug/sys_debug.h"

出力関数は下記の通りです。
SYS_DEBUG_PRINT(SYS_ERROR_DEBUG, "\r\nInitOK\r\n");


コンソール入力を利用する場合は下記の変数をグローバル変数等に定義します。
SYS_CONSOLE_HANDLE consoleHandle;
ssize_t consoleReadSize;
char consoleBuffer[130];

入力関数は下記の通りです。入力がない場合はconsoleReadSizeが0になります。入力があった場合はそのbyte数がconsoleReadSizeに入り、データはconsoleBufferに格納されます。

consoleReadSize = SYS_CONSOLE_Read( consoleHandle, consoleBuffer, sizeof(consoleBuffer) );

UARTのコンソールはPIC32MXではデフォルトでDMA&リングバッファとして設定されているため、マイコンのメイン処理に対してコンソール出力の影響を抑えてデバッグすることが可能です。

これまで毎週更新していましたが、半導体不足でプロジェクトが停滞気味のため、今後のブログ更新はペースを減らして随時記事を投稿する予定です。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする