- Što je I2C komunikacijski protokol?
- Kako I2C komunikacija djeluje?
- Gdje koristiti I2C komunikaciju?
- I2C na Nuvotonu N76E003 - Zahtjev za hardverom
- Povezivanje AT24LC64 s Nuvotonom N76E003 - dijagram kruga
- I2C pribadače na Nuvotonu N76E003
- I2C komunikacija u N76E003
- Programiranje N76E003 za I2C komunikaciju
- Trepćući kod i izlaz
U velikom sustavu ugrađenih aplikacija niti jedan mikrokontroler ne može sam obavljati sve aktivnosti. U nekoj fazi vremena mora komunicirati s drugim uređajima radi razmjene informacija, postoji mnogo različitih vrsta komunikacijskih protokola za dijeljenje tih informacija, ali najčešće korišteni USART, IIC, SPI i CAN. Svaki komunikacijski protokol ima svoju prednost i nedostatak. Usredotočimo se zasad na IIC dio jer ćemo to naučiti u ovom vodiču. Ako ste ovdje novi, pogledajte Nuvoton Tutoriali gdje smo raspravljali o svim perifernim uređajima N76E003 Mikrokontrolera od vrlo osnovnog vodiča za početak rada. Ako želite naučiti kako koristiti I2C s drugim mikrokontrolerima, možete pogledati donje poveznice.
- Kako koristiti I2C u Arduinu: Komunikacija između dvije Arduino ploče
- I2C komunikacija s PIC mikrokontrolerom PIC16F877
- Povezivanje 16X2 LCD zaslona s ESP32 pomoću I2C
- I2C komunikacija s MSP430 Launchpadom
- Povezivanje LCD-a s NodeMCU bez upotrebe I2C
- Kako postupati s više komunikacija (I2C SPI UART) u jednom programu Arduina
I2C je važan komunikacijski protokol koji je razvio Philips (danas NXP). Korištenjem ovog I2C protokola, MCU se može povezati s više uređaja i započeti komunikaciju. I2C radi sa samo dvije žice, naime SDA i SCL. Gdje je SDA serijski podatak, a SCL serijski sat. Međutim, ove dvije iglice zahtijevaju pull-up otpornike do razine VCC napona, a s odgovarajućim pull-up otpornikom sabirnica može podržati 127 uređaja s jedinstvenom adresom.
Što je I2C komunikacijski protokol?
Izraz IIC označava " Inter integrirani krugovi ". Obično se na nekim mjestima označava kao I2C ili I na kvadrat C ili čak kao protokol dvožilnog sučelja (TWI), ali sve to znači isto. I2C je sinkroni komunikacijski protokol što znači da oba uređaja koji dijele informacije moraju dijeliti zajednički signal sata. Ima samo dvije žice za razmjenu informacija od kojih se jedna koristi za signal sata, a druga za slanje i primanje podataka.
Kako I2C komunikacija djeluje?
I2C komunikaciju prvi je predstavio Phillips. Kao što je ranije rečeno, ima dvije žice, te dvije žice bit će povezane preko dva uređaja. Ovdje se jedan uređaj naziva master, a drugi uređaj slave. Komunikacija bi se trebala i uvijek će se odvijati između dvoje, gospodara i roba. Prednost I2C komunikacije je u tome što se na Master može povezati više od jednog slave.

