Translate

viernes, 12 de abril de 2013

Tarjetas SD/SDHC (lectura/escritura de datos)


Tras aprender como inicializar una tarjeta SD y obtener información sobre su capacidad, etc, es hora de usarlas para lo que sirven: leer/escribir información.

En esta entrada completaremos nuestra introducción a las comunicaciones de bajo nivel entre un PIC y una tarjeta SD viendo las lecturas/escrituras a los sectores de datos de la tarjeta.  

Como siempre haremos algunos comentarios sobre como optimizar las rutinas para maximizar la velocidad de transferencia de datos.

Recordar que las rutinas que vamos a usar son de bajo nivel, escribiendo directamente sobre los sectores de la tarjeta. No saben nada del tipo de formato, sistema de archivos, etc, por lo que pueden destruir datos en la tarjeta que usemos. He escogido un número alto de sector (5000) para empezar a escribir por lo que posiblemente no estropearán el formato de la tarjeta pero si machacarán los datos de dichos sectores. No obstante, incluso si se estropea el formato siempre se puede volver a reformatear la tarjeta en el PC sin ningún problema. Obviamente debéis que evitar hacer pruebas con una tarjeta con datos de interés. 

Para verificar que las cosas están funcionando es útil contar con un lector de tarjetas para el PC y un software (tipo WINHEX o similar) que permita editar los sectores lógicos de un disco para ver si nuestros programas escriben lo que queremos y donde queremos. 



Código asociado a esta entrada: SPI_sdhc_v2.c18f4520_g.lkr

martes, 9 de abril de 2013

Tarjetas SDSC/SDHC (inicialización y lectura de registros)


Como un ejemplo un poco más complicado (pero muy útil) del uso del protocolo SPI veremos en más detalle el uso de tarjetas de memoria flash en su formato SD (SecureDigital). Entre las posibilidades de comunicación que ofrecen dichas tarjetas está un modo SPI. Este modo, aunque más lento que el modo SD nativo, es más sencillo de implementar.

En este tutorial nos centraremos en las conexiones hardware, la inicialización de la tarjeta (tanto para tarjetas SD standard como para las SDHC de alta capacidad), y la obtención de las características de la tarjeta (capacidad, número de sectores, número de serie, etc.) a través de sus registros CSD y CID.

El objetivo es conseguir el volcado de información que aparece a la derecha



En una entrada posterior veremos como leer/escribir datos en la tarjeta, considerando como optimizar dicha transferencia de datos. 


Código asociado a esta entrada: SPI_sdhc.c

lunes, 8 de abril de 2013

INTERFAZ SPI con memoria flash (M25P80)


Las memorias flash es un tipo de memoria electrónica no volátil, derivada de las EEPROM, que que puede ser borrada y reprogramada electrónicamente (http://en.wikipedia.org/wiki/Flash_memory). El tipo más común de memoria flash es el tipo NAND que es la base de las tarjetas de memoria,  USB oendrives y discos de estado sólido. Al contrario que una memoria EEPROM las memorias flash de tipo NAND pueden ser escritas o borradas en bloques más pequeños que todo el dispositivo (aunque mayores que los bytes individuales).  En todos estos casos la memoria va acompañada de un controlador que hace invisible el manejo a bajo nivel de la memoria. El usuario se reduce a escribir/leer sectores lógicos. En esta entrada vamos a escribir algunas rutinas para conectar una memoria flash (M25P80, 1 Mbyte) con un PIC usando una comunicación SPI. Al contrario que en los casos citados antes vamos a manejar directamente los sectores físicos de la memoria, por lo que además de los aspectos de la comunicación SPI aprenderemos también algunas peculiaridades de este tipo de memorias. 

Para nuestro desarrollo usaremos una breakboard (de MikroElektronica, figura adjunta, unos $10) que nos evita tener que soldar y nos da los pines correctamente espaciados y etiquetados.  Podemos ver la alimentación (3.3V) y GND, así como las conexiones SPI (~CS, SCK, MISO, MOSI). El único pin (que no usaremos) no identificable es ~HOLD (que permite dejar en suspenso una comunicación. El IC tiene un pin adicional ~WP (Write Protection) que permite implementar una protección hardware de los datos. En esta tarjeta está atado a 3.3V por lo que la tarjeta está "desprotegida" a nivel hardware (aunque es posible implementar protección parcial o total de datos a través del software). 

Código asociado a esta entrada: spi_flask.c

viernes, 5 de abril de 2013

Comunicaciones Serie SPI

La familia PIC18 dispone de varias posibilidades de comunicaciones serie. Además del puerto USART que ya describimos, dispone de un puerto dedicado a comunicaciones síncronas serie, el SSP (Serial Synchronous Port). Dicho puerto puede dedicarse a varios protocolos, tales como SPI o I2C. Ambos son excluyentes, esto es, si se configura el periférico para SPI no podrá usarse para I2C y viceversa. Si se precisan de forma conjunta comunicaciones I2C y SPI la única solución es un microcontrolador con dos puertos SSP o bien, implementar algunos de los dos protocolos a través de software.


En este tutorial vamos a examinar en el protocolo SPI (Serial Protocol Interface), describiendo los registros SFR involucrados y detallando los procedimientos para transmitir y recibir.  Lo ilustraremos con un ejemplo muy sencillo de comunicación  con un periférico SPI, un conversor DAC (MCP4822 de Microchip).

En entradas posteriores veremos ejemplos de comunicaciones SPI con otros periféricos con protocolos de comunicación más complicados.

Archivos de código asociados a esta entrada:  spi_mcp4822.c