2009-11-19 23 views
-2

Presque tous les appareils électroniques sont livrés avec des firmwares. Je sais qu'il est stocké dans la mémoire ROM (Read only memory) de sorte qu'il devient non volatile (aucune source d'alimentation requise pour empêcher le contenu d'être effacé comme RAM)Comment les firmwares communiquent-ils avec les appareils électroniques pour effectuer leurs opérations?

Ce que je veux savoir est "Comment les firmwares communiquent à l'électronique appareils pour effectuer ses opérations? " Disons qu'il y a un petit rouleau .. Sur pression d'un bouton, comment ça le fait bouger? Quelqu'un peut-il s'il vous plaît expliquer ce qui est derrière réside, pour y arriver .. Je pense qu'il peut exiger un peu brève explication pour dérouler ..

De plus, quelle est la langue la plus populaire utilisé pour le codage Firmwares?

Répondre

1

Le matériel moderne que vous décrivez possède un programme stocké dans la ROM et un microprocesseur (CPU) polyvalent exécutant ce programme. La CPU lit les informations de la mémoire ROM en configurant des adresses sur son bus d'adresse, puis demande à la mémoire ROM de lui indiquer la valeur stockée à cet emplacement. Il y a quelque chose comme une impulsion de lecture qui est levée (sur une ligne séparée) pour dire à la ROM de rendre la valeur accessible sur les lignes du bus de données. Voilà, en un mot, c'est lire.

Pour que le matériel puisse faire quelque chose, la CPU exécute essentiellement une sorte d'opération d'écriture. Il met une valeur, qui est juste un tas de bits si vous voulez le regarder de cette façon, sur le bus d'adresse pour sélectionner un périphérique et peut-être fonctionner sur cet appareil, puis il soulève une autre ligne de signal en disant "écrire!" Le dispositif qui reconnaît son adresse sur le bus d'adresse répond à ce signal en acceptant les données du bus de données et en exécutant ensuite sa fonction. Typiquement, l'un des bits du bus de données sera connecté dans le dispositif de sortie à un étage de sortie de puissance, c'est-à-dire un transistor plus fort que ceux utilisés pour le calcul, et ce transistor connectera un courant électrique suffisant pour le faire bouger. /peu importe.

De minuscules périphériques bon marché sont codés en langage assembleur pour réduire les coûts de ROM; en quantités industrielles, même de petites quantités de mémoire peuvent affecter le prix. Le langage d'assemblage est spécifique à la CPU; certaines puces appelées "8051", "6502" et "Atmel (quelque chose ou autre)" sont populaires. Les plus gros appareils avec des exigences plus complexes peuvent avoir leur firmware écrit en C ou un dialecte de type C, ce qui rend la programmation un peu plus facile que l'assembleur. Les bigges exécutent même du code C++. Compilé, bien sûr.

1

Dans la plupart des systèmes, des adresses de mémoire spéciales sont utilisées pour les E/S. La lecture et l'écriture sur de telles adresses exécutent certaines fonctions au lieu de simplement déplacer des données. Dans les systèmes x86, il existe également des instructions d'entrée/sortie spéciales IN et OUT pour cela.

Le cas le plus simple est appelé E/S parallèles générales (GPIO), où vous pouvez lire ou écrire des données directement depuis/vers des broches électriques externes sur le périphérique. Il y a plusieurs adresses mémoire, appelées registres, où vous pouvez lire les données du port (tension proche de 0 = 0, près de la tension d'alimentation = 1), où vous pouvez écrire des données sur le port et où vous pouvez définir si une broche particulière est entrée (le bit correspondant est généralement 0) ou sortie (le bit est 1). Chaque microcontrôleur a GPIO. Dans votre exemple, le bouton pourrait être connecté à un jeu de broches que le logiciel pourrait détecter. Il le ferait typiquement toutes les 10ms et ne réagirait que s'il avait une valeur stable pour plusieurs lectures, c'est ce qu'on appelle le debouncing. Alors il écrirait un 1 à une sortie, qui via un transistor pour l'amplification pourrait conduire un moteur. Si vous sentez que vous relâchez l'interrupteur, vous pouvez éteindre le moteur en écrivant un 0. Et ainsi de suite, ce programme fonctionnera jusqu'à ce que vous éteigniez l'appareil.

Il y a beaucoup d'autres périphériques d'E/S à d'autres fins avec typiquement des centaines de registres pour les contrôler. Si vous voulez en voir plus, vous pouvez regarder dans la feuille de données de certains microcontrôleurs. Par exemple, voici the data sheet of ATtiny4/5/9/10, un très petit contrôleur de la famille Atmel AVR.

Aujourd'hui, la plupart du firmware est écrit en C, à l'exception des appareils les plus petits et un peu de code spécial pour la gestion des réinitialisations et les interruptions, ce qui est écrit en langage assembleur.