Kompletna komunikacija odvija se kroz ove dvije žice, naime, serijski sat (SCL) i serijski podatak (SDA).
Serijski sat (SCL): Dijeli signal sata koji generira master s podređenim uređajem
Serijski podaci (SDA): šalje podatke glavnom i pomoćnom uređaju i iz njega.
U bilo kojem trenutku samo će master moći započeti komunikaciju. Budući da je u sabirnici više od jednog podređenog uređaja, master mora uputiti svakog podređenog koristeći drugu adresu. Kad im se obratite, samo će salve s tom adresom odgovoriti s informacijama, dok će ostali šutjeti. Na taj način možemo koristiti istu sabirnicu za komunikaciju s više uređaja.
Gdje koristiti I2C komunikaciju?
I2C komunikacija koristi se samo za kratku udaljenost. Svakako je pouzdan u određenoj mjeri jer ima sinkronizirani impuls sata koji ga čini pametnim. Ovaj se protokol uglavnom koristi za komunikaciju sa senzorom ili drugim uređajima koji moraju slati informacije glavnom računaru. Vrlo je zgodno kada mikrokontroler mora komunicirati s mnogim drugim pomoćnim modulima koristeći najmanje samo žice. Ako tražite komunikaciju na daljinu, trebali biste isprobati RS232, a ako tražite pouzdaniju komunikaciju, trebali biste isprobati SPI protokol.
I2C na Nuvotonu N76E003 - Zahtjev za hardverom
Kako je zahtjev ovog projekta naučiti I2C komunikaciju pomoću N76E003, koristit ćemo EEPROM koji će biti povezan s I2C podatkovnom linijom. Neke ćemo podatke pohraniti u EEPROM, a također ćemo ih pročitati i prikazati pomoću UART zaslona.
Budući da će se pohranjena vrijednost ispisati u UART-u, potrebna je bilo koja vrsta USB u UART pretvarača. Također možete pogledati tutorial o UART-u s Nuvotonom ako ste novi u UART komunikaciji na N76E003. Za našu aplikaciju koristit ćemo CP2102 UART u USB pretvarač. Osim gore navedenog, potrebne su nam i sljedeće komponente -
- EEPROM 24C02
- 2kom otpornici 4.7k
Da ne spominjemo, osim gore navedenih komponenata, potreban nam je razvojni odbor zasnovan na mikrokontroleru N76E003, kao i Nu-Link programer. Pored toga, za spajanje svih komponenata potrebne su i žice za spajanje i spojne žice.
Povezivanje AT24LC64 s Nuvotonom N76E003 - dijagram kruga
Kao što možemo vidjeti na donjoj shemi, EEPROM je povezan u I2C liniju zajedno s dva povučena otpora. Krajnje lijevo prikazana je veza programskog sučelja.

Koristio sam ploču za krug za AT24LC64 IC i spojio IC na svoju ploču programera nuvoton pomoću kratkospojnih žica. Moje postavljanje hardvera zajedno s programatorom nu-ink prikazano je u nastavku.

I2C pribadače na Nuvotonu N76E003
Pin dijagram N76E003 može se vidjeti na donjoj slici-

Kao što vidimo, svaki pin ima različite specifikacije i svaki pin može se koristiti u više svrha. Međutim, pin 1.4 koristi se kao I2C SDA pin, izgubit će PWM i ostale funkcije. Ali to nije problem jer za ovaj projekt nije potrebna druga funkcionalnost. Ista stvar će se dogoditi za P1.3 je SCL pin I2C.
Budući da I2C igle djeluju kao GPIO, treba ga konfigurirati. Svi GPIO pinovi mogu se konfigurirati u dolje opisanom načinu.

