Stap 3: Driver uitvoering
Stuurprogramma uitvoering
Te kunnen openen en naar behoren functioneren met enige vorm van geheugenkaarten of-sticks moeten we ten minste 3 basisfuncties geïmplementeerd: aanpakken, lezen en schrijven. Plus de juiste I2C bus mededeling initialisatie, natuurlijk.
1. Init I2C bus/interface:
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
Aanpak:
De 32K EEPROM is een 8-bits apparaatstuurprogramma adres word na een start-voorwaarde de chip inschakelen voor een lezen of schrijven van operatie vereist. De drie apparaat adres bits A2, A1, A0 kunnen maar liefst acht apparaten op dezelfde bus worden gebruikt. Deze bits moeten vergelijken met hun bijbehorende hardwired invoer PIN. De A2, A1 en A0 pinnen gebruikt een interne private circuit dat hen tot een lage toestand van logica, vooroordelen als de pinnen zijn toegestaan te zweven.
De achtste bit van het apparaatadres is de lees/schrijf werking select bit. Een leesbewerking wordt gestart als een schrijfbewerking wordt ingeleid als deze bit laag is en dit stukje hoog is.
2. Lees functie
Een willekeurige lees vereist een "dummy" byte volgorde te laden in de adres gegevens woord schrijven. Zodra het apparaat adres word en gegevens woord adres zijn klokte in en bevestigd door de EEPROM, moet de microcontroller genereren een andere start-voorwaarde.
De microcontroller nu initieert een huidige adres lezen door het sturen van het apparaatadres van een met de
lezen/schrijven selecteert u beetje hoog. De EEPROM erkent het apparaatadres en serieel klokken
het woord van de gegevens. De microcontroller niet reageert met een nul maar genereert een volgende
Stop-voorwaarde
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. de functie van het schrijven
Een schrijfbewerking nodig twee 8-bit data word adressen volgens het apparaat adres woord en bevestiging. Na ontvangst van dit adres, zal de EEPROM weer reageren met een nul en vervolgens klok in de eerste 8-bit gegevenswoord. Na ontvangst van het 8-bits gegevenswoord, de EEPROM zal de uitgang van een nul en de adressering apparaat, zoals een microcontroller, de volgorde van de schrijven met een stop-voorwaarde moet beëindigen.
Op dit tijdstip die de EEPROM een intern-getimede treedt cyclus, tWR, naar de niet-vluchtig geheugen te schrijven. Alle ingangen zijn uitgeschakeld tijdens dit schrijven-cyclus en de EEPROM reageert niet totdat de schrijfbewerking voltooid is
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