Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Escribimos este documento después de luchar con FAT16 en una tarjeta CompactFlash en
el reproductor de MP3 programablebasado en un decodificador de MP3 de la Solución VLSI y un
controlador PIC de Microchip. Tuvimos dos implementaciones de referencia publicadas de cómo
acceder a la tarjeta CompactFlash y cómo encontrar el inicio de FAT y el directorio raíz. Sin
embargo, estos documentos fueron muy escuetos sobre el significado de las "constantes mágicas"
que se usaron en las compensaciones de datos en la tarjeta. Además, aunque el código fuente de
ejemplo funcionó nueve de diez veces, ocasionalmente "simplemente fallaba". La investigación
adicional, por nosotros, nos dio la razón de la falla ocasional y aclaró el asunto.
Más información específica sobre el diseño de los pines y la tarjeta CompactFlash registra (en
modo IDE verdadero) y sobre el diseño de los pines y los protocolos de las tarjetas SD / MMC
aparecen al final de este documento.
Este artículo es, con mucho, insuficientemente detallado para diseñar y desarrollar una interfaz
de lectura / escritura CompactFlash totalmente funcional, que utiliza FAT. Su propósito es unir
las diversas especificaciones para un solo propósito específico. Este artículo puede interpretarse
como una "guía de las especificaciones", mejorado con notas de nuestra propia experiencia.
Disquetes de regiones
un sector de arranque
opcionalmente sectores más reservados
FAT # 1 (Tabla de asignación de archivos)
FAT # 2 (un duplicado de FAT # 1)
el directorio raíz (no utilizado en FAT32)
el "área de datos" con todos los archivos y subdirectorios
Todos los datos (archivos y subdirectorios) siguen detrás del directorio raíz. Los tamaños de las
partes anteriores del sistema de archivos FAT se corrigen cuando se formatea el disco. El sector
de arranque es el primer sector en una serie de sectores reservados. El tamaño de un sector (en
bytes) se registra en el sector de arranque; normalmente es de 512 bytes para discos duros. La
especificación CompactFlash estandariza un sector a 512 bytes.
Históricamente, hay dos FAT, donde la primera FAT es la FAT líder y la segunda es una copia de
seguridad en caso de que se dañe la primera FAT. Algunos medios de almacenamiento pueden
tener solo una FAT (tener más de dos FAT está permitido, pero nunca hemos visto ese medio). En
el sistema FAT32, la segunda FAT puede ser líder y la primera la copia. El tamaño de las (dos)
FAT depende del tamaño total del disco y del tipo de FAT (FAT12, FAT16 o FAT32). El directorio
raíz tiene un tamaño fijo y generalmente puede contener hasta 512 entradas (los subdirectorios
pueden crecer y contraerse según sea necesario, pero el directorio raíz tiene un tamaño
fijo). FAT32 almacena su directorio "raíz" en el área de datos como un directorio estándar.
Un disco duro tiene particiones y la distribución anterior está presente al inicio de cada partición
(FAT). De hecho, cada partición contiene su propio sector de arranque, aunque puede tener un
formato y estructura diferente para cada sistema de archivos. Los detalles de la tabla de
particiones y el "registro de inicio maestro" se detallan a continuación en una sección separada.
Para evitar que el sistema operativo tenga que volver a calcular esto cada vez, la configuración
del disco se almacena al inicio del sector de arranque. Comenzando desde el desplazamiento 0x0B
(11 decimales) en el sector de arranque, hay una estructura de 51 bytes que se denomina "Bloque
de parámetros de disco" (DPB). Este bloque le dice el tamaño de un sector, el número de sectores
reservados, el número de FAT (para un sistema operativo FAT) y el tamaño del directorio raíz.
Los primeros 3 bytes en el sector de arranque son una "instrucción de salto" en el código de
máquina Intel 80x86 alrededor del bloque de parámetros de disco. Es probable que su
microprocesador o microcontrolador sea incompatible con el conjunto de instrucciones 80x86,
pero puede seguir utilizando la instrucción de salto como una especie de firma (tenga en cuenta
que las especificaciones de FAT permiten dos instrucciones de salto diferentes). Esta es una
instrucción de salto, ya que el BIOS en una PC (equipado con un procesador compatible con 80x86,
como un Intel Pentium), interpreta el sector de arranque como un programa que cargará y
ejecutará. Los 8 bytes que siguen a la instrucción de salto son un nombre de proveedor para el
disco; esto no está relacionado con el "nombre del volumen" o etiqueta del disco.
El diseño del sector de arranque (con el Bloque de parámetros de disco que comienza en 0ffset
0x0B) está debajo. La tabla muestra los campos para la estructura FAT32; las estructuras FAT12
/ FAT16 difieren de FAT32 a partir del desplazamiento 0x24. Sin embargo, los campos en
desplazamientos superiores a 0x24 para FAT12 y FAT16 no son esenciales: contienen el número
de serie y la etiqueta de volumen, además de valores para el uso de DOS y la interfaz "INT 13" del
BIOS, que probablemente no tenga en un dispositivo integrado sistema).
Cuando se trabaja con la estructura de datos FAT, una confusión para evitar es la que existe
entre los sectores lógico y físico . El documento FAT se refiere a un número de
sector lógico basado en cero, de incremento lineal . En la geometría de un disco (ette),
un sector físico es un segmento similar a un pastel; cuando usa el direccionamiento CHS (Cilindro
/ Cabezal / Sector), tendrá que convertir números del sector lógico a números del sector
físico. Con las tarjetas CompactFlash, las tarjetas SD / MMC y los dispositivos USB, normalmente
usará el direccionamiento LBA y solo necesitará agregar un desplazamiento al área de datos para
el sector lógico.
Para un disco duro (y en una tarjeta CompactFlash o SD / MMC), cada partición es como un
disquete grande. Una partición FAT tiene un sector de arranque, que contiene un Bloque de
parámetros de disco; tiene uno o más sectores reservados, dos FAT y un directorio raíz. La
información sobre las particiones en sí mismas, sin embargo, está en otra tabla, dentro de otro
registro de inicio: el Master Boot Record (MBR). El Master Boot Record es también un sector de
512 bytes. Este sector contiene una tabla de particiones con cuatro entradas que comienzan en
el desplazamiento 446 (hex 0x1BE). Cada entrada de la tabla de particiones tiene una longitud de
16 bytes. Los primeros 446 bytes suelen contener un programa de arranque que el BIOS utiliza,
bueno, inicia la máquina; los dos últimos bytes son una firma y deben contener 0x55aa (la misma
firma que para un sector de arranque estándar).
Inicialmente, los discos se abordaron con valores para el cilindro, la cabeza (plato) y el
sector; esto se llama direccionamiento CHS (CHS significa Cilindro / Cabeza / Sector). Con un solo
byte para cada uno de los cilindros, el número de cabezales y el número de sectores por cilindro,
el tamaño máximo direccionable para un disco es 2 24, o 16777216 sectores. Con un tamaño de
sector de 512 bytes, el tamaño máximo del disco nunca podría exceder 8 GiB (si busca referencias
en el direccionamiento CHS, encontrará que los valores del sector y del cilindro están
empaquetados en una sola palabra de 16 bits, pero para el cálculo de la parte posterior del sobre
viene con el mismo resultado). Para acomodar discos grandes, se desarrolló un esquema de
direccionamiento alternativo: LBA (Address Logic Block). Esto es esencialmente un número de
sector lineal. Afortunadamente, la tabla de particiones contiene el inicio de la partición y su
tamaño tanto en CHS como en valores de LBA.
En una tarjeta CompactFlash o SD / MMC, primero debe navegar por la tabla de particiones (que
comienza en el desplazamiento absoluto 0x1BE, desde el inicio del disco) y encontrar el inicio de
la partición. Al saltar a la partición, tropezará con un registro de inicio que contiene un Bloque
de parámetros de disco. Luego puede proceder a localizar y decodificar la FAT y el directorio raíz,
teniendo en cuenta que todas las compensaciones en este Bloque de parámetros de disco son
relativas al inicio de la partición.
La siguiente tabla muestra el diseño de un solo registro en la tabla de particiones. Cada uno de
esos registros tiene 16 bytes de tamaño y la tabla de particiones contiene 4 registros. Es decir, la
segunda entrada en la tabla de partición comienza en el offset 0x1CE, el tercero en 0x1DE y el
cuarto en 0x1EE.
Compensar Descripción tamaño
0x00 0x80 si está activo (arrancable), 0 de lo contrario 1
0x01 inicio de la partición en el direccionamiento CHS 3
0x04 tipo de partición, ver a continuación 1
0x05 final de la partición en el direccionamiento CHS 3
0x08 desplazamiento relativo a la partición en sectores (LBA) 4
0x0C tamaño de la partición en sectores 4
Como muestra la tabla anterior, la tabla de particiones también contiene un valor que indica el
tipo de sistema de archivos, más un indicador que indica si la partición está activa. Una PC solo
arrancará desde la partición activa. Un registro de partición que está "vacío" o inválido
normalmente tiene todos los campos configurados en cero; al menos el campo "tipo" de la
partición (desplazamiento 0x04) debe ser cero.
Para los "discos" que están en una tarjeta de memoria Flash, Microsoft Windows es muy indulgente
con el valor del tipo de partición. Microsoft Windows parece mirar el bloque de parámetros de
disco de la partición para determinar si puede soportar la tarjeta. Dado que las tarjetas
CompactFlash y las tarjetas SD / MMC suelen estar fácilmente particionadas y formateadas (con
una única partición para toda la tarjeta), esto tiene sentido. Tanto las especificaciones SD como
las especificaciones MMC establecen que el sistema de archivos es una variedad de FAT (FAT12 /
16 o FAT32, dependiendo de la capacidad de la tarjeta).
Un registro de partición también puede apuntar a una tabla de particiones extendida (tipos 5 o
15). Una partición extendida es una partición separada que contiene una especie de "sector de
arranque" que contiene una tabla de particiones con cuatro registros más. Las particiones
extendidas están más allá del alcance de este documento. Las particiones extendidas casi nunca
aparecen en las tarjetas de memoria Flash, como se suele decir, las tarjetas solo contienen una
única partición (primaria) para toda la tarjeta.
Especialmente, las tarjetas SD / MMC carecen de campos de partición (o no son válidos), ya que se
consideran redundantes: la capacidad estándar de la tarjeta SD o MMC debe usar FAT12 o FAT16 y
las tarjetas de alta capacidad deben usar FAT32. Un poco en un registro interno de las tarjetas SD
y MMC indica qué tipo de tarjeta es: estándar o de alta capacidad.
En cualquier caso, lo que no funcionará es que el firmware salte al offset de bytes absoluto 0x1C6
(offset de palabras 0xE3), lea el DWORD en esa ubicación y salte a esa dirección más 1024 para
llegar al inicio de la FAT. Tal código hace muchas suposiciones:
o asume que la tarjeta de memoria Flash contiene un Registro de inicio maestro (dicho esto, una
nueva tarjeta CompactFlash que usted compra generalmente está particionada y formateada,
lista para usar);
o asume que el primer registro de partición es válido, incluso si una tarjeta de memoria Flash tiene
una sola partición, podría ser que esta partición se describa en el segundo registro dentro del
MBR (esto lo hemos visto en la práctica);
o asume que el tipo de partición es lo que espera que sea (por ejemplo, FAT16);
o asume que solo hay un sector reservado (que es común en FAT12 y FAT16, pero poco común en
FAT32);
o y si el firmware no lee el bloque de parámetros de disco, supone mucho más ...
Programación CompactFlash
En la mayoría de los casos, es más fácil programar CompactFlash en el modo "IDE verdadero". Este
modo simula la interfaz ATAPI-4, pero con diferentes tiempos. La interfaz IDE es una asignación
de casi 1 a 1 (un subconjunto de) el bus de expansión PC-AT de 16 bits. En la época de la PC-AT,
este diseño permitía que una unidad se conectara (casi) directamente al bus. Por razones de
compatibilidad con interfaces de disco duro más antiguas (es decir, el controlador Western Digital
WD1010), la decodificación de direcciones en IDE es un poco extraña.
La mayor desventaja del modo IDE verdadero es que la "inserción en caliente" de la tarjeta
CompactFlash puede no ser compatible. La tarjeta CompactFlash cambia al modo IDE cuando
la OE/ ATASELlínea se baja al encender. Varias tarjetas CompactFlash que probamos revisaron
el OEpin después de un reinicio y se cambiaron al modo IDE verdadero cuando
el OErestablecimiento es bajo. La inserción en caliente funcionó, por lo tanto, con estas tarjetas
CompactFlash (al pulsar la RESETlínea en la inicialización de la unidad), pero no se garantiza que
funcione con todas las tarjetas CompactFlash.
Probamos tarjetas CompactFlash de SanDisk, Dane-Elec, Integral, Epson y Transcend. Las tarjetas
de SanDisk, Epson e Integral admitían la inserción en caliente después de un restablecimiento (y
cambiaban al modo IDE verdadero después de detectar la OE/ ATASEL línea). Las tarjetas de Dane-
Elec y Transcend no admitían la inserción en caliente con un reinicio, pero requerían un ciclo de
encendido para cambiar al modo IDE verdadero.
Anteriormente informamos que Dane-Elec admitía la inserción en caliente con el modo IDE
verdadero, pero una prueba reciente falló. Hemos tenido informes de que el fabricante había
cambiado a un "controlador de memoria" diferente.
Una manera simple de hacer que la inserción en caliente funcione con el modo IDE verdadero es
agregar un MOSFET en la línea de alimentación de la tarjeta CompactFlash y agregar firmware
que detecta si se insertó una tarjeta CompactFlash. Si detecta este evento, se puede alimentar
el ciclo de la tarjeta CompactFlash. Lo que solemos hacer en nuestros dispositivos es apagar la
tarjeta CompactFlash cuando detectamos que se elimina y encenderla después de detectar que
se ha insertado.
Algunas de las señales en modo IDE están activas bajas . En la descripción de la señal, esto se
indica con una barra delante del nombre; por ejemplo, /RESETes la señal de reinicio y, por lo
tanto, para reiniciar el disco, este pasador debe ser tirado a tierra. En nuestra descripción de las
señales, cuando se hace referencia a una señal activa , la presencia del prefijo de barra indica si
el pin respectivo es bajo o alto.
El bus IDE es de 16 bits. Sin embargo, los registros internos son de 8 bits (para compatibilidad con
versiones anteriores), y el estado de lectura o la información de error devuelve solo 8 bits a la
vez. Las líneas de bus de datos son tri-estatal si ambos /CS0y /CS1están inactivos, lo que le
permite utilizar la interfaz IDE en un autobús que también impulsa otros periféricos.
Hay líneas en el bus IDE que no necesitamos en un sistema integrado, pero que eran necesarias
para el bus PC-AT. Por ejemplo, la /IOCS16señal indica si la salida está en las 16 líneas de datos
o solo en las primeras 8, pero ya sabemos que las transferencias de datos son de 16 bits
y las transferencias de control (registros) son de 8 bits. En un diseño incrustado, podemos dejar
la /IOCS16línea desconectada. Como un aparte, puede cambiar la tarjeta CompactFlash para
usar solo transferencias de 8 bits, en caso de que necesite conectar la tarjeta CompactFlash a un
bus de 8 bits.
1. La dirección se afirma en líneas A0- A2y /CS0+ /CS1. En el modo IDE verdadero, solo se utilizan
tres de las líneas de direcciones de la tarjeta CompactFlash, en combinación con
las líneas /CS0y /CS1que seleccionan el "conjunto de registros". Solo cualquiera de
las líneas /CS0 y /CS1está activa (no ambas al mismo tiempo).
2. Después de un retraso de 70 ns (o más), o bien la /IORDo /IOWRse activa, dependiendo de si
desea iniciar una instrucción de lectura o escritura. El /IORDo /IOWRson los estroboscopios.
3. Se necesita otro retraso, de 165 ns, antes de desactivar las líneas /IORD o /IOWR. Al mismo
tiempo, la inactivación de la luz estroboscópica, o inmediatamente antes o después de la
inactivación de la luz estroboscópica, se puede leer o escribir los datos en los D0- D15líneas.
4. Aunque esto es opcional, se recomienda que tanto /CS0y /CS1se inactivan al final del ciclo de
lectura o escritura. Es posible que necesite otra demora aquí, porque un ciclo completo también
tiene una duración mínima. En lugar de un simple bucle inactivo, puede optar por realizar otras
operaciones en ese momento, como interpretar los datos después de una operación de lectura o
buscar nuevos datos después de una operación de escritura.
Lo anterior es un ciclo para obtener o establecer un registro en la interfaz IDE. Para acceder a los
datos reales en una tarjeta CompactFlash, debe realizar varios de dichos ciclos en varios
registros. La unidad de transferencia siempre es un sector (y un sector tiene 512 bytes), pero
puede leer o escribir múltiples sectores en un solo comando. Para obtener un sector de datos,
escriba un comando de "sector de lectura" (valor 0x20) en el registro de Comando después de
haber inicializado los cuatro registros de Dirección de LBA y los registros de Cuenta de Sector. Una
vez que se envía el comando, tendrá que esperar hasta que aparezca el bit DREQ (Solicitud de
datos) en el registro de Estado. Luego, 256 ciclos de lectura en el registro de datos darán un
sector de datos.
/ CS1 / CS0 A2 A1 A0 Descripción
1 0 0 0 0 Datos
1 0 0 0 1 Error (leer) / Características (escribir)
1 0 0 1 0 Cuenta de sector
1 0 0 1 1 LBA 0-7
1 0 1 0 0 LBA 8-15
1 0 1 0 1 LBA 16-23
1 0 1 1 0 LBA 24-27 + banderas
1 0 1 1 1 Estado (leer) / Comando (escribir)
0 1 1 1 0 Estado alternativo (lectura) / control del dispositivo
0 1 1 1 1 No usado
La interfaz IDE define 10 registros, pero la interfaz CompactFlash no usa el último. La
especificación de CompactFlash proporciona detalles sobre los registros (consulte la lista de
recursos al final de este documento). Tenga en cuenta que cuando el registro de recuento de
sectores es cero, está emitiendo una solicitud para leer o escribir 256 sectores. El registro "LBA
24-27 + flags" contiene el número de unidad en el bit 4, el bit 6 debe configurarse (es decir,
distinto de cero) para seleccionar el direccionamiento LBA en lugar de CHS, y los bits 7 y 5
generalmente están configurados (por razones de compatibilidad) .
Leer un sector es una operación rápida, independientemente de si lee sectores secuenciales o lee
sectores desde posiciones aleatorias. Cuando se escribe un sector, la operación puede ser casi
igual de rápida o puede llevar hasta 22 ms. Cuando escribe sectores secuenciales, el rendimiento
amortizado es el que se documenta en la hoja de datos. Para escrituras aleatorias, el rendimiento
puede ser mucho menor. La razón del bajo rendimiento en las escrituras de acceso aleatorio es
que una operación de escritura en la memoria Flash solo puede escribir 0 bits. Para escribir un bit
1, la memoria Flash debe ser "borrada". Una operación de borrado establece todos los bits a 1 en
un "sector Flash", y un sector Flash es típicamente mucho más grande que los 512 bytes de un
sector FAT (disculpe la confusión, pero sucede que ambas cantidades se llaman "sectores") .
Supongamos que escribe un sector FAT en una ubicación aleatoria. Ese sector primero debe
borrarse (para todos los 1), porque la memoria flash solo puede programar 0. Pero borrar el sector
de Flash también borra todos los demás sectores de FAT. Es posible que no se pierdan y, por lo
tanto, deben copiarse en un área reutilizable antes del borrado y deben copiarse nuevamente
después del borrado. El procedimiento real es un poco más inteligente que esto (utilizando
estrategias de reasignación), pero el punto es que una sola operación de escritura puede causar
una cadena de eventos que, en conjunto, causan una gran degradación del rendimiento. Para más
detalles, puede consultar el Informe técnico de Microsoft " Diseño para discos flash de alto
rendimiento ", consulte la sección Referencias y el final de este documento.
La siguiente tabla contiene el cableado de CompactFlash a una interfaz IDE. Tenga en cuenta que
describimos solo las señales que se necesitan para la tarjeta CompactFlash: si desea construir un
adaptador para CompactFlash que se enchufa en un conector IDE de su PC, conecte las patillas 2,
19, 22, 24, 26, 30 y 40 a la tierra, conecte el pin 28 a Vcc a través de una resistencia de 10k y
deje los pines 20, 21, 29 y 32 desconectados.
La tabla de arriba asume un conector IDE de 40 pines. La siguiente tabla muestra el significado
de los pines 41 a 44 para un conector de 44 pines (que se encuentra comúnmente en computadoras
portátiles). Un conector IDE de 44 pines incluye líneas eléctricas (+ 5V). Una tarjeta CompactFlash
está diseñada para funcionar con dos voltajes: 3.3 V (± 5%) o 5 V (± 10%), pero no ambos a la
vez. Ver la especificación para más detalles.
Como siempre, existen dificultades para manejar tarjetas CompactFlash que no siguen
estrictamente el estándar. Hemos encontrado tarjetas CompactFlash que se identifican a sí
mismas como discos duros, en lugar de devolver la firma especificada por el documento
CompactFlash. Además, a veces no se cumplen los diagramas de tiempo y secuencia para varias
señales de estado. Desafortunadamente, no hay otra opción que probar con tantas tarjetas
CompactFlash como sea posible.
Para MMC, hay dos interfaces en serie diferentes para hablar con la tarjeta: la interfaz estándar
SPI y una interfaz personalizada (que permitiría varias tarjetas en un bus de interfaz en serie). La
tarjeta SD agrega un tercer protocolo donde se transfieren cuatro bits en paralelo. La mayoría
del código de "código abierto" para interconectar tarjetas SD / MMC usa el modo
SPI. (Las tarjetas móviles MMC plus y MMC más nuevas también permiten transferencias paralelas
de 4 bits e incluso de 8 bits).
La mayor parte de los comandos se conocen debido a las hojas de datos detalladas y disponibles
públicamente de Samsung (un fabricante de tarjetas MMC). Los comandos son conocidos por el
número de índice y por el nombre nmemonic. Por ejemplo, el comando para seleccionar la tarjeta
para una operación posterior de datos de lectura o datos de escritura se conoce
simultáneamente SELECT CARDcomo CMD7.
Para leer un sector FAT particular, primero se debe establecer la dirección de inicio para leer (el
número de bytes también se debe establecer la lectura, para un sector FAT esto siempre es de
512 bytes). Aquí hay un truco: en las tarjetas estándar SD y MMC, la dirección está en bytes, por
lo que si transfiere un número de sector (físico), debe multiplicar el número de sector por 512
para obtener la dirección. Con las tarjetas más nuevas de "alta capacidad", la dirección está en
múltiplos de 512 bytes, la dirección es la misma que el número del sector. Esto significa que el
host debe detectar si la tarjeta es de alta capacidad o estándar. Este es también un área donde
las especificaciones SD y MMC son incompatibles, lo que significa que primero debe detectar si
una tarjeta es una tarjeta SD o una tarjeta MMC.
Cuando se confirma que la tarjeta es una tarjeta MMC, con el procedimiento anterior, puede
emitir SEND OPERATING CONDITION(CMD1), que es el equivalente de MMC de CMD41. Este
comando también devuelve el OCR, y al igual que CMD41, también devuelve el bit de "alta
densidad" si se solicitó. De hecho, la especificación MMC (versión 4.2) define dos bits en el OCR
para el modo de acceso, los bits 29 y 30, donde SD solo tiene un bit único. Para tarjetas de
capacidad estándar, ambos bits son 0; para tarjetas de alta capacidad, el bit 29 es cero y el bit
30 es 1. Las tarjetas MMC anteriores (que no admiten la solicitud para el modo de acceso) pueden
devolver 0: 0 o 1: 1 en bits 30:29, que se interpretan ambos como "capacidad estándar", o pueden
agotar el tiempo de espera en el comando, en cuyo caso el host reenvía CMD1 sin la solicitud del
modo de acceso.
El diagrama de flujo ilustra el procedimiento. En el código del programa, puede eliminar alguna
redundancia en el diagrama de flujo. Por ejemplo, después de CMD8, el siguiente comando
siempre es CMD41; solo el argumento para el comando es diferente. De forma similar, la llamada
repetida a CMD1 podría implementarse como un bucle, con la solicitud de "modo acceso" borrada
del argumento en la segunda iteración.
Las tarjetas de capacidad estándar generalmente usan FAT12 o FAT16, porque las especificaciones
SD y MMC las exigen. Microsoft desaconseja FAT12 para discos con capacidades superiores a 4 MiB
y declara el límite superior de la capacidad del disco FAT12 en 32 MiB. Sin embargo, existen
tarjetas SD / MMC con capacidades de 64 MB o más que usan FAT12 y no son tan raras como se
podría suponer. Esto se debe a que las especificaciones SD y MMC utilizan una modificación menor
de la antigua especificación FAT12: almacena el "número total de sectores en la partición" como
un campo de 32 bits en el desplazamiento 0x020 en el bloque de parámetros de disco, en lugar
del 16- campo de bit en el desplazamiento 0x013. El campo de 32 bits en el desplazamiento 0x020
no existía en la especificación original de FAT12. Con este truco, el tamaño máximo de una
partición FAT12 aumenta de 32 MiB a aproximadamente 256 MiB (tamaño de clúster máximo de
64 KiB multiplicado por 4085, que es la cantidad máxima de clusters que FAT12 puede
admitir). Para admitir mejor a FAT12, la SD Card Association incluso proporciona su propia utilidad
de formateo, presumiblemente porque la utilidad de formato estándar de los sistemas operativos
actuales se negará a formatear tarjetas de más de 32 MB con FAT12.
El "Manual de instrucciones del software de formateo de la tarjeta de memoria SD" hace la siguiente
afirmación:
"Generalmente, los sistemas de archivos de la tarjeta de memoria SD / SDHC formateados con el
software de formateo del sistema operativo genérico no cumplen con la especificación de la tarjeta
de memoria SD."
Consulte la sección de referencias (a continuación) para obtener un enlace a la utilidad de formato
de la tarjeta de memoria SD.
Referencias
Asociación CompactFlash; La especificación CF + y CompactFlash, Revisión
2.0 ; 2003.
La especificación completa: interfaz eléctrica, física y de software. Especialmente las
secciones sobre el tiempo y las descripciones del registro son relevantes en relación con
este artículo. Descargar la última especificación requiere un registro gratuito.