Prema tablici podataka, PxM1.n i PxM2. n su dva registra koja se koriste za određivanje kontrolnog rada I / O porta. U podatkovnom listu navedeno je da se za upotrebu I2C funkcionalnosti I / O načini moraju koristiti kao otvoreni odvod za komunikacije povezane s I2C.
I2C komunikacija u N76E003
I2C periferna oprema važna je za bilo koju jedinicu mikrokontrolera koja podržava I2C značajke. Mnoge vrste različitih mikrokontrolera imaju ugrađenu I2C perifernu opremu. Međutim, u nekim se slučajevima I2C može konfigurirati ručno pomoću softverske kontrole gdje hardverska podrška povezana s I2C nije dostupna (Na primjer, mnogi 8051 mikrokontroleri). Međutim, nuvoton N76E003 dolazi s I2C perifernom podrškom.
M76E003 podržava četiri vrste operacija u I2C načinima - glavni odašiljač, glavni prijamnik, podređeni odašiljač i podređeni prijemnik. Također podržava standardne (100kbps) i brze (do 400kbps) brzine za I2C liniju. I2C radi s nekoliko općih pravila u SCL i SDA signalnim linijama.
Uvjet pokretanja i zaustavljanja:
To je važna stvar u I2C komunikaciji. Kada se podaci prenose na I2C liniju, započinju s uvjetom start i završavaju s uvjetom zaustavljanja.
Uvjet starta je prijelaz od visokog prema niskom na SDA kada je SCL linija visoka, a zaustavni uvjet je prijelaz od niskog prema visokom na SDA kada je SCL linija visoka. Ova dva uvjeta generira master (MCU ili bilo što drugo što kontrolira ostale slave uređaje). Autobusna linija ostaje zauzeta u ovom stanju kada se pokrene uvjet pokretanja i ostaje slobodna kad se pokrene uvjet zaustavljanja.
Uvjet pokretanja i zaustavljanja izvrsno je prikazan u perspektivi signala u tablici podataka N76E003-

7-bitna adresa s formatom podataka:
N76E003 podržava 7-bitni format adrese i podataka. Nakon pokretanja uvjeta pokretanja, glavni uređaj mora poslati podatke na I2C liniju. Prvi su podaci važni. Ako se ti podaci ne kreiraju pravilno ili se ne prenesu, povezani uređaj neće biti identificiran i daljnje komunikacije neće biti moguće.
Podaci se sastoje od 7-bitne duge slave adrese, označene kao SLA. Ova 7-bitna duga adresa mora biti jedinstvena za svaki uređaj ako je na sabirnicu povezano više uređaja. Nakon 7-bitne adrese, 8. bit je bit smjera podataka. To znači da, ovisno o 8. bitu, master šalje pomoćnom uređaju podatke o tome hoće li se podaci zapisati u slave uređaj ili će se podaci čitati s slave uređaja. 8. bit je R / W bit koji se naziva obavijest o čitanju ili pisanju. Kao što svi znamo, 8-bitne informacije mogu biti 128 vrsta, podržavajući tako 128 uređaja, ali I2C podržava 127 vrsta uređaja na istoj sabirnici, ali ne i 128. Budući da je adresa 0x00 rezervirana adresa koja se naziva općom adresom poziva. Ako master želi poslati informacije na sve uređaje,adresirat će 0x00 i svaki će se uređaj reproducirati na isti način kao prema pojedinačnim konfiguracijama softvera.
Dakle, prijenos podataka izgleda dolje -

Priznajte:
Na gornjoj slici adrese podataka, 9. bit nakon kojeg slijedi R / W bit naziva se potvrdni bit. Važan je jer koristeći ovaj bit glavni ili podređeni reagira na odašiljač podataka povlačenjem SDA linije nisko. Da bi dobio bit potvrde, odašiljač mora otpustiti SDA liniju.
Programiranje N76E003 za I2C komunikaciju
Kompletni program korišten u ovom vodiču nalazi se na dnu ove stranice. Objašnjenje važnih segmenata koda je sljedeće -
Postavite igle kao otvoreni odvod i konfigurirajte ih za I2C:
Krenimo prvo s I2C pin dijelom. Kao što je prethodno opisano, I2C SCL i SDA priključci moraju se konfigurirati i postaviti kao konfiguracija otvorenog odvoda. Da biste to učinili, koristite I2C.h zaglavlje datoteke , zajedno s I2C.c izvorne datoteke . Isječak koda izgleda ovako-
učiniti {P13_OpenDrain_Mode; P14_OpenDrain_Mode; clr_I2CPX;} dok (0)
Gornji kod postavlja P13 i P14 kao pin s otvorenim ispustom, a clr_I2CPX koristi se za odabir P13 i P14 kao SCL pin na P1.3 i SDA pin na P1.4.
Ovaj I2CPX je 0-ti bit I2C kontrolnog registra I2CON. Ako je ovaj I2C_PX postavljen na 1, pinovi se mijenjaju u P0.2 kao SCL i P1.6 kao SDA. Međutim, koristit ćemo P13 i P14. Ovdje se ne koriste alternativne igle.
Upravljački registar I2C I2CON:
I2C kontrolni registar I2CON koristi se za upravljanje I2C operacijama. Prvi bit je bit za odabir I2C pina. Postavljanjem 0 konfigurira I2C pin kao P13 i P14.

