Este dispositivo no puede iniciarse. (Código 10) error en Windows 7

3

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 main.c está en mi repositorio GitHub

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.

    

2 respuestas

3

He logrado localizar el problema. Tenía que ver con mi descriptor de punto final. Utilicé una definición PS_IN y PS_OUT donde debería haber usado _PS_IN y _PS_OUT con un guión bajo.

Este curso no tuvo como resultado un error de compilación, ya que las cuatro definiciones son de hecho válidas, pero _PS_IN! = PS_IN etc.

    
respondido por el josef.van.niekerk
0

Tuve el mismo error con un PIC18.

El problema era la calidad del oscilador. El USB requiere una tolerancia ajustada en la frecuencia del oscilador. Estaba usando una cerámica para alimentar el PIC PLL y no era lo suficientemente estable.

En otro diseño, los problemas también se debieron a la XTAL, los límites de carga no fueron del valor correcto y la frecuencia fue de algunas ppm desactivada, lo que fue suficiente para que Windows lo detectara y se notificara como un dispositivo que no funcionaba correctamente.

Espero que esto ayude.

    
respondido por el Blup1980

Lea otras preguntas en las etiquetas