He probado la funcionalidad USB con los controladores PIC18F26J50 y fue exitosa. Cuando porté la misma configuración al controlador PIC18F46J53 (TQFP) pero usb no está enumerando. Después de algunos problemas básicos, descubrí que Vusb es 3.3V.
El código de demostración de Microchip para Usb también dio el mismo problema. Estamos utilizando la pila de Microchip y se probó con éxito en pic18f26j50 antes.
¿Cuál podría ser la posible causa de problemas?
Sí. Todos los pines vdd y vss están conectados. Hemos utilizado un cristal de 16 MHz y se supone que el usb funciona en la configuración de alta velocidad. Y Vusb está conectado externamente a vdd. Estos son los bits de configuración:
// CONFIG1L
#pragma config WDTEN = OFF // Watchdog Timer (Disabled - Controlled by SWDTEN bit)
#pragma config PLLDIV = 4 // PLL Prescaler Selection (Divide by 4 (16 MHz oscillator input))
#pragma config CFGPLLEN = ON // PLL Enable Configuration Bit (PLL Enabled)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset (Enabled)
#pragma config XINST = OFF // Extended Instruction Set (Disabled)
// CONFIG1H
#pragma config CPUDIV = OSC1 // CPU System Clock Postscaler (No CPU system clock divide)
#pragma config CP0 = OFF // Code Protect (Program memory is not code-protected)
// CONFIG2L
#pragma config OSC = HSPLL // Oscillator (HS+PLL, USB-HS+PLL)
#pragma config SOSCSEL = HIGH // T1OSC/SOSC Power Selection Bits (High Power T1OSC/SOSC circuit selected)
#pragma config CLKOEC = OFF // EC Clock Out Enable Bit (CLKO output disabled on the RA6 pin)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor (Disabled)
#pragma config IESO = OFF // Internal External Oscillator Switch Over Mode (Disabled)
// CONFIG2H
#pragma config WDTPS = 32768 // Watchdog Postscaler (1:32768)
// CONFIG3L
#pragma config DSWDTOSC = INTOSCREF // DSWDT Clock Select (DSWDT uses INTRC)
#pragma config RTCOSC = T1OSCREF // RTCC Clock Select (RTCC uses T1OSC/T1CKI)
#pragma config DSBOREN = OFF // Deep Sleep BOR (Disabled)
#pragma config DSWDTEN = OFF // Deep Sleep Watchdog Timer (Disabled)
#pragma config DSWDTPS = 8192 // Deep Sleep Watchdog Postscaler (1:2,147,483,648 (25.7 days))
// CONFIG3H
#pragma config IOL1WAY = OFF // IOLOCK One-Way Set Enable bit (The IOLOCK bit (PPSCON<0>) can be set once)
#pragma config ADCSEL = BIT12 // ADC 10 or 12 Bit Select (10 - Bit ADC Enabled)
#pragma config MSSP7B_EN = MSK7 // MSSP address masking (7 Bit address masking mode)
// CONFIG4L
#pragma config WPFP = PAGE_1 // Write/Erase Protect Page Start/End Location (Write Protect Program Flash Page 63)
#pragma config WPCFG = OFF // Write/Erase Protect Configuration Region (Configuration Words page not erase/write-protected)
// CONFIG4H
#pragma config WPDIS = OFF // Write Protect Disable bit (WPFP<6:0>/WPEND region ignored)
#pragma config WPEND = PAGE_0
Otros códigos, como el parpadeo del LED, se probaron con éxito en esta placa. Sin embargo, no hay voltaje en el pin D +, incluso después de habilitar la extracción interna. La tapa b / w Vusb y Vss no está más cerca del controlador. Es una PCB de fabricación propia. ¿Podría ser esa la razón?
Editar detalles : Último desarrollo Estas son las cosas que pasan en mi pcb. 1.Vusb muestra 2v. (En 26j50 muestra 3.3v equivalen a vdd) 2.D + muestra 0v como cuando configuramos el controlador en modo de velocidad completa.
Bueno, hicimos una verificación cruzada de todas las causas posibles, verificamos todas las mayúsculas b / w Vusb vss y vdd y aún no pudimos localizar el problema. Intentamos reemplazar el controlador y el problema persiste. Confío en que solo necesitamos voltaje en el pin D + para iniciar la enumeración ¿verdad? ¿O nos perdemos algo? ¿O debería manipular el descriptor del dispositivo desde la pila de Microchip?
Confío en que DIE dañino podría ser la última probabilidad de buscar.