viernes, 15 de agosto de 2014

FAT + SD Card + ATmega128



En este post mostraré como usar la librería FatFs ( Generic FAT File System Module) la cual podemos encontrar en el sitio web FatFs.
Para este fin usaremos una tarjeta de prueba con ATmega128, un adaptador para microSD, un RTC DS3231 y una tarjeta microSD Samsung de 16GB clase 10.

Aqui el programa final : Programa

                          SKU146934b                                images
 samsungcards-m


El ATmega128 corre con un cristal de 7.3728MHz.
El RTC es para obtener la fecha y hora al momento de crear y modificar los archivos creados.
El adaptador de microSD se comunica mediante SPI, tiene 6 señales (CS, MISO,MOSI,SCK,VCC y GND).
La tarjeta fue previamente formateada con FAT32.
En las pruebas se obtuvo velocidades de escritura de 148KB/s (más de 1Mb/s).




viernes, 27 de junio de 2014

MASTER SPI CON DMA – ATXMEGA

 

En este post mostraré como usar el DMA para quitarle carga al CPU y acelerar las transferencias del SPI en modo master.
Debemos tener en cuenta que según el manual de los XMEGA esto no es posible. “No es posible” ya que no hay un evento que pueda disparar la transferencia de datos, solo existe el evento de recepción de datos ( DMA_CH_TRIGSRC_SPIC_gc  para el SPI C).

Pero gracias a que el DMA tiene cuatro canales y que se puede establecer prioridades de los cuatro canales es que se puede implementar la transferencia por SPI usando el DMA.



image

Rx y Tx son los vectores a transmitir y recibir.

Habilitamos el DMA y establecemos la prioridad de los canales. La prioridad debe ser establecida ya que el CH0(Rx) y CH1(Tx) serán usados con el mismo evento, y debemos sacar el datos recibido antes de enviar el nuevo dato.


image


Configuramos el CH0 para recibir los datos por el SPIC. Los datos recibimos se guardan en Rx.


image

Configuramos el CH1 para transmitir los datos por el SPIC. Los datos trasmitidos se sacaran de Tx. Rx y Tx deben ser de la misma longitud. Pero TRFCNT se configura con un dato menos(desde Tx[1] hasta Tx[12]) ya que Tx[0] se usara para disparar la transferencia.