Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El usar como memoria de datos de un PIC, una tarjeta SD, es un trabajo complicado, hasta develar sus
misterios. Hay poca informacin y la que hay est confusa y con equivocaciones. Me ha llevado mas de
diez das de trabajo poder hacer que el sistema funcione. Es mi anhelo, que con esta informacin les lleve
muchos menos das.
Lo primero de todo es que tengan en su PC un programa que lea y edite las tarjetas SD. Encontr el
Explorer y el WinHex. El primero me dej de leer el puerto USB con el adaptador de tarjeta y el segundo
me result el mejor. Bajarlo de http://alvareitor.programasfull.com. El archivo es
WinHex_15.0_SR2_Espanol_bY_Alvareitor.rar. Una vez bajado e instalado segn las instrucciones, vern
esta pantalla:
Muestra la memoria SD que uso para las experiencias. Marqu con rojo las cosas importantes.
Est conectada en un USB, drive O, Formateada en FAT16, muestro el sector 3, que comienza en la
direccin 600 hexadecimal, tiene 1.8 GB de capacidad til y casi 2 GB de capacidad total. 512 Bytes por
sector.
Lo ms importante que quiero mostrar es donde dice Sector fsico = 140 y Sector lgico= 3. Los @ los
grab yo y comienzan en la direccin lgica 0x600. En todos los ejemplos que vi en Internet usan esta
direccin para grabar. Tard muchos das experimentando sin poder grabar, hasta que encontr en un
artculo en ingls, que la direccin que se debe usar es la fsica. Y entonces grab y le bien. La direccin
lgica cero corresponde a la fsica 137 (Decimales), de manera que en lugar de marcar como inicio de
grabacin o lectura la direccin 0x600 = sector 3 x 0x200, se deber calcular (3 + 137) x 512 = 71680 , o
sea 0x11800.
En una segunda memoria SD de la misma capacidad, el sector lgico cero es 135 fsico, de manera que
para cada tarjeta se debe mirar el nmero y hacer los clculos, o en mi caso uso 137 para las dos.
Cuando segu haciendo experiencias con las grabaciones, en un caso por mala programacin me grab el
sector cero, y perd la FAT, con el resultado de Tarjeta imposible de leer en la PC.
Para formatear la SD, usar el programa oficial de tarjetas SD. Est en Download SD Formatter donde
encontrarn instrucciones de uso.
Instrucciones para formatear. Se bajan de esta direccin.
Cuando la quise formatear, el SD formatter no me la aceptaba, porque en el sector averiado, supongo que
estn los cdigos que protegen las SD contra copias piratas, si se las protege.
Entonces la formate con el Windows XP, haciendo botn derecho en luego seleccionar luego . Aparecer
la tarjeta SD si est conectada a la PC. All se formatea lento y destruir las protecciones, de manera que
desaparece la diferencia entre sectores lgicos y sectores fsicos. Solo queda el sector fsico, y no vale lo
que mostr arriba. La direccin donde comienza la escritura y la lectura se calcula como Sector * 512.
Para el sector 3 es 3 * 512 = 1536 en decimal o 0x600.
Encontrarn que en firmware simple, la direccin es 0x11800 y en el firmware funcin la direccin es 1536
decimal. En este ltimo caso, no hay diferencia entre fsico y lgico, y la funcin comando recalcula la
direccin a hexadecimal.
Para convertir unidades uso este convertidor. Tambin de la pgina pueden bajar el archivo fuente. (
www.arossini.com.ar ).
Comenc a disear mi propia interfase, con ayuda del osciloscopio y este esquema del manual de la
memoria San Disk, que se baja de aqu.
Ningn diseo usaba resistencias Pull Up, como indica el manual
0x40 00 00 00 00 95
CMD1
0x41 00 00 00 00 FF
CMD17
0x51 XX XX XX XX FF
CMD24
0x58 XX XX XX XX FF
Activa la tarjeta
COMANDO
RESPUESTA
CMD0
0x01
En espera
CMD1
0x00
Activo (Lista)
CMD17
CMD24
0x00
0xE5
Esquema
INDICA
Firmware
Hay en este trabajo, presentados dos Firmware:
a) Firmware simple.
b) Firmware funcion.
Los dos hacen lo mismo, escriben un sector de 512 Bytes con un carcter, y luego leen solo una cantidad
de direcciones limitada en ese sector grabado.
El a) est hecho de la manera ms simple posible, sin funciones que puedan hacer perder el fundamento
de la comunicacin SPI. Es un Firmware didctico. Cuando Ustedes hagan el suyo, podrn tratar de
ahorrar toda la memoria que quieran, seguramente.
El b), usan una funcin llamada comando, que enva los comandos, y adems funcines Inicializar,
Escribir y Leer.
Tiene comunicacin serie, para que manden a la PC todo lo que deseen, cuando hagan mejoras y
necesiten corregir o detectar errores. Encontrarn que la mayora de los comandos puerto serie estn
comentados, pues se usan solo en caso de problemas y me resultaron indispensables en su momento.
Ustedes des-comentarn lo que necesiten.
Us el PIC 16F877, porqu encontr ejemplos con el en Internet. Seguir con el 18F4550, pero presenta
algn problema pues coincide la comunicacin serie con el SPI, y ello me trajo conflictos que deber
solucionar.
Usamos cristal de 20Mhz para que al seleccionar el divisor de frecuencia de clock de SPI a 64
obtengamos una frecuencia del mismo de aproximadamente 312Khz. (frecuencia para inicializar la
memoria). La cuenta es 20000000 / 64 = 312500 Hz. La mxima frecuencia permitida para inicializar es
400 MHz. Luego puede llegar a 25 MHz.
Comunicacin SPI
Inicializacin
Escritura
Lectura
Estas ondas estn generadas con la rutina Prueba 05, del Firmware. En amarillo es clock, en azul es el
0x01.
//*************** Prueba 05 Mandamos clocks continuamente
CS = 1;
// Deshabilitamos la Tarjeta SD
Fotografa
Argumentos:
Respuesta:
Descripcin:
CMD0
No
R1
Resetea la tarjeta
CMD1
No
R1
Inicializa la tarjeta
CMD9
No
R1
CMD10
No
R1
CMD13
No
R2
CMD16
R1
CMD17
CMD24