Configuracion del Modulo USB en el PIC 18F4550

Enviado por Javi y clasificado en Electrónica

Escrito el en español con un tamaño de 36,41 KB

Características: 

-Tasa de transferencia: Puede ser de baja velocidad (1’5 Mb/s) o de alta velocidad (12Mb/s).

-Soporta Interrupciones. Cada vez que se produce una transmisión o recepción de datos en el bus, se genera una interrupción en el PIC ante la cual la rutina de atención debe responder gestionando todos los aspectos de bajo nivel de la especificación USB. De esta manera para la aplicación principal que ejecuta el microcontrolador el manejo del protocolo USB es transparente.

-Permite el uso de hasta 32 EndPoints (16 bidireccionales) pero normalmente solo utilizaremos 3 (endpoints 0, 1 y 2). Un endpoint es un buffer que almacena datos dentro del dispositivo (Típicamente es un registro). A su vez cada endpoint dispone de un identificador único que viene asignado de fábrica y una determinada orientación del flujo de datos (IN/OUT). Todos los dispositivos deben soportar el endpoint 0, que se usa para la configuración.

 -1-Kbyte Dual Access RAM. Los bancos 4 a 7 de la memoria de datos están mapeados a un puerto dual especial de RAM. Cuando el módulo USB está desactivado, los GPRs en estos bancos se utilizan como cualquier otro GPR en la memoria de datos. Cuando se permite el módulo USB, la memoria en éstos bancos se asigna como RAM de almacenamiento intermedio para las operaciones del USB. Esta área se comparte entre el núcleo del microcontrolador y el motor de la interfaz en serie (SIE) del USB y se utiliza para transferir datos directamente entre los dos.

-SIE (Serial Interface Engine) encargado de la generación del CRC, la sincronización de las señales D+ y D- y la correcta comunicación entre el modulo y el PIC. El SIE puede interconectarse directamente al USB, utilizando el

transmisor-receptor interno, o puede conectarse a través un transmisor-receptor externo.

Configuración

- USBEN: es un bit prioritario al comienzo de la configuración ya que habilita o deshabilita el modulo USB, ignorando todos los bits de control y estado cuando esta a cero. Este bit también activa el regulador de tensión del chip y conecta las resistencias pull-up, si se permiten, asi que con USBEN podemos por software conectar o desconectar del USB. Este bit podemos encontrarlo en el registro UCON<3>.

Configuración de la frecuencia

Para la puesta en marcha de la comunicación USB es necesario configurar correctamente el PIC, donde una parte fundamental es la configuración de la frecuencia de reloj. Dependiendo de si queremos funcionar con el modulo en baja velocidad o alta velocidad (USB 2.0), deberemos proporcionar al modulo de 6 o 48 Mhz respectivamente. Para este ejemplo usaremos la configuración de USB 2.0 y un cristal conectado al PIC de 4 Mhz.

 Z

USBDIV=1, con lo que la temporización pasará por el PLL Prescaler

PLL1 con lo que, al disponer de 4 Mhz de Fosc, a la salida del PLLDIV se

mantendrán esos mismos 4 Mhz

CPUDIV1 con lo que se mantienen los 4 Mhz para temporizar el sistema.


-Como se puede ver en OSC1 y OSC2conectamos nuestro cristal: 4 Mhz, aunque podríamos haber usado uno de 8 Mhz, 12 Mhz, 16 Mhz, 20 Mhz, 24 Mhz, 40 Mhz  ó 48 Mhz, que son los cristales validos compatibles. Hay que tener en cuenta que este cristal es el mismo para generar la frecuencia de 48 Mhz necesaria para el USB 2.0 y para el Clock del PIC, que pueden ser la misma o no, según la configuración que al final adoptemos. Esto quiere decir que podemos tener el USB a 48 Mhz y nuestro programa en el PIC funcionando a 12 Mhz por ejemplo.


Tras el Smicht Trigger del Primary Oscillator salen tres líneas en paralelo que van a módulos distintos con distintas posibilidades.


