• AVR Freaks

MLA USB device CDC Basic Demo for 18F2550

Author
Atsuhiro Kitagawa
New Member
  • Total Posts : 1
  • Reward points : 0
  • Joined: 2014/10/11 18:43:01
  • Location: 0
  • Status: offline
2014/10/11 19:28:17 (permalink)
0

MLA USB device CDC Basic Demo for 18F2550

Microchip Libraries for Applications v2014_07_22 ( v2013-12-20 や v2013-06-15 でも同じかもしれません)
 
PIC18F2550 にて試したところ、素直に動作しませんでした。
状況は以下のとおり。
  • USBデバイスとしては認識する。
  • dynamic_cdc_demo.exe で送信すると、2550側で受信している事は確認できる。
    データレングスも正常に取得できている。
    しかし、 cdc_data_rx や readBuffer の中は、固定で zero(0x00) が入っているだけ。
    かつ、 cdc_data_tx や writeBuffer に、値を設定して送信(2550からみて)しても、ホスト側でうまく受信できない。
PIC18F2455/2550/4455/4550 のデータシートを確認したところ、cdc_data_rx や cdc_data_tx は、USB RAM(0x400 - 0x7ff)上にないと動作しない模様。
ここで、ソースコードを確認すると、以下の記述があります。
#ifndef FIXED_ADDRESS_MEMORY
    #define IN_DATA_BUFFER_ADDRESS_TAG
    #define OUT_DATA_BUFFER_ADDRESS_TAG
    #define CONTROL_BUFFER_ADDRESS_TAG
#endif

/** V A R I A B L E S ********************************************************/
volatile unsigned char cdc_data_tx[CDC_DATA_IN_EP_SIZE] IN_DATA_BUFFER_ADDRESS_TAG;
volatile unsigned char cdc_data_rx[CDC_DATA_OUT_EP_SIZE] OUT_DATA_BUFFER_ADDRESS_TAG;

 
ビルドログを見ても、BANK0に配置されており、USB RAM上に定義されていませんでした。
 
よって、 system.h 内でこれらを定義してみるとうまく動作しました。
/* for usb_device_cdc.c */
/*** The USB endpoint has to be used to store the CDC buffers*/
#define FIXED_ADDRESS_MEMORY

#define IN_DATA_BUFFER_ADDRESS (USB_BDT_ADDRESS + 0x100)
#define OUT_DATA_BUFFER_ADDRESS (IN_DATA_BUFFER_ADDRESS + CDC_DATA_IN_EP_SIZE)
#define CONTROL_BUFFER_ADDRESS (OUT_DATA_BUFFER_ADDRESS + CDC_DATA_OUT_EP_SIZE)

#define IN_DATA_BUFFER_ADDRESS_TAG @IN_DATA_BUFFER_ADDRESS
#define OUT_DATA_BUFFER_ADDRESS_TAG @OUT_DATA_BUFFER_ADDRESS
#define CONTROL_BUFFER_ADDRESS_TAG @CONTROL_BUFFER_ADDRESS

#1

0 Replies Related Threads

    Jump to:
    © 2019 APG vNext Commercial Version 4.5