Kaip susieti I2C-EEPROM su 8051 mikrovaldikliu

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Terminas I2C arba IIC sutrumpinimas yra inter integrinis grandynas ir jis vadinamas, kai aš padariau kvadratą C. „I2C“ yra nuoseklioji kompiuterio magistralė , kurį išrado NXP puslaidininkiai, anksčiau jis buvo pavadintas „Philips“ puslaidininkiais. „I2C“ magistralė naudojama prijungiant mažo greičio periferinius integruotus grandynus mikrovaldikliai ir procesoriai . 2006 m. Norint įgyvendinti I2C protokolą, nereikia mokėti licencijos. Tačiau norint gauti IXC vergo adresą, kurį priskyrė NXP puslaidininkiai, reikia mokėti.

Kai kurie konkurentai, tokie kaip „Texas Instruments“, „Siemens AG“, NEC, „Motorola“, „Intersil“ ir „STMicroelectronics“, dešimto dešimtmečio viduryje paskelbė rinkoje tinkamus „I²C“ produktus. 1995 m. SMBus apibrėžė „Intel“, tai yra I²C pogrupis, teigiantis, kad protokolai yra griežtesni. Pagrindinis SMBus tikslas yra palaikyti sąveikumą ir patikimumą. Todėl dabartinėse „I²C“ sistemose yra „SMBus“ taisyklės ir politika, kartais ji palaiko tiek „I2C“, tiek „SMBus“ su minimaliu perkonfigūravimu.




„I2C“ magistralė

„I2C“ magistralė

Sąsaja I2C magistralė-EEPROM su mikrovaldikliu 8051

Kas yra I2C magistralė

I2c magistralė naudoja dvi dvikryptes atvirojo nutekėjimo linijas, tokias kaip SDA (nuoseklioji duomenų linija) ir SCl (nuosekliojo laikrodžio linija), ir jos yra ištrauktos su rezistoriais. „I2C“ magistralė leidžia pagrindiniam įrenginiui užmegzti ryšį su vergo įrenginiu. Duomenys keičiami šiais dviem įrenginiais. Paprastai naudojamos + 3,3 V arba + 5 V įtampos, nors leidžiama naudoti sistemas su papildoma įtampa.



„I2C“ sąsaja

„I2C“ sąsaja

EEPROM

Elektra ištrinamas programuojamas ROM (EEPROM) yra vartotojo keičiamas ROM, kurį galima dažnai pašalinti ir perprogramuoti naudojant didesnę nei įprasta elektros įtampą. EEPROM yra tam tikra nepastovi atmintis, naudojama elektroniniuose prietaisuose, pavyzdžiui, kompiuteriuose, saugant nedidelį kiekį duomenų, kurie turėtų būti išsaugoti atjungus maitinimą.

8051 „Slicker Board“

„8051 Slicker“ lenta yra specialiai sukurta padėti technikos studentams šioje srityje įterptinės sistemos . Šis rinkinys sukurtas taip, kad visos funkcijos 8051 mikrovaldiklis galbūt naudos studentai. Ši puolėjų lenta palaiko ISP (sisteminiame programavime), kuris atliekamas per nuoseklųjį prievadą. Siūlomas šis rinkinys ir „NXP“ 8051, siekiant išlyginti daugelio 8 bitų mikrovaldiklių supančių dizainų derinimo pažangą.

Sąsajos I2C - EEPROM

Šiame paveikslėlyje parodyta I2C-EEPROM sąsaja su 8051 mikrovaldikliu. Čia I2C yra pagrindinis-vergas protokolas, apimantis duomenis kartu su laikrodžio impulsu. Paprastai pagrindinis įrenginys perjungė laikrodžio liniją SCL. Ši eilutė nurodo duomenų laiką, kuris perduodamas I2C magistralėje. Jei laikrodis neveikia, duomenys nebus perduodami. Visus vergus valdo tas pats laikrodis - SCL.


