TOPへ
特殊電子回路について

English
Loading
トップ ページ >  チュートリアル > 特電HALでUSB通信を行う

特電HALでUSB通信を行う

特電HALでUSBを使う

特電HALでUSBを使う方法を説明します。特電HALおよびRXduinoライブラリにはUSBファンクションで実現したCDC(いわゆるUSB- UARTのこと)が組み込まれているので、RXマイコンとホストPCをつなげばTeraTermなどを通じて簡単に通信を行うことができます。

特電HALはUSBを仮想UARTを実現しているので、COMポートをオープンする要領でUSBが使えるようになります。

USBを使えるようにするには、プログラム中で、

sci_init(SCI_USB0,38400);

というコードを実行します。38400は速度ですが、USBの場合は何を設定しても構いません。実際には毎秒数百キロバイトでます。

ここで

sci_init(SCI_SCI0P2x,38400);

にすると、RXマイコンのSCI0のTxD,RxDを使って、レガシーなUARTを通じて通信が行われます。SCI0P2xというのは、RXマイコンのSCI0はP20,P21番端子と共有されているのでこのような命名をしました。

つまり、RXマイコンからみて、USB仮想COMポートでも、SCIを使ったレガシーなUARTでも、プログラム上は同じコードが使われます

sci_init(SCI_SCI_AUTO,38400);

とすると、システムの起動時にUSBとSCI0とSCI1のうち、一番先に何らかのデータを送ってきたCOMポートが開かれるようになります。

 ポートがオープンされると、TeraTermなどから開けるようになります。

これでUSBを使う準備ができました。

ところで、組み込みマイコンの中で動くC言語での改行コードと、Windows上でTeraTermなどを使って通信する際の改行コードは異なります。これが異なると改行が反映されなかったり、2回改行されたりします。

そこで、

sci_convert_crlf(CRLF_CRLF,CRLF_CRLF); // \nを\r\nに変換

とやって、ライブラリの中で改行コードを自動的に変換できるようにします。

あとは、RXのプログラムの中からホストPCに文字列を送信したいならば、

sci_puts("hogehoge");

とやります。

ホストPCからRXマイコンに文字を送ったら、マイコンの内蔵RAMの中のバッファに格納されます。そのたまったデータ量(バイト数)を調べるには、

sci_rxcount()

関数を呼び出します。この関数が0でない値を返したならば、何か受信データがあります。

その場合は、

 char c = sci_getc(); // 1文字受信

とやって、1文字受信します。

USBまたはSCIのポートを開いて、エコーバックするプログラムの例を次に示します。

sci_init(SCI_AUTO,38400); // 自動的にCOMポートを判別してオープンする 
sci_convert_crlf(CRLF_CRLF,CRLF_CRLF); // \nを\r\nに変換
sci_puts("Hello I'm RX62N\n");
while(1) {
 
  if(sci_rxcount()) { // 何か受信した文字があるか調べる
 
    char c = sci_getc(); // 1文字受信
 
    sci_putc(c); // エコーバック
 
  }
 
}

こんな簡単なコードで、RXマイコンとホストPCとの間で通信ができるようになります。

手軽に試してみたい場合は、Webコンパイラを使ってみてください。

上のURLからWebコンパイラを開いて、「シリアル通信(HAL版)」のサンプルコードをクリックし、「コンパイル実行」ボタンを押してみてください。ターゲットボードを「RX-MEGA」にしておけば、Interface誌付録の基板単体でも動きますので、すぐに試せます。

MOTファイルが生成されてサーバから送られてくるので、これをRXマイコンに書き込めば、すぐにUSB通信のプログラムが試せます。

Webコンパイラは、シリアル番号の入力などは必要ないので、気軽に試してみてください。

http://www.tokudenkairo.co.jp/rxmega/webcomp/