ESP8266 - extern I2C EEPROM datalogger - AT24C32/64-drivrutinen (3 / 4 steg)
Steg 3: Driver genomförandet
Driver genomförandet
För att kunna komma åt och arbeta ordentligt med någon form av minnesenheter vi behöver minst 3 grundläggande funktioner genomförs: adressering, läsa och skriva. Plus korrekt I2C buss kommunikation initiering, såklart.
1. Init I2C bussen/interface:
Adress = 0x50,--A2, A1, A0 = 0
ID = 0
init = funktion (själv, sda, scl)
Self.ID = 0
I2C.Setup (self.id, sda, scl, i2c. LÅNGSAM)
slutet
ADRESSERING:
De 32K EEPROM kräver ett 8-bitars enhet adress ord efter en startvillkoret att aktivera chipet för en läsa eller skriva drift. Den använder tre enhet adress bitar A2, A1, A0 för att så många som åtta enheter på samma buss. Dessa bitar måste jämföra deras motsvarande hårdkodade in stift. A2, A1 och A0 stiften använder en inre egen krets som biases dem till en logik låg villkor om stiften får flyta.
Den åttonde biten av enhetens adress är läs/skriv drift väljer lite. En Läsåtgärd initieras om denna bit är hög och en skrivåtgärd initieras om denna bit är låg.
2. Läs funktion
En random läsa kräver en "dummy" byte skriva sekvens att ladda in data ordet adress. När enhetens adress word och data ordet adress är klockat in och bekräftas av EEPROM, måste mikrokontroller generera ett annat start tillstånd.
Mikrokontroller initierar nu en aktuell adress läsa genom att skicka en enhetsadress med den
Läs/skriv Välj lite hög. EEPROM erkänner enheten adressen samt ur seriellt
data ordet. Mikrokontroller svarar inte med en nolla men genererar en följande
stoppvillkor
read_EEPROM = funktion (själv, devadr, memadr, längd)
adrh=bit.rshift (memadr, 8)
adrl=bit.band(memadr,0xFF)
I2C.start(Self.ID)
I2C.address (self.id, self.address, i2c. SÄNDAREN)
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. MOTTAGARE)
c=I2C.Read (self.id, längd)
I2C.stop(Self.ID)
Print(c)
returnera c
slutet
3. skriva funktion
En skrivåtgärd kräver två 8-bitars data word adresser efter enhet adress word och bekräftelse. Efter mottagandet av denna adress, EEPROM igen svarar med en nolla och sedan klockan i det första 8-bitars data ordet. Efter mottagandet av 8-bitars data ordet, EEPROM kommer ut en nolla och adressering enheten, t.ex en mikrokontroller, måste avsluta sekvensen skriva med ett stoppvillkor.
Vid denna tidpunkt EEPROM träder ett internt tt skriva cykel, tWR, till beständigt minne. Alla ingångar är inaktiverade under den här skriva cykel och EEPROM svarar inte förrän skriva är klar
write_EEPROM = funktion (själv, devadr, memadr, edata)
Jag = 1
längd = string.len(edata)
adrh=bit.rshift (memadr, 8)
adrl=bit.band(memadr,0xFF)
I2C.start(Self.ID)
I2C.address (self.id, self.address, i2c. SÄNDAREN)
I2C.write (self.id, adrh)
I2C.write (self.id, adrl)
--Print(edata)--debug endast
--Print(String.byte(edata,1))--debug endast
medan jag < = längd vill
TMR.wdclr()
I2C.write(Self.ID,String.byte(edata,i))
jag = i + 1
slutet
I2C.stop(Self.ID)
slutet