This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Atmel SAM3U does not retreive data via USB-CDC

Hello!

I have a board with atmel sam3u mcu. Unfortunately, I didn't find USB-CDC example for this mcu, so I ported example for MCB2300 using some USB code from USB-HID and USB-MSC examples which are available. USB and CDC initialization works fine, data sending works without problems as well. But I have problems receving data via virtual COM-port. When I try to send data from terminal application on my PC it just reports communication error (tried other terminal applications - some of them just freeze, some also give errors). I suppose the problem is here (usbuser.c):

/*
 *  USB Endpoint 2 Event Callback
 *   Called automatically on USB Endpoint 2 Event
 *    Parameter:       event
 */

void USB_EndPoint2 (U32 event) {

  switch (event) {
    case USB_EVT_OUT:
      CDC_BulkOut ();                /* data received from Host */
      break;
    case USB_EVT_IN:
      CDC_BulkIn ();                 /* data expected from Host */
      break;
  }
}

I set a breakpoint and it seems that USB_EVT_OUT event is never raised, so CDC_OutBufAvailChar reports 0 bytes in buffer and so on.

What can I check? Maybe some misconfiguration?

Thanks a lot!

  • Looks like you've assigned endpoint numbers same as MCB2300 example.
    The endpoint assignment is different on these two MCUs
    The SAM3U endpoints are single direction.

    MCB2300 CDC
      EP1 IN : interrupt IN
      EP2 IN : bulk IN
      EP2 OUT: bulk OUT
    
    SAM3U CDC
      EP1: interrupt IN
      EP2: bulk IN
      EP3: bulk OUT
    


    Fix the endpoint descriptors, on both of FS and HS configurations.

    Also, the callbacks are,

    void USB_EndPoint2 (U32 event) {
          CDC_BulkIn ();                 /* data expected from Host */
    }
    
    void USB_EndPoint3 (U32 event) {
          CDC_BulkOut ();                /* data received from Host */
    }
    

    And usbcfg header is,

    usbcfg_SAM3U.h
    
    #define USB_IF_NUM          1       // <--- 2  // two interfaces
    #define USB_EP_NUM          3       // <--- 4  // four EPs (EP0, 1, 2, 3)
    
    ...
    
    #define USB_EP_EVENT        0x0007  // <--- 0x000F // EP0, 1, 2, 3
    

    Tsuneo