USB host question

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

USB host question

1,607 Views
elinaiman
Contributor I

I imported the "frdmk64f_host_hid_generic_freertos" example. When I connect a barcode reader I get the error

"enumeration failed". Can someone help to solve this. 

I noticed that the sysmpu driver is loaded. Do I have to disable the MPU to get this to work?

Thanks

Labels (1)
Tags (2)
0 Kudos
7 Replies

1,485 Views
elinaiman
Contributor I

Yes, I have J21 shorted.

0 Kudos

1,485 Views
Alexis_A
NXP TechSupport
NXP TechSupport

Hello Eli,

There are different reasons why this state can be called without being enumerated, one of these is if the descriptor length is to wide, the buffer set by default is 100 and if it's wider this state will be called. Another is if the device is detached in the enumeration process.

Is any of these two present? 

Best Regards,

Alexis Andalon

0 Kudos

1,485 Views
elinaiman
Contributor I

Alexis, thanks for the TreeViewer.

In the k64f, the software never gets to "case kUSB_HostHidRunSetIdleDone:"

It goes through "case kUSB_HostHidRunIdle:" 7 times and then the enumeration failed error shows up.

0 Kudos

1,485 Views
Alexis_A
NXP TechSupport
NXP TechSupport

Hello Eli,

If you're using the FRDM-K64, are you shorting the jumper J21? In case you're using the host functionality this jumper is needed.

Best Regards,

Alexis Andalon

0 Kudos

1,485 Views
elinaiman
Contributor I

When I connect the barcode reader to my PC it enumerates and works fine. Using the Device Manager, it says that it is an HID device.

How do I find out if the descriptor has additional information that the host (in the K64F) can't handle. It would be nice if the host can give some clues as to why the enumeration failed.

0 Kudos

1,485 Views
Alexis_A
NXP TechSupport
NXP TechSupport

Hello Eli,

What you could do is to check in the section where the descriptor is received and compare it with the one received by the PC.

In the following section you can check where the descriptor is received:

void USB_HostHidGenericTask(void *param)
{
 ...

        case kUSB_HostHidRunSetIdleDone: /* 3. hid get report descriptor */
            /* get report descriptor's length */
            hidDescriptor = NULL;
            descriptor    = (uint8_t *)((usb_host_interface_t *)genericInstance->interfaceHandle)->interfaceExtension;
            endPosition   = (uint32_t)descriptor +
 ...
}

The following app can help you to check the descriptor received by the PC.

Download USB Device Tree Viewer 3.4.0 

Best Regards,

Alexis Andalon

0 Kudos

1,485 Views
Alexis_A
NXP TechSupport
NXP TechSupport

Hello Eli,

I don't think the reason for the bad enumeration is the SYSMPU. Are you sure the class that the barcode is using is the HID class and there isn't any need for the Host to implement extra steps?

The enumeration process should fail if in the descriptor there's additional information that the host can't process.

Best Regards,

Alexis Andalon

0 Kudos