忘備録-備忘録

技術的な備忘録

RX62NのUSB機能を使う その2

2016-01-28 17:39:01 | RX62N
前回「RX62NのUSB機能を使う」でRX62NのUSB機能を利用してCDCデバイスでパソコンと通信するプログラムを紹介しましたが、パソコン側からうまく認識されないことがあるようです。ルネサスエレクトロニクス社のサンプルを見ていたら「Renesas USB MCU USB Peripheral Communication Device Class Driver(PCDC)」を見つけました。とりあえず手持ちのe2studioに読み込み実行しようとしましたが、E1デバッガ経由で実行することができませんでした。
プロジェクトを新たに作成し、ソースコードをコピーし、一部手直ししたら動作しました。

修正したファイル

demo_src\r_usb_pcdc_descriptor.c
  1. /******************************************************************************
  2. User define macro definitions
  3. ******************************************************************************/
  4. /* bcdUSB */
  5. #define USB_BCDNUM (0x0200u)
  6. /* Release Number */
  7. #define USB_RELEASE (0x0200u)
  8. /* DCP max packet size */
  9. #define USB_DCPMAXP (64u)
  10. /* Configuration number */
  11. #define USB_CONFIGNUM (1u)
  12. /* Vendor ID */
  13. #define USB_VENDORID 0x045B
  14. /* Product ID */
  15. #define USB_PRODUCTID 0x2014
ベンダIDとプロダクトIDを手直しします。

r_config\r_bsp_config.h
使用しているMPUに合わせて変更(コメント通りに変更する)

RXマイコン基板(RX62N) | Renesas MCU Software Libraryの仮想COMポートファームウェアを試す 」にも書かれています。

手直ししたプロジェクト

改造しやすいように手直ししました。
USB機能を動作させるためには、一定間隔で次のプログラムを実行する必要があります。
  1.         usb_cdc_driver(); /* USB Driver(Peripheral CDC) */
  2.         switch( cdc_dev_info.state ) /* Check application state */
  3.         {
  4.         case STATE_DATA_TRANSFER: /* Data transfer state */
  5.             lcd_update = cdc_data_transfer();
  6.         break;
  7.         case STATE_ATTACH: /* Wait Connect(USB Configured) state */
  8.             lcd_update = cdc_connect_wait();
  9.         break;
  10.         case STATE_DETACH:
  11.             cdc_detach_device(); /* Detach process */
  12.         break;
  13.         default:
  14.         break;
  15.         }

変更したプロジェクト

さらに、printf,scanfなどの標準入出力関数が使えるように変更しました。
一定間隔でusb_cdc_manage()関数を呼び出せば動作します。時間待ちの時にもこの関数を呼び出してください。

標準入出力が使えるプロジェクト

usb_cdc_manage()関数をタイマ割り込みで動かせば、プログラムが簡単にできると思い、プログラムを変更しました。タイマ割り込みで呼び出しても、問題なく動作しています。初期化のためinitUSB_cdc()関数を呼び出すだけで、パソコンとUSB通信することが可能です。

タイマ割り込みを利用したプロジェクト

Windows用デバイスドライバ
Windows用のデバイスドライバはルネサスエレクトロニクスの「RX62Nグループ、RX621グループ USBペリフェラルCDCによるフラッシュブートローダ」サンプル内に「CDC_Demo_Win7.inf」ファイルが入っています。ベンダIDとプロダクトIDをRX62Nのプログラムに合わせて書き換えます。

  1. ;--------------------------------------------------------
  2. ;    Renesas
  3. ;
  4. ;    Communication Device Class
  5. ;    Virtual Serial Port
  6. ;    
  7. ;    20/12/04
  8. ;--------------------------------------------------------
  9. [Version]
  10. Signature="$Windows NT$"
  11. Class=Ports
  12. ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
  13. Provider=%MANUFACTURER%
  14. LayoutFile=layout.inf
  15. ;CatalogFile=%FILENAME%.cat
  16. DriverVer= 3/10/2010,1.1.2600.0
  17. [Manufacturer]
  18. %MANUFACTURER%=DeviceList,NTamd64
  19. [DestinationDirs]
  20. DefaultDestDir=12
  21. ;--------------------------------------------------------
  22. ; Windows XP Support
  23. ;--------------------------------------------------------
  24. [DriverInstall.nt]
  25. include=mdmcpq.inf
  26. CopyFiles=DriverCopyFiles.nt
  27. AddReg=DriverInstall.nt.AddReg
  28. [DriverCopyFiles.nt]
  29. usbser.sys,,,0x20
  30. [DriverInstall.nt.AddReg]
  31. HKR,,DevLoader,,*ntkern
  32. HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
  33. HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
  34. [DriverInstall.nt.Services]
  35. AddService=usbser, 0x00000002, DriverService.nt
  36. [DriverService.nt]
  37. DisplayName=%SERVICE%
  38. ServiceType=1
  39. StartType=3
  40. ErrorControl=1
  41. ServiceBinary=%12%\%DRIVERFILENAME%.sys
  42. ;--------------------------------------------------------
  43. ; Windows Support
  44. ;--------------------------------------------------------
  45. [DriverInstall.NTamd64]
  46. include=mdmcpq.inf
  47. CopyFiles=DriverCopyFiles.NTamd64
  48. AddReg=DriverInstall.NTamd64.AddReg
  49. [DriverCopyFiles.NTamd64]
  50. %DRIVERFILENAME%.sys,,,0x20
  51. [DriverInstall.NTamd64.AddReg]
  52. HKR,,DevLoader,,*ntkern
  53. HKR,,NTMPDriver,,%DRIVERFILENAME%.sys
  54. HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
  55. [DriverInstall.NTamd64.Services]
  56. AddService=usbser, 0x00000002, DriverService.NTamd64
  57. [DriverService.NTamd64]
  58. DisplayName=%SERVICE%
  59. ServiceType=1
  60. StartType=3
  61. ErrorControl=1
  62. ServiceBinary=%12%\%DRIVERFILENAME%.sys
  63. ;**********************************************
  64. ; Please change to your company's information *
  65. ;**********************************************
  66. [SourceDisksFiles]
  67. [SourceDisksNames]
  68. [DeviceList]
  69. %DESCRIPTION%=DriverInstall, USB\VID_045B&PID_2014
  70. [DeviceList.NTamd64]
  71. %DESCRIPTION%=DriverInstall, USB\VID_045B&PID_2014
  72. ;**********************************************
  73. ; Please change to your company's information *
  74. ;**********************************************
  75. [Strings]
  76. FILENAME="Renesas_cdc"
  77. DRIVERFILENAME ="usbser"
  78. MANUFACTURER="Renesas"
  79. INSTDISK="USB2UART"
  80. DESCRIPTION="CDC USB Demonstration"
  81. SERVICE="CDC USB Demonstration Driver"


最新の画像もっと見る

コメントを投稿