Enviat per: Matias | 21 Març 2010

Memòria SD

Avui em volia dedicar a comprovar exactament com funciona la memòria SD en la placa, i com puc guardar i llegir dades fent un petit programa de prova.

Per començar he llegit la documentació seguent que em proporciona la pàgina oficial: http://cmucam.org/wiki/mmc

Simplement comentar un parell de característiques importants a tenir en compte:

  • la CMUCam es comunica amb la SD mitjançant una interficie SPI http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
  • Necessitem tenir la SD amb un format FAT de 16 bits (no suporta FAT de 32 bits, ni altres de linux com la ext3)
  • Els subdirectoris emmagatzemats a la SD no permeten més de 254 fitxers

Per provar la SD, mirem de fer un petit programa, que escrigui alguna cosa en un fitxer, i després poguem consultar que s’ha escrit correctament:

#include "cc3.h"

int main (void)
{
	FILE *fp;
	cc3_uart_init (0, CC3_UART_RATE_115200, CC3_UART_MODE_8N1,
                 CC3_UART_BINMODE_TEXT);
	printf("Programa de prova per escriure a SD\n");

	// Iniciem el sistema de fitxers
	cc3_filesystem_init ();
	printf("- Sistema de fitxers inicialitzat!\n");

	// Obrim un fitxer a la SD
	fp = fopen ("c:/prova.txt", "w");
	if (fp == NULL) {
		perror ("Ha fallat a l'obrir el fitxer");
	} else {
		fprintf( fp, "Hola! Això és un text de prova\n" );
		fclose (fp);
		printf("\t..Fitxer escrit!\n");
	}
	while(true);
}

La funció cc3_init_filesystem, esta implementada en el drivers.c de les llibreries del cc3, i el que fa es reservar l’espai com a dispositiu per la SD, és a dir, si no inicialitzem això, no podrem accedir a la SD.

Seguidament fem servir les funcions típiques de C fopen, fprintf, fclose per manegar el fitxer.

Les linies marcades en blau són coses que he arreglat posteriorment de provar el programa, perquè no sabia que eren necessàries, per exemple:

  • Resulta que la placa executa repetidament el codi, si no hi ha un control sobre el codi, és a dir, si no es programa que el codi tingui un cicle de vida “infinita” per dir-ho així, amb un bucle, la placa finalitza el codi i al cap d’un cert temps el torna a executar automàticament (hauré d’estudiar millor aquesta part). És a dir que escrivia més o menys cada segon a la SD, per això he posat un while.
  • També cal inicialitzar el port UART, perquè sino no pot enviar comunicacions al minicom mitjançant la sortida estandard.

Per compilar el programa, he hagut de crear una mica de “workspace” per treballar, ja que per generar el .hex, necessito accedir a un makefile que porta el compilador, i que no tenia el path correcte, l’he modificat i cap problema, la compilació és aquesta:

Seguidament he pujat el .hex com ja és habitual a la placa, i he engegat el minicom per comprovar que funciona:

Bé! Ja hem escrit al fitxer sembla! Ho he comprovat posant la SD al PC i assegurant-me que el fitxer era correcte.

Això és tot de moment, sembla que la SD funciona, i ja hem vist les quatre restriccions necessàries per fer-la funcionar correctament. El pròxim dia segurament ja començaré a mirar la càmara, que portarà molta més feina.

Advertisements

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s

Categories

%d bloggers like this: