Professional Documents
Culture Documents
Objetivos: ............................................................................................................................................................... 3
Introduccin ........................................................................................................................................................... 3
Marco Terico ........................................................................................................................................................ 3
Desarrollo ............................................................................................................................................................... 9
Conclusiones ...................................................................................................................................................... 19
Bibliografa .......................................................................................................................................................... 19
Objetivos
Introduccin
El protocolo USB es el ms comn de encontrar en dispositivos comerciales, debido a su
fcil manejo de hardware y compatibilidad dinmica. Es razn por el cual se considera
necesario que se adquiera el conocimiento de como implementarlo en el compilador PICC
con la computadora.
Marco Terico
El Bus Serial Universal (USB, por sus siglas en ingls) fue desarrollado y estandarizado por
un grupo de siete empresas dedicadas a la manufactura de computadoras y perifricos (IBM,
Intel, Northern, Telecom, Compaq, Microsoft, Digital Equipment y Nec) en 1995 [10].
La idea era tomar todo lo relacionado al puerto y protocolo serial para mejorarlo con la
tecnologa del siglo XXI; buscando crear una tecnologa que permitiera una actividad de bus
de baja y alta velocidad de transmisin de datos, proporcionando un protocolo robusto,
configuracin automtica de dispositivos y un bus serial al que fuera sencillo conectarse.
El USB es un bus punto a punto: dado que el lugar de partida es el host (PC o hub), el
destino es un perifrico u otro hub. No hay ms que un nico host (PC) en una arquitectura
USB. Cada host soporta solo un bus, cada conector en el bus representa un puerto USB por
lo tanto sobre el bus puede haber varios conectores, pero solo existe una ruta y solo un
dispositivo puede transmitir informacin a un tiempo.
Los perifricos comparten un mismo bus. El protocolo se basa en el llamado paso de testigo
(token). La computadora (o host) proporciona el testigo al perifrico seleccionado y
seguidamente, ste le devuelve el testigo en su respuesta.
El desarrollo del protocolo USB representa un gran aumento en las velocidades de
transmisin de datos, as como la instalacin de los dispositivos en caliente, es decir, con
este protocolo no se requiere de reiniciar los equipos cada vez que se conecta un dispositivo,
lo cual lo hace ms prctico y sencillo de utilizar comparado con los protocolos de conexio es
de tipo serial (DB-9) o paralelo (DB-25), por lo que en la actualidad estos puertos ya no se
encuentran presentes en equipos de computo modernos.
A continuacin se describen los aspectos esenciales de este protocolo:
A nivel elctrico, el cable USB transfiere la seal y la alimentacin sobre 4 hilos. En las
normas que regulan la versin 1.1 y 2.0 se distinguen dos tipos de conectores:
Tipo A, de forma rectangular es usado en dispositivos que no requieren demasiado ancho
de banda (como teclado, mouse, memorias USB, entre otros.).
Tipo B, poseen una forma cuadrada y se utilizan principalmente para dispositivos de alta
velocidad (como discos duros externos, quemadores externos, entre otros).
Suministrarla al dispositivo, sin embargo depender de ste ltimo el consumo, pudiendo ser
auto-alimentado (self powered) en caso de que el consumo de energa lo realice a travs del
puerto o con alimentacin propia (como en el caso de la mayora de las impresoras),
omitiendo el uso de la alimentacin proporcionada por el puerto.
A nivel de seal: Los cables utilizados en la transmisin de los datos (D+ y D-) constituyen un
par trenzado con una impedancia caracterstica de 90 a fin de reducir las interferencias y el
ruido. Se debe vigilar que la extensin de los cables transmisores de datos no supere los 5
m.
Las direcciones de los diferentes dispositivos conectados a travs de un host y diversos
hubs estn cifradas en 7 bits, por lo que 128 dispositivos (27) pueden estar conectados
simultneamente a un puerto de este tipo. En realidad, es recomendable reducir esta
cantidad a 127 porque la direccin 0 es una direccin reservada.
Por otra parte, es posible conectar hasta 5 concentradores o hubs, por lo que, tomando en
cuenta la longitud mxima de 5 metros del cable entre dos dispositivos, es posible crear una
cadena de transmisin de datos de hasta 25 metros de longitud.
Enumeracin
Antes de cualquier aplicacin se pueda comunicar con un dispositivo a travs del puerto
USB, el host necesita aprender sobre el dispositivo para comunicarse de la forma adecuada.
Para poder llevar a cabo estas tareas se requiere de un intercambio de informacin entre el
dispositivo y el host. Este proceso incluye la asignacin de una direccin al dispositivo, leer
los descriptores del dispositivo, asignar y ejecutar el driver adecuado y seleccionar la
configuracin adecuada que especifique los requerimientos de energa del dispositivo, los
endpoints y algunas otras caractersticas.
Para que se ejecute la enumeracin, cuando el host detecta que se ha conectado un nuevo
dispositivo enva informacin solicitando la informacin antes mencionada, el dispositivo
entonces enva la respuesta a los requerimientos solicitados para establecer la
comunicacin.
Acto seguido se establecen las tuberas (pipes) para poder dar el canal adecuado a la
informacin, en este momento el dispositivo se encuentra listo para efectuar la trasmisin de
datos.
Desde la perspectiva del usuario, la enumeracin es un proceso completamente invisible y
automtico excepto tal vez por la aparicin de mensajes que anuncien la deteccin de un
nuevo dispositivo y cuando la configuracin ha sido exitosa. En algunas ocasiones durante el
primer uso, el usuario debe seleccionar el driver o especificar la ubicacin donde el host debe
localizar los archivos.
El controlador USB
Un controlador USB tpico contiene un transmisorreceptor USB, una interfaz serial, buffers,
registros de configuracin, estado y control para la comunicacin.
El transceptor
Proporciona una interfaz en hardware entre el conector USB del dispositivo y el circuito que
controla la comunicacin USB. El transceptor se encuentra tpicamente en el chip, pero
algunos controladores permiten la conexin hacia un transceptor externo.
Interfaz Serial
Los circuitos que enlazan el transceptor y el host, forman una unidad llamada interfaz serial.
Esta interfaz serial es la encargada de manejar las transacciones de envo y recepcin de
datos, sin interpretarlos o utilizarlos, solamente enva cualquier dato disponible y almacena
cualquier dato entrante en las localidades disponibles.
Buffers
Los controladores USB utilizan los buffers para almacenar los datos conforme se van
recibiendo y para almacenar de igual manera los datos que se encuentran listos para ser
enviados. Para retener los datos a transmitir o recibidos, la mayora de los buffers cuentan
con una estructura de tipo FIFO (Primero en entrar, primero en salir).
Informacin de configuracin, estado y control
Los chips controladores de USB, tienen registros que son utilizados para almacenar
informacin referente al tipo de endpoint utilizados, el numero de bytes a recibir, el numero
de bytes a enviar, el estado del dispositivo y en general, cualquier informacin sobre cmo se
deber de utilizar la interfaz para la transmisin y recepcin de datos. Debido a las
diferencias de configuracin entre chips o familias de chips, el firmware para el controlador
debe ser creado especficamente para cada uno de ellos, ya sea para chip o bien para una
familia de stos.
Reloj
Las comunicaciones USB requieren de una fuente de tiempos, tpicamente esta fuente es un
cristal oscilador, aunque en los dispositivos de baja velocidad puede utilizarse un resonador
cermico.
Componentes Adicionales
Adems de los componentes de la interfaz USB antes descritos, muchos dispositivos
incluyen una unidad de procesamiento, memoria de programa y de datos, interfaces de
entrada y salida as como caractersticas adicionales, por ejemplo temporizadores,
contadores, etc.
Bibliotecas DLL
Una dll o biblioteca de enlace dinmico (Dynamic Linking Library), es un archivo que contiene
funciones y/o recursos (mapas de bits, definiciones de fuentes, etc.) que pueden ser
llamados desde cualquier aplicacin Windows, de hecho, se puede considerar que
Windows est construido sobre una gran cantidad de DLLs. La mayora de bibliotecas de
enlace dinmico se guardan en archivos que tienen extensin DLL, pero tambin pueden ser
guardados en archivos con extensiones EXE (ejecutable), DRV (controlador de dispositivo) y
FON (fuente de Windows).
La diferencia entre las bibliotecas de enlace dinmico con extensin DLL y el resto, es que
las primeras se cargan porque el programa que las ha de utilizar lo pide a Windows y las
dems, en cambio, se cargan porque estn referenciadas en archivos de inicializacin de
Windows. Estas referencias pueden ser creadas por el propio Windows o por el programa
deinstalacin de alguna aplicacin.
Desarrollo
Equipo Necesario
Computadora (con el Software MPLAB
IDE, IC-PROG o similar, compilador
C,LabView, Simulador de circuitos
electrnicos Proteus).
Programador tipo JDM o similar.
Material Necesario
Instrucciones del PIC 18]F4550 u
Capacitores
Puente H
Resistencias
Motor DC
Cristal de cuarzo de 4MZ
Cable de conexin USB
El primer paso es instalar las libreras de la pgina de Microchip, donde contienen las DLLs
para que el dispositivo que en este caso es un microcontrolador. El framework a instalar debe
ser de versin V2.3 o superior, llamado MCHPSUSB.
Ya con esto, se agrega el siguiente cdigo con extensin .h para que al momento de
programar de compilar el programa en para el PIC a usar, incluya las libreras propias de
USB.
//// Descriptores.h ////
//// ////
//// En este archivo se configuran los elementos descriptores del ////
//// PIC, como son el VID y el PID para el correcto funcionamiento ////
//// del dispositivo. Ademas se configuro el nombre con el que el ////
//// dispositivo sera reconocido por la PC. ////
//// ////
//// Esta configuracion se basa en los parametros indicados ////
//// en la norma USB 2.0 ////
//// ////
/////////////////////////////////////////////////////////////////////////
#IFNDEF __USB_DESCRIPTORS__
#DEFINE __USB_DESCRIPTORS__
#include <usb.h> //Se incluye la libreria con las directivas USB
#DEFINE USB_TOTAL_CONFIG_LEN 32
//Longitud=config+interface+class+endpoint
//Descripcion de la configuracion
char const USB_CONFIG_DESC[] = {
USB_DESC_CONFIG_LEN, //longitud del descriptor
USB_DESC_CONFIG_TYPE, //constante para CONFIGURATION (0x02)
USB_TOTAL_CONFIG_LEN,0,
0x01,
//Nmero y direccin del Endpoint (0x01 = EP1 OUT)
0x02,
//Tipo de transferencia
//0 is control, 1 is iso, 2 is bulk, 3 is interrupt
USB_EP1_RX_SIZE, 0x00,
//Tamao mximo de paquete soportado
0x01,
//intervalo de polling en ms
//slo para transferencia con interrupciones
};
#define USB_NUM_HID_INTERFACES 0
#define USB_MAX_NUM_INTERFACES 1
const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={1};
#if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN)
#error USB_TOTAL_CONFIG_LEN not defined correctly
#endif
//Descriptores del dispositivo
char const USB_DEVICE_DESC[] ={
USB_DESC_DEVICE_LEN, //Longitud del reporte
0x01, //Constante del dispositivo (0x01)
0x10,0x01, //Versin de USB (1.1)
0x00, //Cdigo de clase
0x00, //Cdigo de subclase
0x00, //Cdigo de protocolo
USB_MAX_EP0_PACKET_LENGTH,
//Tamao mximo de paquete para endpointt 0.
//(Baja Velocidad especifica 8)
0xd8,0x04, //vendor id (0x04D8 Microchip)
0x0b,0x00, //product id (0x000b PIC18 Family)
0x01,0x00, //Nmero de versin del dispositivo
0x01, //Indice de cadena del productor
0x02, //Indice de cadena del producto
0x00, //Indice de cadena del numero de serie
USB_NUM_CONFIGURATIONS //Numero de posibles configuraciones
};
const char USB_STRING_DESC_OFFSET[]={0, 4, 12};
//Ubicacin del inicio de las cadenas
#define USB_STRING_DESC_COUNT sizeof(USB_STRING_DESC_OFFSET)
char const USB_STRING_DESC[]={
//string 0
4, //Longitud de la cadena
int8 pot1;
//Rutina principal
void main(void) {
int1 recbuf[8]; //Se declaran las variables donde seran
int1 envia[8]; //almacenados los datos a enviar y recibir
//ambas sern de 8 bits
if(B1 == 1)
Enciende(BIT1);
else
Apaga(BIT1);
if(B2 == 1)
{Enciende(BIT2); }
else
{Apaga(BIT2);}
if(B3 == 1)
{Enciende(BIT3); }
else
{Apaga(BIT3);}
if(B4 == 1)
{Enciende(BIT4); }
else
{Apaga(BIT4);}
if(B5 == 1)
{Enciende(BIT5); }
else
{Apaga(BIT5);}
if(B6 == 1)
{Enciende(BIT6); }
else
{Apaga(BIT6);}
if(B7 == 1)
{Enciende(BIT7); }
else
{Apaga(BIT7);}
}
}
}
}
} //Fin del programa
Abrir Puerto
Lectura
Escritura de datos
Cerrar Puerto
Programa General
Interfaz