Étape 3: Mise en œuvre pilote
Mise en œuvre pilote
Pour pouvoir accéder et fonctionner avec tout type d’unités de stockage, il faut au moins 3 fonctions de base mis en œuvre : traiter, lire et écrire. De plus, l’initialisation de communication de bus I2C bonne, bien sûr.
1. Init I2C interface/bus:
address = 0x50, -- A2, A1, A0 = 0 id = 0 init = function (self, sda, scl) self.id = 0 i2c.setup(self.id, sda, scl, i2c.SLOW) end
S’adressant:
32K EEPROM nécessite un mot d’adresse de périphérique 8 bits suite à une condition de démarrage pour activer la puce pour une lecture ou d’opération d’écriture. Il utilise les bits d’adresse trois appareil A2, A1, A0 pour permettre jusqu'à huit appareils sur le même bus. Ces bits doivent comparer à leurs broches d’entrée câblé. Les broches A0, A1 et A2 utilisent un circuit exclusif, qui eux préjugés à une condition peu logique si les broches sont autorisés à flotter.
Le huitième bit de l’adresse du périphérique est le bit de sélection opération lecture/écriture. Une opération de lecture est lancée si ce bit est élevé, et une opération d’écriture est enclenchée si ce bit est faible.
2. fonction de lecture
Une lecture aléatoire requiert un octet « factice » écrire la séquence pour charger l’adresse mot de données. Une fois l’adresse du périphérique adresse word et données mot sont cadencées et reconnu par l’EEPROM, le microcontrôleur doit produire une autre condition de départ.
Le microcontrôleur lance maintenant une adresse actuelle lire en envoyant une adresse de périphérique avec le
lecture/écriture sélectionnez peu élevé. L’EEPROM reconnaît l’adresse du périphérique et des horloges en série
le mot de données. Le microcontrôleur ne répond pas avec un zéro mais génère une suite
condition d’arrêt
read_EEPROM = function (self, devadr, memadr, length) adrh=bit.rshift(memadr, 8) adrl=bit.band(memadr,0xff) i2c.start(self.id) i2c.address(self.id, self.address, i2c.TRANSMITTER) i2c.write(self.id, adrh) i2c.write(self.id, adrl) i2c.stop(self.id) i2c.start(self.id) i2c.address(self.id, self.address, i2c.RECEIVER) c=i2c.read(self.id, length) i2c.stop(self.id) print(c) return c end
3. écrire la fonction
Une opération d’écriture nécessite deux 8 bits de données mot adresses suivant le mot d’adresse de périphérique et l’accusé de réception. Dès réception de cette adresse, l’EEPROM répondra à nouveau avec un zéro et puis horloge dans le premier mot de 8 bits de données. Après avoir reçu le mot de 8 bits de données, l’EEPROM va afficher un zéro, et l’adressage périphérique, comme un microcontrôleur, doit mettre fin à la séquence d’écriture avec une condition d’arrêt.
En ce moment l’EEPROM pénètre dans un cycle d’écriture en interne cadencées, tWR, à la mémoire non volatile. Toutes les entrées sont désactivées au cours de ce cycle d’écriture et de l’EEPROM ne répondra pas jusqu'à la fin de l’écriture
write_EEPROM = function (self, devadr, memadr, edata) i = 1 length = string.len(edata) adrh=bit.rshift(memadr, 8) adrl=bit.band(memadr,0xff) i2c.start(self.id) i2c.address(self.id, self.address, i2c.TRANSMITTER) i2c.write(self.id, adrh) i2c.write(self.id, adrl) --print(edata) --debug only --print(string.byte(edata,1)) --debug only while i<=length do tmr.wdclr() i2c.write(self.id,string.byte(edata,i)) i = i+1 end i2c.stop(self.id) end