bleugafoto

Des photos, et des restes. le blog de ecaheti.

Archive pour July 2010

Si vous avez manqué le début, il y a presque un an.

Fonctionnement de base d’un système à microprocesseur.

Le microprocesseur

Voilà, il est beau hein, votre nouveau processeur de la marque “Generic 081628″. Il est cadencé à 28 gHz, possède un bus de donné de 8 bit, un bus d’adresse de 16 bit et quelques autres machin que je me réserve pour plus tard. Vous vous dîtes “Reste plus qu’à le plugger sur ma carte mère et …” et non, désolé, on fait de l’embarqué, il n’y a pas de carte mère qui accepte les Generic 081028. Va falloir tout faire à la main, comme des hommes. Un processeur tout seul, ça ne fait pas grand chose. Pour simplifier, ça ne dispose que de registres, d’une unité de calcul arithmétique et logique. Le Generic 081628 possède 4 registres de données 8 bits et 5 registres d’adresse 16 bits. Dans un registre 8 bits on peut mettre une valeur entre 0 et (2^8 - 1) soit 255. Dans un registre d’adresse 16 bits, on peut stocker entre 0 et (2^16 - 1) soit 65535. Voilà, on est bien avancé avec ça. Mais c’est déjà pas mal parce qu’on va pouvoir lui faire faire des choses trop bien (la suite est une adaptation d’assembleur adapté par moi même) :

  • Mettre 38 dans RD0 (registre de donnée numéro 0)
  • Mettre 2 dans RD1 (registre de données numéro 1)
  • Additionner RD0 et RD1 et mettre le résultat dans RD0.

Formidable ! A la fin de la manip, vous avez donc 40 dans RD0 et 2 dans RD1. Nous avons donc vu une des opérations de base du micro. Éventuellement on aura pu faire une soustraction, une multiplication, voir même une division dans vos rêves les plus fou.

Comme vous pouvez le constater, le 081628 ne pourra stocké au maximum qu’une valeur de 8 bit sur ses quatre registres. Soit une mémoire de … 4 octets. Pas terrible hein ? Nous allons donc rajouter un petit machin :

La mémoire externe

Et oui, la fameuse RAM de votre PC ! Notre micro est bien pauvre en espace  mémoire, nous allons donc lui rajouter un boitier mémoire de 1 kilooctet. Oui, c’était les soldes, il était en promo je me suis fais plaiz’. Mais comment le brancher à mon micro? Un boitier mémoire de type Generic M1K possède  10 pin (pattes) d’adresse, 8 pin de données et 2 autres pin dont je vais parler un peu plus tard.

Alors comment ça marche ? Sur le principe c’est plutôt simple : ce boitier peut contenir 1024 valeur 8 bits (1024 octet, depuis le temps vous l’aviez compris). Imaginez simplement un tableau Excel de 1024 case, avec des valeurs comprises entre 0 et 255. On place la valeur logique sur les fils du bus d’adresse l’indice du tableau dans lequel on veut écrire, par exemple 10, et sur le bus de donnée on colle la valeur qu’on veut écrire dans la mémoire, par exemple 82. Les novices perspicaces se demandent déjà : “Mais diantre, comme écrit on 82 sur des fils ?”.

Le binaire, le décimal et l’hexadécimal

Bien vu l’aveugle, et bonne question. L’informatique, c’est de l’électronique à la base. Sur un fil, le plus simple c’est soit d’appliquer une tension (en Volt), soit de rien faire du tout. On a donc 2 états électriques possible (et le concept du binaire apparait…). Le micro de cet article peut appliquer une tension de 0V, ou bien de 5V. Le 0 valant un 0 logique, et le 5V le 1 logique. En transformant 82 en une suite de 0 et de 1 (Conversion en binaire) qui vaut 01010010, on peut appliquer zéro ou 5V sur le bus de donnée du micro. Le bus de donnée est composé de 8 fils, nommés D0 à D7; électriquement nous avons donc :

  • D0 à 0 : 0V
  • D1 à 1 : 5V
  • D2 à 0 : 0V
  • D3 à 0 : 0V
  • D4 à 1 : 5V
  • D5 à 0 : 0V
  • D6 à 1 : 5V
  • D7 à 0 : 0V

Câblage

Nous allons relier les 8 fils du bus de donnée du micro au 8 fils de donnée du boitier mémoire. Le boitier mémoire est capable de faire la différence entre 0 et 5V, il va donc être capable de déchiffrer notre 82. Mais pour en faire quoi ? Suivant le modèle du bus de donné, le micro va placer la valeur 10 sur le bus d’adresse.

Sur le même principe, les 16 fils du bus d’adresse sont nommés A0 à A15 et sont connectés sur le boitier mémoire. Alors comment qu’on fait pour coller 16 fils sur un boitier où il n’y en a que 10 ? Bonne question… ou pas. On va faire simple : brancher les 2 A0 ensemble, les 2 A1, etc jusqu’à A9. Le micro va mettre 5V sur le fil A1 et A3 (10 en binaire donne 1010).

Voilà donc les bonnes informations présentes sur les bus, le boitier mémoire fait donc son taf, et récupère la data 82 pour la coller à l’adresse 10. Vous qui avez l’air égayer et joyeux comme des poulets sous exta, je sens poindre en vous un remarque pertinente : sur le schéma du boitier ya deux fils dont j’ai pas parlé! Oui, j’y viens. Un boitier mémoire, ça sert à stocker, mais si on peut relire c’est encore mieux. Pour ce faire, le boitier mémoire possède une entrée “R/W”. Toujours sous exta, vous devinez facilement que le R, c’est read, et que le /W c’est write. Voilà. C’est tout con. Vous avez un fil dédié sur le micro qui va dire si on écrit vers un périphérique (notre exemple où le micro place la data sur le bus de donnée) ou bien si on lit (c’est alors le boitier mémoire qui placera la data sur le bus, le micro ira lire les niveaux de tension).

Le dernier fil n’est pas CS comme counter strike, mais CS comme Chip Select. Le CS, c’est un peu le doigt du microcontrôleur chef d’orchestre qui désigne le périphérique qui doit parler. Tant que l’entrée CS d’un composant est non active, il n’écoute pas, ne parle pas, il ferme sa gueule ce boitier mémoire de merde. Voilà, notre système ressemble donc à ça :

Voilà, c’est un système qui sait :

  • Prendre des données dans une mémoire externe
  • Faire des calculs
  • Ecrire les résultats dans une mémoire externe.

Nous avons vu que notre boitier mémoire contient 1024 octets et est connecté sur les fils A0 à A9. La zone mémoire adressable va donc de l’adresse 0×0000 à l’adresse 0×03FF (1023 en décimal). Et si maintenant on voulait rajouter 1k de mémoire supplémentaire ? Et bien on le brancherait de la même façon (D0-D7; A0-A9; R/W) sauf pour le CS qui lui devra être différent. En effet on utilisera une deuxième sortie Chip Select du micro pour permettre de parler soit au premier boitier, soit au deuxième, et ainsi ne pas se mélanger les pinceaux.

Je vais m’arrêter la pour le moment, car je sais que le sujet peut mener rapidement à une indigestion. Au programme de la prochaine fois : décodage d’adresse, mapping mémoire et liaison série.