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
Yes, I have J21 shorted.
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
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.
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
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.
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
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