A l'étude une interface de disque dur informatique IDE avec un microcontrôleur Microchip (16F871 par exemple )

Pourquoi ? un des problèmes majeur de l'électronique moderne est de pouvoir stocker des données en quantités importantes (plusieurs millions milliards de données binaire 0/1) par exemple pour stocker des données informatique pure, par exemple une image de 640*480 pixels en 16.7millions de couleurs représente déjà (640*480*3 (rvb)*8 (bits par couleur primaire)7 372 800 données élémentaire (bit) 0/1 ....
quels sont les avantages et les inconvénients d'un disque dur IDE ?
Avantages:
1/ un rapport prix/Capacité de stockage sans concurrence , on trouve des disques durs de quelques gigaoctet pour pas cher , celui dont je me sert pour les essais (Maxtor de 1999) m'a coûté 30euros et a une capacité de 2 gigaoctet ! , regardez le prix d'une mémoire morte type flash EPROM 4 ma (29F040 par exemple ) , y'a pas photo .
2/retention des données lorsque le disque n'est plus alimenté
3/possibilité d'écriture et de lecture sur la totalité du disque
4/accés parallèle des données sur 16 bits
Inconvénients:
1/ le protocole de communication avec le disque dur , il répond a la norme ATA-ATAPI (4.0 et au dessus),par l'interface IDE , 40 fils en nappe
2/le débit non linéaire des données, il faut tenir compte des temps d'accès a la case mémoire (secteur), ce qui peut représenter plusieurs millisecondes : ne pas confondre le temps d'accès du disque et le temps de lecture du disque , définit lui par les PIO et les DMA , là on peut espérer des débits d'information de plusieurs Mbits/seconde . pour contrecarrer les effets de temps d'accès des données il est astucieux d'utiliser des mémoires vives en 'tampon' .
3/un disque dur est un peu encombrant , cela reste un problème mineur.
4/c'est un peu bruyant , possibilité de le mettre en arrêt si l'on ne s'en sert pas , le moteur du disque s'arrête et repart si on demande des informations.
5/ un peut gourmand et relativement exigeant en énergie (12V &5V) le mieux est de servir d'une Alim de PC au rebut, y'a les connecteurs adéquats en plus
j'ai donc fabriqué un prototype d'interfaçage d'un disque dur avec un un pic 16F871 a 40 pattes , le tout communiquant a un Pc via un simple programme terminal (typer terminal par exemple) afin de pouvoir accéder au disque via une RS232 a 9600bds dans un premier temps
approche de l'interface IDE d'un DISQUE DUR:
l'interface d'un disque dur est constituée par un connecteur mâle 40 points , 2 rangées de 20pts au pas de 2.54mm , la patte 1 est repéré , la patte 20 est généralement absente.

D0 a D7 représente le poids faible du mot de 16 bits de large
D8 a D15 représente le poids fort du mot 16 bits de large
AD0 , AD1 , AD2 associé a CS1fx et CS3fx sont des entrées qui détermine quel registre du disque dur on veut accéder (voir annexe)
/RESET indique au disque de le reseter (actif au niveau bas) , au passage il existe une commande de reset par le soft.
/IORW indique au disque dur de prendre en compte les datas au niveau du bus de données (cycle front descendant / front montant) , écriture dans le registre sélectionné.
/IORD indique au disque dur qu'on veut récupérer des datas au niveau du bus de données (cycle front descendant / front montant),lecture du registre sélectionné.
nb: si /IORW et /IORD sont tout les deux a un , le bus de datas est en haute impédance.
Si on se sert d'un port 8 bits d'un µc , relié a AD0, AD1,AD2,CS1fx,CS3fx, /IORD,/IORW,/RESET et de 2 ports complets bidirectionnels de 8 bits pour les datas c'est assez pour causer au disque dur ! et oui.
Néanmoins il peut être utile pour aller plus vite de se servir de certaine pattes du bus IDE , notamment la patte d'interruption, INT (ou IRQ) et de la patte /IORDYmais ce n'est pas indispensable!
annexe: registre accédé en fonction de cs3fx cs1fx ad0 ad1 ad2 ( a faire suivre par le cycle /IORD (récupération de valeurs des registres ) ou par le cycle /IORW (écriture des valeurs dans les registres)

TOUT est basé sur ce tableau , la bonne connaissance de celui ci permet de faire pas mal de chose avec le disque dur, enfin il faut comprendre un peu comment est constitué un disque dur.celui ci est constitué de SECTEURS , c'est l'élément de base du disque , chaque secteur contient 256 mots , (donc 512octets)lorsqu'on veut récupérer des datas d'un secteurs, il faut définir son adresse physique dans le disque, et bien cette adresse est défini sur 28bits ( LBA) , de 0 a n Max secteurs en fonction du disque utilisé( une parenthèse au passage , historiquement il fallait définir auparavant le cylindre , la tête , et le secteur , les LBA -linear block adressing- permet d'adresser linéairement tout les secteurs, attention les vieux disques ne permettent pas l'adressage en LBA -en général <528Mb - mais pas d'inquiétude tout les disque au delà de cette capacité supporte OBLIGATOIREMENT le mode LBA)Une fois l'adresse du secteur a lire définit , on lance a l'aide du registre COMMAND la commande 'Lire le secteur' -20h- on attend que les datas du secteurs soit prêtes par la lecture du registre STATUS -bit DRQ du-dit registre- (ou par la patte /IORDY) et on lit les 256 Mots (512octets) du secteur...(256 cycles /IORD)c'est tout !
Le registre STATUS est très important , c'est lui qui donne l'état du disque:

Bit 7 ou BSY (busy) ce bit indique que le registre STATUS est valide , autrement dit après une commande , le temps qu'il s'update il met ce bit a 1 , lorsque il est a jour il met ce bit a 0 , autrement dit toute lecture du registre STATUS doit se faire avec ce bit a 0 (attendre qu'il passe a zéro puis lire le registre)
BIT 6 ou DRDY( disk ready) ce bit indique que le disque est prêt , autrement dit a la mise sous tension on attend que ce bit soit a 1.
BIT 5 (DWF) et BIT 4 (DSC) sont sans importance , ou du moins il faut lire attentivement la doc ATAPI
BIT 3 ou DRQ , (data request) a 1 indique que les datas sont prêtes a être transférer
BIT 2 (CORR) et BIT 1 (IDX) idem bit 4 et 5
BIT 0 (ERR) a 1 indique qu'il y a eu une erreur de commise , dans ce cas la on ca lire le registre ERREUR pour déterminer celle ci (voir la doc du ATAPI)
quelques commandes importantes:
20h = lire le secteur
30h = ecrire le secteur
E0h = arrêt du disque
ECh = identification du disque
Voila en gros pour le fonctionnement de base de l'interface IDE dans les cas simples, je passe sous silence pas mal de chose, notamment les modes de fonctionnement (PIO/DMA) .
la carte a base de pic16F871 , interface avec RS232 et programme terminal , histoire de se faire la Main est prête,cliquer ici (124ko a dezzipper)