Estoy intentando corregir un error Este dispositivo no se puede iniciar. (Código 10) con un dispositivo USB HID que estoy construyendo. Aquí hay algunos detalles sobre mi proyecto:
IDE : MPLABX en Mac OS X
MCU : PIC32MX250F128B
Programador : Microstick II
Repositorio Git : enlace
Por favor, consulte el código de arriba, no es grande, estoy tratando de no inundar la pregunta con el código fuente;)
EldispositivoseenumeraypuedoverqueWindows7yMacOSXpuedenidentificareldispositivo.
Sin embargo, en Windows, aparece un error: Este dispositivo no se puede iniciar. (Código 10)
Heestadotratandodearreglarestoporuntiempo.Despuésderehacerelcableadodemiplacalasemanapasadaparaintentarmejorarlacalidaddelaseñal,hevenido,intentandomodificarmicódigoparaquelascosasfuncionen.
EstoyusandoelmodoUSB_INTERRUPTymidescriptortieneelsiguienteaspecto:
ROMUSB_DEVICE_DESCRIPTORdevice_dsc={0x12,//DescriptorsizeinbytesUSB_DESCRIPTOR_DEVICE,//Devicedescriptortype0x0200,//USBspecreleasenumberinBCDformat0x00,//Classcode0x00,//Subclasscode0x00,//ProtocolcodeUSB_EP0_BUFF_SIZE,//MaxpacketsizeforEP0MY_VID,//VendorIDMY_PID,//ProductID0x0001,//DevicereleasenumberinBCDformat0x01,//Manufacturerstringindex0x02,//Productstringindex0x00,//Deviceserialnumberstringindex0x01//Numberofpossibleconfigurations};
yeldiscriptordeinformesHID,(construidoconlaherramientaHIDdeusb.com):
ROMstruct{BYTEreport[HID_RPT01_SIZE];}hid_rpt01={{0x05,0x01,//USAGE_PAGE(GenericDesktop)0x09,0x04,//USAGE(Joystick)0xa1,0x01,//COLLECTION(Application)0x09,0x04,//USAGE(Joystick)0xa1,0x00,//COLLECTION(Physical)0x05,0x09,//USAGE_PAGE(Button)0x19,0x01,//USAGE_MINIMUM(Button1)0x29,0x08,//USAGE_MAXIMUM(Button8)0x15,0x00,//LOGICAL_MINIMUM(0)0x25,0x01,//LOGICAL_MAXIMUM(1)0x95,0x08,//REPORT_COUNT(8)0x75,0x01,//REPORT_SIZE(1)0x81,0x02,//INPUT(Data,Var,Abs)0xc0,//END_COLLECTION0xc0//END_COLLECTION}};
LoanteriorrepresentaunJoystickconunbotón,asíqueestoytratandodecomenzarconpoco.MiinformeHIDseveasí:
typedefunion_INPUT_CONTROLS_TYPEDEF{BYTEbuttons;}INPUT_CONTROLS;INPUT_CONTROLSjoystick_inputINPUT_CONTROLS_ADDRESS_TAG;BYTEhid_report[8]HID_REPORT_ADDRESS_TAG;
Tambiénheestablecidoeltamañodeldescriptoren28bytesenusb_config.h:
#defineHID_RPT01_SIZE28
Estoescasilomáslejosquehevenidoconesteproyecto,peroestoycaraacaraconunapareddeladrillos,quenosemoverá.Cualquierayudaseríamuyapreciada.Elcontenidocompletode
Estoy probando mi dispositivo tanto en Mac como en Windows 7 a través de VMWare. El Microstick II no parece tener el mejor depurador, por lo que la depuración es limitada.
Lo que he hecho es encender un LED en el Pin 2 (RA0) cuando USBDeviceState == CONFIGURED_STATE , y todo lo que sé es que el dispositivo está en CONFIGURED_STATE , ya que el LED se enciende unos momentos después de enchufar el dispositivo. También logré obtener lo siguiente de la versión de prueba de USBLizer:
NopuedoestablecerpuntosdeinterrupciónenMPLABX,ydeteneralaMCUparainvestigarelproblema,debidoalosrequisitosdetemporizacióndelrelojUSB,porloquerealmentenopuedosolucionarelproblemaypuedosolucionarlo.
Paraloquevale,heestablecidounpuntodeinterrupciónparaelcontroladorEVENT_BUS_ERRORenmain.c,yseestablecenlossiguientesbitsdelosregistrosU1EIR:
- DFN8EF-Bitdemarcadeerrordetamañodecampodedatos
- CRC5EF_EOFE-BitdemarcadeerrordehostCRC5
- PIDEF:bitdeindicadordefalladeverificaciónPID
Estoy recibiendo estos errores porque entré en el modo de depuración y el chip no está contento, y estos no son los errores reales en absoluto, y si estos errores son, de hecho, indicaciones correctas de mi problema, ¿qué hace? ¿media?
Si obtengo un bit de marca de error DFN8EF - Tamaño del campo de datos, ¿cómo puedo saber qué campo de datos tiene el tamaño incorrecto? Es probable que sea mi descriptor, o informe HID, pero no puedo encontrar la falla.