AnsweredAssumed Answered

MQX4.1: USB CDC stack memory allocation failure

Question asked by Hui Shao on Sep 25, 2014
Latest reply on Sep 30, 2014 by Hui Shao



Does anyone have ever enabled USB CDC device on a MK20DX128VFM5 with 16KB RAM only? I run into memory allocation failure in MAX 4.1 k20d50m BSP usb\device\source\device\dev_main.c:


USB_STATUS _usb_device_init
      /* [IN] the USB device controller to initialize */
      struct usb_dev_if_struct  *usb_if,

      /* [OUT] the USB_USB_dev_initialize state structure */
      _usb_device_handle   *handle,

      /* [IN] number of endpoints to initialize */
      _mqx_uint                 endpoints
{ /* Body */


   /* Initialize the USB interface. */

   if (dev_if->DEV_PREINIT != NULL)


      error = dev_if->DEV_PREINIT((_usb_device_handle *) &usb_dev_ptr);





The function call above ends up with a NULL usb_dev_ptr due to a ~3KB memory allocation failure. Since this model of K20 has only 16KB memory, I just want to know if it is feasible to bring up USB CDC stack on this chip.






Added some more details.

The exact failure place is in  usb\device\source\device\khci\khci_dev_main.c, where 2432 bytes of memory is allocated:


USB_STATUS _usb_dci_usbfs_preinit
    /* [IN] the USB device handle */
    _usb_device_handle  *handle_ptr
    KHCI_XD_STRUCT_PTR            xd_ptr;
    SCRATCH_STRUCT_PTR            temp_scratch_ptr;
    _mqx_uint j;

    if (NULL != usb_dev_ptr) {
        /* Allocate MAX_XDS_FOR_TR_CALLS */
        usb_dev_ptr->G.XD_BASE = (XD_STRUCT_PTR) USB_mem_alloc_zero(sizeof(KHCI_XD_STRUCT) * MAX_XDS_FOR_TR_CALLS);

        if (usb_dev_ptr->G.XD_BASE == NULL)
            #if DEV_DEBUG
            printf("2 memalloc failed in _usb_device_init\n");