Anda di halaman 1dari 22

Twittear

1
(http://twitter.com/#!/Turtle_Rock) (http://www.facebook.com/profile.php?id=1170317280&ref=ts)
(http://www.linkedin.com/in/javierlongares) (https://www.xing.com/#)
(http://www.javierlongares.com/arte-en-8-bits/?feed=rss2)
(skype:javier.longares?call)

Javier Longares
(http://www.javierlongares.com)
Bienvenido a mi sitio personal!
Inicio (http://www.javierlongares.com/)
Proyectos (http://www.javierlongares.com/index.php?page=proyectos)
Contacto (http://www.javierlongares.com/index.php?page=contacto)
Blog: Arte en 8 bits (http://www.javierlongares.com/arte-en-8-bits/)
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC
(http://www.javierlongares.com/arte-en-8-bits/author/jlongares/) Javier Longares (http://www.javierlongares.com) el 1
octubre, 2011 2 Comentarios (http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat16-fat32-para-las-
tarjetas-sd-mmc/#comments)
INTRODUCCIN

En el artculo anterior, veamos que gracias al controlador interno y a la arquitectura y organizacin de las tarjetas
SD/MMC se pueden escribir y leer bloques de 512 bytes de datos con relativa facilidad. Tambin se vio que estas
tarjetas incorporan comandos especficos para seleccionar grupos de bloques de 512 bytes y para seleccionar conjuntos
de grupos de estos bloques, de modo que con un comando posterior, se borraban todos los bloques seleccionados. Tras
la lectura de este artculo se comprender la utilidad de este mecanismo de borrado.
Para aproximarnos a la creacin y gestin de un sistema de archivos FAT en nuestro equipo electrnico, primero
debemos hacer una introduccin a los discos y a la manera en la que estaban organizados para que los antiguos
sistemas operativos DOS los gestionasen.
Los discos, entendindolos como medios magnticos, son el principal sistema de almacenamiento duradero de los
ordenadores personales. Estn formados por una superficie circular dividida en pistas concntricas que contienen cada
una un nmero de sectores de tamao fijo. Bajo DOS, los sectores tienen un tamao fijo de 512 bytes. Que si bien
puede modificarse, es a costa de perder compatibilidad, por lo que es muy raro encontrarse con algn sistema que lo
haga.
El primer sector fsico de un disco contiene informacin especial, como el sector de arranque de los disquetes, el cdigo
de la tabla de particiones en discos duros o simplemente las instrucciones necesarias para escribir en pantalla el
conocido mensaje No es disco sistema. Retire y presione cualquier tecla. En el caso de los discos duros, el cdigo es
relativamente sencillo: consulta la tabla de particiones ubicada en este mismo sector, determina cul es la particin
activa, dnde comienza y dnde termina. Para, a continuacin, cargar el sector lgico cero de esa particin y ejecutarlo.
21
Share Share
18
Compartir Compartir
18
Me gusta Me gusta
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
1 de 22 30/05/2014 22:02
En los disquetes no existe dicho paso intermedio y el sector cero lgico coincide con el sector cero fsico. Por su
sencillez, ste es el mtodo recomendado para implementar en tarjetas MultimediaCard.
Antes de comenzar a realizar una comparativa entre los sistemas de archivos FAT16 y FAT32, conviene introducir
algunos conceptos y nociones. Cabe decir adems que independientemente del tipo de sistema de archivos, Windows
accede a los discos con sistema de acceso de 32 64 bits, pero nuestros microcontroladores podrn acceder a los
sistemas de archivos de las tarjetas MultimediaCard con 16, 32 e incluso, los ms valientes, con 8 bits.

ORGANIZANDO LA MEMORIA: CLUSTERS + PUNTEROS = SISTEMAS DE ARCHIVOS

MS-DOS define un concepto llamado cluster, que es una agrupacin de sectores y, a su vez, la unidad mnima de
memoria que es capaz de recuperar un sistema operativo. La ventaja de utilizar clusters radica en que resulta ms
sencillo manejar pocos clusters que muchos sectores; mientras que el inconveniente es que, al ser la menor unidad de
memoria capaz de entender el sistema operativo, si en un disco un cluster son 32 Kb y escribimos un fichero con un
byte, se emplean 32 Kb para ello. Por este motivo, cuanto ms pequeo sea el tamao del cluster, menor espacio se
pierde. Siendo lo ideal desde esta perspectiva, si bien no siempre posible, que el tamao de un cluster sea un sector.
Para entender cmo funciona un sistema de archivos MS-DOS, vanse los clusters como pginas de memoria. Para
optimizar su acceso, al igual que en un libro, se dispondr de un ndice, llamado FAT (File Allocation Table); con punteros
que sealen de algn modo a los clusters. Segn estos punteros sean de 12, 16 32 bits, se llamar al sistema de
archivos FAT12, FAT16 FAT32 respectivamente.
Para poder tener un ndice, todos los clusters de la particin deben estar numerados. As, se crea una tabla con punteros
al inicio de la particin, con tantos punteros como clusters haya en la misma. Para conocer cuntos punteros ha de haber
en la particin, y, por tanto, cuntos clusters y cul ser el tamao del cluster; hay que realizar un clculo: si los punteros
son de 16 bits, el nmero mximo de clusters al que podrn apuntar ser 65535. Por tanto se divide el tamao de
nuestra particin por 65535 y se toma un nmero mltiplo de 512 como resultado. A modo de ejemplo, si la unidad
cuenta con 827.000.000 de bytes, cada cluster tendr 16.384 bytes y, realizando la operacin inversa sabremos que
tenemos 50476 clusters en la particin.
Adems se define en el disco otro espacio llamado directorio raz del disco, como un espacio, limitado en FAT12 y en
FAT16, y de tamao variable en FAT32; donde se escribirn los nombres de los ficheros, sus atributos y el primer cluster
donde comienza su contenido. La forma de leer o escribir un fichero es un tanto peculiar y se introduce ms adelante. De
momento, con lo mencionado se pueden observar algunas ventajas e inconvenientes de utilizar un sistema de archivos
FAT16 FAT32. No se analizan las posibilidades de FAT12, pues permite direccionar tan poca memoria, tpicamente los
1.44 Mb de un disquete; que es prcticamente una estructura de datos de museo.

Sistema de archivos
Ventajas Inconvenientes
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
2 de 22 30/05/2014 22:02
FAT16 Mediante una tabla de slo
65535 entradas de 2 bytes se
direcciona toda la memoria.
Posibilidad de incluir toda la
tabla en una cach de slo
128 Kb
El uso de una cach de coste
nfimo implica mayor rapidez
con menor potencia de clculo
El tamao de la particin
estar limitado, ya que
Windows no acepta clusters
de ms de 32 Kb
Se desperdicia mucho
espacio, a partir de tamaos
de disco relati-vamente
importantes, as, para un disco
de 2 Gb el tamao de un
cluster es de 32 Kb
FAT32 Se desperdicia mucho menos
espacio de disco
Prcticamente ya no hay lmite
para el tamao de la particin
Al aumentar el tamao de la tabla, y
ser sus punteros de 4 bits se pierde
mucho tiempo en acceder a ella y
deja de ser sencilla la
implementacin de una cach en
microprocesadores pequeos de 16
bits.

LA FAT BYTE A BYTE

Con los conceptos introducidos, se trata aqu de profundizar en la implementacin de los sistemas de archivos FAT16 y
FAT32. Para ello, primero se estudiar FAT32 y, posteriormente, se vern las pequeas diferencias a bajo nivel que
FAT16 presenta.
Para que un sistema operativo reconozca una unidad de almacenamiento con el sistema de archivos FAT32, en el primer
sector lgico tienen que encontrarse una serie de datos sobre la unidad. Este sector se denomina sector de arranque,
Boot Sector, o sector cero. Tras este sector hay un espacio reservado, tpicamente de 32 sectores.
A continuacin, se encuentra la tabla FAT propiamente dicha, que como se ha introducido, ser una sucesin de
entradas de cuatro bytes que apuntan a los distintos clusters de la unidad. Tras la FAT, se encuentra el directorio raz,
Root, cuyo tamao no est fijado en el sector de arranque, como ocurre en FAT16, sino que es una cadena de clusters,
comportndose como un fichero ms.

Funcionamiento a grandes rasgos
Una entrada en el directorio contiene, entre otros datos, el nombre del fichero y el primer cluster donde se encuentra el
contenido del fichero. Tmese por ejemplo que el primer cluster del fichero fuese el cluster tres. Tras leer el cluster tres,
para seguir leyendo el fichero, se va a la posicin de FAT correspondiente al cluster tres. Teniendo en cuenta que una
entrada son cuatro bytes, en el primer sector de FAT, los bytes del doce al quince, contienen el nmero del siguiente
cluster de la cadena, por ejemplo, 128. Para encontrar el siguiente cluster hay que volver a leer la posicin en FAT
correspondiente al cluster 128; que ser, en el segundo sector de la FAT, los bytes del cero al tres.

El sector cero
Los discos con sistema de archivos FAT32 tienen informacin til en el sector cero para trabajar con ellos. Esta
informacin se encuentra almacenada en campos definidos por el estndar de Microsoft [1] y su contenido se explica a
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
3 de 22 30/05/2014 22:02
continuacin.
BS_jmpBoot (Bytes del 0 al 2): Salto a la rutina de arranque. Normalmente un disco no tendr otra rutina de arranque
que la de escribir Retire disco y presione una tecla o similares, salvo que sea uno de los denominados discos de
arranque.
BS_OEMName (Del byte 3 al 10): Es slo un string. Los sistemas operativos Microsoft Windows escriben MSDOS5.0,
pese a que en su documento FAT: General Overview of On-Disk Format indican que el string MSWIN4.1 es el
recomendado para una mayor compatibilidad. Aunque quiz hayan cambiado la cadena en honor al mejor sistema
operativo que ha habido en todos los tiempos
BPB_BytsPerSec (Bytes 11 y 12): Indica el nmero de bytes por sector. Lo deseado para mxima compatibilidad es
512.
BPB_SecPerClus (Byte 13): Indica el nmero de sectores contenidos en un cluster. Sus valores legales son potencias
de dos. El valor del nmero de bytes por cluster (BPB_BytsPerSec * BPB_SecPerClus) no debe ser mayor que 32 Kb.
Dependiendo del tamao del disco se utilizar un valor u otro, por ejemplo, en FAT32:
64 Mb: un cluster ser un sector.
128 Mb: un cluster sern dos sectores.
256 Mb: un cluster sern cuatro sectores.
32 Gb: un cluster sern treinta y dos sectores
BPB_RsvdSecCnt (Bytes 14 y 15): Indica el nmero de sectores reservados del volumen, comenzando por el primer
sector del volumen. Este campo no puede ser cero. Para volmenes FAT12 y FAT16 este campo no puede tener otro
valor que uno. En sistemas FAT32, tpicamente es 32.
BPB_NumFATs (Byte 16): Nmero de tablas FAT en el volumen. Este campo tpicamente contiene dos para cualquier
tipo de volumen FAT. Su utilidad es guardar una copia de seguridad de las cadenas de clusters para posibilitar las
recuperaciones de datos.
BPB_RootEntCnt (Bytes 17 y 18): Contiene el nmero de entradas de 32 bytes al directorio raz. Su valor multiplicado
por 32 debe ser mltiplo de BPB_BytsPerSec. Para una mxima compatibilidad, los sistemas FAT16 suelen usar el valor
512. En sistemas FAT32, su valor puede ser cero porque el directorio raz se estructura como un fichero y se direcciona
en la tabla FAT.
BPB_TotSec16 (Bytes 19 y 20): Nmero de sectores del volumen. Si es cero, es porque el valor es mayor o igual que
010000, entonces BPB_TotSec32 debe ser distinto de cero.
BPB_Media (Byte 21): Los valores legales en este campo son 0xF0, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE y 0xFF.
Si el medio es fijo se usa 0xF8 tpicamente y 0xF0 si el medio no es fijo.
Se ha probado a formatear tarjetas con el valor 0xF0 y Windows no las reconoca correctamente, ya que les asignaba un
tamao de disco mucho menor que el indicado. Por tanto, pese a no ser discos fijos, al dar formato a las tarjetas se
recomienda escribir en este campo el valor 0xF8, que es el que tambin utiliza Windows.
BPB_FATSz16 (Bytes 22 y 23): Indica el nmero de sectores ocupados por una tabla FAT.
Si el sistema de archivos es FAT32, este campo no se utiliza y se escribe a cero.
BPB_SecPerTrk (Bytes 24 y 25): Slo tiene importancia para volmenes con geometra para interrupciones 013.
BPB_NumHeads (Bytes 26 y 27): Igualmente que BPB_SecPerTrk slo tiene importancia para volmenes muy
especficos como disqueteras, cintas, etc.
BPB_HiddSec (Bytes 28, 29, 30 y 31): Nmero de sectores ocultos que preceden a la particin que contiene este
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
4 de 22 30/05/2014 22:02
volumen FAT. Sin relevancia en este sistema.
BPB_TotSec32 (Bytes 32, 33, 34 y 35): Indica, siempre que BPB_TotSec16 sea cero, el nmero total de sectores que se
encuentran en el volumen. Hay que tener en cuenta que una tarjeta de 128 Mb no tiene 262.144, como estrictamente le
correspondera, sino que se ha comprobado que tienen 246016 escrito en este campo. Los fabricantes indican
capacidades ligeramente superiores a las reales, ya que venden cada Mb como si fuesen 1000 Kb y no 1024;
etiquetando as con 128 Mb a las tarjetas de 128 millones de bytes.
Los campos que se encuentran a continuacin son especficos de sistemas de archivos FAT32, existiendo otros campos
para sistemas FAT12 y FAT16.
BPB_FATSz32 (Bytes 36, 37, 38 y 39): Nmero de sectores ocupados por una FAT.
BPB_ExtFlags (Bytes 40 y 41): Flags del sistema de archivos, no se utilizan y se dejan a cero.
BPB_FSVer (Bytes 42 y 43): La versin del sistema de archivos, utilizado para definir los campos del sector FSInfo,
nosotros utilizamos la versin 0.0, al igual que Windows 2000, en la que dicho sector no tiene casi importancia.
BPB_RootClus (Bytes 44, 45, 46 y 47): Indica el nmero del primer cluster del directorio raz. El resto de sectores que
vaya ocupando este directorio se irn direccionando en la FAT como si de un archivo se tratara.
BPB_FSInfo (Bytes 48 y 49): Indica el nmero del sector de la estructura FSInfo, que normalmente suele ser uno.
BPB_BkBootSec (Bytes 50 y 51): Contiene el nmero del sector donde se encuentra la copia de seguridad del sector de
arranque.
BPB_Reserved (Bytes del 52 al 63 inclusive): Estos bytes estn reservados para futuras revisiones y expansiones del
sistema de archivos FAT32.
BS_DrvNum (Byte 64): Nmero de la unidad. Usado para sistemas MS-DOS. Sin relevancia en nuestro sistema.
BS_Reserved1 (Byte 65): Usado por Windows NT, para formatear un volumen se escribe este campo a cero.
BS_BootSig (Byte 66): Firma digital que indica la existencia de los siguientes campos. Si no existe o no es la correcta, el
volumen no ser reconocido por los sistemas operativos de Microsoft. Su valor debe ser 029.
BS_VolID (Bytes 67, 68, 69 y 70): Nmero del volumen, generado generalmente por el reloj del sistema y que puede ser
utilizado con fines de seguridad.
BS_VolLab (Bytes del 71 al 81): Es una cadena de caracteres que indica la etiqueta del volumen, inicialmente los
sistemas operativos Microsoft escriben aqu NO NAME.
BS_FilSysType (Bytes 82 a 89 inclusive): Es otra cadena de caracteres con el nombre del sistema de archivos. En este
caso FAT32.
Existe adems otra firma digital en los bytes 510 y 511 cuyo valor correcto es 0x55AA.
El sector FSInfo
El sector FSInfo, cuya posicin est indicada en el correspondiente campo del sector de arranque, contiene una
informacin que podra ser til de ser correcta ya que contiene dos campos: uno indicando cul es el siguiente cluster
libre y otro indicando el nmero total de clusters libres en la unidad. Sin embargo, estos datos no tienen porqu ser
ciertos, ya que por ejemplo, Microsoft Windows 2000
TM
no los actualiza, y por ello, este equipo tampoco, pues su uso
podra ocasionar errores. Sin embargo, s que se recomienda su uso en cach, pues dar como resultado un producto
ms rpido.

Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
5 de 22 30/05/2014 22:02
De todos modos, el sector incluye una serie de firmas digitales cuyo valor s se comprueba y, si no son correctas, el
volumen no es inicializado.

A continuacin se describen los campos de este sector:
FSI_LeadSig (Bytes 0, 1, 2 y 3): su valor debe ser 041615252
FSI_Reserved1 (Bytes del 4 al 479 ambos inclusive): reservado para futuras expansiones del sistema de archivos
FAT32.
FSI_StrucSig (Bytes 484, 485, 486, 487): su valor debe ser 061417272.
FSI_FreeCount (Bytes 488, 489, 490 y 491): Tericamente indica el nmero de clusters libres en la unidad, pero en la
versin de 0.0 de FSInfo, estos datos no tienen porqu ser correctos. Se recomienda su uso en la cach.
FSI_NxtFree (Bytes 492, 493, 494 y 495): Indica el nmero del siguiente cluster libre. Al igual que ocurre con el campo
anterior, su valor no tiene porqu ser correcto. Se recomienda su uso en la cach.
FSI_Reserved2 (Bytes del 496 al 511 ambos inclusive): Reservados para futuras expansiones del sistema de archivos
FAT32.
EMPECEMOS A DIVERTIRNOS: N POCO DE MATEM!TICAS

Una vez escritos correctamente los sectores Boot y FSInfo, un volumen FAT32 ser reconocido correctamente por un
sistema operativo Microsoft. La siguiente estructura de datos importante es la propia tabla FAT.

La FAT se define como una lista enlazada que apunta a las direcciones de los clusters que tienen el contenido de un
archivo. El primer cluster de datos es el cluster dos, normalmente asignado al directorio raz.

El primer sector de la regin de datos, que es el primer sector del cluster dos, se calcula del siguiente modo:

if (BPB_FATSz16 != 0) {
FATSz = BPB_FATSz16;
}
else {
FATSz = BPB_FATSz32;
}
FirstDataSector = BPB_ResvdSecCnt + (BPB_NumFATs * FATSz);

Dado un nmero de cluster N, el nmero del primer sector de este cluster se computa del siguiente modo:

Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
6 de 22 30/05/2014 22:02
FirstSectorOfCluster = ((N 2) * BPB_SecPerClus) + FirstDataSector;

De modo que el primer sector de un cluster podra calcularse con la siguiente funcin:
/*! Funcin que calcula el primer sector de un cluster.
* @param[in] cluster Cluster del que se quiere conocer su primer sector.
* @return Primer sector del cluster
*/
unsigned long PrimerSectorDelCluster( unsigned long cluster ) {
return (cluster 2) * FAT.SecPerClus + FAT.RootDirSector;
}
Cmo se escribe un fichero en un sistema de archivos FAT 32
Un archivo en FAT32 tiene, junto con sus atributos y nombre, el nmero del primer cluster de dicho archivo. Tras leer
dicho cluster, en adelante ultimoClusterProcesado; se deber averiguar cul es el siguiente cluster libre en disco, en
adelante siguienteCluster. Para calcular siguienteCluster hay que tener en cuenta que ultimoClusterProcesado, aunque
no est marcado como ocupado lo est, debiendo por ello ignorarlo en este cmputo. Una vez concluido
ultimoClusterProcesado y calculado siguienteCluster, se escribe en la posicin de FAT correspondiente a
ultimoClusterProcesado el nmero que apunte a siguienteCluster y as sucesivamente.
Cuando una cadena de clusters acaba, se marca fin de cadena de clusters haciendo siguienteCluster = 0xFFFFFFF8,
indicando que no hay siguiente cluster, si la cadena de clusters se refiriese a un directorio la marca es 0x0FFFFFFF.

Estas y otras marcas de inters en la FAT se listan a continuacin:
#define FIN_DE_FICHERO 0xFFFFFFF8 //EOF
#define FIN_DE_DIRECTORIO 0x0FFFFFFF
#define CLUSTER_LIBRE 000000000
#define CLUSTER_LIBRE 010000000
#define CLUSTER_LIBRE 0xF0000000
#define CLUSTER_DEFECTUOSO 0x0FFFFFF7

Determinaci"n del ti#o de FAT
El tipo de FAT se determina solamente por el nmero de clusters en el volumen. Para ello se calculan los sectores del
directorio raz:

sectoresDelDirectorioRaiz = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec 1)) / BPB_BytsPerSec;

Determinando despus el nmero de sectores en la regin de datos del volumen:
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
7 de 22 30/05/2014 22:02

if ( BPB_TotSec16 != 0 ) {
numeroDeSectores = BPB_TotSec16;
}
else {
numeroDeSectores = BPB_TotSec32;
}
sectoresDeDatos = numeroDeSectores (BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors);

Lo que permite calcular el nmero de clusters.

numeroDeClusters = sectoresDeDatos / BPB_SecPerClus;


Cabe sealar que existe una diferencia entre numeroDeClusters y el nmero mximo de cluster vlido porque el primer
cluster de datos vlidos es el 2.
La forma de determinar qu tipo de FAT corresponde a un volumen, se indica en el documento de Microsoft FAT General
Overview of On-Disk Format[1] en funcin del nmero de clusters de datos, CountOfClusters, de la siguiente manera:

if (CountOfClusters < 4085) {
/* El volumen es FAT12 */
} else if (CountOfClusters < 65525) {
/* El volumen es FAT16 */
} else {
/* El volumen es FAT32 */
}

Otro clculo importante relacionado con la estructura FAT es, dado un nmero de cluster vlido ultimoClusterProcesado,
cmo encontrar la posicin que le corresponde en la tabla FAT para escribir por dnde continua el fichero. A continuacin
se muestra una forma de codificar la solucin a este problema:

SectorFAT = FAT.InicioFAT;
if (ultimoClusterProcesado > 127) {
do{
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
8 de 22 30/05/2014 22:02
ultimoClusterProcesado -= 128;
SectorFAT++;
}while (ultimoClusterProcesado > 127);
}
ultimoClusterProcesado <<= 2;

ultimoClusterProcesado se multiplica finalmente por cuatro porque en FAT32, una entrada de FAT son cuatro bytes. Por
ello, por ejemplo al ultimoClusterProcesado dos, le corresponda la posicin ocho del primer sector de FAT.
Los 4 bits ms significativos de una marca FAT en FAT32 estn reservados y pueden ignorarse.
Otra nota a tener en cuenta en la estructura FAT, es el ltimo sector de la misma, ya que el ltimo cluster direccionable
no ser la ltima entrada del ltimo sector de FAT, sino la correspondiente a numeroDeClusters + 1; que corresponde al
nmero mximo de cluster vlido. Las posiciones ms all de esta entrada en la FAT sern tomadas como cero.

Formateando un disco

Queda una cuestin de importancia. Si el tipo de FAT depende del nmero de clusters de datos y el nmero de sectores
disponible en el rea de datos de un volumen FAT depende del tamao de la tabla FAT; teniendo un volumen sin
formatear, habr que conocer el modo de averiguar cmo calcular los valores adecuados para escribir en los campos
correspondientes BPB_SecPerClus y BPB_FATSz16 BPB_FATSz32. Los sistemas operativos de Microsoft realizan
estas tareas con valores fijos y tablas.
Dichos sistemas operativos slo formatean con FAT12 los volmenes que corresponden a disquetes, y puesto que hay
pocos valores de capacidad realizan esta tarea mediante tablas.
Los sistemas Windows utilizan una regla para dar formato FAT16 o FAT32. Simplemente, si un volumen es menor de 512
Mb, es FAT16, caso contrario, es FAT32. Aunque de todos modos, puede forzarse el que se d formato a una unidad con
un sistema de archivos u otro. Las tablas correspondientes a FAT16 y FAT32 de los sistemas operativos Microsoft para
obtener el valor de BPB_SecPerClus se indican a continuacin. En ellas, el tamao en sectores es el tamao mximo de
disco, dado en sectores, para que el volumen tenga el correspondiente valor de SecPerClus.
FAT16
Tamao
mximo de la
unidad
Tamao mximo
en sectores
BPB_SecPerClus Comentarios
4.1 Mb 8400 0 Valor errneo
16 Mb 32680 2
128 Mb 262144 4
256 Mb 524288 8
512 Mb 1048576 16
1 Gb 2097152 32 Formato FAT16
forzado
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
9 de 22 30/05/2014 22:02
2 Gb 4194304 64 Formato FAT16
forzado
> 2 Gb 0xFFFFFFFF 0 Valor errneo

FAT32
Tamao
mximo de la
unidad
Tamao mximo
en sectores
BPB_SecPerClus Comentarios
32.5 Mb 66600 0 Valor errneo
260 Mb 532480 1
8 Gb 16777216 8
16 Gb 33554432 16
32 Gb 67108864 32
> 32 Gb 0xFFFFFFFF 64 Discos mayores de
32 Gb tienen
clusters de 32 Kb

Para calcular el tamao de la FAT, conocido el tamao del disco, y el correspondiente tamao de un cluster, Microsoft
suministra un cdigo que no explica y que calcula el tamao de la FAT conocidos ambos datos, y es el que sigue:

TmpVal1 = DskSize (BPB_ResvdSecCnt + RootDirSectors);
TmpVal2 = (256 * BPB_SecPerClus) + BPB_NumFATs;
if (FATType == FAT32) {
TmpVal2 = TmpVal2 / 2;
}
FATSz = (TmpVal1 + (TmpVal2 1)) / TmpVal2;
if (FATType == FAT32) {
BPB_FATSz16 = 0;
BPB_FATSz32 = FATSz;
} else
{
BPB_FATSz16 = FATSz;
}

Creando directorios $ fic%eros
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
10 de 22 30/05/2014 22:02


En este artculo, por motivos de sencillez, no se utilizan entradas de directorio largas, esto es, nombres de archivos
mayores de 8 caracteres. Limitndose a las entradas cortas, sin embargo, cabe decir, que para que una entrada corta
sea reconocida como tal, habr de ser una entrada de tipo MS-DOS. Y, por tanto, todos sus caracteres debern estar en
maysculas, de lo contrario obtendremos errores, y el archivo no ser reconocido correctamente.
La tabla FAT no es ms que un listado de entradas, cada una de las cuales es una estructura de 32 bytes. As, si se
exploran los sectores de la FAT no se tendrn ms que una lista lineal de estas entradas, dentro de cada una de las
entradas, uno de los campos, es el primero de los clusters que contiene el fichero (o directorio) cuyo nombre tambin
est en la entrada. Un directorio tiene la misma estructura que un fichero. El nico directorio especial es el directorio raz.
En FAT32, el directorio raz, es una cadena de clusters de tamao variable, como cualquier otro directorio. El primer
cluster del directorio raz viene indicado por BPB_RootClus. A diferencia del resto de directorios, el directorio raz no
tiene etiquetas de fecha y hora, no tiene nombre y sus dos primeras entradas no son . y .., denominadas dot y dotdot
respectivamente. Adems, es el nico directorio en que sera vlido que un archivo tuviese el atributo ATTR_VOL_ID.
A continuacin se muestra la estructura de datos de una entrada corta (32 bytes) en una tabla FAT32
Nombre del campo Offset
(en bytes)
Tamao
(en bytes)
Descripcin
DIR_Name
0 11 Nombre corto, en
maysculas, del archivo o del
directorio.
DIR_Attr
11 1 Atributos del archivo.
DIR_NTRes
12 1 Utilizado por Windows NT.
Se recomienda poner este
byte a cero al crear un
fichero nuevo e ignorarlo
despus.
DIR_CrtTime_Tenth
13 1 Etiqueta de los milisegundos
cuando se cre el fichero.
Campo opcional.
DIR_CrtTime
14 2 Hora a la que se cre el
fichero. Campo opcional.
DIR_CrtDate
16 2 Fecha en la que se cre el
fichero. Campo opcional.
DIR_LstAccDate
18 2 Fecha en que se accedi al
fichero por ltima vez.
Campo opcional.
DIR_FstClusHI 20 2 Los 2 bytes ms
significativos de la palabra
que indica cul es el primer
cluster del contenido de ese
fichero o directorio.
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
11 de 22 30/05/2014 22:02
DIR_WrtTime 22 2 Hora de la ltima escritura.
La creacin se considera una
escritura. Este campo es
obligatorio.
DIR_WrtDate 24 2 Fecha de la ltima escritura.
La creacin se considera
como una escritura. Este
campo es obligatorio.
DIR_FstClusLO 26 2 Los dos bytes menos
significa-tivos de la palabra
que indica cul es el primer
cluster del contenido de ese
fichero o directorio.
DIR_FileSize 28 4 Tamao del Fichero en bytes.
Ha de ser coherente con la
cadena de clusters o dar
error.
En lo relativo al byte de atributos, es un valor bit-masked, y el significado de cada uno de los bits que componen la
mscara se indica a continuacin:
Atributo Valor de
DIR_Attr
Descripcin
ATTR_READ_ONLY 001 Indica que no se puede escribir
en el archivo.Un intento de
escritura debe generar error.
ATTR_HIDDEN 002 Un listado normal del directorio
no debe mostrar este archivo.
ATTR_SYSTEM 004 Indica que el archivo pertenece a
un sistema operativo.
ATTR_VOLUME_ID 008 Slo puede haber un archivo con
este atributo y debe de estar en el
directorio raz. El nombre del
archivo que tenga este atributo, si
lo hay, ser la etiqueta del
volumen. En este archivo,
DIR_FstClusLO y DIR_FstClusHI
debern ser cero.
ATTR_DIRECTORY 010 Indica que el archivo es un
directorio.
ATTR_ARCHIVE 020 Las utilidades backup usan este
bit para indicar qu ficheros han
sido creados, modificados o
cambiados de nombre desde que
se hizo la ltima copia de
seguridad.
ATTR_LONG_NAME 0x0F Indica que es un archivo con
nombre mayor de 11 bytes.
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
12 de 22 30/05/2014 22:02

Consideraciones sobre DIR_Name[0]:
- Si DIR_Name[0] es 0xE5 la entrada del directorio est vaca.
- Si DIR_Name[0] es 000 la entrada del directorio est vaca y el resto de entradas del directorio que haya a
continuacin estn tambin vacas. Por ello, cuando se borre un archivo, se borrar su nombre con 0xE5 y no con 000.
- Si DIR_Name[0] es 005, se procesar como si fuese 0xE5, ya que 0xE5 corresponde a un carcter especial
perteneciente a los caracteres kanji, usados en algunos idiomas como japons y chino, en cuyas FAT ya se indica esta
caracterstica.
El nombre de un archivo quedar dividido, para el sistema operativo, en 2 partes, llamadas nombre y extensin, de modo
que los 8 primeros bytes de DIR_Name correspondern a su nombre y los 3 ltimos correspondern a su extensin. Los
bytes sobrantes del nombre debern completarse con el carcter de espaciado 020, salvo que queramos indicar el
espacio especial 0xFF.
Cuando se crea un directorio, se marca ATTR_DIRECTORY y su tamao se fija a cero. Se indica en los
correspondientes campos en qu cluster comienza el directorio y en FAT, se recorre la correspondiente cadena de los
clusters que pertenecen a ese directorio terminando con la marca 0x0FFFFFFF, se necesitan crear 2 entradas
especiales en ese directorio, llamadas dot (.) y dotdot (..), en primer y segundo lugar de dicho directorio respectivamente.
En el campo correspondiente al tamao de estas entradas se indicar cero, y en el resto de campos se indicarn los
mismos valores que los del directorio creado. El primer cluster de dot ser el mismo que el del directorio creado, y el
primer cluster de dotdot ser el directorio en el que est contenido este nuevo directorio, si es cero, apuntar al directorio
raz.
La siguiente figura, muestra cmo se grabara un cluster de un fichero:
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
13 de 22 30/05/2014 22:02
(http://www.javierlongares.com/arte-en-8-bits/wp-content/uploads/2011/09/Flujo-de-grabaci%C3%B3n-de-un-fichero.jpg)
Figura 1. Diagrama de bloques con el proceso de grabacin de datos en un fichero
Este procedimiento se llamara cada vez que hubiese datos en RAM que deseasen ser grabados en un fichero que ya
habra sido dado de alta en la estructura FAT, el prototipo del fichero podra ser, por ejemplo el siguiente:
/*! Funcin que graba datos en un fichero. Si el fichero no existe se crear.
* @param[in] *nombreDelFichero apunta a un string que contiene el nombre del fichero. No es necesario indicar la
longitud, <br>
* ya que en el estndar se definen los caracteres que delimitan el final de esta cadena.
* @param[in] *datos puntero al inicio del array de datos que desea grabarse en el fichero.
* @param[in] numeroDeBytes Nmero de bytes que desean grabarse en el fichero.
* @param[in] EOF sirve para indicar si habr que cerrar el fichero o mantenerlo abierto
* @return un valor previamente definido con el estado de la ejecucin, que podra ser ok, error, fichero lleno, fichero
nuevo, etc.
*/
unsigned char GrabarDatosEnFichero ( unsigned char * nombreDelFichero, unsigned char *datos, unsigned long
numeroDeBytes, unsigned char EOF ) ;
Fec%a $ &ora
Slo son obligatorios los campos DIR_WrtTime y DIR_WrtDate.

La fecha son 16 bits que indican la fecha relativa al 1 de enero de 1980, estructurados de la siguiente forma:
Bits 0-4: Da del mes, su rango vlido es desde el 0 hasta el 31.
Bits 5-8: Mes del ao, su rango vlido es desde el 1 hasta el 12.
Bits 9-15: Ao desde 1980, su rango vlido es desde el 0 hasta el 127.

La hora son 16 bits que la indican con una granularidad de 2 segundos de la siguiente forma:
Bits 0-4: Segundos, contados de 2 en 2, su rango vlido es de 0 a 29.
Bits 5-10: Minutos, su rango vlido es de 0 a 59.
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
14 de 22 30/05/2014 22:02
Bits 11-15: Horas, su rango vlido es de 0 a 23.

Diferencias entre FAT'( $ FAT)*
La diferencia principal a la hora de elaborar cdigo, es el hecho que una entrada en FAT, que en FAT32 son cuatro bytes,
en FAT16 son dos. Por lo tanto, donde antes se multiplicaba por cuatro, habr de hacerse por dos. Esto tambin implica
que mientras en un sector de FAT32 caben 128 punteros a clusters, en FAT16 pueden alojarse 256.
Tambin en el sector cero se encuentran diferencias, pues su contenido es en parte distinto ya que, por ejemplo, en
FAT16 no existe el sector FSInfo. Adems, a partir de la posicin 36 (campo BPB_FATSz32 en FAT32), el contenido de
los campos es distinto en FAT16 y en FAT12. Sus campos se enumeran a continuacin:
BS_DrvNum (Byte 36): Importante slo para unidades con interrupciones 013
BS_Reserved1 (Byte 37): Reservado, utilizado por Microsoft Windows NT
TM
.
BS_BootSig (Byte 38): Indica que los siguientes tres campos existen, su valor debe ser 029.
BS_VolID (Byte 39): Nmero de serie del volumen, en ordenador, generado por el reloj y utilizado para aplicaciones de
seguridad, sin relevancia alguna para esta aplicacin.
BS_VolLab (Byte 43): String de 11 bytes que Microsoft Windows
TM
escribe con NO NAME
BS_FilSysType: String de ocho caracteres que indica el nombre del sistema de archivos: FAT12 FAT32, tambin
puede ser simplemente FAT.

Se puede observar que estos campos existen en FAT32, pero con una posicin diferente.
Otra diferencia importante es que en FAT16, el directorio raz no es una estructura de fichero, sino que es un nmero
reservado de sectores que se indica en los campos correspondientes del sector cero.

UN EJEMPLO DE FUNCIONES QUE PODRA INCORPORAR LA LIBRERA
/*! Funcin que devuelve el primer cluster que se encuentra libre en la FAT
* @return el primer cluster libre encontrado
*/
unsigned long SiguienteClusterLibre ( void) ;
/*! Escribe en la posicin del ltimo cluster procesado el nmero que indica el siguiente cluster en el cual contina el
contenido
* del fichero.
* @param[in] ultimoClusterProcesado posicin en la FAT en la cual habr que escribir el nmero del siguiente cluster del
fichero.
* @param[in] siguienteCluster cluster en el cual contina el contenido del fichero
* @return cdigo de error con el estado de ejecucin de la funcin.
*/
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
15 de 22 30/05/2014 22:02
unsigned char EscribirFAT ( ultimoClusterProcesado, siguienteCluster ) ;
/*! Busca un fichero a partir de su nombre y devuelve el primer cluster que contiene datos de dicho fichero.
* @param[in] nombreDelFichero puntero al inicio del string que contiene el nombre del fichero, en formato short name.
* @return el cluster en el cual inicia el fichero su contenido o un cdigo de error de fichero no encontrado, invlido, etc
*/
unsigned long BuscarFichero ( unsigned char *nombreDelFichero );
/*! Lista el contenido del directorio recibido como parmetros, o del directorio raz si recibe NULL o .
* @param[in] tramaDeParametros puntero a un string, finalizado por enter, con los parmetros similares al DIR de
MS-DOS 5.0
* @return un puntero a una cadena con el listado de ficheros del directorio, su espacio en disco, etc.
*/
unsigned char *dir ( unsigned char *tramaDeParametros );
/*! Crea un directorio
* @param[in] nombreDelDirectorio Nombre del directorio que desea crearse
* @return un cdigo con el estado de ejecucin del comando, por ejemplo, OK, disco lleno, etc
*/
unsigned char MD ( unsigned char *nombreDelDirectorio );
/*! Borra un directorio
* @param[in] nombreDelDirectorio Nombre del directorio que desea borrarse
* @return un cdigo con el estado de ejecucin del comando, por ejemplo, OK, el directorio no existe, etc
*/
unsigned char RD ( unsigned char *nombreDelDirectorio );
/*! Borra un fichero
* @param[in] nombreDelFichero Nombre del fichero que desea borrarse
* @return un cdigo con el estado de ejecucin del comando, por ejemplo, OK, disco lleno, etc
*/
unsigned char Delete ( unsigned char *nombreDelFichero );
/*! Formatea la tarjeta: vaca la FAT, poniendo en todos los inicios de fichero o directorio 0xE5 y
* escribiendo las marcas de cluster vaco en todas las posiciones de la FAT, posteriormente, si no estn
* los datos de los sectores de arranque los escribe, y si estn, en ellos pone el nombre de volumen recibido
* como parmetro
* @param[in] nombreDelVolumen puntero a un string con el nombre del volumen que se escribir al
* formatear si se recibe NULL el nombre ser ARTE8BIT
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
16 de 22 30/05/2014 22:02
* @return un cdigo con el estado de ejecucin del comando.
*/
unsigned char Format ( unsigned char *nombreDelVolumen );
/*! Crea un fichero para escritura, si el fichero existe se puede elegir entre sobreescribir el contenido o aadir
* contenido al final del fichero
* @param[in] nombreDelFichero Nombre del fichero que desea crearse
* @param[in] datos puntero a la trama de datos que desea escribirse
* @param[in] numeroDeDatos nmero de datos que contiene la trama de datos a escribir
* unsigned char sobreescribir byte con las opciones SOBREESCRIBIR o CONTINUAR
* @return un cdigo con el estado de ejecucin del comando, por ejemplo, OK, disco lleno, etc
*/
unsigned char CopyCon ( unsigned char *nombreDelFichero, unsigned char *datos, unsigned int numeroDeDatos,
unsigned char sobreescribir );
/*! Lee el contenido de un fichero y lo devuelve mediante el puntero datos, pasado por referencia.
* @param[in] nombreDelFichero Puntero al inicio del string que contiene el nombre del fichero
* cuyo contenido desea leerse.
* @param[out] datos Puntero pasado por referencia donde se almacenarn los datos leidos del fichero
* @param[in] numeroDeDatos Nmero de datos que se leern del fichero.
* @return cdigo de error con el estado de ejecucin de la funcin, como, ok, fichero no encontrado, etc
*/
unsigned char type ( unsigned char *nombreDelFichero, unsigned char *datos, unsigned int numeroDeDatos);

TE GUST EL ARTCULO?

Te parece interesante que exista un blog de referencia en espaol sobre electrnica y sistemas embebidos? Ayuda a
que Arte en 8 bits crezca, para ello slo tienes que pulsar en los botones para compartirlo en redes sociales, Twitter o
Google+. De este modo contribuirs a que Arte en 8 bits se posicione mejor, y por tanto podremos crecer e ir
ofrecindote cada vez un mejor contenido y de mayor calidad.
De antemano, muchas gracias.

BIBLIOGRAFIA
[1]FAT: General Overview of On-Disk Format. Microsoft.
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
17 de 22 30/05/2014 22:02
18
Me gusta Me gusta Twittear
1
StumbleUpon
1
Post to Facebook
(http://www.shareaholic.com
/api/share
Publicado en FAT (http://www.javierlongares.com/arte-en-8-bits/category/fat/) | Etiquetado Sistemas de archivos
(http://www.javierlongares.com/arte-en-8-bits/tag/sistemas-de-archivos/)
2 Comentarios a "Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC"
Puede seguir todas las respuestas a esta entrada a travs de Feed de comentarios (http://www.javierlongares.com/arte-
en-8-bits/sistemas-de-archivos-fat16-fat32-para-las-tarjetas-sd-mmc/feed/)
() Federico
20 julio, 2013 - 11:29 | Enlace permanente (http://www.javierlongares.com/arte-en-8-bits/sistemas-
de-archivos-fat16-fat32-para-las-tarjetas-sd-mmc/#comment-20615)
En
sectoresDelDirectorioRaiz = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec 1)) / BPB_BytsPerSec;
debera aclararse que es divisin entera
En
sectoresDeDatos = numeroDeSectores (BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors;
est faltando un parntesis. Pero adems, por qu restar el nmero de sectores del directorio raz si ya es parte
de los datos? Adems, si no se le resta, al multiplicar por 512 se obtiene lo que declara Windows en las
propiedades de la unidad.
Respuesta (/arte-en-8-bits/sistemas-de-archivos-fat16-fat32-para-las-tarjetas-sd-mmc/?replytocom=20615#respond)
1.
21
Share Share
You may also like:
Protothreads: Threads en C sin
sistema operativo ni memoria RAM
(http://www.javierlongares.com/arte- en-8-bits/protothreads-threads-en-c-sin- sistema-operativo/)
SISTEMAS EMBEBIDOS:
Reprogramacin y cambio de
funcionalidad en tiempo de ejecucin
(http://www.javierlongares.com/arte- en-8-bits/sistemas-embebidos- reprogramacion-y-cambio- de-funcionalidad-en-tiempo- de-ejecucion/)
ARTE EN 8 BITS como sistema
operativo operativo cooperativo
(http://www.javierlongares.com/arte- en-8-bits/arte-en-8-bits-como-sistema- operativo-operativo-cooperativo/)
Blindando el sistema frente a fallos
de memoria dinmica
(http://www.javierlongares.com/arte- en-8-bits/blindando-el-sistema-frente- a-fallos-de-memoria-dinamica/)
Programando interfaces hardware.
(http://www.javierlongares.com/arte- en-8-bits/programando-interfaces- hardware/)
Sistemas embebidos y bateras:
diseo orientado al muy bajo
consumo
(http://www.javierlongares.com/arte- en-8-bits/sistemas-embebidos- y-baterias-diseno-orientado-al-muy- bajo-consumo/)
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
18 de 22 30/05/2014 22:02
(http://www.javierlongares.com) jlongares (http://www.javierlongares.com)
26 julio, 2013 - 16:54 | Enlace permanente (http://www.javierlongares.com/arte-en-8-bits
/sistemas-de-archivos-fat16-fat32-para-las-tarjetas-sd-mmc/#comment-20616)
Hola Federico,
Gracias por la correccin, es cierto que falta un parntesis.
Por otro lado, en la operacin que comentas, el cdigo trata, en primer lugar, no de obtener el tamao de la
unidad, sino el tipo de FAT que posee. Para ello, calcula el nmero de clusters, que son usados, segn el
cdigo de Microsoft, para saber si es un tipo u otro de FAT el apropiado para el disco. Efectivamente, para
obtener el valor que indicas de propiedades, habra que hacer posteriormente tamDiscoPropiedades = (
sectoresDeDatos + RootDirSectors ) * 512;
Respecto a lo de la divisin entera, llevas razn, pero di por hecho que se supondra que el nmero de
sectores es un entero, por lo que con el operador / se obtendr la divisin entera.
Gracias por tu aporte
Respuesta (/arte-en-8-bits/sistemas-de-archivos-fat16-fat32-para-las-tarjetas-sd-mmc
/?replytocom=20616#respond)
Deja una respuesta
Nombre (obligatorio)
Correo electrnico (obligatorio)
Pgina Web
Please enter an answer in digits:
4 four =
Tarjetas SD / MMC en tu diseo electrnico (http://www.javierlongares.com/arte-en-8-bits/tarjetas-sd-mmc-en-tu-
diseno-electronico/)
MSP430: Una gua de referencia en castellano (http://www.javierlongares.com/arte-en-8-bits/msp430-una-guia-
de-referencia-en-castellano/)
ltimos posts
Gestin de eventos mediante listas enlazadas (http://www.javierlongares.com/arte-en-8-bits/gestion-de-eventos-
mediante-listas-enlazadas/)
Introduccin a Zigbee y las redes de sensores inalmbricas (http://www.javierlongares.com/arte-en-8-bits
/introduccion-a-zigbee-y-las-redes-de-sensores-inalambricas/)
Programando interfaces hardware. (http://www.javierlongares.com/arte-en-8-bits/programando-interfaces-
hardware/)
SISTEMAS EMBEBIDOS: Reprogramacin y cambio de funcionalidad en tiempo de ejecucin
(http://www.javierlongares.com/arte-en-8-bits/sistemas-embebidos-reprogramacion-y-cambio-de-funcionalidad-
en-tiempo-de-ejecucion/)
Ruido elctrico: Diseando PCBs inmunes a los ruidos elctricos (http://www.javierlongares.com/arte-en-8-bits
/ruido-electrico-disenando-pcbs-inmunes-a-los-ruidos-electricos/)
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
19 de 22 30/05/2014 22:02
ltimos comentarios
Javier Longares (http://www.javierlongares.com) en Gestin de eventos mediante listas enlazadas
(http://www.javierlongares.com/arte-en-8-bits/gestion-de-eventos-mediante-listas-enlazadas/#comment-22081)
Gorka en Gestin de eventos mediante listas enlazadas (http://www.javierlongares.com/arte-en-8-bits/gestion-
de-eventos-mediante-listas-enlazadas/#comment-22053)
jlongares (http://www.javierlongares.com) en Tarjetas SD / MMC en tu diseo electrnico
(http://www.javierlongares.com/arte-en-8-bits/tarjetas-sd-mmc-en-tu-diseno-electronico/#comment-21594)
jlongares (http://www.javierlongares.com) en Ruido elctrico: Diseando PCBs inmunes a los ruidos
elctricos (http://www.javierlongares.com/arte-en-8-bits/ruido-electrico-disenando-pcbs-inmunes-a-los-ruidos-
electricos/#comment-21593)
luis en Ruido elctrico: Diseando PCBs inmunes a los ruidos elctricos (http://www.javierlongares.com/arte-
en-8-bits/ruido-electrico-disenando-pcbs-inmunes-a-los-ruidos-electricos/#comment-21534)
Etiquetas
bootloader (http://www.javierlongares.com/arte-en-8-bits/tag/bootloader/) C monoltico (http://www.javierlongares.com/arte-en-8-bits/tag/c-monolitico/)
controlador flash (http://www.javierlongares.com/arte-en-8-bits/tag/controlador-flash/) diseo de PCB (http://www.javierlongares.com/arte-en-8-bits
/tag/diseno-de-pcb/) Duff's devices (http://www.javierlongares.com/arte-en-8-bits/tag/duffs-devices/) flash (http://www.javierlongares.com/arte-en-8-bits
/tag/flash/) interferencias (http://www.javierlongares.com/arte-en-8-bits/tag/interferencias/) microcontrolador MSP430 (http://www.javierlongares.com
/arte-en-8-bits/tag/microcontrolador-msp430/) MMC (http://www.javierlongares.com/arte-en-8-bits/tag/mmc/) MSP430
(http://www.javierlongares.com/arte-en-8-bits
/tag/msp430/) MSP430 castellano
(http://www.javierlongares.com/arte-en-8-bits
/tag/msp430-castellano/) MSP430 espaol
(http://www.javierlongares.com/arte-en-8-bits
/tag/msp430-espanol/) MSP430 por donde empezar (http://www.javierlongares.com/arte-en-8-bits/tag/msp430-
por-donde-empezar/) MSP430 primeros pasos (http://www.javierlongares.com/arte-en-8-bits/tag/msp430-primeros-pasos/) MSP430 tutorial
(http://www.javierlongares.com/arte-en-8-bits/tag/msp430-tutorial/) Multimedia Memory Card (http://www.javierlongares.com/arte-en-8-bits
/tag/multimedia-memory-card/) Mquinas de estados (http://www.javierlongares.com/arte-en-8-bits/tag/maquinas-de-estados/) Programacin de
microcontroladores (http://www.javierlongares.com/arte-en-8-bits/tag/programacion-de-microcontroladores/) Programacin de sistemas embebidos
(http://www.javierlongares.com/arte-en-8-bits/tag/programacion-de-sistemas-embebidos/) Protothreads (http://www.javierlongares.com/arte-en-8-bits
/tag/protothreads/) Protothreads en espaol (http://www.javierlongares.com/arte-en-8-bits/tag/protothreads-en-espanol/) ruido elctrico
(http://www.javierlongares.com/arte-en-8-bits/tag/ruido-electrico/) ruidos elctricos (http://www.javierlongares.com/arte-en-8-bits/tag/ruidos-electricos/)
Sistemas de archivos (http://www.javierlongares.com/arte-en-8-bits/tag/sistemas-de-archivos/) sistemas
embebidos (http://www.javierlongares.com/arte-
en-8-bits/tag/sistemas-embebidos/) SPI (http://www.javierlongares.com/arte-en-8-bits
/tag/spi/) Tarjetas MMC (http://www.javierlongares.com/arte-en-8-bits/tag/tarjetas-mmc/) Tarjetas Multimedia (http://www.javierlongares.com/arte-
en-8-bits/tag/tarjetas-multimedia/) Tarjetas SD (http://www.javierlongares.com/arte-en-8-bits/tag/tarjetas-sd/) Threads en C
(http://www.javierlongares.com/arte-en-8-bits/tag/threads-en-c/)
Categoras
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
20 de 22 30/05/2014 22:02
FAT (http://www.javierlongares.com/arte-en-8-bits/category/fat/) (1)
hardware (http://www.javierlongares.com/arte-en-8-bits/category/hardware/) (1)
Memorias y perifricos (http://www.javierlongares.com/arte-en-8-bits/category/memorias-y-perifericos/) (1)
microcontrolador MSP430 (http://www.javierlongares.com/arte-en-8-bits/category/microcontrolador-msp430/) (1)
Microcontroladores (http://www.javierlongares.com/arte-en-8-bits/category/microcontroladores/) (1)
MSP430 (http://www.javierlongares.com/arte-en-8-bits/category/msp430/) (1)
Programacin de microcontroladores (http://www.javierlongares.com/arte-en-8-bits/category/programacion-
de-microcontroladores/) (2)
Programacin de sistemas embebidos (http://www.javierlongares.com/arte-en-8-bits/category/programacion-
de-sistemas-embebidos/) (2)
Sin categora (http://www.javierlongares.com/arte-en-8-bits/category/sin-categoria/) (6)
sistemas embebidos (http://www.javierlongares.com/arte-en-8-bits/category/sistemas-embebidos/) (2)
Threads en C (http://www.javierlongares.com/arte-en-8-bits/category/threads-en-c/) (1)
Archivos
noviembre 2013 (http://www.javierlongares.com/arte-en-8-bits/2013/11/) (1)
abril 2013 (http://www.javierlongares.com/arte-en-8-bits/2013/04/) (1)
marzo 2012 (http://www.javierlongares.com/arte-en-8-bits/2012/03/) (1)
enero 2012 (http://www.javierlongares.com/arte-en-8-bits/2012/01/) (1)
diciembre 2011 (http://www.javierlongares.com/arte-en-8-bits/2011/12/) (1)
noviembre 2011 (http://www.javierlongares.com/arte-en-8-bits/2011/11/) (2)
octubre 2011 (http://www.javierlongares.com/arte-en-8-bits/2011/10/) (3)
septiembre 2011 (http://www.javierlongares.com/arte-en-8-bits/2011/09/) (1)
Calendario
diciembre 2013
L M X J V S D
nov (http://www.javierlongares.com/arte-en-8-bits/2013/11/)
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Pginas
Pgina de ejemplo (http://www.javierlongares.com/arte-en-8-bits/pagina-ejemplo/)
Administrador
Acceder (http://www.javierlongares.com/arte-en-8-bits/wp-login.php)
Javier Longares
Javier Longares
Desarrollo Web por Miguel Valero (http://www.miguel-valero.es) | Valid: XHTML 1.1 (http://validator.w3.org
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
21 de 22 30/05/2014 22:02
/check?uri=referer) / CSS (http://jigsaw.w3.org/css-validator/check/referer) / AA / 508
Sistemas de archivos FAT16 / FAT32 para las tarjetas SD / MMC | Arte... http://www.javierlongares.com/arte-en-8-bits/sistemas-de-archivos-fat1...
22 de 22 30/05/2014 22:02

Anda mungkin juga menyukai