-La primera línea, la superior, va directamente al switch USBDIV que si está a cero indica que la frecuencia base original del cristal es directamente inyectada al USB, si el switch FSENtambién esta a 1. Este switch elige entre el PLL o el Primary Clock del CPU. Esta Opción de inyectar directamente la frecuencia del cristal es obviamente solo posible si usamos un Cristal de 48 Mhz que es lo que necesitamos para el USB. Cualquier otro cristal debe ser tratado para conseguir los 48 Mhz necesarios.

-La segunda línea tiene a su entrada un PLL Prescaler  (Divisor de frecuencia). En cada una de sus salidas vamos a tener FOSC dividida por 1, 2, 3, 4, 5, 6, 10 ó 12. Y mediante PLLDIV (Multiplexor) vamos a seleccionar la que deseamos usar. Así si nuestro cristal es de 4 Mhz y en PLLDIV colocamos un 000 estaremos dividiendo por 1 el valor de FOSC con lo que tendremos 4 Mhz a la salida del MUX. Esta salida del MUX es lo que utilizamos para inyectársela al PLL de 96 Mhz. Si le metemos 4 Mhz él genera 96 Mhz. Pero 96 Mhz es el doble de lo que nos hace falta para el USB que son 48 Mhz, así que inmediatamente después tenemos usar un divisor por 2 que es el segundo camino por el que llegamos a USBDIV y en este caso le pondremos un 1 para usar la señal proveniente del PLL.

-El resto de la circuitería esta asociada a la configuración y asignación de la velocidad de reloj para la ALU.

Transmisor interno

-El periférico USB tiene un transmisor de poca velocidad internamente conectado al SIE. Esta característica es útil en aplicaciones baratas con un chip. El bit UTRDIS  (UCFG<3>) controla el transmisor. Está permitido por defecto (UTRDIS = 0).

Transmisor externo

-Este módulo proporciona ayuda para el uso de un transmisor fuera del chip. El

transmisor externo se utiliza en aplicaciones donde las condiciones físicas dictan la

localización del transmisor lejos del SIE. Las operaciones con un transmisor externo se permiten activando el bit UTRDIS=1.

Regulador interno

-El dispositivo PIC18FX455 tiene un regulador incorporado de 3,3V para proporcionar energía al transmisor interno y proporcionar una fuente para el pull-up interno y externo, en aplicaciones de 5V. Para que el regulador sea estable se necesita un condensador externo de 220nF (±20%). El regulador se activa por defecto y puede inhabilitarse a través del bit de configuración (VREGEN = ON, OFF). Cuando está activo, la tensión es visible en el pin VUSB. Cuando el regulador está desactivado, se tiene que conectar una fuente de 3,3V al pin VUSB para alimentar el transmisor interno.

Las especificaciones del USB requieren 3,3V en las comunicaciones, sin

embargo, el resto del chip puede funcionar con una tensión más alta. Por eso la fuente de energía del transmisor es una fuente separada (VUSB).

Velocidad del BUS

-Podemos funcionar con el modulo en baja velocidad o alta velocidad (USB 2.0), para ello se encarga el registro UCFG y las resistencias de Pull-Up. Las resistencias pull-up internas o externas están diseñadas para conocer los requerimientos del USB “baja velocidad” y “Full-Speed”. Para funcionar en modo USB 2.0 hay que habilitar del bit FSEN del registro UCFG. Una vez habilitado FSEN una resistencia de Pull-Up queda alimentada en la patilla D+ (Esto permite que el periférico que se conecte al USB detecte el modo Full-Speed).

-En modo baja velocidad hay que deshabilitar FSEN y la resistencia de Pull-Up que quedaria alimentada seria la de D- (Así se autodetecta modo baja velocidad).

Bit de permiso del Full-Speed(FSEN en UCFG<2>):

1 = dispositivo en Full-speed y pull-up en D+ (Requiere 48 Mhz).

0 = dispositivo de poca velocidad y pull-up en D-  (Requiere 6 Mhz)

Bit de activación de resistencias de Pull-Up  (UPUEN en UCFG<4>):

1 = Pull-up del chip permitido

