Disketteras - Información del funcionamiento interno

Electrónica relacionada con ordenadores de todo tipo, desde retro a modernos.
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

Índice
  1. Introducción
  2. Funcionamiento básico
    1. Tipo de medio y posicionamiento básico.
    2. Formato
      1. Formato: Detalles de los sectores
    3. Detalles de algunos discos comunes
  3. ...
Diskettes y disketteras
Diskettes y disketteras
Historial de cambios


11-04-2018
1. Introducción
2. Funcionamiento básico
2.1. Tipo de medio y posicionamiento básico.
	2.2.  Formato

17-04-2018
		2.2.1. Formato: Detalles de los sectores
	2.3. Detalles de algunos discos comunes

22-04-2018
		2.2.1. Formato: Detalles de los sectores - Añadidos enlaces a las librerías del CRC16 para Arduino IDE

Fuentes:

- http://www.hp9845.net/9845/projects/fdio/
- http://info-coach.fr/atari/hardware/FD-Hard.php
- https://www.mouser.jp/datasheet/2/268/m ... 181024.pdf
- http://jlgconsult.pagesperso-orange.fr/ ... tte_en.htm
- http://www.drdobbs.com/implementing-the ... /199904926
Última edición por Naguissa el 19 Abr 2018, 10:48, editado 1 vez en total.

Tags:
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

1. Introducción

Las disketteras o floppy disk drives fueron, tras los cassetes, los principales medios de arranque de ordenadores, distribución de software y copia/archivado de información (en ese orden cronológico).

Inicialmente sirvieron para arrancar los ordenadores, como el IBM PC.

Con el uso de dos disketteras, ya sirvieron para poder, tras arrancar el PC, poder cargar software y datos usando ambas.

Tras la llegada de los discos duros, ya permitieron usar diskettes para distribuir software que se instalaría en éstos.



El término floppy viene de los primeros diskettes, los de 8". Estos diskettes eran grandes y flexibles, por lo que se les llamó como tal, discos flexibles (floppy disks). Tras ellos llegaron los dikettes de 5,25", también flexibles. Y posteriormente llegaron los discos mas conocidos, los de 3,5", los que aparecen en los iconos de "guardar" y que ya no son flexibles (tienen una especie de caja de plástico duro).

Además, existen otros formatos menos usados, como los de 3,25", usados en algunos ordenadores caseros como el Amstrad CPC.