Sąsajos I2C - EEPROM

Sąsajos I2C - EEPROM

„I2C“ magistralė palaiko įvairius įrenginius - kur kiekvienas įrenginys identifikuojamas pagal unikalų adresą, ar tai yra LCD tvarkyklė, atminties kortelė, mikrovaldiklis ar klaviatūros sąsaja kuris gali veikti kaip Tx arba Rx, priklauso nuo įrenginio veikimo. Valdiklis yra skirtas valdyti EEPROM įrenginį per I2C protokolą. Čia jis „I2C“ protokolas veikia kaip pagrindinis įrenginys ir reguliuoja EEPROM, o jis veikia kaip vergas. R / W operacijos yra įgudusios perduodant valdymo signalų rinkinį, apimantį adreso IR / ARBA duomenų magistralę. Šie signalai turėtų būti rodomi tinkamais laikrodžio signalais

Sąsaja I2C magistralė-EEPROM su mikrovaldikliu 8051

Jei norite skaityti, parašykite ir ištrinkite EEPROM naudodami I2C magistralę 8051 puolėjo lentoje. I2 magistralės-EEPROM sąsaja su 8051 mikrovaldiklis yra labai paprastas . Šios sąsajos operacija yra siųsti signalą, pvz., WRITE, po kurio eina duomenų ir adreso magistralė. Atliekant šią operaciją, EEPROM naudojamas duomenims saugoti. 8051 rinkinyje du EEPROM linijų numerius reguliuoja I2C palaikomi tvarkyklės. SCL ir SDA yra prijungtos prie I2C serijinės EEPROM IC.

Sąsaja I2C magistralė-EEPROM su mikrovaldikliu 8051

Sąsaja I2C magistralė-EEPROM su mikrovaldikliu 8051

Naudojant SDA ir SCL I2C linijas, EEPROM skaitymo ir rašymo operacijos atliekamos 8051 Slicker Kit rinkinyje

„I2C“ sąsaja yra tokia paprasta ir kiekvienuose duomenyse skaitykite / rašykite EEPROM. Vėlavimas priklauso nuo kompiliatoriaus, kaip jis pagerins kilpas, kai tik pakeisite pasirinkimą, vėlavimas skiriasi.

I2C sąsajos šaltinio kodas

# įtraukti
# įtraukti
# įtraukti

#define ACK 1
#define NO_ACK 0

nepasirašyta char i
nepasirašyta simbolis EData [5]
nepasirašyta char Data
negaliojantis „InitSerial“ (negaliojantis)
anuliuoti „DelayMs“ (nepasirašytas int)
negaliojantis WriteI2C (nepasirašyta simbolis)
negaliojantis Pradėti (negaliojantis)
anuliuoti Stop (anuliuoti)
negaliojantis „ReadBYTE“ (nepasirašytas int)
negaliojantis WriteBYTE (nepasirašytas int)
nepasirašytas simbolis „ReadI2C“ (bitai)

sbit SCL = P2 ^ 0 // prisijungti prie SCL kaiščio (laikrodis)
sbit SDA = P2 ^ 1 // prisijungti prie SDA kaiščio (duomenys)

// —————————————
// Pagrindinė programa
// —————————————
negaliojantis pagrindinis (negaliojantis)
{
InitSerial () // Inicializuoti nuoseklųjį prievadą
putcharas (0x0C) // išvalyti hiper terminalą
Vėlavimas (5)
WriteBYTE (0x0000)
WriteI2C (‘A’) // Čia rašykite duomenis
RašymasI2C („B“)
RašymasI2C („C“)
RašymasI2C („D“)
RašymasI2C („E“)
RašymasI2C („F“)
Sustabdyti()
Vėlavimas (10)

„ReadBYTE“ (0x0000)
EData [0] = SkaitytiI2C (NO_ACK)
EData [1] = SkaitytiI2C (NO_ACK)
EData [2] = SkaitytiI2C (NO_ACK)
EData [3] = SkaitytiI2C (NO_ACK)
EData [4] = SkaitytiI2C (NO_ACK)
EData [5] = SkaitytiI2C (NO_ACK)

už (i = 0i<6i++)
{
printf („value =% c n“, EData [i]) // rodyti duomenis * /
Vėlavimas (100)
}

o (1)
}

