前回「RX62NのUSB機能を使う」でRX62NのUSB機能を利用してCDCデバイスでパソコンと通信するプログラムを紹介しましたが、パソコン側からうまく認識されないことがあるようです。ルネサスエレクトロニクス社のサンプルを見ていたら「Renesas USB MCU USB Peripheral Communication Device Class Driver(PCDC)」を見つけました。とりあえず手持ちのe2studioに読み込み実行しようとしましたが、E1デバッガ経由で実行することができませんでした。
プロジェクトを新たに作成し、ソースコードをコピーし、一部手直ししたら動作しました。
修正したファイル
demo_src\r_usb_pcdc_descriptor.c
r_config\r_bsp_config.h
使用しているMPUに合わせて変更(コメント通りに変更する)
「RXマイコン基板(RX62N) | Renesas MCU Software Libraryの仮想COMポートファームウェアを試す 」にも書かれています。
手直ししたプロジェクト
改造しやすいように手直ししました。
USB機能を動作させるためには、一定間隔で次のプログラムを実行する必要があります。
変更したプロジェクト
さらに、printf,scanfなどの標準入出力関数が使えるように変更しました。
一定間隔でusb_cdc_manage()関数を呼び出せば動作します。時間待ちの時にもこの関数を呼び出してください。
標準入出力が使えるプロジェクト
usb_cdc_manage()関数をタイマ割り込みで動かせば、プログラムが簡単にできると思い、プログラムを変更しました。タイマ割り込みで呼び出しても、問題なく動作しています。初期化のためinitUSB_cdc()関数を呼び出すだけで、パソコンとUSB通信することが可能です。
タイマ割り込みを利用したプロジェクト
Windows用デバイスドライバ
Windows用のデバイスドライバはルネサスエレクトロニクスの「RX62Nグループ、RX621グループ USBペリフェラルCDCによるフラッシュブートローダ」サンプル内に「CDC_Demo_Win7.inf」ファイルが入っています。ベンダIDとプロダクトIDをRX62Nのプログラムに合わせて書き換えます。
プロジェクトを新たに作成し、ソースコードをコピーし、一部手直ししたら動作しました。
修正したファイル
demo_src\r_usb_pcdc_descriptor.c
- /******************************************************************************
- User define macro definitions
- ******************************************************************************/
- /* bcdUSB */
- #define USB_BCDNUM (0x0200u)
- /* Release Number */
- #define USB_RELEASE (0x0200u)
- /* DCP max packet size */
- #define USB_DCPMAXP (64u)
- /* Configuration number */
- #define USB_CONFIGNUM (1u)
- /* Vendor ID */
- #define USB_VENDORID 0x045B
- /* Product ID */
- #define USB_PRODUCTID 0x2014
ベンダIDとプロダクトIDを手直しします。r_config\r_bsp_config.h
使用しているMPUに合わせて変更(コメント通りに変更する)
「RXマイコン基板(RX62N) | Renesas MCU Software Libraryの仮想COMポートファームウェアを試す 」にも書かれています。
手直ししたプロジェクト
改造しやすいように手直ししました。
USB機能を動作させるためには、一定間隔で次のプログラムを実行する必要があります。
- usb_cdc_driver(); /* USB Driver(Peripheral CDC) */
- switch( cdc_dev_info.state ) /* Check application state */
- {
- case STATE_DATA_TRANSFER: /* Data transfer state */
- lcd_update = cdc_data_transfer();
- break;
- case STATE_ATTACH: /* Wait Connect(USB Configured) state */
- lcd_update = cdc_connect_wait();
- break;
- case STATE_DETACH:
- cdc_detach_device(); /* Detach process */
- break;
- default:
- break;
- }
変更したプロジェクト
さらに、printf,scanfなどの標準入出力関数が使えるように変更しました。
一定間隔でusb_cdc_manage()関数を呼び出せば動作します。時間待ちの時にもこの関数を呼び出してください。
標準入出力が使えるプロジェクト
usb_cdc_manage()関数をタイマ割り込みで動かせば、プログラムが簡単にできると思い、プログラムを変更しました。タイマ割り込みで呼び出しても、問題なく動作しています。初期化のためinitUSB_cdc()関数を呼び出すだけで、パソコンとUSB通信することが可能です。
タイマ割り込みを利用したプロジェクト
Windows用デバイスドライバ
Windows用のデバイスドライバはルネサスエレクトロニクスの「RX62Nグループ、RX621グループ USBペリフェラルCDCによるフラッシュブートローダ」サンプル内に「CDC_Demo_Win7.inf」ファイルが入っています。ベンダIDとプロダクトIDをRX62Nのプログラムに合わせて書き換えます。
- ;--------------------------------------------------------
- ; Renesas
- ;
- ; Communication Device Class
- ; Virtual Serial Port
- ;
- ; 20/12/04
- ;--------------------------------------------------------
- [Version]
- Signature="$Windows NT$"
- Class=Ports
- ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
- Provider=%MANUFACTURER%
- LayoutFile=layout.inf
- ;CatalogFile=%FILENAME%.cat
- DriverVer= 3/10/2010,1.1.2600.0
- [Manufacturer]
- %MANUFACTURER%=DeviceList,NTamd64
- [DestinationDirs]
- DefaultDestDir=12
- ;--------------------------------------------------------
- ; Windows XP Support
- ;--------------------------------------------------------
- [DriverInstall.nt]
- include=mdmcpq.inf
- CopyFiles=DriverCopyFiles.nt
- AddReg=DriverInstall.nt.AddReg
- [DriverCopyFiles.nt]
- usbser.sys,,,0x20
- [DriverInstall.nt.AddReg]
- HKR,,DevLoader,,*ntkern
- HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
- HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
- [DriverInstall.nt.Services]
- AddService=usbser, 0x00000002, DriverService.nt
- [DriverService.nt]
- DisplayName=%SERVICE%
- ServiceType=1
- StartType=3
- ErrorControl=1
- ServiceBinary=%12%\%DRIVERFILENAME%.sys
- ;--------------------------------------------------------
- ; Windows Support
- ;--------------------------------------------------------
- [DriverInstall.NTamd64]
- include=mdmcpq.inf
- CopyFiles=DriverCopyFiles.NTamd64
- AddReg=DriverInstall.NTamd64.AddReg
- [DriverCopyFiles.NTamd64]
- %DRIVERFILENAME%.sys,,,0x20
- [DriverInstall.NTamd64.AddReg]
- HKR,,DevLoader,,*ntkern
- HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
- HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
- [DriverInstall.NTamd64.Services]
- AddService=usbser, 0x00000002, DriverService.NTamd64
- [DriverService.NTamd64]
- DisplayName=%SERVICE%
- ServiceType=1
- StartType=3
- ErrorControl=1
- ServiceBinary=%12%\%DRIVERFILENAME%.sys
- ;**********************************************
- ; Please change to your company's information *
- ;**********************************************
- [SourceDisksFiles]
- [SourceDisksNames]
- [DeviceList]
- %DESCRIPTION%=DriverInstall, USB\VID_045B&PID_2014
- [DeviceList.NTamd64]
- %DESCRIPTION%=DriverInstall, USB\VID_045B&PID_2014
- ;**********************************************
- ; Please change to your company's information *
- ;**********************************************
- [Strings]
- FILENAME="Renesas_cdc"
- DRIVERFILENAME ="usbser"
- MANUFACTURER="Renesas"
- INSTDISK="USB2UART"
- DESCRIPTION="CDC USB Demonstration"
- SERVICE="CDC USB Demonstration Driver"