Paso 3: Implementación del controlador
Implementación del controlador
Para poder acceder y operar correctamente con cualquier tipo de dispositivos de memoria necesita al menos 3 funciones básicas implementadas: atender, leer y escribir. Además de la correcta inicialización de comunicación bus I2C, por supuesto.
1. Init I2C bus o interfaz:
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
Abordar:
La EEPROM de 32K necesita una palabra de dirección de 8 bits dispositivo después de una condición de inicio para activar el chip para leer o escribir la operación. Utiliza los bits de la dirección del tres dispositivo A2, A1, A0, para permitir que hasta ocho dispositivos en el mismo bus. Estas brocas deben comparar a sus correspondientes pines de entrada de cableado. Los pines A2, A1 y A0 utilizan un circuito interno de propiedad que les predispone a una condición baja lógica si los pasadores se permitieron flotar.
El octavo bit de la dirección del dispositivo es la lectura y escritura operación select. Una operación de lectura se inicia si este bit es alto y se inicia una operación de escritura si este bit es baja.
2. Lea la función
Una lectura al azar requiere un byte "dummy" escribir secuencia de cargar en la dirección de palabra de datos. Una vez que el dispositivo datos y palabra palabra dirección entrado y reconocido por la EEPROM, el microcontrolador debe generar otra condición de inicio.
El microcontrolador inicia ahora una dirección actual leer mediante el envío de una dirección de dispositivo con la
alto seleccione bit de lectura/escritura. La EEPROM reconoce la dirección del dispositivo y en serie relojes
la palabra de datos. El microcontrolador no responde con un cero sino generar un siguiente
condición de parada
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. escribir la función
Una operación de escritura requiere dos datos de 8 bits direcciones siguiendo la palabra de dirección de dispositivo y el reconocimiento de la palabra. Tras la recepción de esta dirección, la EEPROM nuevo responderá con un cero y luego el reloj en la primera palabra de datos de 8 bits. Después de recibir la palabra de datos de 8 bits, la EEPROM es la salida de un cero y el dispositivo de direccionamiento, tales como un microcontrolador, debe terminar la secuencia de escritura con una condición de parada.
En este momento la EEPROM entra en un ciclo de escritura programados internamente, tWR, a la memoria no volátil. Todas las entradas se desactivan durante este ciclo de la escritura y la EEPROM no responderá hasta que la escritura esté completa
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