// —————————————
// Inicializuoti nuoseklųjį prievadą
// —————————————
negaliojantis „InitSerial“ (negaliojantis)
{
SCON = 0x52 // nuosekliojo prievado nustatymas
TMOD = 0x20 // aparatinė įranga (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // 1 laikmatis įjungtas
}

// ———————————-
// pradėti I2C
// ———————————-
negaliojantis Pradėti (negaliojantis)
{
SDA = 1
SCL = 1
_ mygtukas _ () _ nop_ ()
SDA = 0
_ mygtukas _ () _ nop_ ()
SCL = 0
_ mygtukas _ () _ nop_ ()
}

// ———————————-
// sustabdyti I2C
// ———————————-
anuliuoti Stop (anuliuoti)
{
SDA = 0
_ mygtukas _ () _ nop_ ()
SCL = 1
_ mygtukas _ () _ nop_ ()
SDA = 1
}

// ———————————-
// Parašykite I2C
// ———————————-
negalioja WriteI2C (nepasirašyti char duomenys)
{

už (i = 0i<8i++)
{
SDA = (duomenys ir 0x80)? 1: 0
SCL = 1 SCL = 0
Duomenys<<=1
}

SCL = 1
_ mygtukas _ () _ nop_ ()
SCL = 0

}

// ———————————-
// Skaityti I2C
// ———————————-
nepasirašytas simbolis „ReadI2C“ (bitai ACK_Bit)
{

Pradžia ()
RašymasI2C (0xA1)

SDA = 1
už (i = 0i<8i++)

SCL = 1
Duomenys<<= 1
Data = (data

jei (ACK_Bit == 1)
SDA = 0 // Siųsti ACK
Kitas
SDA = 1 // Siųsti NE AKT

_ mygtukas _ () _ nop_ ()
SCL = 1
_ mygtukas _ () _ nop_ ()
SCL = 0
Sustabdyti()
grąžinti duomenis
}

// ———————————-
// Perskaitykite 1 baito formą I2C
// ———————————-
negaliojantis „ReadBYTE“ (nepasirašytas tarp „Addr“)
{
Pradžia ()
RašymasI2C (0xA0)
WriteI2C ((nepasirašyta simbolis) (Addr >> 8) ir 0xFF)
WriteI2C ((nepasirašyta simbolis) Addr ir 0xFF)
}

// ———————————-
// Parašykite 1 baitą I2C
// ———————————-
negaliojantis WriteBYTE (nepasirašytas int Addr)
{
Pradžia ()
RašymasI2C (0xA0)
WriteI2C ((nepasirašyta simbolis) (Addr >> 8) ir 0xFF) // siųsti adresą didelis
WriteI2C ((nepasirašyta simbolis) Addr & 0xFF) // siuntimo adresas žemas
}

// —————————————
// Atidėkite mS funkciją
// —————————————
anuliuoti „DelayMs“ (nepasirašytas int skaičius)
{// mSek vėlavimas 11.0592 Mhz
nepasirašytas int i // Keil v7.5a
kol (skaičiuoti)
{
i = 115
o (i> 0) i–
suskaičiuoti
}
}

Taigi visa tai susiję su I2C sąsajos įgyvendinimu. Tikimės, kad jūs geriau supratote šią koncepciją. Be to, bet kokie klausimai dėl šios koncepcijos ar sąsajos įtaisai pateikite savo vertingus pasiūlymus komentuodami žemiau esančiame komentarų skyriuje.