Tremendos dolores de cabeza que me esta dando con esto.
Estoy intentando usar el AN1212 en un pic24FJ, primero estuve usando el pic24fj32gb002 y no funcionaba, lo pasé a un pic24fj64gb110 e igual.
La situacion es la siguiente, he probado el code example en el ethernet starter kit y va bien, de lujo diria yo, ahora cambio de micro y placa casera y ya no funciona, el reporte que me da es el siguiente:
***** Microchip Explorer USB Keyboard Host Demo *****
HOST: Initializing DETACHED state.
[>HOST: Starting settling delay.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~HOST: Resetting the device.
HOST: Low Speed!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~HOST: Reset complete.
~~~~~~~~~~~HOST: Reset complete.
HOST: Getting Device Descriptor size.
!!!HOST: Getting device descriptor.
!!!!!HOST: Validating VID and PID.
HOST: Device not yet validated
HOST: Setting device address.
!!HOST: Getting Config Descriptor size.
!!!HOST: Getting Config Descriptor.
!!!!!!!!!!HOST: Client driver found.
HOST: Client driver found.
HOST: Parse Descriptor success
HOST: Determine OTG capability.
HOST: ...No OTG.
HOST: Set configuration.
!!HOST: Initializing client drivers...
HOST: Scanning interfaces.
HID: USBHostHIDInitialize(0x00)
HID: Checking descriptor 1 ...
HID: Checking interface...
HID: Checking interface...
HID: Valid device info
HID: Checking interface...
HID: Valid device info
HID: Interrupt endpoint IN: 82 Interrupt endpoint OUT: 00
HID: USBHostHIDInitialize(0x00)
!!!!!!!!!!!HID: Memory for Report Descriptor: 34
HID-HOST: ... 2nd Parse
!!!!!!!!!!!!!!!HID: Memory for Report Descriptor: B4
HID Error Reported : 01
Haciendo seguimiento al codigo, en el usb_host.c, hay la función usb_task() y alli va todo vien, la situación creo que va por el HID.
Buscando en los archivos veo que el error 01 viene desde el usb_host_hid_parser.c, _USBHostHID_Parse_Report.
y segun el reporte el error en usb_commom.h es USB_INVALID_STATE.
Y pues alli me quedé, el teclado que estoy usando funciona correctamente, ya lo probe con la PC y con el ethernet starter kit.
El ckto que estoy usando es el que se indica en el USB PICTAIL sin usar el divisor de voltaje a entrada analogica, no hay reporte de sobrecorriente asi que no creo que ese sea el error, adjunto imagen. Segun veo en el archivo del AN1212 se puede usar en la EXPLORER16 asi que asumo que el ckto está bien, ademas en la datasheet del micro indica la misma conexion.
Lo particular es que tengo conectado cristal de 8Mhz segun el EXPLORER16, pero asi ni el uart2 debug funciona bien, envia caracteres pero no coinciden en tiempo con los baudios seteados 57600 y muestra basurita, mas si uso el oscilador interno si funciona el uart2 debug, talvez este por alli el problema y que el modulo usb no este a buena frecuencia, les dejo los fuses que estoy usando:
Fuses que no funciona bien:
_CONFIG2(FNOSC_PRIPLL & POSCMOD_HS & PLL_96MHZ_ON & PLLDIV_DIV2) // Primary HS OSC with PLL, USBPLL /2
_CONFIG1(JTAGEN_OFF & FWDTEN_OFF & ICS_PGx2) // JTAG off, watchdog timer off
Fuses que va bien:
_CONFIG2(FNOSC_FRCPLL & POSCMOD_NONE & PLL_96MHZ_ON & PLLDIV_NODIV) // Primary HS OSC with PLL, USBPLL /2
_CONFIG1(JTAGEN_OFF & FWDTEN_OFF & ICS_PGx2) // JTAG off, watchdog timer off
Nótese que cuando saco el conector usb del teclado el debug me indica USB DETACHED y cuando lo conecto hace nuevamente la evaluacion del dispositivo hid.
Otra: al principio use el switch del starter kit sin buenos resultados de alli cambie al ckto del usb pictail.
Alguien me da una mano.
saludos.