Selección de chip USB CY7C68013, CH374
Cypress ofrece descargas del kit de desarrollo de chip CY7C68013 en su sitio web ( ), que proporciona algunos recursos necesarios para desarrollar programas de firmware: entorno de desarrollo integrado Keil uVision2 (edición limitada) marco de firmware Cypress Plus C51; programa y algunos programas de muestra.
Keil uVision2 es un potente entorno de desarrollo integrado que integra el compilador C51 y el ensamblador A51, así como una serie de herramientas como el localizador de conexiones BL, la simulación y el depurador, por lo que puede admitir programas C y ensamblador del servidor. El proyecto híbrido proporciona una gran comodidad para el desarrollo de software [5].
Keil C51 es un compilador de lenguaje C eficiente especialmente diseñado para microcontroladores 8051. Cumple con los estándares ANSI. El código del programa generado es muy rápido y requiere muy poco espacio de almacenamiento. 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 uVision2 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]. 1 Tabla de descriptores de dispositivos:
Cada dispositivo USB debe notificar al host su configuración específica antes de establecer comunicación de datos con el host, y esta información del dispositivo se notifica al host a través de la tabla de descriptores de dispositivos. que el host pueda establecer una conexión con el dispositivo de manera adecuada. Su estructura es la siguiente:
DeviceDscr:
db 18 ; La longitud de este descriptor en bytes
db DSCR_DEVICE ; >
......
db 1;; *** Hay varias configuraciones (1)
3.2 Código fuente del marco del programa de firmware:
Este documento proporciona una estructura marco del programa de firmware adecuada para el control general de la transmisión de datos. Esta estructura proporciona una interfaz de programa abierta a los desarrolladores, quienes pueden implementar la funcionalidad requerida agregando el código apropiado a estas funciones de la interfaz.
3.3 Funciones de interfaz:
Las interfaces de funciones funcionales se proporcionan en el marco del programa de firmware. Al agregar estas funciones de interfaz a códigos de desarrollo propio, se pueden lograr funciones específicas y reducir en gran medida el costo. La dificultad de desarrollar programas de firmware acelera el proceso de desarrollo de sistemas 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]. Estas funciones de interfaz y sus usos 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 completar la inicialización de FX2 después de que FX2 se enumera nuevamente y la tarea. La asignación comienza Llamado antes, su propósito es inicializar cada puerto y el buffer FIFO de cada puerto.
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. Las tareas de alta prioridad pueden completarse antes de que regrese esta función. Sin embargo, FX2 no afectará las solicitudes de dispositivos ni los eventos pendientes de dispositivos de bus USB si se devuelve false. Si se requiere una gran cantidad de tiempo de procesamiento, FX2 dividirá 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 el estado pendiente. Los desarrolladores pueden configurar el estado de funcionamiento del dispositivo agregando el código apropiado, para que el dispositivo esté. en estado de bajo consumo y devuelve un valor verdadero. Sin embargo, los desarrolladores pueden cambiar el código del programa TD_Suspend() para que devuelva falso para que FX2 no entre en un estado suspendido.
TD_Resume()
Descripción: cuando se solicita un reinicio externo (por ejemplo, se genera una interrupción de activación desde el mundo exterior o se produce actividad de transferencia en el bus USB), el dispositivo llama a esta función (TD_Suspend() La inversa de la función) reinicia el procesador. En este punto, el dispositivo se reiniciará con energía normal.
3.3.2 Solicitud de dispositivo
La forma de la función de solicitud de dispositivo es la siguiente:
BOOL DR_xxx(void)
{
... file: //Código de procesamiento de solicitud del dispositivo
return(TURE);
}
La tarea principal es procesar solicitudes de los comandos y solicitudes del host, como la configuración de puertos.
3.3.3 Interrupciones USB
Las interrupciones para dispositivos FX2 incluyen las mismas interrupciones que las interrupciones estándar 8051, así como algunas interrupciones exclusivas de FX2. Dado que la interfaz de la rutina del servicio de interrupción se proporciona en el programa de firmware, los desarrolladores solo necesitan procesar el código del servicio de interrupción que agregaron en la interfaz de la rutina del servicio de interrupción para completar el servicio de solicitud para la interrupción correspondiente, evitando así una investigación en profundidad sobre la interrupción automática de FX2. La estructura lógica de los vectores (Autovectores de interrupción) [2]. La forma de estas funciones de interfaz de rutina de servicio de interrupción es:
void ISR_xxx(void) interrupción 0
{
...... archivo:// código de servicio de interrupción del desarrollador
EZUSB_IRQ_CLEAR ();
USBIRQ = bmXXX // Borrar esta solicitud de interrupción
}