アプリケーションノート Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) R01AN0273JJ0210 Rev.2.10 2013.4.1 要旨 本資料は、Renesas USB MCU and USB ASSP USB Basic firmware を使用した USB Peripheral コミュニケー ションデバイスクラスドライバ(PCDC)のアプリケーションノートです。 動作確認デバイス RX62N グループ, RX621 グループ,RX63N グループ,RX631 グループ, RX630 グループ,RX63T グループ, R8A66597, R8A66593 動作確認デバイスと同様の USB モジュールを持つ他の RX600 シリーズでも本プログラムを使用すること ができます。このアプリケーションノートのご使用に際しては十分な評価を行ってください。 なお、本プログラムは Renesas Starter Kit で動作確認を行っています。 目次 1. はじめに ............................................................................................................................................ 2 2. デバイスクラスドライバの登録........................................................................................................ 4 3. ソフトウェア構成.............................................................................................................................. 4 4. ペリフェラル用 CDC サンプルアプリケーション(APL) .............................................................. 9 5. コミュニケーションデバイスクラス(CDC)、PSTN and ACM .................................................. 23 6. USB ペリフェラルコミュニケーションデバイスクラスドライバ(PCDC) ................................ 28 7. コミュニケーションポートドライバ(CPD)................................................................................ 45 8. uITRON/non-OS への登録方法 .................................................................................................... 60 9. 制限事項 .......................................................................................................................................... 61 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 1 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) はじめに 1. 1.1 資料概要 本資料は、Renesas USB MCU and USB ASSP USB Basic firmware を使用した USB Peripheral コミュニケー ションデバイスクラスドライバ(PCDC)および、コミュニケーションポートドライバのサンプルドライバに 対するアプリケーションノートです。 1.2 機能と特長 PCDC は、USB コミュニケーションデバイスクラス仕様(以降 CDC と記述)の Abstract Control Model に準 拠し、USB ホストとの通信を行うことができます。 本クラスドライバは弊社の USB Basic firmware RTOS 版と non-OS 版と組み合わせて使用することを前提に しています。 1.3 関連ドキュメント RX600 シリーズ USB Peripheral Communications Device Class Driver (PCDC) 導入ガイド(ドキュメント No. R01AN0531JJ) 2. Renesas USB MCU and USB ASSP USB Basic Firmware アプリケーションノート(ドキュメント No. R01AN0512JJ) 3. Universal Serial Bus Revision 2.0 specification 4. USB Class Definitions for Communications Devices Revision 1.2 5. USB Communications Class Subclass Specification for PSTN Devices Revision 1.2 【http://www.usb.org/developers/docs/】 6. RX62N グループ、RX621 グループユーザーズマニュアル ハードウェア編(ドキュメント No. R01DS0052JJ) 7. RX630 グループ ユーザーズマニュアル ハードウェア編 (ドキュメント No. R01UH0040JJ) 8. RX63N グループ ユーザーズマニュアル ハードウェア編 (ドキュメント No. R01UH0041JJ) 9. RX63T グループユーザーズマニュアル ハードウェア編 (ドキュメント No. R01UH0331JJ) 10. R8A66597 データシート(ドキュメント No. RJJ03F0130) 11. R8A66593 データシート(ドキュメント No. R19DS0071JJ0100) 12. RX600 シリーズ用リアルタイム OS RI600/4 V.1.00 ユーザーズマニュアル 1. ⎯ ルネサス エレクトロニクスホームページ 【http://japan.renesas.com/】 ⎯ USB デバイスページ 【http://japan.renesas.com/prod/usb/】 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 2 of 62 Renesas USB MCU and USB ASSP 1.4 USB Peripheral Communications Device Class Driver (PCDC) 用語一覧 本資料で使用される用語と略語は以下のとおりです。 ANSI ACM APL ASSP(assp) CDC CDCC CDCD CPD cstd HEW H/W uITRON, ITRON non-OS PCD PCDC PCDCD PDCD PP pstd PSTN RTOS RX62N-RSK RX63N-RSK RX630-RSK RX63T-RSK R8A66597 : : : : : : : : : : : : : : : : : : : : : : : : : : R8A66593 SCI SW1/SW2/SW3 USB USB-BASIC-FW タスク スケジューラ スケジューラマクロ : : : : : : : : ANSI-C File I/O システムコール Abstract Control Model. Application program Application Specifec Standard Produce Communications Devices Class Communications Devices Class Communications Interface Class Communications Devices Class Data Class Interface Serial Communication Port Driver Peripheral & Host USB-BASIC-FW用の関数およびファイルのプレフィックス High-performance Embedded Workshop Renesas USB device Industrial The Real-time Operating system Nucleus USB basic firmware for OS less system Peripheral control driver of USB-BASIC-FW Periperal用 Communications Devices Class Periperal Communications Devices Class Driver Peripheral device class driver (device driver and USB class driver) プリプロセス定義 Peripheral USB-BASIC-FW用の関数およびファイルのプレフィックス Public Switched Telephone Network, contains the ACM (above) standard. USB basic firmware for uITRON system Renesas Starter Kits for RX62N Renesas Starter Kits for RX63N Renesas Starter Kits for RX630 Renesas Starter Kits for RX63T Renesas Hi-Speed USB2.0 ASSP R8A66597 基板 (RX62N-RSKと組合わせて使用します) Renesas Hi-Speed USB2.0 ASSP Peripheral only. Serial Communication Interface User switches on the RX62N-RSK / RX63N-RSK/RX630-RSK (注1) Universal Serial Bus USB basic firmware for Renesas USB MCU and USB ASSP (non-OS/ RTOS) 処理の単位 non-OSでタスク動作を簡易的にスケジューリングするもの non-OSでスケジューラ機能を呼び出すために使用されるもの (注 1) R8A66597 と RX62N-RSK を組み合わせて使用する場合、RX62N-RSK の SW1 で使用するポートが R8A66597 の割り込みに割り当てられるため、SW1 は使用しないでください。 1.5 本書の読み方 デモプログラムを動作させる場合は、“RX600 シリーズ USB Peripheral Communications Device Class Driver (PCDC) 導入ガイド”をお読みください。 3.2章にソース一覧を掲載しています。MCU固有ソースは、"¥ WorkSpace¥¥HwResourceForUSB_device"にあ ります。アプリケーションに必要なファイルを確認してください。 4章はペリフェラルCDCアプリケーションの動作を説明しています。ユーザ独自のソリューションを作成す るためにはアプリケーションの変更が必要です。 すべてのコードモジュールはタスクに分割されます。タスク間でメッセージの受け渡しが行われていると を予めご理解ください。関数(タスク)の実行順序はスケジューラが決定します。このため重要なタスクに優先 権を持たせることができます。また、タスクに登録されたコールバックメカニズムを使用することで、各タ スクは並列処理(ノンブロッキング)で動作します。タスクのメカニズムは1.3章の"Renesas USB MCU and USB ASSP USB Basic Firmwareアプリケーションノート"で説明しています。PCDCのタスクについては3.3章を参照 してください。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 3 of 62 Renesas USB MCU and USB ASSP 2. USB Peripheral Communications Device Class Driver (PCDC) デバイスクラスドライバの登録 作成したデバイスクラスドライバは、USB ドライバに登録することでデバイスクラスドライバとして機能 します。 r_usb_pcdc_apl.c 内の関数 usb_pcdc_registration()を参考に、USB ドライバに登録してください。 詳細は、Renesas USB MCU and USB ASSPUSB Basic Firmware アプリケーションノートの「3.1 ペリフェラ ルクラスドライバの登録方法」を参照してください。 3. 3.1 ソフトウェア構成 モジュール構成 PCDCに関係したモジュール構成をFigure 3-1に示します。また、各モジュール機能概要をTable 3-1に示しま す。 Table 3-1 各モジュール機能概要 モジュール名 APL PCDC PCD CPD 機能概要 ユーザアプリケーションプログラムです。 APL からの CDC に関するリクエストおよび、データ通信を PCD へ要求します。 USB Peripheral H/W 制御ドライバです。 シリアルポートの制御ドライバです。 Figure 3-1 モジュール構成図 APL と PCDC は、それぞれ uITRON 上でタスクとして、動作を行います。 (non-OS 版ではスケジューラから呼び出されます。) PCDC は、PCD を介してホストとのデータ通信を行います。 APL では、PCDC を介して USB 通信を、CPD を介してシリアルポート通信を行います。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 4 of 62 Renesas USB MCU and USB ASSP 3.2 3.2.1 USB Peripheral Communications Device Class Driver (PCDC) ファイル構成一覧 フォルダ構成 以下に本デバイスクラスで提供するファイルのフォルダ構成を示します。 各デバイス、評価ボードに依存するソースコードは各 H/W リソースフォルダ(HwResourceForUSB_デバイ ス名)に格納しています。 WorkSpace (PCDC sample code) +―――CDCFW [Communication device class driver] | +―――include ペリフェラル CDC ヘッダファイル | +―――PCDC ペリフェラル CDC ドライバ +―――SmplMain サンプルアプリケーション +―――HwResourceForUSB 選択したハードウエアリソース +―――HwResourceForUSB_RX62N RX62N/RX631 グループ用ハードウエアリソース +―――HwResourceForUSB_RX62N_597assp RX62N+R8A66597 用ハードウエアリソース +―――HwResourceForUSB_RX63N RX63N/RX631 グループ用ハードウエアリソース +―――HwResourceForUSB_RX630 RX630 用ハードウエアリソース +―――HwResourceForUSB_RX63T RX63T 用ハードウエアリソース (ANSI-C File I/O System Calls) [open(), close(), read(), write() etc of the USB class driver] +―――ANSI (uITRON) [uITRON OS code] +―――RI600_4 uITRON フォルダ(non-OS 版にはありません) (USB-BASIC-FW) [Common USB code that is used by all USB firmware] +---USBSTDFW USB 基本 FW ※1. 使用するデバイスの H/W リソースフォルダ名を「HwResourceForUSB_デバイス名」から 「HwResourceForUSB」に変更してください。 ※2.R8A66593 をご使用の場合は、HwResourceForUSB RX62N_597assp をご使用ください。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 5 of 62 Renesas USB MCU and USB ASSP 3.2.2 USB Peripheral Communications Device Class Driver (PCDC) ファイル一覧 Table 3-2にPCDCで提供するファイル構成を示します。なお、水色で強調されたファイルは、ユーザが変更 可能なファイルです Table 3-2 ファイル構成 Holder SmplMain/APL SmplMain/APL CDCFW/PCDC CDCFW/PCDC CDCFW/PCDC CDCFW/ include CDCFW/ include ファイル名 r_usb_pcdc_apl.c r_usb_pcdc_descriptor.c r_usb_pcdc_ansi.c r_usb_pcdc_api.c r_usb_pcdc_driver.c r_usb_pcdc_define.h r_usb_pcdc_extern.h R01AN0273JJ0210 Rev.2.10 2013.4.1 概要 サンプルアプリケーションプログラム CDC ディスクリプタ・テーブル PCDC 用 ANSI 関数 CDC API 関数 CDC ドライバ関数 CDC 型定義、マクロ定義 CDC プロトタイプ、外部参照 備考 Sample Sample Page 6 of 62 Renesas USB MCU and USB ASSP 3.3 3.3.1 USB Peripheral Communications Device Class Driver (PCDC) システムリソース uITRON 版動作時のシステムリソース定義 RTOSの場合、PCDCおよび、サンプルAPLで使用するRTOS資源をTable 3-3に示します。 これらについては、"r_usb_peri.cfg"ファイルに定義します。 定義方法詳細については「7.1 uITRON への組み込みについて」を参照してください。 Table 3-3 uITRON リソース定義 タスク スタックサイズ: USB_TSK_STK(512) 名称 USB_PCDC_TSK USB_PCDCSMP_TSK USB_PCD_TSK メールボックス 最大優先度:1 待ちタスクキュー:FIFO 順 メッセージキュー:FIFO 順 固定長メモリプール ブロック数:10 ブロックサイズ:64 待ちタスクキュー:FIFO 順 uITRON のベースタイマ R01AN0273JJ0210 Rev.2.10 2013.4.1 USB_PCDC_MBX USB_PCDCSMP_MBX USB_PCD_MBX USB_PCDC_MPL USB_PCDCSMP_MPL 概要 PCDC メインタスク(usb_pcdc_Task) タスク優先順位:7 APL メインタスク(usb_pcdc_main_task) タスク優先順位:8 PCD タスク(R_usb_pstd_PcdTask) タスク優先順位:3 PCDC -> PCDC / APL -> PCDC 用メール BOXID PCDC -> APL 用メール BOXID PCD 用メール BOXID PCDC 用メモリプール ID APL 用メモリプール ID PCD 用メモリプール ID HW タイマ 1ms Page 7 of 62 Renesas USB MCU and USB ASSP 3.3.2 USB Peripheral Communications Device Class Driver (PCDC) non-OS 動作時のシステムリソース定義 PCDCをスケジューラに登録して使用するために定義したID、優先度をTable 3-4に示します。 これらについては、"r_usb_cKernelId.h"ヘッダファイルで定義します。 定義方法詳細については「7.2 non-OS スケジューラへの組み込みについて」を参照してください。 Table 3-4 スケジューラ登録 ID 一覧 スケジューラ登録タスク 名称 USB_PCDC_TSK USB_PCDCSMP_TSK USB_PCD_TSK メールボックス ID 固定長メモリプール ID USB_PCDC_MBX (デフォルト値 USB_PCDC_TSK) USB_PCDCSMP_MBX (デフォルト値 USB_PCDCSMP_TSK) USB_PCD_MBX (デフォルト値 USB_PCD_TSK) USB_PCDC_MPL (デフォルト値 USB_PCDC_TSK) USB_PCDCSMP_MPL (デフォルト値 USB_PCDCSMP_TSK) USB_PCD_MPL (デフォルト値 USB_PCD_TSK) R01AN0273JJ0210 Rev.2.10 2013.4.1 概要 PCDC メインタスク(usb_pcdc_Task) タスク優先順位: USB_PRI_3( = 3) APL メインタスク(usb_pcdc_main_task) タスク優先順位: USB_PRI_4( = 4) PCD タスク(R_usb_pstd_PcdTask) タスク優先順位: USB_PRI_0( = 0) PCDC -> PCDC / APL -> PCDC 用メール BOXID PCDC -> APL 用メール BOXID PCD 用メール BOXID PCDC 用メモリプール ID APL 用メモリプール ID PCD 用メモリプール ID Page 8 of 62 Renesas USB MCU and USB ASSP 4. USB Peripheral Communications Device Class Driver (PCDC) ペリフェラル用 CDC サンプルアプリケーション(APL) ペリフェラル用 CDC サンプルアプリケーションプログラム(APL)の説明を以下に示します。 4.1 動作環境について 本ソフトウェアの動作環境例を下図に示します。 Figure 4-1 動作環境例 USB ホストに WindowsPC を使用する場合、システム定義ファイル(CDC_Demo.inf/CDC_Demo_Win7.inf) のインストールが必要です。このファイルをペリフェラル CDC デバイスに設定した PID,VID に合わせて編 集する必要があります。テキストエディタ等でドライバファイルの以下の箇所を編集してください。 [Model] %STRING_MODEL%=CDC, USB¥VID_0000&PID_0000 ← 4 桁の数値の部分を 16 進数 4 桁で編集します。 VID が 0x1234 で、PID が 0x5678 の場合 [Model] %STRING_MODEL%=CDC, USB¥VID_1234&PID_5678 ← 4 桁の数値の部分を 16 進数 4 桁で編集します。 ペリフェラルデバイスの PID,VID 定義は r_usb_pcdc_descriptor.c ファイルの"USB_VENDORID"および" USB_PRODUCTID"で定義します。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 9 of 62 Renesas USB MCU and USB ASSP 4.2 USB Peripheral Communications Device Class Driver (PCDC) アプリケーションプログラム機能概要 PCDC のサンプルアプリケーションプログラム(APL)は、 USB-シリアル変換機能(通常モード)及び、 USB ループバック通信機能(エコーモード)を実装しています。 APL は ANSI インタフェースを使用した場合と、ANSI インタフェースを使用しない場合の 2 種類を用意し ています。 ANSI インタフェースを使用した APL では、USB 通信可能か“open”API で確認します。 USB 通信が可能なら USB への送信は“write”API,受信は“read”API、USB 通信終了を“close”API で行 います。 APL の主な機能は以下のとおりです。 1) 2) 3) 4) スイッチ押下による、USB・シリアル変換モードと、エコーモードのモード変更 USB ホストから受信したデータをシリアルポートへ送信(通常モード時) シリアルポートから受信したデータを USB ホストへ送信(通常モード時) USB ホストから受信したデータを、USB ホストへ折り返し送信(エコーモード時) スイッチ入力の仕様をTable 4-1に示します。 Table 4-1 スイッチ入力による APL 動作内容 スイッチ名称 操作説明スイッチ モード切り替えスイッチ 動作内容 RSK 上で使用するスイッチ (SW)番号 SW2 SW3 USB ホスト PC へ操作説明メッセージを送信 スイッチが押されるたびに、エコーモードと通常 モードを変更 ※詳しくは、各 RSK のアプリケーションノート、各マイコンハードウェアマニュアルを参照ください。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 10 of 62 Renesas USB MCU and USB ASSP 4.3 USB Peripheral Communications Device Class Driver (PCDC) アプリケーションプログラム動作説明 アプリケーションプログラムの動作説明を以下に記します。 4.3.1 ユーザースイッチ (1). USB ホストへの SW 押下要求メッセージ周期送信 USB ホストに以下のメッセージを一定周期で送信します。 Renesas USB CDC Sample, Press Switch SW2. 操作説明スイッチが押下されるとメッセージ送信を止めます。 (2). 操作説明スイッチ押下による操作説明メッセージ送信 操作説明スイッチ押下により、USB ホストに以下のメッセージを送信します。 [Renesas Serial-USB converter.] Connect serial terminal (e.g. PC COM1) DB9 cable to PC and RSK, and USB cable to PC and to mini-B on RSK. Support COM Speed 1200bps-115200bps Sw2 - Show instructions Sw3 - Start Echo of everthing typed <-> Stop Echo (3). エコーモード設定 モード切り替えスイッチ押下により、動作モードをエコーモードにして、USB ホストに以下のメッセージ を送信します。 Starting Echo:- (4). エコーモード解除 エコーモード時、モード切り替えスイッチ押下により、動作モードを通常モードにして、USB ホストに以 下のメッセージを送信します。 Finished Echo. R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 11 of 62 Renesas USB MCU and USB ASSP 4.3.2 USB Peripheral Communications Device Class Driver (PCDC) 通常モード (シリアル-USB 変換モード) 通常モードでは、USB-シリアル変換機として動作します。本モードは、USB ホストから受信したデータを UART ポートに送ります。また、UART ポートに送られてきたデータを USB COM ポートに送ります。 (1). CDC ホストへのデータ送信処理 PCDC が提供する API を使用して USB ホストへメッセージデータおよび、シリアルポートからの受信デー タを送信します。 CDC ホスト送信処理が終了するまで、次のデータを送信することはできません。 APL は"write()"/"R_usb_pcdc_SendData()"のコールバックを待って次のデータ送信を行います。 PCDC が提供する USB 受信 API は ANSI/非 ANSI で異なります。 ・ANSI インタフェースの場合:write() ※CDCD でオープンしたファイル番号を指定します。 ・非 ANSI インタフェースの場合:R_usb_pcdc_SendData() (2). CDC ホストからのデータ受信処理 PCDC が提供する API を使用して USB ホストからのデータ受信を行います。 PCDC が提供する USB 受信 API は ANSI/非 ANSI で異なります。 ・ANSI インタフェースの場合:read() ※CDCD でオープンしたファイル番号を指定します。 ・非 ANSI インタフェースの場合:R_usb_pcdc_ReceiveData() 受信したデータは CPD が提供する"usb_cpu_Sci_DataSend()"を使用してシリアルポートへ送信します。 シリアルポートへの送信速度は USB ホストからの受信速度と比べて低速なため、シリアル送信バッファが 一杯となり受信データが格納出来なくなる可能性があります。 回避策として、送信バッファ状態を調べビジー状態(残りの領域がわずかの状態)となった場合、USB ホ ストからの受信を一時停止させ、送信バッファに余裕ができた時点で受信処理を再開させるようにしていま す。 (3). CDC ホストへのシリアルエラー通知処理 CPD の提供する"usb_cpu_Sci_GetSerialState"でシリアル受信エラーを確認し、エラーを検出した場合、PCDC の提供する API で USB ホストへクラスノーティフィケーション・シリアルステートを送信します。 PCDC が提供する USB へのシリアルエラー通知 API は ANSI/非 ANSI で異なります。 ・ANSI インタフェースの場合:read() ※CDCC でオープンしたファイル番号を指定します。 ・非 ANSI インタフェースの場合:R_usb_pcdc_SerialStateNotification() (4). シリアルポートへの送信処理 CPD が提供する"usb_cpu_SciDataSend()"を使用してシリアルポートへ送信します。 (5). シリアルポートへの受信処理 CPD が提供する"usb_cpu_Sci_DataReceive()"を使用してシリアルポートからの受信データを取り出します。 シリアルポートから受信したデータは USB ホストへ送信します。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 12 of 62 Renesas USB MCU and USB ASSP 4.3.3 USB Peripheral Communications Device Class Driver (PCDC) エコーモード エコーモードは、USB ホストから受信したデータを USB ホストへ折り返し送信します。エコーモードでは UART ポートは使用しません。 (1). エコーモード処理 エコーモードは USB ホストから受信したデータを、 USB ホストへ折り返し送信するモードで、シリアルポー トを使った通信は行いません。 シリアル送信データを、シリアル受信データにコピーします。 シリアル受信データにコピーされたデータを USB ホストへ送信することで、エコーモード動作を実現しま す。 4.4 APL メッセージ APL がメッセージ BOX“USB_PCDCSMP_MBX”で受信し、処理するメッセージを下表に記します。 メッセージ受信時処理内容については本書“4.8 APL処理概要フロー”を参照下さい。 Table 4-2 APL メッセージ受信メッセージ一覧 No. 1 2 3 4 5 6 種別 USB_PCDC_OPEN(ANSI のみ) 送信元 ・初期化処理 “usb_papl_task_start” ・APL メイン処理 “usb_pcdc_main_task” (USB オープン処理失敗時、USB デタッチ検出時) USB_PCDC_PERIODIC_PROCESS ・APL メイン処理。 “usb_pcdc_main_task” (USB オープン処理成功時、本メッセージ受信により自 APL 宛てに送信) USB_PCDC_RX_COMP ・USB 受信完了時に呼び出されるコールバック関数 “usb_pcdc_rx_notification” USB_PCDC_TX_COMP ・USB 送信完了時に呼び出されるコールバック関数 “usb_pcdc_tx_notification” USB_PCDC_STATUS_TX_COMP ・シリアル・ステート送信完了時に呼び出されるコールバッ ク関数“usb_pcdc_state_notification” USB_PCDC_CLOSE ・USB デタッチ検出で呼び出されるコールバック関数 “usb_pcdc_close” R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 13 of 62 Renesas USB MCU and USB ASSP 4.5 USB Peripheral Communications Device Class Driver (PCDC) APL 関数一覧 Table 4-3にAPLの関数を示します。 Table 4-3 APL 関数一覧 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 関数名 usb_cstd_task_start usb_pcdc_task_start usb_papl_task_start usb_pcdc_registration usb_pcdc_open usb_pcdc_close usb_pcdc_pr_apl_title usb_apl_task_switch usb_pcdc_main_task usb_pcdc_rx_notification usb_pcdc_tx_notification usb_pcdc_state_notification usb_pcdc_apl_init usb_pcdc_apl_msg_out usb_pcdc_smpl_message_send usb_pcdc_sw_process usb_pcdc_serial_state_process usb_pcdc_get_rcv_data_cnt usb_pcdc_is_connected R01AN0273JJ0210 Rev.2.10 2013.4.1 説明 タスクスタート処理 ペリフェラル USB 用の各種タスクスタートアップ処理 アプリタスク・スタートアップ処理 PCDC ドライバ登録 PCDC オープン関数 PCDC クローズ関数 タイトル表示 nonOS 用タスクスイッチングループ デモサンプルアプリケーションメイン処理 USB 受信完了コールバック処理 USB 送信完了コールバック処理 シリアルステータス通知コールバック処理 アプリ変数初期化処理 プリセットメッセージ出力処理 APL タスクへのメッセージ送信処理 スイッチ対応処理 シリアル状態対応処理 USB 受信データ数取得処理 USB ホストへの接続状態を返します Page 14 of 62 Renesas USB MCU and USB ASSP 4.6 USB Peripheral Communications Device Class Driver (PCDC) APL データフロー サンプルアプリケーションプログラムのデータフローを以下に示します。 Figure 4-2 APL データフロー R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 15 of 62 Renesas USB MCU and USB ASSP 4.7 USB Peripheral Communications Device Class Driver (PCDC) シーケンス APL は、APL 周期起動メッセージ(USB_PCDC_PERIODIC_PROCESS)受信で自タスク(APL)宛てに周 期起動メッセージを送信しています。(シーケンスでは省略しています。) サンプルアプリケーションプログラムのシーケンスを以下に示します。 4.7.1 CDC ホストからのデータ受信、シリアルポート送信動作 CDC ホストからのデータ受信を行い、受信したデータをシリアルポートへ送信するシーケンスを以下に記 します。 Figure 4-3 CDC ホストからのデータ受信・シリアルポート送信動作のシーケンス R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 16 of 62 Renesas USB MCU and USB ASSP 4.7.2 USB Peripheral Communications Device Class Driver (PCDC) シリアルポート受信、CDC ホストへの送信動作 シリアルポートから受信したデータを、USB ホストへ送信するシーケンスを以下に記します。 APL PCDC PCD CPD メッセージ受信によりAPL周期起動 (USB_PCDC_PERIODIC_PROCESS) シリアルポートからの受信データ取り出し usb_cpu_Sci_DataReceive() 受信データ数>0 受信データ シリアル受信データをCDCホストへ送信 write() / R_usb_pcdc_SendData() R_usb_pstd_TransferStart() 受信データ数=0 送信完了コールバック バルクIN転送 転送完了 送信完了コールバック メッセージ受信によりAPL起動 (USB_PCDC_TX_COMP) Figure 4-4 シリアルポート受信・CDC ホスト送信動作のシーケンス R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 17 of 62 Renesas USB MCU and USB ASSP 4.7.3 USB Peripheral Communications Device Class Driver (PCDC) エコーモード動作 エコーモード動作で、USB ホストから受信したデータを、USB ホストへ折り返し送信するシーケンスを以 下に記します。 Figure 4-5 エコーモード動作のシーケンス R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 18 of 62 Renesas USB MCU and USB ASSP 4.7.4 USB Peripheral Communications Device Class Driver (PCDC) シリアルエラー動作 シリアル受信エラーを検出し、USB ホストへクラスノーティフィケーション(SerialState)を送信するシー ケンスを以下に記します。 Figure 4-6 シリアルエラー動作のシーケンス R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 19 of 62 Renesas USB MCU and USB ASSP 4.8 USB Peripheral Communications Device Class Driver (PCDC) APL 処理概要フロー 処理概要フローでの USB-シリアル変換処理及び、USB ループバックでの主な処理経路を以下に記します。 ①~⑥はFigure 4-7APL処理概要フローのAPIに記した番号です。 [USB-シリアル変換処理経路] ・USB→シリアル(UART) ①データ受信処理 read() / R_usb_pcdc_ReceiveData() ②シリアルポート送信処理 usb_cpu_Sci_DataSend() ③データ受信処理 read() / R_usb_pcdc_ReceiveData() ②シリアルポート送信処理 usb_cpu_Sci_DataSend() 以降③・②の繰返し ・シリアル(UART)→USB ④シリアル受信データ取り出し処理 usb_cpu_Sci_DataReceive() ⑤シリアル送信処理 write() /R_usb_pcdc_SendData() 以降④・⑤の繰返し [USB ループバック(エコーモード)処理経路] ・最初のループバック動作 ①データ受信処理 read() / R_usb_pcdc_ReceiveData() ②シリアルポート送信処理 usb_cpu_Sci_DataSend() ⑥エコーモード用データコピー処理 usb_cpu_Sci_CopyData_for_Echo() ④シリアル受信データ取り出し処理 usb_cpu_Sci_DataReceive() ⑤シリアル送信処理 write() /R_usb_pcdc_SendData() ・2 回目以降のループバック動作 ③データ受信処理 read() / R_usb_pcdc_ReceiveData() ②シリアルポート送信処理 usb_cpu_Sci_DataSend() ⑥エコーモード用データコピー処理 usb_cpu_Sci_CopyData_for_Echo() ④シリアル受信データ取り出し処理 usb_cpu_Sci_DataReceive() ⑤シリアル送信処理 write() /R_usb_pcdc_SendData() R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 20 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) サンプル・アプリケーション・プログラムの処理概要フローを以下に示します。 Figure 4-7 APL 処理概要フロー(1/2) R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 21 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) ANSI 対応で追加となったメッセージ種別対応処理部分 Figure 4-8 APL 処理概要フロー(2/2) R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 22 of 62 Renesas USB MCU and USB ASSP 5. USB Peripheral Communications Device Class Driver (PCDC) コミュニケーションデバイスクラス(CDC)、PSTN and ACM 5.1 基本機能 本S/Wは、コミュニケーションデバイスクラス仕様Abstract Control Modelサブクラス(5.2章参照)に準拠して います。 PCDC の主な機能は、以下のとおりです。 (1) USB ホストからの機能照会に対する応答 (2) USB ホストからのクラスリクエストに対する応答 (3) USB ホストとのデータ通信 (4) USB ホストへのシリアル通信エラー報告 5.2 Abstract Control Model 概要 Abstract Control Model サブクラスは、USB 機器と従来のモデム(RS-232C 接続)との間を埋める技術で、 従来のモデムを使用するアプリケーションプログラムが使用可能です。 以下に本 S/W でサポートするクラスリクエスト・クラスノーティフィケーションを記します。 5.2.1 クラス・リクエスト(ホスト→デバイスへの要求) 本 S/W で対応しているクラスリクエストを下表に示します。 Table 5-1 CDC クラス・リクエスト リクエスト SendEncapsulatedCommand GetEncapsulatedResponse SetCommFeature GetCommFeature ClearCommFeature SetLineCoding GetLineCoding SetControlLineState SendBreak コード 説明 0x00 プロトコルで定義された AT コマンド等を送信する。 0x01 SendEncapsulatedCommand で送信したコマンドに対 するレスポンスを要求する。 0x02 機器固有の 2 バイトコードや、カントリー設定の禁止/ 許可を設定する。 0x03 機器固有の 2 バイトコードや、カントリー設定の禁止/ 許可状態を取得する。 0x04 機器固有の 2 バイトコードや、カントリー設定の禁止/ 許可設定をデフォルト状態に戻す。 0x20 通信回線設定を行う。(通信速度、データ長、パリティ ビット、ストップビット長) 0x21 通信回線設定状態を取得する。 0x22 通信回線制御信号 RTS、DTR の設定を行う。 0x23 ブレイク信号の送信を行う。 対応 × × × × × ○ ○ ○ × Abstract Control Model リクエストについては、USB Communications Class Subclass Specification for PSTN Devices Revision 1.2 の Table11:Requests-Abstract Control Model を参照して下さい。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 23 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) クラスリクエストのデータフォーマット 5.2.2 本クラスドライバソフトが対応するクラスリクエストのデータフォーマットを以下に記します。 (1). SetLineCoding UART 回線設定を行う為にホストが送信するクラスリクエストです。 SetLineCoding データフォーマットを以下に示します。 Table 5-2 bmRequestType t 0x21 bReques SET_LINE_CODING (0x20) SetLineCoding フォーマット wValue wIndex 0x00 0x00 wLength 0x07 Data Line Coding Structure Table 5-3 Line Coding Structureフォーマット参照 Table 5-3 Line Coding Structure フォーマット Offset 0 4 Field DwDTERate BcharFormat Size 4 1 Value Number Number 5 BparityType 1 Number 6 BdataBits 1 Number Description データ端末の速度(bps) ストップビット 0 - 1 Stop bit 1 - 1.5 Stop bit 2 - 2 Stop bit パリティ 0 - None 1 - Odd 2 - Even データビット (5、6、7、8) 本 S/W でサポートする設定を以下に示します。 DwDTERate :1200bps/2400bps/4800bps/9600bps/14400bps/19200bps/38400bps/57600bps/115200bps BcharFormat :1Stop bit/2Stop bit BparityType :None/Odd/Even BdataBits :7bit/8bit (2). GetLineCoding UART 回線設定状態を要求する為にホストが送信するクラスリクエストです。 GetLineCoding データフォーマットを以下に示します。 Table 5-4 GetLineCoding フォーマット bmRequestType t 0xA1 bReques GET_LINE_CODING (0x21) R01AN0273JJ0210 Rev.2.10 2013.4.1 wValue wIndex 0x00 0x00 wLength 0x07 Data Line Coding Structure Table 5-3 Line Coding Structureフォーマット参照 Page 24 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) (3). SetControlLineState UART のフロー制御用信号を設定する為にホストが送信するクラスリクエストです。 本 S/W では RTS/DTR の制御をサポートしていません。 SET_CONTROL_LINE_STATE データフォーマットを以下に示します。 Table 5-5 bmRequestType t 0x21 SET_CONTROL_LINE_STATE フォーマット bReques SET_CONTROL_ LINE_STATE (0x22) wValue Control Signal Bitmap Table 5-6 Control Signal Bitmapフォーマット参照 wIndex 0x00 wLength 0x00 Data None Table 5-6 Control Signal Bitmap フォーマット Bit Position D15~D2 D1 D0 Description 予約(0 にリセット) DCE の送信機能を制御 0 - RTS OFF 1 - RTS ON DTE がレディ状態かの通知 0 - DTR OFF 1 - DTR ON R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 25 of 62 Renesas USB MCU and USB ASSP 5.2.3 USB Peripheral Communications Device Class Driver (PCDC) クラス・ノーティフィケーション(デバイス→ホストへの通知) 本 S/W のクラス・ノーティフィケーション対応/非対応を下表に示します。 Table 5-7 CDC クラス・ノーティフィケーション ノーティフィケーション NETWORK_CONNECTION RESPONSE_AVAILABLE SERIAL_STATE コード 0x00 0x01 0x20 説明 ネットワーク接続状況を通知する GET_ENCAPSLATED_RESPONSE への応答 シリアル回線状態を通知する 対応 × × ○ (1). SerialState UART ポートに状態変化を検出した場合、ホストへ状態通知を行います。 本 S/W ではオーバーランエラー、パリティエラー、フレーミングエラー検出をサポートしています。状態 通知は正常状態からエラー検出した場合に行います。エラーを連続検出しても状態通知を連続送信しません。 SerialState データフォーマットを以下に示します。 Table 5-8 bmRequestType t 0xA1 bReques SERIAL_STATE (0x20) SerialState フォーマット wValue 0x00 wIndex 0x00 wLength 0x02 Data UART State bitmap Table 5-9 UART State bitmapフォーマット参照 Table 5-9 UART State bitmap フォーマット Bits D15~D7 D6 D5 D4 D3 D2 D1 D0 Field bOverRun bParity bFraming bRingSignal bBreak bTxCarrier bRxCarrier R01AN0273JJ0210 Rev.2.10 2013.4.1 Description 予約 オーバーランエラー検出 パリティエラー検出 フレーミングエラー検出 着信(Ring signal)を感知した ブレーク信号検出 Data Set Ready:回線が接続されて通信可能 Data Carrier Detect:回線にキャリア検出 対応 - ○ ○ ○ × × × × Page 26 of 62 Renesas USB MCU and USB ASSP 5.3 USB Peripheral Communications Device Class Driver (PCDC) エンドポイント仕様 本 S/W では、以下のエンドポイントを使用しています。 Table 5-10 エンドポイント仕様 bEndpointAddress アドレス 転送方向 EP0 In/Out EP1 In bmAttributes 転送タイプ Control Bulk EP2 Out Bulk EP3 In Intterrupt 5.4 wMaxPacketSize Max パケットサイズ 64 64(Full-Speed)/ 512(Hi-Speed) 64(Full-Speed)/ 512(Hi-Speed) 16 説明 標準リクエスト、クラスリクエスト デバイスからホストへのデータ転送 ホストからデバイスへのデータ転送 デバイスからホストへの状態通知 PC の仮想 COM ポートについて(参考) Windows OS 搭載 PC は CDC デバイスを仮想 COM ポートとして利用することが可能です。 Windows OS 搭載 PC に本 S/W を実装した RSK ボードを接続すると、エニュメレーション設定に続き、CDC クラスリクエストの GetLineCoding 及び SetControlLineState を行った後、仮想 COM デバイスとしてデバイス マネージャに登録されます。 Windows デバイスマネージャに仮想 COM ポートとして登録された後は、Windows XP 標準搭載のハイパー ターミナル等のターミナルアプリで CDC デバイスとデータ通信が可能です。 ターミナルアプリのシリアルポート設定を行うことで、クラスリクエスト SetLineCoding による UART 設定 が可能です。 ターミナルアプリのウインドウから入力したデータ(又はファイル送信)は EP2 を使用して RSK ボードへ 転送され、RSK ボード側から PC へのデータ転送は EP1 を使用して行われます。 ターミナルアプリによっては最後に受信したデータが MAX パケットサイズ (Full-Speed:64Byte,Hi-Speed:512Byte)の場合、継続するデータがあると判断して受信データをターミナルに 表示しないことがあります。 MAX パケットサイズ未満のデータを受信することで、それまでに受信したデータがターミナルに表示され ます。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 27 of 62 Renesas USB MCU and USB ASSP 6. USB Peripheral Communications Device Class Driver (PCDC) USB ペリフェラルコミュニケーションデバイスクラスドライバ(PCDC) 6.1 基本機能 PCDC の基本機能は以下のとおりです。 (1) USB ホストとのデータ転送 (2) CDC クラスリクエストに応答 (3) コミュニケーションデバイスクラスノーティフィケーション送信サービスの提供 6.2 PCDC API 一覧 Table 6-1~Table 6-3にPCDC API一覧を示します。 本 S/W は ANSI インタフェース使用がデフォルトとなっております。 ANSIインタフェース使用の場合に使用するAPIをTable 6-1に記します。 以下の関数は、r_usb_usrconfig.h ファイル内の ANSI インターフェース使用/非使用の指定において"使用"を 選択した場合に、使用することができます。 例 (r_usb_usrconfig.h) #define USB_ANSIIO_PP USB_ANSIIO_USE_PP Table 6-1 関数名 :ANSI インターフェイス使用 ANSI インタフェース API 一覧 機能概要 USB デバイスクラス通信が可能か確認する USB デバイスクラス通信を終了する USB 受信処理を行う USB 送信処理を行う コントロールコードに対応した処理を行う open close read write control ANSIインタフェースを使用しない場合に使用するAPIをTable 6-2に記します。 以下の関数は、r_usb_usrconfig.h ファイル内の ANSI インターフェース使用/非使用の指定において"非使用" を選択した場合に使用することができます。 例 (r_usb_usrconfig.h) #define USB_ANSIIO_PP USB_ANSIIO_NOT_USE_PP :ANSI インターフェイス非使用 Table 6-2 非 ANSI インタフェースの場合に使用する PCDC API 一覧 関数名 R_usb_pcdc_SendData R_usb_pcdc_ReceiveData R_usb_pcdc_SerialStateNotification 機能概要 USB 送信処理 USB 受信処理 USB ホスト装置へクラスノーティフィケーション SerialState を送信する。 ANSI/非ANSI共通で使用するAPIをTable 6-3に記します。 ANSI&非 ANSI の欄に記載されている関数は、r_usb_usrconfig.h ファイル内の ANSI インターフェース使用/ 非使用の設定にかかわらず使用できる関数です。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 28 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) Table 6-3 関数名 R_usb_pcdc_set_interface R_usb_pcdc_descriptor_change R_usb_pcdc_usr_ctrl_trans_function R_usb_pcdc_task 6.3 PCDC API 一覧 機能概要 Set Interface 受信時に呼出されるコールバック関数 接続速度に従ったディスクリプタ設定値変更処理 CDC 用コントロール転送処理 PCDC タスク PCDC API 説明 PCDC が提供するAPI関数説明を以下に記します。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 29 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) open USB デバイスクラス通信が可能か確認する 形式 int16_t 引数 open(int8_t *name, uint16_t mode, uint16_t flg) *name mode flg 戻り値 クラスコード : USB_CLASS_PCDCC / USB_CLASS_PCDCD オープンモード (この引数は使用しません。ゼロを設定してください。) オープンフラグ (この引数は使用しません。ゼロを設定してください。) - ファイル番号 0x10~0x1f:USB オープン成功/ -1:オープン失敗 read()や write()を使った USB デバイスクラス通信を行うためには、 ファイル番号が必要です。そのため、USB デバイスクラス通信を 行う前に、open 関数を呼び出す必要があります 解説 USB デバイスとの接続確認を行います。 接続が確認されたら戻り値にファイル番号(0x10~0x1f)を、失敗した場合は(-1)を返します。 ファイル番号取得後、read()や write()を使った USB デバイスクラス通信を行うことができます。 以下に、PCDC が対応するクラス ID を示します。 クラス CDC CDC クラス ID USB_CLASS_PCDCC USB_CLASS_PCDCD 備考 Communications Class Interface Data Class Interface 補足 1. 本 API はユーザプログラムで呼び出してください。 2. read()や write()を使った USB デバイスクラス通信を行うためには、ファイル番号が必 要です。そのため、USB デバイスクラス通信を行う前に、open 関数を呼び出す必要 があります。 3. 第 2 引数 flg や第 3 引数 mode は、本関数では使用しませんので、ともに 0(ゼロ)を設 定してください。 4. PCDC で指定するクラス ID は USB_CLASS_PCDCC、USB_CLASS_PCDCD をオープ ンする必要があります。 5. USB_CLASS_PCDCD ではデータ送受信を、USB_CLASS_PCDCC ではシリアル (UART)状態通知を行う為にオープン処理を行います。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 30 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) 使用例 int16_t data_fn, ctl_fn; void usb_apl_task() { : data_fn = open((int8_t *)USB_CLASS_PCDCD, 0, 0); ctl_fn = open((int8_t *)USB_CLASS_PCDCC, 0, 0); if( (data_fn != -1) && (ctl_fn != -1) ) { /* PCDC USB 通信可能 */ } } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 31 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) close USB デバイスクラス通信を終了する 形式 int16_t 引数 close(int16_t fileno) fileno 戻り値 ファイル番号 - 解説 エラーコード ファイル番号で指定した USB デバイスクラス通信を終了します。 USB デバイスクラス通信を終了した場合、戻り値に(0)を、失敗した場合は(-1)を返 します。 補足 1. 使用例 本 API は ANSI 用です。 int16_t usb_smp_fn; void usb_apl_task() { USB_ER_t err; : err = close(usb_smp_fn); if(err != USB_OK) { USB_PRINTF0("###close error !¥n"); } usb_smp_fn = -1; : } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 32 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) read USB 受信処理を行う 形式 int32_t 引数 read(int16_t fileno, uint8_t *buf, int32_t count) fileno *buf count 戻り値 ファイル番号 データバッファの先頭アドレス データ転送サイズ - 解説 エラーコード ファイル番号で指定した USB デバイスクラスに対し、データ受信要求を行います。 FIFO バッファからデータ転送サイズ(第 3 引数)で指定された長さのデータを読み出します。読み出した データは、データバッファ(第 2 引数)に格納されます。 受信処理が完了すると、control(USB_CTL_RD_NOTIFY_SET)で設定したコールバック関数がコールされ ます。 実際の読み出しサイズは、受信処理完了後、control(USB_CTL_RD_LENGTH_GET)にて取得することが できます。 補足 1. ユーザプログラムで本関数を呼び出してください。 2. 本 API は、control(USB_CTL_RD_NOTIFY_SET)を使用し、データ転送完了通知用コールバック関 数を登録してから呼び出してください。 3. この API は、データ受信の要求を行なうだけです。データ受信が完了するまで、この API で処理が ブロックされることはありません。したがって、戻り値は常に(-1)になります。 使用例 int16_t usb_smp_fn; void usb_apl_task() { : /* データ受信完了通知用コールバック関数の設定 */ control(usb_smp_fn, USB_CTL_RD_NOTIFY_SET, (void*)&usb_ smp_Read_Notify); /* データ受信要求 */ read(usb_smp_fn, (uint8_t *)データバッファアドレス, (unsigned int)データサイズ) /* 受信ステータスチェック */ err = control(usb_spvendor_bulk_fn, USB_CTL_GET_READ_STATE, (void*)&state); if(err != USB_CTL_ERR_PROCESS_COMPLETE) { /* エラー処理 */ } : } void usb_ smp_Read_Notify(USB_UTR_t *ptr, uint16_t data1, uint16_t data2) { /* データ受信完了時の処理*/ } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 33 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) write USB 送信処理を行う 形式 int32_t 引数 write(int16_t fileno, uint8_t *buf, int32_t count) fileno *buf count 戻り値 ファイル番号 データバッファの先頭アドレス データ転送サイズ - 解説 エラーコード ファイル番号で指定した USB デバイスクラスに対し、データ送信要求を行います。データ送信関数は、 FIFO バッファへデータ転送サイズ(第 3 引数)で指定された長さのデータを書き込みます。書き込むデー タは、データバッファ(第 2 引数)から読み出されます。 送信処理が完了すると、control(USB_CTL_WR_NOTIFY_SET)で設定したコールバック関数がコールされ ます。 実際の書き込みサイズは、送信処理完了後、control(USB_CTL_WR_LENGTH_GET)にて取得することが できます。 補足 1. ユーザプログラムで本関数を呼び出してください。 2. 本 API は、control(USB_CTL_WR_NOTIFY_SET)を使用し、データ転送完了通知用コールバック関 数を登録してから呼び出してください。 3. この API は、データ送信要求を行なうだけです。データ送信が完了するまで、この API で処理がブ ロックされることはありません。したがって、戻り値は常に(-1)になります。 使用例 int16_t usb_smp_fn; void usb_apl_task() { : /* データ送信完了通知用コールバック関数の設定 */ control(usb_smp_fn, USB_CTL_WR_NOTIFY_SET, (void*)&usb_ smp_write_Notify); /* データ送信要求 */ write(usb_smp_fn, (uint8_t *)データバッファアドレス, (unsigned int)データサイズ) /* 送信ステータスチェック */ err = control( usb_spvendor_bulk_fn, USB_CTL_GET_WRITE_STATE, (void*)&state ); if(err != USB_CTL_ERR_PROCESS_COMPLETE) { /* エラー処理 */ } : } void usb_ smp_write_Notify(USB_UTR_t *ptr, uint16_t data1, uint16_t data2) { /* データ送信完了時の処理*/ } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 34 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) control コントロールコードに対応した処理を行う 形式 int16_t 引数 control(int16_t fileno, USB_CTRLCODE_t code, void *data) fileno code *data 戻り値 ファイル番号 コントロールコード データポインタ - 解説 エラーコード コントロールコードに対応した処理を行います。対応していないコントロールコードの場合、(-1)を 返します。以下に、control()が対応するコントロールコードを示します。 コントロールコード USB_CTL_USBIP_NUM USB_CTL_RD_NOTIFY_SET *data の型 (uint16_t *) (void*) USB_CTL_WR_NOTIFY_SET (void*) USB_CTL_RD_LENGTH_GET (void*) USB_CTL_WR_LENGTH_GET (void*) USB_CTL_GET_RD_STATE USB_CTL_GET_WR_STATE USB_CTL_P_RD_TRANSFER_END (void*) (void*) (void*) USB_CTL_P_WR_TRANSFER_END (void*) USB_CTL_P_CHG_DEVICE_STATE (void*) USB_CTL_P_GET_DEVICE_INFO USB_CTL_P_RD_SET_STALL (void*) (void*) USB_CTL_P_WR_SET_STALL (void*) R01AN0273JJ0210 Rev.2.10 2013.4.1 概要 USB モジュール番号を取得します。 データ受信が完了したときにコールバックされ る関数を登録します。第 3 引数に登録する関数 を設定します。 データ送信が完了したときにコールバックされ る関数を登録します。第 3 引数に登録する関数 を設定します。 データ受信時に、FIFO バッファから読み出した データ長を取得します。 データ送信時に、FIFO バッファへ書き込んだ データ長を取得します。 データ受信時のステータスを取得します。 データ送信時のステータスを取得します。 引数で指定したパイプのデータ転送を強制終了 させます。 引数で指定したパイプのデータ転送を強制終了 させます。 USB デバイスを引数で指定した状態へ変更しま す。 処理を行いません。 引数で指定されたパイプの PID をストールに設 定します。 引数で指定されたパイプの PID をストールに設 定します。 Page 35 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) 補足 1. ユーザプログラムで本関数を呼び出してください。 使用例 int16_t usb_smp_fn; void usb_apl_task() { int16_t num; : /* USB モジュール番号の確認 */ control(usb_smp_fn, USB_CTL_USBIP_NUM, (void*) &num); : } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 36 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) R_usb_pcdc_SendData USB 送信処理 形式 void R_usb_pcdc_SendData(USB_UTR_t *ptr, uint8_t *Table, uint32_t size, USB_CB_t complete) 引数 *ptr *Table size complete 戻り値 USB 通信用構造体 転送データアドレス 転送サイズ 処理完了通知コールバック関数 - 解説 - 転送データアドレス Table で指定されたアドレスから、転送サイズ size 分のデータを USB 送信します。 送信完了後、コールバック関数 complete が呼出されます。 補足 1. 2. 3. 4. ANSI インターフェース使用時は、本 API を使用する必要はありません。 USB 通信用構造体 USB_UTR_t の以下のメンバ設定が必要です。 USB_REGADR_t ipp :USB IP のアドレス uint16_t ip :USB IP 番号 USB 送信処理結果はコールバック関数の引数”USB_UTR_t *mess”で得られます。 USB Basic Firmware アプリケーションノートの USB 通信用構造体(USB_UTR_t 構造体)を参照し て下さい。 使用例 #define USB_PERI_USBIP_NUM USB_USBIP_0 // #define USB_PERI_USBIP_NUM USB_USBIP_1 { USB_UTR_t USB_UTR_t uint8_t uint16_t utr; *ptr; send_data[] = {0x01,0x02,0x03,0x04,0x05}; /* USB 送信データ */ size = 5; /* USB 送信データ数 */ ptr = (USB_UTR_t *)&utr; ptr->ip = USB_PERI_USBIP_NUM; ptr->ipp = R_usb_cstd_GetUsbIpAdr( ptr->ip ); /* USB IP 番号設定 */ /* USB IP ベースアドレス取得 */ R_usb_pcdc_SendData(ptr, (uint8_t *)send_data, size, (USB_CB_t)&usb_complete) } /* USB 送信完了通知用コールバック関数 */ void usb_complete( USB_UTR_t *mess, uint16_t data1, uint16_t data2 ); { /* USB 送信完了時の処理を記述して下さい。 */ } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 37 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) R_usb_pcdc_ReceiveData USB 受信処理 形式 void R_usb_pcdc_ReceiveData (USB_UTR_t *ptr, uint8_t *Table, uint32_t size, USB_CB_t complete) 引数 *ptr *Table size complete 戻り値 USB 通信用構造体 転送データアドレス 転送サイズ 処理完了通知コールバック関数 - 解説 - USB 受信要求を行います。 USB から転送サイズ size 分のデータ受信完了、 又は MAX パケットサイズ未満のデータを受信した場合、 コールバック関数 complete が呼出されます。 USB 受信データは、転送データアドレス Table で指定されたアドレスで指定された領域に格納されます。 補足 1. 2. 3. 4. ANSI インターフェース使用時は、本 API を使用する必要はありません。 USB 通信用構造体 USB_UTR_t の以下のメンバ設定が必要です。 USB_REGADR_t ipp :USB IP のアドレス uint16_t ip :USB IP 番号 USB 受信処理結果はコールバック関数の引数”USB_UTR_t *mess”で得られます。 USB Basic Firmware アプリケーションノートの USB 通信用構造体(USB_UTR_t 構造体)を参照し て下さい。 使用例 #define USB_PERI_USBIP_NUM USB_USBIP_0 // #define USB_PERI_USBIP_NUM USB_USBIP_1 { USB_UTR_t utr, *ptr; uint8_t receive_data[64]; uint16_t size = 64; /* USB 受信データ格納領域 */ /* USB 受信要求サイズ */ ptr = (USB_UTR_t *)&utr; ptr->ip = USB_PERI_USBIP_NUM; ptr->ipp = R_usb_cstd_GetUsbIpAdr( ptr->ip ); /* USB IP 番号設定 */ /* USB IP ベースアドレス取得 */ R_usb_pcdc_ReceiveData(ptr, (uint8_t *)receive_data, size, (USB_CB_t)&usb_complete) } /* USB 受信完了通知用コールバック関数 */ void usb_complete( USB_UTR_t *mess, uint16_t data1, uint16_t data2 ); { /* USB 受信完了時の処理を記述して下さい。 */ } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 38 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) R_usb_pcdc_SerialStateNotification USB ホスト装置へクラスノーティフィケーション SerialState を送信する 形式 void R_usb_pcdc_SerialStateNotification(USB_UTR_t *ptr, uint16_t serial_state, USB_CB_t complete) 引数 *ptr serial_state complete 戻り値 USB 通信用構造体 シリアルステータス 処理完了通知コールバック関数 - 解説 - CDC クラスノーティフィケーション・シリアルステートを USB ホストに送信します。 シリアルステート送信はインタラプトパイプ EP3 を使用します。 送信完了後、コールバック関数 complete が呼出されます。 補足 1. 2. 3. 4. 5. ANSI インターフェース使用時は、本 API を使用する必要はありません。 シリアルステータスのビットパターンは"Table 5-9 UART State bitmapフォーマット"を参照下さい。 USB 通信用構造体 USB_UTR_t の以下のメンバ設定が必要です。 USB_REGADR_t ipp :USB IP のアドレス uint16_t ip :USB IP 番号 USB 送信処理結果はコールバック関数の引数”USB_UTR_t *mess”で得られます。 USB Basic Firmware アプリケーションノートの USB 通信用構造体(USB_UTR_t 構造体)を参照し て下さい。 使用例 #define USB_PERI_USBIP_NUM USB_USBIP_0 // #define USB_PERI_USBIP_NUM USB_USBIP_1 { USB_UTR_t utr; USB_UTR_t *ptr; uint16_t state; /* シリアルステータス */ ptr = (USB_UTR_t *)&utr; ptr->ip = USB_PERI_USBIP_NUM; ptr->ipp = R_usb_cstd_GetUsbIpAdr( ptr->ip ); /* USB IP 番号設定 */ /* USB IP ベースアドレス取得 */ state = 0x0020; /* D5:パリティエラー */ R_usb_pcdc_SerialStateNotification(ptr, state, (USB_CB_t)&usb_complete); } /* シリアルステート送信完了通知用コールバック関数 */ void usb_complete( USB_UTR_t *mess, uint16_t data1, uint16_t data2 ) { /* シリアルステート送信完了時の処理を記述して下さい。 */ } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 39 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) R_usb_pcdc_set_interface Set Interface 受信時に呼出されるコールバック関数 形式 void 引数 *ptr mode data2 R_usb_pcdc_set_interface(USB_UTR_t *ptr, uint16_t data1, uint16_t data2) USB 通信用構造体 接続速度 USB_NOCONNECT USB_HSCONNECT USB_FSCONNECT USB_LSCONNECT 非使用 Speed undecidedness Hi-Speed connect Full-Speed connect Low-Speed connect 戻り値 - 解説 - SET_INTERFACE リクエストのステータスステージで呼び出されます。 現在行うべき処理が存在しないため、空関数としています。 本 API はデバイスクラスドラバ・レジストレーションでインタフェース変更時に呼出すコールバック関 数として登録します。 補足 - 使用例 USB_PCDREG_t driver; /* Interfaced change */ driver. interface = & R_usb_pcdc_set_interface; R_usb_pstd_DriverRegistration(ptr, &driver); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 40 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) R_usb_pcdc_descriptor_change 接続速度に従ったディスクリプタ設定値変更処理 形式 void 引数 R_usb_pcdc_descriptor_change(USB_UTR_t *ptr, uint16_t mode, uint16_t data2) *ptr :USB 通信用構造体 mode 接続速度 USB_NOCONNECT USB_HSCONNECT USB_FSCONNECT USB_LSCONNECT data2 非使用 戻り値 Speed undecidedness Hi-Speed connect Full-Speed connect Low-Speed connect - 解説 接続速度 mode により、コンフィグレーションディスクリプタ及びパイプ情報テーブル設定を変更しま す。 本 API はデバイスクラスドライバ・レジストレーションでデフォルトステート遷移時に呼出すコール バック関数として登録します。 補足 - 使用例 USB_PCDREG_t driver; /* Device default */ driver. devdefault = & R_usb_pcdc_descriptor_change; R_usb_pstd_DriverRegistration(ptr, &driver); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 41 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) R_usb_pcdc_usr_ctrl_trans_function CDC 用コントロール転送処理 形式 void R_usb_pcdc_usr_ctrl_trans_function(USB_UTR_t *ptr, USB_REQUEST_t *preq, uint16_t ctsq) 引数 *ptr *preq ctsq USB 通信用構造体 クラスリクエストメッセージへのポインタ コントロール転送ステージ情報 USB_CS_IDST:Idle or setup stage USB_CS_RDDS:Control read data stage USB_CS_WRDS:Control write data stage USB_CS_WRND:Control write nodata status stage USB_CS_RDSS:Control read status stage USB_CS_WRSS:Control write status stage USB_CS_SQER:Sequence error 戻り値 - 解説 - リクエストタイプが CDC クラスリクエストの場合、コントロール転送ステージに対応した処理を呼び出 します。 本 API はデバイスクラスドライバ・レジストレーションでコントロール転送時に呼出すコールバック関 数として登録します。 補足 なし。 使用例 USB_PCDREG_t driver; /* Control Transfer */ driver.ctrltrans = (USB_CB_TRN_t)&R_usb_pcdc_usr_ctrl_trans_function; R_usb_pstd_DriverRegistration(ptr, &driver); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 42 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) R_usb_pcdc_Task PCDC タスク 形式 void 引数 R_usb_pcdc_Task(USB_VP_INT_t stacd) stacd 戻り値 タスクスタートコード(非使用) - 解説 - PCDC 処理タスク。 アプリから要求された処理を行い、アプリに処理結果を通知します。 補足 1. 2. 本 API はユーザプログラムで呼び出してください。 non-OS で動作させる場合、タスクスイッチング処理から本 API がスケジュールされるように登録し ます。 使用例 void usb_apl_task_switch(void) { while( 1 ) { /* Scheduler */ R_usb_cstd_Scheduler(); if( USB_FLGSET == R_usb_cstd_CheckSchedule() ) { R_usb_pstd_PcdTask((USB_VP_INT)0); /* PCD Task */ /* Peripheral Communications Devices Class Task */ R_usb_pcdc_Task(0); /* Peripheral Communications Class Application Task */ usb_pcdc_main_task(0); } } } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 43 of 62 Renesas USB MCU and USB ASSP 6.4 USB Peripheral Communications Device Class Driver (PCDC) ユーザ定義テーブル PCD が使用するディスクリプタテーブルおよびパイプ情報テーブルを作成する必要があります。 サンプルの r_usb_pcdc_descriptor.c ファイルを参考に作成してください。 詳細は「Renesas USB MCU and USB ASSP USB Basic Firmware アプリケーションノート」をご参照ください。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 44 of 62 Renesas USB MCU and USB ASSP 7. USB Peripheral Communications Device Class Driver (PCDC) コミュニケーションポートドライバ(CPD) コミュニケーションポートドライバ(以降 CPD と記します。)は、RSK の UART 用に用意したシリアル 通信ドライバです。 RSK 以外の H/W 環境で使用される場合は、使用される環境に合わせたシリアル通信ドライバを御用意下さ い。 7.1 基本機能 CPD の主な機能は以下のとおりです。 1) シリアルポート HW(SCI)を制御し、通信設定を行います。 2) シリアルポートへのデータ送信および、シリアルポートからのデータ受信を行います。 3) シリアルポート HW を使用せず、仮想シリアル通信を行うエコーモードをサポートします。 7.2 機能概要 CPD が提供する機能を以下に記します。 1) シリアルポート H/W(SCI)への通信設定。 ・回線速度 1200bps~115200bps 通信速度は MCU の周辺モジュールクロック”PCLK:48MHz設定”から生成します。 PCLK 設定変更時は、SCI のシリアルモードレジスタ(SMR)CKS[1:0] クロック選択ビット及び、ビッ トレートレジスタ(BRR)設定の変更が必要です。 ・パリティビット(なし、偶数、奇数) ・ストップビット(1 ビット、2 ビット) ・データ長(7 ビット、8 ビット) 2) 送信機能 シリアルポートへの送信動作は、送信データを CPD の有するリングバッファへ格納し、送信データエン プティ割り込みにより 1 バイトずつ送信を行います。 3) 受信機能 シリアルポートに対する受信動作は、受信データフル割り込みにより受信したデータを CPD の有するリ ングバッファへ格納します。 CPD の提供する受信データ読み出し API を使用して、受信データ処理を行ってください。 4) 送信バッファビジー判定機能 CPD の有する送信用リングバッファの使用状態を調べ、送信処理要求が受け付けられるか判定します。 5) エコーモード機能 シリアルポート HW を使用しないで、シリアルポートに送信するデータを、シリアルポートからの受信 データとして処理を行うための機能を有します。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 45 of 62 Renesas USB MCU and USB ASSP 7.3 CPD USB Peripheral Communications Device Class Driver (PCDC) API 関数 Table 7-1にCPDの関数を示します。 Table 7-1 CPD 関数一覧 関数名 usb_cpu_Sci_DataSend usb_cpu_Sci_DataReceive usb_cpu_Sci_StxBuffStatus usb_cpu_Sci_Buffer_init usb_cpu_Sci_HW_init usb_cpu_Sci_enable usb_cpu_Sci_disable usb_cpu_Sci_CopyData_for_Echo usb_cpu_Sci_GetSerialState R01AN0273JJ0210 Rev.2.10 2013.4.1 説明 シリアルポートデータ送信処理 シリアルポートデータ受信処理 シリアル送信バッファ状態取得処理 CPD 使用変数初期化処理 シリアルポート HW 初期化処理 シリアルポート動作許可 シリアルポート動作禁止 シリアル送信データをシリアル受信データ領域に コピーする。(エコーモード用) シリアルポート(エラー)状態を取得する。 Page 46 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_DataSend シリアルポートデータ送信処理 形式 void 引数 mode *tranadr length 戻り値 usb_cpu_Sci_DataSend(uint16_t mode, void *tranadr, uint16_t length) 動作モード指定 0:UART への送信 1:USB ループバック(エコーモード) 送信データアドレス 送信データサイズ(単位 Byte) - 解説 UART にデータ送信を行います。 tranadr で示されるアドレスから、length で指定された送信データサイズを UART 送信バッファに格納し ます。 UART 送信バッファに格納されたデータは、UART 割込み処理によって送信されます。 動作モード指定が 0(UART への送信)の場合、UART 送信割込みを許可にします。 補足 動作モード指定が 1(USB ループバック)の場合、UART 送信割込みは禁止のままなので、UART からの送信は行われません。 2. USB ループバックモードの場合は、エコーモード用データコピー処理 (usb_cpu_Sci_CopyData_for_Echo)によって UART 送信バッファに格納されたデータを UART 受信 バッファに移し、USB へループバック送信を行います。 使用例 1. uint16_t echo_mode = 0; /* UART へ送信 */ uint8_t send_data[] = {0x01,0x02,0x03,0x04,0x05}; /* UART へ送信するデータ */ uint16_t data_cnt = 5; /* UART へ送信するデータ数 */ /* UART へ 5 バイトのデータ送信 */ usb_cpu_Sci_DataSend(_echo_mode, (void*)&send_data , data_cnt); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 47 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_DataReceive シリアルポートデータ受信処理 形式 uint16_t 引数 usb_cpu_Sci_DataReceive(uint8_t *tranadr,uint16_t receive_length) *tranadr length 戻り値 受信データアドレス 受信要求データサイズ(単位 Byte) - 解説 受信バッファから取出したサイズ(単位 Byte) UART データ受信を行います。 UART 受信割込み処理によって、UART 受信バッファに格納された受信データを取出します。 tranadr で示されるアドレスに length で要求したサイズ分、UART 受信バッファからデータを取出し、格 納します。 戻り値には実際に受信したサイズを返します。 補足 - 使用例 uint16_t uint8_t uint16_t rcv_cnt; /* 取出せた受信データサイズ */ receive_data[64]; /* 受信したデータを格納する領域 */ size; /* 受信要求データサイズ */ rcv_cnt = 64; /* 64Byte のデータ受信要求 */ rcv_cnt = usb_cpu_Sci_DataReceive( (void*)receive_data, size ); if( rcv_cnt > 0 ) { /* receive_data[]に rcv_cnt サイズ分の UART 受信データ格納 */ } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 48 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_StxBuffStatus シリアル送信バッファ状態取得処理 形式 uint16_t 引数 usb_cpu_Sci_StxBuffStatus (void) - 戻り値 - 解説 0:送信バッファ空きあり 1:送信バッファ空きなし UART ドライバ送信バッファの状態を取得します。 UART 送信バッファに、USB 受信データを格納するサイズ分の空きがあるかチェックします。USB 受信 データを格納する分の空きがあれば0、空きがなければ1を返します。 補足 1. 本 API は USB-UART 変換のフロー制御を行うことを目的としています。 使用例 if ( usb_cpu_Sci_StxBuffStatus() == 0 ) { /* 送信バッファ空きあり */ } else { /* 送信バッファ空きなし */ } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 49 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_Buffer_init CPD 使用変数初期化処理 形式 void 引数 usb_cpu_Sci_Buffer_init(void) - 戻り値 - - 解説 - UART ドライバ送受信バッファ領域の初期化を行います。 補足 1. UART 送受信を開始する前に本関数を呼出してください。 使用例 usb_cpu_Sci_Buffer_init(); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 50 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_HW_init シリアルポート HW 初期化処理 形式 void 引数 usb_cpu_Sci_HW_init (void) - 戻り値 - - 解説 - UART モジュールのストップ状態を解除し、UART モジュールを動作可能な状態にします。 また UART 割込み許可設定、UART を使用する為のポート設定も行います。 補足 1. 2. 使用例 UART 割込みを使用する為に、UART 割込みベクタを登録する必要があります。 UART割込みベクタ登録は"7.5 HWリソース"を参照して下さい。 usb_cpu_Sci_HW_init(); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 51 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_enable シリアルポート動作許可 形式 void 引数 usb_cpu_Sci_enable(void) - 戻り値 - - 解説 - UART コントローラに送信動作許可及び受信動作許可設定を行ないます。 補足 - 使用例 usb_cpu_Sci_enable(); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 52 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_disable シリアルポート動作禁止 形式 void 引数 usb_cpu_Sci_disable (void) - 戻り値 - - 解説 - UART コントローラに送信動作禁止及び受信動作禁止設定を行ないます。 補足 - 使用例 usb_cpu_Sci_disable(); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 53 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_CopyData_for_Echo シリアル送信データをシリアル受信データ領域にコピーする 形式 uint16_t 引数 usb_cpu_Sci_CopyData_for_Echo(void) - 戻り値 - - 解説 エラーコード:USB_OK USB ホストから受信したデータを、UART 受信バッファに移動します。 UART 受信バッファに移動したデータは、UARTデータ受信処理(usb_cpu_Sci_DataReceive)によって取 出され、USB ホストへ送信されます。 補足 1. 使用例 エラーコードには常に USB_OK を返します。 usb_cpu_Sci_CopyData_for_Echo(); R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 54 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) usb_cpu_Sci_GetSerialState シリアルポート(エラー)状態を取得する 形式 uint16_t 引数 usb_cpu_Sci_GetSerialState(uint16_t *serial_state) serial_state 戻り値 シリアルステータスレジスタ値格納領域 - 解説 エラーコード 0:UART エラーなし 1:UART エラー検出 シリアルステータスレジスタから読み出したエラー情報を、CDC クラスノーティフィ ケーション・シリアルステータスのフォーマットに合わせて設定します。 補足 1. 使用例 本関数で設定するエラー種別はオーバーランエラー、フレーミングエラー、パリティエラーです。 void usb_pcdc_serial_state_process(USB_UTR_t *ptr) { uint16_t serial_stat; uint16_t serial_error; serial_error = usb_cpu_Sci_GetSerialState(&serial_stat); if( serial_error ) { if( serial_stat != usb_gpcdc_serial_state ) { usb_ghcdc_SerialState_Table[4] = serial_stat; write( usb_spcdc_ctl_fn, (uint8_t*)&usb_ghcdc_SerialState_Table[0], USB_CDC_SETUP_TBL_BSIZE ); } } } R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 55 of 62 Renesas USB MCU and USB ASSP 7.4 USB Peripheral Communications Device Class Driver (PCDC) CPD 動作説明 送信動作、受信動作、エコーモード動作説明を以下に記します。 7.4.1 送信動作 CPD は送信動作用に Full-Speed の場合 64 バイト×8、Hi-Speed の場合 512 バイト×8 のリングバッファを有 します。 [シリアルポート・データ送信処理での動作] リングバッファに送信データを格納し、書き込みポインタを更新します。 リングバッファへのデータ格納後、送信割り込み許可・禁止を確認し、送信割り込み許可の場合、処理を 終了します。 送信割り込みが禁止になっている場合、送信割り込みを許可に設定します。 [送信割り込み処理での動作] 書き込みポインタと読み出しポインタを比較し、送信すべきデータが存在するか調べます。 送信データがある場合、データを 1 バイト送信し、読み出しポインタを更新します。 送信データがない場合、送信割り込みを禁止にします。 Figure 7-1 CPD 送信動作 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 56 of 62 Renesas USB MCU and USB ASSP 7.4.2 USB Peripheral Communications Device Class Driver (PCDC) 受信動作 CPD は受信動作用にリングバッファを有します。 [受信割り込み処理での動作] 受信データをリングバッファに格納し、書き込みポインタを更新します。 [シリアルポート・データ受信処理での動作] 書き込みポインタと読み出しポインタを比較し、取り出せる受信データが存在するか調べます。 取り出せるデータがある場合、リングバッファから受信データを取り出し、読み出しポインタを更新しま す。 Figure 7-2 CPD 受信動作 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 57 of 62 Renesas USB MCU and USB ASSP 7.4.3 USB Peripheral Communications Device Class Driver (PCDC) エコーモード動作 エコーモード動作はシリアルポート HW を使用せず、シリアルポートに送信するデータを、シリアルポー トからのデータ受信とみなします。 エコーモードを実現するために、シリアルポート・データ送信処理関数"usb_cpu_Sci_DataSend"にエコー モードを追加し、送信データを受信データにコピーする関数" usb_cpu_Sci_CopyData_for_Echo"を用意しまし た。 [シリアルポート・データ送信処理関数:usb_cpu_Sci_DataSend] 引数の動作モードをエコーモードにすることで、動作が次のように変化します。 (1) シリアルポート HW に対する送信処理(データ送信および、送信割り込み許可)を行いません。 [データコピー処理:usb_cpu_Sci_CopyData_for_Echo] データコピー処理は送信リングバッファから送信データを取り出し、受信リングバッファへ書き込みます。 データコピー処理は、エコーモードの場合にシリアルポート・データ受信処理"usb_cpu_Sci_DataReceive" の前に処理を行います。 データコピー処理には、ライトポインタがリードポインタを追い越さないようガード処理を入れています。 シリアルポートへの送信データ usb_gcpu_stxdata[*] 送信データ書き込みポインタ usb_gpcdc_stx_wp データコピー処理 usb_cpu_Sci _CopyData_for_Echo 送信データ読み出しポインタ usb_gpcdc_stx_rp シリアルポートからの受信データ usb_gpcdc_srxdata[*] 受信データ書き込みポインタ usb_gpcdc_srx_wp * Full-Speedの場合、64バイト×8 Hi-Speedの場合、512バイト×8 Figure 7-3 CPD エコーモード動作 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 58 of 62 Renesas USB MCU and USB ASSP 7.5 USB Peripheral Communications Device Class Driver (PCDC) HW リソース CPD の HW リソースとしてマイコンのシリアル・コミュニケーション・インタフェースを使用します。 シリアル・コミュニケーション・インタフェースの割り込みベクタ(送信バッファエンプティ割り込み、 受信割り込み、受信エラー割り込み)に対応する関数の割当を行います。 Table 7-2 SCI2 割り込みベクタ(RX62N の場合) ベクタ番号 222 223 224 225 割り込み内容 SCI2 受信エラー割り込み SCI2 受信割り込み SCI2 送信バッファエンプティ割り込み SCI2 送信完了割り込み Table 7-3 ベクタ番号 214 215 216 114 登録する割り込み処理 usb_cpu_Sci_ER_Int() usb_cpu_Sci_RX_Int() usb_cpu_Sci_TX_Int() usb_cpu_Sci_TE_Int() SCIO 割り込みベクタ(RX63N,RX630 の場合) 割り込み内容 SCIO 受信割り込み SCIO 送信バッファエンプティ割り込み SCIO 送信完了割り込み グループ 12 割り込み ERIO (SCIO 受信エラー割り込み) 登録する割り込み処理 usb_cpu_Sci_RX_Int() usb_cpu_Sci_TX_Int() usb_cpu_Sci_TE_Int() usb_cpu_Sci_ER_Int() 通信速度は、MCU の周辺モジュールクロック(PCLK:48MHz設定)を使用して設定します。 Table 7-4 通信速度 SCI 通信速度設定 シリアルモードレジスタ(SMR) CKS[1:0] クロック選択ビット 1 0:PCLK/16 クロック(3MHz) ビットレートレジスタ(BRR) 1200bps 77 2400bps 38 4800bps 77 0 1:PCLK/4 クロック(12MHz) 9600bps 155 分周なし 14400bps 103 0 0:PCLK クロック(48MHz) 19200bps 77u 38400bps 38 57600bps 25 115200bps 12 設定値算出方法については使用される MCU ハードウエアマニュアルのビットレートレジスタ(BRR) 説明を参照下さい。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 59 of 62 Renesas USB MCU and USB ASSP 8. USB Peripheral Communications Device Class Driver (PCDC) uITRON/non-OS への登録方法 詳細は、Renesas USB MCU and USB ASSPUSB Basic Firmware アプリケーションノートの「9.1 non-OS への 登録方法」、「9.2 RTOS への登録方法」を参照してください。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 60 of 62 Renesas USB MCU and USB ASSP 9. USB Peripheral Communications Device Class Driver (PCDC) 制限事項 CPD には、以下の制限事項があります。 CTS/RTS 制御ができないため、ターミナルソフトのフロー制御は"none"設定としてください。 Break 信号出力処理は実装していません。 RTS/DTR 制御処理は実装していません。 SetLineCoding データ端末の速度で対応する速度は以下の設定とします。 1200bps, 2400bps, 4800bps, 9600bps, 19200bps, 38400bps, 57600bps,115200bps 5. SetLineCoding ストップビット 1.5 Stop bits は非サポートとします。 6. SetLineCoding データビットは 7Data bits,8Data bits をサポートします。 1. 2. 3. 4. R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 61 of 62 Renesas USB MCU and USB ASSP USB Peripheral Communications Device Class Driver (PCDC) ホームページとサポート窓口 ルネサス エレクトロニクスホームページ http://japan.renesas.com/ お問合せ先 http://japan.renesas.com/inquiry すべての商標および登録商標は、それぞれの所有者に帰属します。 R01AN0273JJ0210 Rev.2.10 2013.4.1 Page 62 of 62 改訂記録 Rev. 1.00 1.10 発行日 2011.03.22 2011.08.10 ページ — 表紙,他 4 29 50 2.00 2.01 2.10 2012.7.1 2013.2.1 2013.4.1 — — — 改訂内容 ポイント 初版発行 動作確認デバイスに RX630、R8A66597 の追加 上記追加に伴い、RX630 に関する内容、R8A66597(Hi-Speed USB)に関する内容を追加 2.2 ファイル一覧のシリアルポートドライバのファイル削除 5.ペリフェラル用 CDC サンプルアプリケーション(APL)のアプ リケーション仕様変更 ・SW1 使用禁止 ・SW 押下表記を機能スイッチ表記に変更 6.コミュニケーションポートドライバ(CPD)の関数名、定義値の 変更 ・”R_usb_ComPort”、”usb_ComPort”を”USB_cpu_Sci”に変更 ・”USB_PCDC_”を”USB_SCI”に変更 ファームウエアアップデートによるドキュメントの改訂 “1.5 本書の読み方”を追加、その他ケアレスミスの修正 V.2.10 用 First Release 動作確認デバイスに RX63T, R8A66593 を追加。この追加に伴 いこれらのデバイスに関する内容を追加 A-1 製品ご使用上の注意事項 ここでは、マイコン製品全体に適用する「使用上の注意事項」について説明します。個別の使用上の注意 事項については、本ドキュメントおよびテクニカルアップデートを参照してください。 1. 2. 3. 4. 5. 未使用端子の処理 【注意】未使用端子は、本文の「未使用端子の処理」に従って処理してください。 CMOS 製品の入力端子のインピーダンスは、一般に、ハイインピーダンスとなっています。未使用 端子を開放状態で動作させると、誘導現象により、LSI 周辺のノイズが印加され、LSI 内部で貫通電 流が流れたり、入力信号と認識されて誤動作を起こす恐れがあります。未使用端子は、本文「未使用 端子の処理」で説明する指示に従い処理してください。 電源投入時の処置 【注意】電源投入時は,製品の状態は不定です。 電源投入時には、LSI の内部回路の状態は不確定であり、レジスタの設定や各端子の状態は不定で す。 外部リセット端子でリセットする製品の場合、電源投入からリセットが有効になるまでの期間、端子 の状態は保証できません。 同様に、内蔵パワーオンリセット機能を使用してリセットする製品の場合、電源投入からリセットの かかる一定電圧に達するまでの期間、端子の状態は保証できません。 リザーブアドレス(予約領域)のアクセス禁止 【注意】リザーブアドレス(予約領域)のアクセスを禁止します。 アドレス領域には、将来の機能拡張用に割り付けられているリザーブアドレス(予約領域)がありま す。これらのアドレスをアクセスしたときの動作については、保証できませんので、アクセスしない ようにしてください。 クロックについて 【注意】リセット時は、クロックが安定した後、リセットを解除してください。 プログラム実行中のクロック切り替え時は、切り替え先クロックが安定した後に切り替えてくださ い。 リセット時、外部発振子(または外部発振回路)を用いたクロックで動作を開始するシステムでは、 クロックが十分安定した後、リセットを解除してください。また、プログラムの途中で外部発振子 (または外部発振回路)を用いたクロックに切り替える場合は、切り替え先のクロックが十分安定し てから切り替えてください。 製品間の相違について 【注意】型名の異なる製品に変更する場合は、製品型名ごとにシステム評価試験を実施してくださ い。 同じグループのマイコンでも型名が違うと、内部 ROM、レイアウトパターンの相違などにより、電 気的特性の範囲で、特性値、動作マージン、ノイズ耐量、ノイズ輻射量などが異なる場合がありま す。型名が違う製品に変更する場合は、個々の製品ごとにシステム評価試験を実施してください。 ご注意書き 1. 本資料に記載された回路、ソフトウェアおよびこれらに関連する情報は、半導体製品の動作例、応用例を説明するものです。お客様の機器・システムの設計におい て、回路、ソフトウェアおよびこれらに関連する情報を使用する場合には、お客様の責任において行ってください。これらの使用に起因して、お客様または第三 者に生じた損害に関し、当社は、一切その責任を負いません。 2. 本資料に記載されている情報は、正確を期すため慎重に作成したものですが、誤りがないことを保証するものではありません。万一、本資料に記載されている情報 の誤りに起因する損害がお客様に生じた場合においても、当社は、一切その責任を負いません。 3. 本資料に記載された製品デ-タ、図、表、プログラム、アルゴリズム、応用回路例等の情報の使用に起因して発生した第三者の特許権、著作権その他の知的財産権 に対する侵害に関し、当社は、何らの責任を負うものではありません。当社は、本資料に基づき当社または第三者の特許権、著作権その他の知的財産権を何ら許 諾するものではありません。 4. 当社製品を改造、改変、複製等しないでください。かかる改造、改変、複製等により生じた損害に関し、当社は、一切その責任を負いません。 5. 当社は、当社製品の品質水準を「標準水準」および「高品質水準」に分類しており、 各品質水準は、以下に示す用途に製品が使用されることを意図しております。 標準水準: コンピュータ、OA機器、通信機器、計測機器、AV機器、 家電、工作機械、パーソナル機器、産業用ロボット等 高品質水準:輸送機器(自動車、電車、船舶等)、交通用信号機器、 防災・防犯装置、各種安全装置等 当社製品は、直接生命・身体に危害を及ぼす可能性のある機器・システム(生命維持装置、人体に埋め込み使用するもの等)、もしくは多大な物的損害を発生さ せるおそれのある機器・システム(原子力制御システム、軍事機器等)に使用されることを意図しておらず、使用することはできません。 たとえ、意図しない用 途に当社製品を使用したことによりお客様または第三者に損害が生じても、当社は一切その責任を負いません。なお、ご不明点がある場合は、当社営業にお問い 合わせください。 6. 当社製品をご使用の際は、当社が指定する最大定格、動作電源電圧範囲、放熱特性、実装条件その他の保証範囲内でご使用ください。当社保証範囲を超えて当社製 品をご使用された場合の故障および事故につきましては、当社は、一切その責任を負いません。 7. 当社は、当社製品の品質および信頼性の向上に努めていますが、半導体製品はある確率で故障が発生したり、使用条件によっては誤動作したりする場合がありま す。また、当社製品は耐放射線設計については行っておりません。当社製品の故障または誤動作が生じた場合も、人身事故、火災事故、社会的損害等を生じさせ ないよう、お客様の責任において、冗長設計、延焼対策設計、誤動作防止設計等の安全設計およびエージング処理等、お客様の機器・システムとしての出荷保証 を行ってください。特に、マイコンソフトウェアは、単独での検証は困難なため、お客様の機器・システムとしての安全検証をお客様の責任で行ってください。 8. 当社製品の環境適合性等の詳細につきましては、製品個別に必ず当社営業窓口までお問合せください。ご使用に際しては、特定の物質の含有・使用を規制する RoHS指令等、適用される環境関連法令を十分調査のうえ、かかる法令に適合するようご使用ください。お客様がかかる法令を遵守しないことにより生じた損害に 関して、当社は、一切その責任を負いません。 9. 本資料に記載されている当社製品および技術を国内外の法令および規則により製造・使用・販売を禁止されている機器・システムに使用することはできません。ま た、当社製品および技術を大量破壊兵器の開発等の目的、軍事利用の目的その他軍事用途に使用しないでください。当社製品または技術を輸出する場合は、「外 国為替及び外国貿易法」その他輸出関連法令を遵守し、かかる法令の定めるところにより必要な手続を行ってください。 10. お客様の転売等により、本ご注意書き記載の諸条件に抵触して当社製品が使用され、その使用から損害が生じた場合、当社は何らの責任も負わず、お客様にてご負 担して頂きますのでご了承ください。 11. 本資料の全部または一部を当社の文書による事前の承諾を得ることなく転載または複製することを禁じます。 注1. 本資料において使用されている「当社」とは、ルネサスエレクトロニクス株式会社およびルネサスエレクトロニクス株式会社がその総株主の議決権の過半数 を直接または間接に保有する会社をいいます。 注2. 本資料において使用されている「当社製品」とは、注1において定義された当社の開発、製造製品をいいます。 http://www.renesas.com ■営業お問合せ窓口 ※営業お問合せ窓口の住所・電話番号は変更になることがあります。最新情報につきましては、弊社ホームページをご覧ください。 ルネサス エレクトロニクス販売株式会社 〒100-0004 千代田区大手町 2-6-2 (日本ビル) (03)5201-5307 ■技術的なお問合せおよび資料のご請求は下記へどうぞ。 総合お問合せ窓口:http://japan.renesas.com/contact/ © 2013 Renesas Electronics Corporation. All rights reserved. Colophon 2.0
© Copyright 2024 ExpyDoc