En el presente hilo no pretendo inventar si no organizar y describir desde una perspectiva pedagógica el funcionamiento del sistema FAT 16 para aplicarlo a las memorias microsd. Algunos pensaran que las librerías ya están hechas y que no hay necesidad de indagar tanto para conseguir un resultado, pero soy de los que piensa que para aprender es necesario hacer las cosas uno mismo, y eso exactamente lo que quiero con el presente hilo aprender y que los compañeros interesados en el presente hilo se sumen para generar una discusión que permita entre todos desentrañar el sistema FAT16.
Para empezar con el tema he elaborado preámbulo del sistema FAT16 basado en el artículo de compañero Ariel “FAT AL DESNUDO” y del documento “FAT: GENERAL OVERVIEW OF ON – DISK FORMAT”, para mayor información puede consultar los documentos para tener una idea mayor de lo que aquí se expondrá.
DEFINICIONES:CLUSTER: Un clúster es la unidad de almacenamiento en un disco (ZIP, rígido o flexible) con una determinada cantidad fija de bytes. Un disco está dividido en miles de clústeres de igual tamaño y los archivos son repartidos y almacenados en distintos clústeres. El tamaño se determina en el formateo del disco y suele ser de 512 bytes, pero la cifra puede ascender a 4.096bytes.
Cuando se almacena en disco un archivo más grande que un clúster, este se subdivide en distintos clústeres. Por ejemplo: Imaginemos un disco con clústeres de 512 bytes. Si se almacena un fichero de 1500 bytes, 512 bytes de ése fichero serán almacenados en un solo clúster en una posición física del disco, otros 512 bytes serán almacenados en otro clúster en otra posición determinada del disco, que puede o no ser congruente físicamente al anterior. Los 476 bytes restantes de ése fichero serán almacenados en otro clúster, sobrando 36 bytes que quedan sin utilizar del clúster (ese espacio está virtualmente perdido). Por lo tanto ese archivo quedará segmentado en tres clústeres que pueden o no ocupar partes físicas congruentes en un disco. Cuando se intenta leer ese fichero, el cabezal lector deberá moverse de un lado a otro del disco para poder leerlo definitivamente.
SECTOR: Un sector de un disco duro es la sección de la superficie del mismo que corresponde al área encerrada entre dos líneas radiales de una pista.
Pueden almacenar una cantidad fija de bytes, generalmente suele ser de 0,5 Kb hasta 64 Kb, pasando por todas las potencias de 2 (20=1; 21=2; 22=4; 23=8; 24=16; etc.). Esto se puede configurar al formatear una unidad de almacenamiento, en la opción de tamaño de unidad de asignación.
Cada sector almacena una cantidad fija de información. El formateado típico de este medio provee espacio para 512 bytes (para discos magnéticos) ó 2048 bytes (para discos ópticos) de información accesible para el usuario por sector.
PISTA: Las pistas son círculos concéntricos de datos que se almacenan en los discos que revolucionan dentro de los discos magnéticos.

En los discos duros hay varios discos y por lo tanto, varios círculos del mismo diámetro. Todas las pistas que tienen el mismo diámetro, constituyen un cilindro.
INTRODUCCIÓN: FAT es el acrónimo de File Allocation Table (Tabla de alocación de archivos) y es un sistema de ordenamiento de los archivos en el disco rígido que usaba MS-DOS y versiones de Windows anteriores a XP. Se usa también para acomodar los archivos en los disquetes. En la actualidad coexisten tres sistemas de archivos tipo FAT: FAT12, FAT16 y FAT32. Las diferencias básicas entre esos subtipos, y la razón de sus nombres, es el tamaño, en bits, de las entradas en la estructura FAT en el disco. Todos los sistemas de archivos FAT fueron pensados originalmente para la arquitectura del IBM PC. Este es un dato importante, debido a que este hardware hace uso de las estructuras de datos en formato “little endian”.
DIVISIÓN DE LOS DISCOS CON FATUn disco con sistema de archivo FAT está dividido en 4 zonas:
• Zona reservado
• Zona de la FAT
• Zona del directorio raíz
• Zona de datos y directorios y archivos
BIOS PARAMETER BLOCK (BPB)La primer estructura de datos importante en un disco con FAT es la llamada BIOS Parameter Block (en adelante BPB), que se encuentra en el primer sector del disco dentro de la zona reservada. Esta estructura contiene una serie de campos que permiten conocer parámetros importantes del disco como el número de bytes por sector, número de sectores reservados, números de copias FAT etc (ver más adelante).
El BPB del sistema de archivos FAT32 coincide exactamente con el BPB de las FAT12 y FAT16, hasta el campo BPB_TotSec32 (ver más adelante). Las diferencias comienzan en el offset 36, dependiendo si se trata de un sistema FAT32 o FAT12/FAT16. El punto importante de destacar es que los primeros 36 bytes coinciden, independientemente del tipo de FAT que estemos utilizando. Esto permite la máxima compatibilidad entre diferentes sistemas, y permite a los drivers entender y soportar cualquiera de los tipos, ya que siempre contienen los mismos campos.
DESCRIPCIÓN DE ALGUNOS CAMPOS DEL BPBBPB_BytsPerSec (Dirección 11 – Tamaño 2 bytes) : Número de bits por sector y pueden tomar algunos de los siguientes valores 512, 1024, 2048 o 4096.
BPB_SecPerClus (Dirección 13 – Tamaño 1 byte): Número de bytes por cluster, este valor debe ser una potencia de 2 mayor que 0 (1,2,4,8……128).
BPB_RsvdSecCnt (Dirección 14 – Tamaño 2 bytes): Número de sectores reservados Este campo no puede ser 0. Para sistemas de FAT12 y FAT16 siempre debe ser 1.
BPB_NumFats (Dirección 16 – Tamaño 1 byte): Número de copias FAT en el volumen. Este campo debería tener un valor de 2, independientemente del tipo de FAT implementada. Sin embargo, cualquier valor igual o mayor a 1 es válido.
BPB_RootEntCnt (Dirección 17 – Tamaño 2 bytes): Número de entradas al directorio raíz de 32 bits. Este valor debe ser tal, que al multiplicarlo por 32 resulte en un múltiplo de BPB_BytsPerSec. En el caso de volúmenes con FAT32, este campo debe ser "00 00". Por motivos de compatibilidad, en sistemas FAT16, este valor debería ser 512.
BPB_TotSec16 (Dirección 19 – Tamaño 2 bytes): Contiene el número de sectores en todas las 4 zonas del sistema FAT.
BPB_FATz16 (Dirección 22 – Tamaño 2 bytes): Número de sectores ocupados por una copia FAT.
BPB_SecPerTrk (Dirección 24 – 2 bytes): En aquellos soportes que tienen una "geometría" compuesta por pistas, cabezas y cilindros, tales como los discos duros, este valor especifica el numero de sectores por pista.
En las próximas entregas se explicara porque inicialmente se explicaron estos campos del BPB. En la siguiente entrega se hablara de la memoria microsd y la implementación del algunas funciones (lectura, escritura, etc.) para aplicarlas al sistema FAT16.