0 = Pull-up del chip desactivado

-La velocidad del USB, la transmisión y las pull-up deben configurase solamente durante la fase de activación del módulo. No se recomienda cambiar estos ajustes mientras que el módulo esté funcionando.

Interrupciones del USB

-El dispositivo 18F4550 tienen fuentes múltiples de interrupción y una prioridad de interrupción que permite que cada fuente de interrupción se le asigne un nivel prioritario o un nivel bajo de prioridad. El puntero de alta prioridad está en 000008h y el puntero de interrupción de baja prioridad está en 000018h. Cada fuente de interrupción tiene tres bits para controlar su operación. Las funciones de estos bits son:

Flag para indicar que ha ocurrido una interrupción.

El bit que permite habilita la interrupción.

El bit de prioridad para seleccionar alta o baja prioridad.

-Registro PIR2

PIR2 contiene el flag de la interrupción del USB.

BIT 7     BIT 6    BIT 5    BIT 4   BIT 3    BIT 2    BIT 1      BIT 0

OSCIF   CMIF    USBIF  EEIF     BCLIF HLVIF  TMR3IF CCP2IF

USBIF: Flag del USB:

1= El USB pide una interrupción (borrado por software)

0= El USB no necesita interrupción

-Registro PIE2

PIE2 contiene el permiso de la interrupción del USB.

BIT 7    BIT 6    BIT 5    BIT 4    BIT 3    BIT 2    BIT 1      BIT 0

OSCIE  CMIE    USBIE  EEIE    BCLIE  HLVIE TMR3IE CCP2IE

USBIE: Bit de permiso de interrupción del USB:

1= Interrupción activada

0= Interrupción desactivada

-Registro IPR2

IPR2 contiene los bits de prioridad de la interrupcion del USB.

BIT 7     BIT 6    BIT 5     BIT 4    BIT 3    BIT 2     BIT 1       BIT 0

OSCIP   CMIP    USBIP   EEIP     BCLIP  HLVIP   TMR3IP  CCP2IP

USBIP: Bit de prioridad de la interrupción del USB:

1= Alta prioridad

0= Baja prioridad

-Una vez que el SIE active un bit de interrupción, se tiene que borrar por software

escribiendo un ‘0’.

Control De Los Endpoints Del USB

-Todos los dispositivos USB están compuestos por una serie de endpoints y una dirección única asignada por el sistema. Un endpoint es un buffer que almacena datos dentro del dispositivo. Cada endpoint dispone de un identificador único que viene asignado de fábrica y una determinada orientación del flujo de datos (In,Out). Todos los dispositivos deben soportar el endpoint 0, que se usa para la configuración. Las asociaciones entre los distintos endpoints de un dispositivo y el host se llaman Pipes (tuberías). Las Pipes permiten mover datos entre el software del host y el endpoint del dispositivo. Cada Pipe esta determinado por su tipo de servicio, numero de endpoint, tamaño de paquetes, dirección, etc.

Existen 4 tipos de endpoints distintos (Control, Bulk, Isócronas e Interrupciones),

cada uno se utiliza en un tipo de transferencia.

-Cada uno de los 16 Endpoints bidireccionales posibles en el PIC18F4550 tiene un registro de control independiente, UEPn (donde ‘n’ representa el número del Endpoint). Cada registro tiene los mismos bits de control.

El bit EPHSHK (UEPn<4>) controla el protocolo de intercambio de los Endpoints; activar este bit permite el protocolo de intercambio del USB. Típicamente, este bit se setea siempre excepto al usar Endpoints síncronos. El bit EPCONDIS (UEPn<3>) se utiliza para permitir o inhabilitar las operaciones de control del USB (SETUP) con Endpoint. Borrar este bit permite las transacciones SETUP. Los bits EPINEN UEPn<1>)  y EPOUTEN (UEPn<2>) se deben activar para permitir las transacciones de entrada y de salida. Para el Endpoint 0, este bit debe estar siempre borrado por que las especificaciones del USB identifican el Endpoint 0 como el Endpoint de control por defecto.

Entradas relacionadas: