Código fuente de comunicación USB
El kit de desarrollo de chip CY7C68013 se puede descargar desde el sitio web de Cypress (), que proporciona algunos recursos necesarios para desarrollar programas de firmware: entorno de desarrollo integrado Keil uVision2 (edición limitada del programa marco de firmware Cypress C51); y Algunos programas de muestra.
Keil uVision2 es un potente entorno de desarrollo integrado que integra una serie de herramientas como compilador C51, ensamblador A51, localizador de conexiones BL, simulación, depurador, etc., por lo que puede soportar programas C y ensambladores híbridos. Los proyectos aportan una gran comodidad al desarrollo de software [5].
Keil C51 es un eficiente compilador de lenguaje C especialmente diseñado para el microcontrolador 8051. Cumple con los estándares ANSI y el código del programa generado se ejecuta a muy alta velocidad y requiere muy poco espacio de almacenamiento, lo que es completamente comparable al lenguaje ensamblador. Al mismo tiempo, C51 tiene una rica biblioteca de funciones, con más de 100 funciones funcionales. Por lo tanto, utilizar el lenguaje C como lenguaje de desarrollo y Keil Vision 2 como plataforma de desarrollo de ingeniería para completar la escritura, simulación y depuración del código fuente reducirá en gran medida la dificultad del desarrollo del firmware y mejorará la eficiencia del desarrollo [4].
3. Estructura y composición del firmware:
Aunque las funciones del programa de firmware son relativamente complejas y requieren la escritura de muchas funciones, su estructura básica es relativamente simple e incluye las siguientes partes. :
p>3.1 Tabla de descriptores de dispositivos:
Antes de establecer comunicación de datos con el host, cada dispositivo USB debe informar al host de su configuración específica, incluido el fabricante del dispositivo y el número de identificación del producto. (VID, PID), el modo de alimentación del dispositivo, el consumo de energía y una serie de información importante. Informe información sobre el dispositivo al host a través de la tabla de descriptores de dispositivo para que el host pueda establecer conexiones con el dispositivo de manera adecuada. Su estructura es la siguiente:
DeviceDscr:
db 18;; Longitud del descriptor (bytes)
db DSCR _device;; p> p>
……
db 1; * * *Hay varias configuraciones (1)
3.2 Código fuente del marco del programa de firmware:
El archivo proporciona la estructura marco del programa de firmware y es adecuado para el control general de la transferencia de datos. Esta estructura proporciona a los desarrolladores una interfaz de programa abierta, los desarrolladores pueden agregar el código apropiado a estas funciones de la interfaz para lograr las funciones requeridas.
3.3 Función de interfaz:
El marco del programa de firmware proporciona interfaces funcionales. Al agregar códigos de desarrollo propio a estas funciones de interfaz, se pueden realizar funciones específicas, lo que reduce en gran medida la dificultad del desarrollo del programa de firmware y acelera el proceso de desarrollo del sistema USB. Estas funciones de interfaz se dividen en tres categorías: asignación de tareas, ejecución de solicitudes de dispositivos estándar y manejo de interrupciones del bus USB [3]. Las funciones y usos de estas interfaces se presentarán sucesivamente a continuación.
3.3.1 Asignación de tareas
TD_Init()
Descripción: Esta función se utiliza principalmente para inicializar FX2. Se llama antes de que FX2 vuelva a enumerar y comience a realizar tareas. Su propósito es inicializar cada puerto y su buffer FIFO.
TD_Poll()
Descripción: Esta función se llama repetidamente cuando el dispositivo está en ejecución y debe contener código para completar tareas especiales. Es posible que las tareas de alta prioridad se hayan completado antes de que regrese la función. Sin embargo, FX2 no afectará las solicitudes de dispositivos ni los eventos pendientes de dispositivos de bus USB si su valor de retorno es falso. Si se requiere una gran cantidad de tiempo de procesamiento, FX2 segmentará el tiempo llamando a la función TD_Poll() varias veces.
TD_Suspend()
Descripción: Esta función se llama antes de que el dispositivo entre en estado de suspensión. Los desarrolladores agregan el código apropiado para configurar el estado de funcionamiento del dispositivo, lo que puede ponerlo en un estado de bajo consumo de energía y devolver un valor verdadero. Sin embargo, los desarrolladores pueden modificar el código del programa TD_Suspend() para que devuelva falso y que FX2 no entre en un estado suspendido.
TD_Resume()
Nota: Cuando se requiere un reinicio externo (como una interrupción de activación o una actividad de transferencia de bus USB), el dispositivo reiniciará el procesador llamando a esta función , que es TD_Suspend La operación inversa de la función ().
En este momento, el dispositivo se reinicia con el suministro de energía normal.
Requisitos del dispositivo
La función de solicitud del dispositivo tiene la siguiente forma:
BOOL DR_xxx(void)
{
..... Archivo://código de procesamiento de solicitud del dispositivo
return (true);
}
Completa principalmente el procesamiento de comandos y solicitudes desde el procesamiento del host, como la configuración de puertos.
Interrupciones USB
Las interrupciones para dispositivos FX2 incluyen las mismas interrupciones que las interrupciones estándar 8051, así como algunas interrupciones específicas de FX2. Dado que el programa de firmware proporciona una interfaz de rutina de servicio de interrupción, los desarrolladores solo necesitan agregar su propio código de servicio de interrupción a la interfaz de rutina de servicio de interrupción para completar el servicio de la solicitud de interrupción correspondiente, evitando así la necesidad de modificar la estructura lógica del autovector de interrupción. de FX2. Estudio en profundidad [2]. La forma de estas funciones de interfaz del programa de servicio de interrupción es la siguiente:
void ISR_xxx(void) interrupción 0
{
....file:// desarrollador Código de servicio de interrupción
ez USB _ IRQ _ CLEAR();
USBIRQ = bmXXX//Borrar solicitud de interrupción
}