Sector de Arranque (Boot sector)
Como estoy trabajando con WIN XP, este sector ocupa desde la posicion 0x00h hasta la 0x3FFh
Este sector corresponde a las primeras 512 posiciones de memoria (512 bytes) de la SD. En este sector, se guarda información de que formato tiene la SD, si FAT16 o FAT32, cual versión de DOS fue la que dio formato a la SD, etc..
VISTA CON WIN-HEX de la SD.
Esos valores los escribió WIN-XP dándole Formato FAT a la SD. Si se quiere implementar que el PIC le de formato a la SD directamente, lo que se debe hacer es leer con el PIC estos datos que le escribio WIN-XP y almacenarlos en la EEPROM del PIC y cada vez que se quiera dar formato a la SD; simplemente se borran todas las posiciones y de la SD y luego se escribe lo que esta en la EEPROM en los primeros 512 bytes de la SD..
Salto al Codigo de Bootstrap 0x00 - 0x02 Los 3 primeros Bytes corresponden a una instrucción de salto a la dirección inicial del código Bootstrap (Boot de arranque).
ID Sistema Operativo 0x03 - 0x0C Cadena Ascii que indica con cual sistema operativo fue formateada la unidad de almacenamiento. MSDOS5.0 podemos observar con la lectura de la SD con WINHEX.
Bios Parameter Block y Extended bios Parameter Block 0x000B - 0x003D Informacion de la memoria Sd usada por la Bios del PC para conocer las características internas de la memoria .
0x000B-0x000CNúmeros de Bytes por sectores físicos. Recordemos que decíamos que la Sd tiene 512 bytes por cada sector, pero en otros sistemas de almacenamiento, este valor puede cambiar entre 512, 1024, 2048, 4096.
0x000DNumero de Sectores por Clusters. En la SD este valor es 4. Pero en otros sitemas de almacenamiento, puede tomar valores de 1, 2, 4, 8, 16, 32, 128.
0x000E-0x000FSectores reservados a partir del Volumen 1. En la SD este valor es 1 si se dio formato con WIN98 y 2 con WINXP
0x0010Numero de copias de la FAT. En la memoria SD este valor es 2. Y lo que indica es que hay dos copias totalmente iguales de la FAT, permitiendo de esta forma recuperar información en caso de haber una mala escritura o perdida de información.
0x0011-0x0012Numero de registros posibles en el Root Directory. En la SD este valor es de 512.
0x0013-0x0014Numero de Sectores del volumen. Solo se utiliza para dispositivos de almacenamiento de 32MB. En todos los demás este valor se coloca la posición 0x0020 del Boot Sector para indicar este valor. Acá se coloca el valor 0x0000.
0x0015Descriptor del dispositivo. Es un Byte que indica cual es el tipo de dispositivo de almacenamiento que se esta usando. Para la SD. Para la memoria SD este valor es de 0x00F8, que indica Disco Fijo. pero hay otros valores como 0x00F9 que indican disco Flexible de 1.5M que no tendremos en cuenta para nuestro trabajo.
0x0016-0x0017Numero de sectores usados en una copia FAT.
0x0018-0x0019Numero de Sectores por pistas. Solo se utiliza en dispositivos de almacenamiento en los que es necesario calcular Cilindro, cabeza, sector.
0x001A-0x001BNumero de cabezas.
0x001C-0x001FNumero de sectores escondidos. Cuando el espacio del dispositivo de almacenamiento esta particionado, este valor corresponde al numero de sectores que preceden a la primera partición del volumen.
0x0020-0x0023Numero total de sectores del volumen. Este campo es usado para dispositivos de mas de 32MB.
0x0024Numero del drive. Este valor es usado en el Codigo Bootstrap para encontrar el driver correcto para poder cargar el sistema operativo. (0x00=Floppy, 0x80h=Disco Duro primario).
0x0025Posición reservado que Windows NT utiliza para cargar unas banderas que controlan el arranque del scandisk antes de cargar el sistema.
0x0025Si esta posición tiene el valor 0x0029, significa que los siguientes tres campos están disponibles.
0x0027-0x002CNumero de 32 bits para identificar al dispositivo.
0x002B-0x003511 caracteres ascii que contienen el nombre del volumen.
0x0036-0x003DCadena ascii que indica el tipo de formato dado al dispositivo, "FAT16", "FAT32".
Codigo Bootstrap 0x003E - 0x01FD Este código es usado por la Bios del PC, para poder arrancar el sistema operativo, permitiendo realizar una serie de Test e iinicializaciones. Para entender mejor esto, puede buscarse en Google BOOTSTRAP y hay mucha información sobre ello. Lo relevante de esto, es que desde una SD se puede inicializar un PC, pero previo formato a la memoria.
0x01FE - 0x01FF Posiciones de memoria que contienen el valor 0xAA55, valor que identifica al BOOT SECTOR.
Conocer todos los valores anteriores con el PIC, nos permitirá recorrer toda la información de la SD, poder ubicarnos en cualquier sector de la memoria, Sector FAT, o en la copia de la FAT, o en los archivos guardados en la SD.
EJEMPLO:
POSICIÓN DE MEMORIA DEL SECTOR INICIAL DEL FAT2:
(Numero de sectores reservados + Numero de sectores por FAT) x Numero de bytes por sectores = (2+
239)512=123392 = 0x1E200 Que si miramos con WINHEX, efectivamente en la posición 0x1E200 arranca la copia FAT.
En este punto, ya podemos empezar a crear una librería que controle y maneje todo el formato FAT16. En la pagina de CCS hay algunas, pero lo mejor para entender es crear la propia. Con los nombre y funciones propios.