Professional Documents
Culture Documents
SERVICIOS DE LABORATORIO
ASIGNATURA: DISEO DE SISTEMAS DIGITALES
PRACTICA N 5
COMUNICACIN USB CON PIC DE GAMA ALTA
OBJETIVOS
MARCO TEORICO
DEFINICIONES SOBRE CONCEPTOS DEL ESTNDAR USB
El que venga de utilizar interfaces de comunicacin ms simples como RS-232 se
encuentra que en la comunicacin USB aparecen una serie de trminos nuevos
como: endpoint, pipes, transacciones, clases, Enumeracin, descriptores etc. que
al principio pueden resultar difciles de entender, voy a intentar dar una explicacin
personalizada de dichos conceptos. Quien quiera una explicacin ms rigurosa
puede leer la bibliografa citada al final del artculo.
Interfaz fsica
La interfaz fsica est formada por cuatro hilos dos para la alimentacin 5v (Rojo)
GND (Negro) y dos para datos D+ (verde) y D- (Blanco) Lo del signo + y - es
porque es una seal diferencial cuyo valor depende de la velocidad del bus (3,3v
para low-speed y 400mV para high-speed).
Los conectores se les denomina de tipo A y de tipo B, una imagen de dichos
conectores la tenis aqu.
Nota: la fuente de la imagen est en la direccin URL.
Velocidades del Bus
Hay que decir que el Host es el que controla la velocidad en la que circulan los
datos en el bus USB y que al ser un bus compartido, la velocidad real depender
de la cantidad de dispositivos que tengamos conectados a l en un momento
determinado (mximo 127 incluyendo al Host). Por tanto, los datos siguientes son
solo tericos y de referencia.
Low speed: 1,5 Mbps. Soportado por las especificaciones 1.1, 2.0 y 3.0. Es la
velocidad utilizada por dispositivos como teclados, ratones, joystick, etc.
Full speed: 12 Mbps. Soportado por USB 1.1, USB 2.0 y USB 3.0. Un ejemplo
donde se utilizan estas velocidades es en transmisiones de audio.
High speed: 480 Mbps. Solo USB 2.0 y USB 3.0. Ejemplo transmisiones de video.
Super speed: 5Gbps solo soportado en dispositivos USB 3.0, y como he dicho
antes no conozco ningn microcontrolador que soporte esta especificacin.
Transferencias
Una transferencia se puede definir como el conjunto global de los datos que
forman una comunicacin USB, una transferencia est formada a su vez por una o
varias transacciones que a su vez estn formadas por diferentes paquetes de
datos que contienen las tramas de una comunicacin USB.
No existe un formato nico de transferencia, la especificacin USB permite cuatro
tipos de transferencias:
Control: se utilizan para configurar y enviar comandos, por ejemplo, en la
enumeracin del dispositivo, ms adelante veremos lo que es esto.
Bulk (masivas): se utilizan cuando se precisa una transferencia de datos grande,
es el tipo ms rpido de transferencia, sin embargo, no hay garanta de que los
datos se transmitan en un tiempo determinado (no garantizada la latencia). S que
hay verificacin de que los datos se han transmitido con xito ya que dispone de
sistema de correccin de errores (CRC), esta transferencia solo la pueden utilizar
dispositivos que soporten velocidades Full y High Speed. Este tipo de
transferencia es utilizada por dispositivos como, por ejemplo: discos duros, pen
drivers, escner, impresoras, etc.
Iscronas: Es usada en dispositivos que transmiten seales de audio y de vdeo
en tiempo real. Se garantiza una tasa de velocidad de transmisin determinada
(latencia asegurada). Si no fuera as, por ejemplo, en una transmisin de voz el
audio se oira entrecortado. No contempla la correccin de errores, si en un
archivo de sonido se pierde un BIT, no es importante su recuperacin. Para usar
este tipo de transferencia es necesario que los dispositivos soporten velocidades
Full Speed.
Qu es un endpoint?
Los endpoint son simplemente buffer de memoria RAM que son utilizados para el
envo y recepcin de datos o comandos de control durante una comunicacin
USB. cada endpoint puede ser de entrada o salida de datos o bidireccional, el
endpoint 0 est reservado para comandos de control, el proceso de enumeracin
se realiza a travs del endpoint nmero 0. Este concepto solo se aplica al
dispositivo, en el host existen tambin buffer para el envo y recepcin de datos,
pero no se les denomina con este nombre.
Qu es un Pipe o Tubera?
Es una conexin lgica entre un endpoint y el software del controlador del host
que se produce tras el proceso de enumeracin. Los Pipes se usan mucho en
Sistemas Operativos como UNIX/LINUX para enlazar la salida de un proceso con
la entrada de otro, en este caso el concepto es el mismo.
Qu es una clase?
Una clase es un modelo o plantilla que describe el estado y el comportamiento de
los objetos que la comparten. La clase provee de propiedades y mtodos
(funciones) reutilizables por los objetos o miembros que comparten la clase. Esta
definicin general de clase utilizada en la programacin orientada a objetos creo
que es la mejor para definir este concepto utilizado en USB. La especificacin
USB provee de propiedades y funciones que pueden ser utilizadas por los
dispositivos que tengan caractersticas similares. Por ejemplo, un teclado y un
ratn por sus caractersticas pertenecern a la misma clase la llamada Human
Interface Device (HID), pues bien, si yo diseo el firmware de un dispositivo con
las especificaciones que me exige esta clase podr beneficiarme de esas
propiedades y funciones comunes a la clase, una ventaja de utilizar esta clase por
ejemplo es que no se necesita instalar ningn driver para el dispositivo ya que el
sistema operativo utilizar uno genrico para todos.
La especificacin USB provee de muchas clases para facilitar la vida al
desarrollador de dispositivos, puedes ver una informacin ms precisa de las
clases disponibles aqu.
Las clases ms utilizadas con Microcontroladores son:
HID (Human Interface Device): ejemplos de dispositivos que utilizan esta clase
como hemos dicho ya son: teclados, ratones, pantallas tctiles, joystick, etc.
Velocidad low-speed (64 KB/s de velocidad mxima), tipos de transferencias
soportadas: de control y de Interrupcin. Una caracterstica interesante al utilizar
esta clase es que no se necesita instalar un driver especifico en el Sistema
kBytes/s de la clase CDC, adems el driver de Microchip soporta todos los tipos
de transferencia (Control, Iscronas, Interrup y Bulk), cosa que no ocurre igual si
utilizamos las otras clases como ya hemos visto.
En su ltima versin este driver est soportado por los siguientes sistemas
operativos: Windows 2000, Windows Server 2003, Windows XP, Windows XP 64,
Windows
Vista,
Windows
Vista
64
y
Windows
7
Nota importante: cuando utilizamos el driver personalizado de Microchip los datos
se transmiten en raw (crudo) y la aplicacin de escritorio intercambia informacin
con el PIC directamente a travs de los enpoints utilizados por este, en este caso
se usa un protocolo de comunicacin que a priori no est definido. Es importante
que copiemos del archivo .INF el valor del campo definido como GUI (Global
Unique Identifier), que es un nmero que sirve para que la aplicacin pueda
acceder al dispositivo, luego accederemos a la dll desde el IDE que hallamos
elegido para desarrollar la aplicacin de escritorio editaremos las
propiedades y funciones pblicas de la dll buscando un campo que se llame GUI
(o algo as) y si no coincide tendremos que pegar hay ese nmero, si no lo
hacemos no se podr crear la tubera de conexin (pipe) entre nuestra aplicacin y
el driver.
Cuando utilizamos la clase CDC esto no es necesario ya que la comunicacin est
definida a travs del puerto serie virtual creado y la informacin se transmite por
defecto en forma de caracteres ASCII al igual que un puerto serie fsico.
Otros drivers que podemos utilizar para nuestro PIC 18fx550 son:
WinUSB: es el driver genrico para USB que propone utilizar Microsoft cuando
nuestro dispositivo no puede ser manejado directamente por los drivers que ya
incluye por defecto en su sistema operativo. Para ello al igual que Microchip
proporciona los siguientes archivos: Winusb.sys, Winusb.ini y la librera dinmica
Winusb.dll que al igual que la dll de Microchip nos proporciona una serie de
funciones pblicas para acceder fcilmente al driver y a las APIs win32 de
Windows desde nuestra aplicacin de escritorio.
Toda la informacin que proporcionada Microsoft sobre este driver la podis
encontrar en el siguiente enlace.
libUSB: Es un driver de cdigo abierto con licencia GNU, se puede instalar en
mltiples sistemas operativos como LInux, MAC y otros, incluyendo Windows a
CODIGO
#include <18F4550.h>
#device ADC=10
#fuses
xt,hs,HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,V
REGEN,PUT
#use delay(clock=48000000)
#define USB_CON_SENSE_PIN PIN_C0
#include <usb_cdc.h>
#include <lcd.c>
int a;
char c;
int p,q;
void main() {
setup_adc_ports(an0); //Selecciona el puerto a realizar la conversion
setup_adc(adc_clock_internal); //Selecciona el reloj de conversion
set_adc_channel(0); //Selecciona el canal de conversion
usb_cdc_init();
usb_init();
while(1){
usb_task();
if(usb_enumerated())
{
if(usb_cdc_kbhit())
{
c=usb_cdc_getc();
if(c=='3'){
printf(usb_cdc_putc,"presione 1 para ver voltaje del puerto 0\n\r");
}
if(c=='1')
{
inicio:
q = read_adc();
//Lectura canal0
p = (q*(0.48875));
//Conversin a voltios;
delay_ms(500);
printf(usb_cdc_putc,"\r voltaje en A0= %d",p);
goto inicio;
}
}
}
}
}
SIMULACION
R1
180
R2
D1
LED-BIGY
10k
RV1
50%
U1
1k
2
3
4
5
6
7
14
13
33
34
35
36
37
38
39
40
18
RA0/AN0
RC0/T1OSO/T1CKI
RA1/AN1
RC1/T1OSI/CCP2/UOE
RA2/AN2/VREF-/CVREF
RC2/CCP1/P1A
RA3/AN3/VREF+
RC4/D-/VM
RA4/T0CKI/C1OUT/RCV
RC5/D+/VP
RA5/AN4/SS/LVDIN/C2OUT
RC6/TX/CK
RA6/OSC2/CLKO
RC7/RX/DT/SDO
OSC1/CLKI
RB0/AN12/INT0/FLT0/SDI/SDA
RB1/AN10/INT1/SCK/SCL
RB2/AN8/INT2/VMO
RB3/AN9/CCP2/VPO
RB4/AN11/KBI0/CSSPP
RB5/KBI1/PGM
RB6/KBI2/PGC
RB7/KBI3/PGD
VUSB
RD0/SPP0
RD1/SPP1
RD2/SPP2
RD3/SPP3
RD4/SPP4
RD5/SPP5/P1B
RD6/SPP6/P1C
RD7/SPP7/P1D
RE0/AN5/CK1SPP
RE1/AN6/CK2SPP
RE2/AN7/OESPP
RE3/MCLR/VPP
15
16
17
23
24
25
26
J1
1
3
2
4
VCC
D+
DGND
USBCONN
19
20
21
22
27
28
29
30
8
9
10
1
PIC18F4550
CUESTIONARIO.
1. Cmo se define la velocidad de transmisin de los bits en la
comunicacin USB?
R.
La arquitectura USB consta de 4 tipos bsicos de transferencia:
CONCLUSIONES
BIBLIOGRAFIA
http://picmania.net/usb_3_cdctransfers.php
http://www.electroensaimada.com/i2c.html
http://www.wikiteka.com/apuntes/configuracion-del-modulo-usb-en-el-pic18f4550/
http://www.aquihayapuntes.com/indice-practicas-pic-en-c/comunicacion-usbpic18f4550-utilizando-la-clase-cdc.html?start=1