AA bit je zastava potvrde potvrde, ako je postavljena zastavica AA, vratit će se ACK tijekom impulsa takta potvrde na SCL liniji. Ako se očisti, vratit će se NACK (visoka razina na SDA) tijekom potvrđenog impulsa takta SCL linije.
Sljedeći je bit SI koji je prekid statusa I2C. Ako je I2C Status Interrupt omogućen, korisnik bi trebao provjeriti I2STAT registar kako bi utvrdio koji je korak prošao i trebao poduzeti radnju.
STO je STOP zastava koja se postavlja u glavnom načinu. STO se automatski uklanja hardverom nakon otkrivanja stanja STOP .
Sljedeći bit je STA bit. Ako je postavljena ova zastavica, tada I2C generira uvjet START ako je sabirnica slobodna. Ako je sabirnica zauzeta, I2C čeka stanje STOP i slijedi stanje START. Ako je postavljen STA dok je I2C već u glavnom načinu i jedan ili više bajtova su poslani ili primljeni, I2C generira ponovljeni START. Softver STA mora ručno obrisati.
Posljednji, I2CEN je bit za omogućavanje ili onemogućavanje sabirnice I2C.
EEPROM 24C02:
Sada, dolazimo do 24C02. Paket podrške ploče N76E003 ima I2C kôd za 24LC64 i može se lako mijenjati. Međutim, poslužit ćemo se jednostavnom metodom za razumijevanje funkcije I2C.
Ako netko želi koristiti detaljno povezivanje s EEPROM 24C02, tada se može koristiti EEPROM program u BSP-u.
Povezati ćemo samo 24C02 u I2C gdje će N76E003 biti glavni, a EEPROM će biti slave. Stoga ćemo upisati sve podatke na EEPROM adresu i pročitati ih iste.
24C02 EEPROM pinout prikazan je ispod -

A0, A1 i A2 tri su igle za odabir adrese. WP igle su igle za zaštitu od zapisivanja i moraju biti povezane s VSS-om kako bi se omogućilo upisivanje u EEPROM.
Funkcija Byte Write prikazana je na donjoj slici-

Puni ciklus pisanja događa se s početnim bitom. Nakon toga treba predati kontrolni bajt. U upravljačkom bajtu potrebne su sljedeće stvari -

Nakon početnog bita, sastoji se od pomoćne adrese. 1010 je statička, a A0, A1 i A2 adresa temeljena na hardverskoj vezi. Ako su tri zatiča spojena s GND ili VSS napajanjem, on će se čitati kao 0. Inače, ako je povezan s VCC, čitati će se kao 1. U našem slučaju, svi A0, A1 i A2 povezani su s VSS. Tako će sve ovo biti 0.
Trošenje na uvjet čitanja ili pisanja. Vrijednost adrese s bitom Čitanje ili pisanje bit će - 0xA0 za Write i 0xA1 za čitanje. Sljedeći je bit Potvrda i nakon toga će se poslati 8-bitna adresa na kojoj treba pohraniti podatke i na kraju podaci koji će biti pohranjeni na odgovarajućem mjestu. Te se stvari rade u korak po korak formatu u glavnoj funkciji.
Glavna funkcija i dok petlja:
void main (void) {char c = 0x00; PočetniUART0_Timer3 (115200); TI = 1; // Važno, upotreba prinft funkcije mora postaviti TI = 1; I2C_init (); while (1) {EEPROM_write (1,0x55); c = EEPROM_read (1); printf ("\ n Očitana vrijednost je% x", c & 0xff); }; }
Glavna funkcija je jednostavna, kontinuirano upisuje vrijednosti u EEPROM na adresu 1 i čita podatke. Podaci se tada ispisuju pomoću funkcije printf. Printf ispisuje vrijednost u hex.
EEPROM funkcija pisanja sastoji se od sljedećih stvari koje su opisane u odjeljku EEPROM-
void EEPROM_write (nepotpisana adresa znaka, nepotpisana vrijednost znaka) {I2C_start (); I2C_write (0xA0); I2C_write (adresa); I2C_write (vrijednost); I2C_stop (); }
Funkcija pokretanja I2C sastoji se od sljedećih stvari-
void I2C_start (void) {potpisano int time = timeout; set_STA; clr_SI; while ((SI == 0) && (time> 0)) {time--; }; }
U ovoj se funkciji status SI provjerava zajedno s unaprijed definiranim vremenskim ograničenjem (definirano u I2C.h gdje je unaprijed definirano vrijeme postavljeno na 1000). Funkcija pokretanja započinje postavljanjem STA i brisanjem SI.
void I2C_stop (void) {potpisano int time = timeout; clr_SI; set_STO; while ((STO == 1) && (time> 0)) {time--; }; }
Jednako kao i funkcija Start, stop. Funkcija zaustavljanja pokreće se postavljanjem STO nakon čega slijedi brisanje SI. Ispod funkcije je funkcija čitanja I2C-
nepotpisani znak I2C_read (nepotpisani znak ack_mode) {potpisan int time = timeout; nepotpisana vrijednost char = 0x00; set_AA; clr_SI; while ((SI == 0) && (t> 0)) {time--; }; vrijednost = I2DAT; if (ack_mode == I2C_NACK) {t = timeout_count; clr_AA; clr_SI; while ((SI == 0) && (t> 0)) {time--; }; } povratna vrijednost; }
Način ack_mode i I2C_NACK definirani su u datoteci zaglavlja I2C kao 0 odnosno 1.
Slično tome, stvara se funkcija pisanja-
void I2C_write (nepotpisana vrijednost znaka) {potpisano int time = timeout; I2DAT = vrijednost; clr_STA; clr_SI; while ((SI == 0) && (time> 0)) {time--; }; }
Trepćući kod i izlaz
Kôd je vratio 0 upozorenja i 0 pogrešaka, a Keil ga je treptao koristeći zadani način treptanja. Ako ste novi, pogledajte početne korake s vodičem nuvoton kako biste razumjeli kako prenijeti kôd. Podaci o sastavljanju koda nalaze se u nastavku.
Izgradite cilj 'I2C_EEPROM' kompilirajući I2C_EEPROM.c… sastavljanje I2C.c… povezivanje… Veličina programa: data = 59,2 xdata = 0 code = 2409 stvaranje hex datoteke iz ". \ Output \ I2C_EEPROM"… ". \ Izlaz \ I2C_EEPROM "- 0 pogreška, 0 upozorenja. Isteklo vrijeme gradnje: 00:00:04 Sažetak grupne gradnje: 1 uspjelo, 0 nije uspjelo, 0 preskočeno - Vrijeme proteklo: 00:00:04
Hardver se postavlja na ploču i radi kako se očekivalo. Kao što možete vidjeti na donjoj slici, uspjeli smo zapisati vrijednost na EEPROM i očitati je iz memorije i prikazati na serijskom monitoru.

Pogledajte donji videozapis za cjelovitu demonstraciju rada ploče na ovom kodu. Nadamo se da ste uživali u vodiču i naučili nešto korisno ako imate pitanja, ostavite ih u odjeljku za komentare u nastavku. Naše forume možete koristiti i za postavljanje drugih tehničkih pitanja.
