Paso 6: El almacenamiento masivo USB con MicroSD
Entonces, para comprender el almacenamiento masivo USB
http://en.wikipedia.org/wiki/USB_mass-storage_device_class
http://en.wikipedia.org/wiki/SCSI
http://en.wikipedia.org/wiki/USB_Attached_SCSI
Lo que necesito entender es cómo el equipo determina qué dispositivo está conectada (así comprender los descriptores USB) y entonces entiendo que el equipo emitirá comandos SCSI a través de USB al microcontrolador, y el microcontrolador ejecutará los comandos de SCSI mediante la comunicación con la tarjeta SD. SCSI trabaja directamente en la memoria raw de la tarjeta SD, sin preocuparse por el sistema de archivos. No le importa acerca de los archivos, sólo bytes.
---------------------------------------------------------------------------------------------------------
El AT90USB1286 es capaz de toda velocidad USB (no alta velocidad!! tenga esto en cuenta, como velocidades de transferencia de archivos no será el mejor, además de nuestra Teensy sólo corre a 8 MHz y el reloj SPI está sólo a 4 MHz). Para usar su USB incorporado, tenemos unas cuantas opciones. Manual programa una pila USB en C, o utilización del USB pila de código proporcionado por Atmel o LUFA (ligero USB Framework para AVRs).
Utilizamos fibra de LUFA (versión 101122 a partir del momento de yo escribir esto), diseño abierto de la fuente y es específicamente para esta particular familia de Microcontroladores AVR.
http://www.fourwalledcubicle.com/lufa.php
Descargar y explorar el código, documentación y ejemplos de LUFA.
Se utilizan el la demostración de almacenamiento incluida en la distribución de LUFA. Sin embargo, esa demostración particular utiliza una dataflash IC en vez de tarjeta SD. Así que aquí está un ejemplo de oveja elástico que utiliza tarjetas SD:
http://elasticsheep.com/2010/04/teensy2-USB-Mass-Storage-with-an-SD-Card/
PERO ESPERA HAY MÁS! He modificado los archivos desde el enlace anterior para trabajar con el Teensy ++ y actualizado para que utilice LUFA versión 101122. Ver paquete de ejemplo adjunto. Como de costumbre, simple compilar y cargar el código. Dentro del paquete he incluido también una descripción completa del dispositivo USB tirado de un analizador de tráfico de USB. Si esto funcionó, entonces se ha construido efectivamente sólo un lector de tarjetas SD de un Teensy ++, Felicidades.
Los archivos sd_raw.c y .h están allí para comunicarse directamente con la tarjeta SD. SDCardManager está allí para permitir SCSI a la tarjeta SD de una manera que SCSI puede trabajar sin importar qué tipo de memoria trabaja con (abstracción, SCSI es más elevada). MassStorage maneja más funcionalidad de dispositivo de almacenamiento masivo USB y utiliza SCSI según las órdenes recibidas desde el ordenador.