Todos estos discos tienen un funcionamiento similar. Cambian los tamaños, densidades y cabezas (pueden usar un lateral o ambos; a la vez o, como muchos de 3,25", siendo reversibles).

En siguientes mensajes iré explicando el funcionamiento interno de estos dispositivos electromecánicos. Pese a ser una tecnología muy antigua es fascinante la combinación de elementos que la hacen posible. Me centraré en los dispositivos de 3,5", específicamente en los diskettes DD (Doble Densidad, de 720Kb), por ser los mas accesibles, pero además de que todo lo explicado será válido para todos, iré exponiendo las posibles diferencias.

Diskettes encima de varias disketteras
Diskettes encima de varias disketteras
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

2. Funcionamiento básico

2.1. Tipo de medio y posicionamiento básico.

Los disquetes son medios magnéticos, es decir, guardan los datos como en una cinta de audio pero en lugar funcionar de forma lineal lo hacen en circunferencias concéntricas. Esto es, como un vinilo pero sin espiral, solo con circunferencias.

Físicamente las disqueteras solo tienen una manera de posicionarse dentro de una de esas circunferencias, que es una señal llamada INDEX que indica una posición de inicio de la pista y el saber que han de tener una velocidad constante, de 300rpm, equivalente a 5 vueltas por segundo. Debido a ésto se contemplan ciertos mecanismos para mitigar las diferencias de velocidad, que pueden soportar diferencias de +-7% en esas 300rpm.

Existen, además, algunas unidades que, combinadas con una controladora que las soporte, pueden funcionar a 360rpm (6 vueltas por segundo). Todo funciona igual pero algo mas rápido.


2.2. Formato

Los discos no se suelen usar así, 'en bruto', metiendo datos en ellos. Para mejorar la operación, se suelen preconfigurar los discos con unas estructuras dentro de él para poder mejorar su fiabilidad. Estas estructuras son las que se crean cuando formateamos un disco, y son las que hacen que los mismos discos los veamos con dos capacidades: para los discos de 3,5" DD podemos verlos como 720K o 1Mb. Esto es, el disco tiene 1Mb de capacidad pero una vez formateado se queda en 720Kb. Y ésto sin contar las estructuras de datos, como la FAT.

De entrada, por la propia estructura del disco ya tenemos hecha la primera división del disco: cabezas (heads) y cilindros. Pero en un disco DD de 1Mb tendríamos que cada división tendría: 1 000 000 bytes / 80 / 2 = 6250 bytes. Esto es excesivo, con lo que cada pista se trocea en unas estructuras llamadas sectores.

Los sectores son los encargados de dividir las pistas, pero además de los datos contienen cabeceras que ayudan a controlar la posición del disco y que los datos leidos sean correctos (usando un CRC para ello) y unos espacios entre ellos para evitar errores.
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

2.2.1. Formato: Detalles de los sectores


Los sectores de un cilindro están separados entre ellos por unos delimitadores.

A su vez, están internamente divididos en partes y entre cada parte existe otro delimitador. Las dos partes pricipales son ID y DATOS.

Las estructuras usadas por cada sector en los discos de IBM PC son:


Discos FM (genérico, antiguos, en PC sólo algunos 5,25" y mas grandes):

INICIO PISTA:
Delimitador A --- 40 bytes 0xFF
SYNC --- 6 bytes 0x00
IAM - Índice --- 1 byte 0xFC
Delimitador B --- 26 bytes 0xFF

SECTORES (repetido tantas veces como sectores):
SYNC --- 6 bytes 0x00
IDAM --- 1 byte 0xFE (ID Address Mark)
Cylinder --- 1 byte con el número de cilindro actual
Head --- 1 byte con el número de cara actual (0x00 o 0x01)
Sector --- 1 byte con el número de sector actual
Sector Size --- 1 byte con el tamaño de sector. En PCs correientes es siempre fijo. Ver tabla inferior.
CRC --- 2 bytes de CRC (usualmente CCITT)
Delimitador C --- 11 bytes 0xFF
SYNC --- 6 bytes 0x00
Data AM --- 1 byte 0xFB o 0xF8
DATOS --- bytes del usuario - El tamaño depende del disco
CRC --- 2 bytes de CRC (usualmente CCITT)
Delimitador IS --- ??? -- No existe en el último sector

FIN PISTA:
Delimitador FIN --- ??? -- Solo existe en el último sector

Discos MFM: 3,5" y 5,25" IBM PC (DOS)

INICIO PISTA:
Delimitador A --- 80 bytes 0x4E
SYNC --- 12 bytes 0x00
IAM - Índice --- 3 bytes 0xC2 + 1 byte 0xFC
Delimitador B --- 50 bytes 0x4E

SECTORES (repetido tantas veces como sectores -8 o 9 veces-):
SYNC --- 12 bytes 0x00
IDAM --- 3 bytes 0xA1 + 1 byte 0xFE (ID Address Mark)
Cylinder --- 1 byte con el número de cilindro actual
Head --- 1 byte con el número de cara actual (0x00 o 0x01)
Sector --- 1 byte con el número de sector actual
Sector Size --- 1 byte con el tamaño de sector. En PCs correientes es siempre fijo. Ver tabla inferior.
CRC --- 2 bytes de CRC (usualmente CCITT)
Delimitador C --- 22 bytes 0x4E
SYNC --- 12 bytes 0x00
Data AM --- 4 bytes 0xA1 + 1 byte 0xFB o 0xF8
DATOS --- 512 bytes del usuario
CRC --- 2 bytes de CRC (usualmente CCITT)
Delimitador IS --- 54 bytes 0x4E -- No existe en el último sector

FIN PISTA:
Delimitador FIN --- 652 bytes 0x4E -- Solo existe en el último sector


Discos MFM HP: algunos 3,5" y algunos 5,25":

INICIO PISTA:
Delimitador A --- 32 bytes 0x4E

SECTORES (repetido tantas veces como sectores -16 veces-):
SYNC --- 12 bytes 0x00
IAM - Índice --- 3 bytes 0xA1 + 1 byte 0xFE
Delimitador B --- 26 bytes 0xFF
SYNC --- 6 bytes 0xFF
IDAM --- 1 byte 0xFE (ID Address Mark)
Cylinder --- 1 byte con el número de cilindro actual
Head --- 1 byte con el número de cara actual (0x00 o 0x01)
Sector --- 1 byte con el número de sector actual
Sector Size --- 1 byte con el tamaño de sector. En PCs correientes es siempre fijo. Ver tabla inferior.
CRC --- 2 bytes de CRC (usualmente CCITT)
Delimitador C --- 22 bytes 0x4E
SYNC --- 12 bytes 0x00
Data AM --- 4 bytes 0xA1 + 1 byte 0xFB
DATOS --- 256 bytes del usuario
CRC --- 2 bytes de CRC (usualmente CCITT)
Delimitador IS --- 46 bytes 0x4E -- No existe en el último sector

FIN PISTA:
Delimitador FIN --- 204 bytes 0x4E -- Solo existe en el último sector



Tabla de valores para el campo Tamaño de sector de la cabecera IDAM
Tabla Valores IDAM - Sector Size.png
Nota: En un PC DOS/Windows el valor Sector Size será de 512by, por lo tanto 0x02


Cálculo del CRC CCITT

El cálculo del CRC se hace mediante la función CCITT CRC16: G(x)=x^16 + x^12 + x^5 + 1.

Un ejemplo de implementación en C es (uint16_t es unsigned int de 16 bits):

Código: Seleccionar todo

#define POLY 0x8408

uint16_t crc16(char *data_p, uint16_t length) {
	unsigned char i;
	uint16_t data;
	uint16_t crc;

	crc = 0xffff;

	if (length == 0) {
		return (~crc);
	}

	do {
		for (i = 0, data = (uint16_t) 0xff & *data_p++; i < 8; i++, data >>= 1) {
			if ((crc & 0x0001) ^ (data & 0x0001)) {
				crc = (crc >> 1) ^ POLY;
			} else {
				crc >>= 1;
			}
		}
	} while (--length);
	crc = ~crc;
	data = crc;
	crc = (crc << 8) | (data >> 8 & 0xFF);
	return (crc);
}


Además, he creado dos librerías para hacer este cálculo en el IDE Arduino:
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

2.3. Detalles de algunos discos comunes

Notas:
  • Las unidades mostradas como KBy son realmente 1000 Bytes (= 8000 bits).
  • Las unidades mostradas como KBits son realmente 1000 Bits (= 125 bytes).
  • Las unidades que habitualmente se muestran como MBy son realmente 1000KBy = 1000000By = 8000000 bits. Por tanto, los discos de 2MBy (1.44MBy formateados) son realmente discos de 1,907348633 MBy.
  • Existen unidades con velocidad no estándard, sobretodo unidades que se muestran aquí como 5 rev/s pero funcionan a 6 rev/s. Pese a no ser estándard hay muchas controladoras que las soportan y así se consigue algo mas de velocidad.

Unidades 3,5"

Código: Seleccionar todo

Capacidad	 Capacidad	Caras	Cilindros/Cara	Cilindros	Data rate	Rev/s	KBy/cilindro
(en bruto)	(formateado)				 totales	 kBits/s		 (en bruto)
--------------------------------------------------------------------------------------------------------------
1000KBy		720KBy		2		80	  160		   250	  	  5		6,25
2000KBy		1440KBy		2		80	  160		   500		  5		12,5

Unidades 5,25"

Código: Seleccionar todo

Capacidad	 Capacidad	Caras	Cilindros/Cara	Cilindros	Data rate	Rev/s	KBy/cilindro
(en bruto)	(formateado)				 totales	 kBits/s		 (en bruto)
--------------------------------------------------------------------------------------------------------------
500KBy		360Kby		2		40	   80 		   250 	  	  5		 6,25
1666,6rKBy	1299,9rKBy	2		80	  160		   500 		  6		10,416r
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

-reservado-
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

-reservado-
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

-reservado-
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

-reservado-
Avatar de Usuario
Naguissa
Administrador del Sitio
Mensajes: 507
Registrado: 04 Jul 2016, 11:17
Agradecido: 110 veces
Agradecimiento recibido: 134 veces

Re: Disketteras - Información del funcionamiento interno

Mensaje sin leer por Naguissa »

-reservado-
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje