- Kas ir I2C sakaru protokols?
- Kā darbojas I2C komunikācija?
- Kur izmantot I2C komunikāciju?
- I2C vietnē Nuvoton N76E003 - aparatūras prasība
- Saskarne AT24LC64 ar Nuvoton N76E003 - shēmas shēma
- I2C tapas uz Nuvoton N76E003
- I2C komunikācija N76E003
- N76E003 programmēšana I2C komunikācijai
- Mirgo kods un izvade
Plašajā iegulto lietojumprogrammu sistēmā neviens mikrokontrolleris nevar pats veikt visas darbības. Kādā laika posmā tai ir jāsazinās ar citām ierīcēm, lai koplietotu informāciju, lai koplietotu šo informāciju, ir daudz dažādu veidu sakaru protokolu , taču visbiežāk izmantotie ir USART, IIC, SPI un CAN. Katram sakaru protokolam ir savas priekšrocības un trūkumi. Tagad pievērsīsimies IIC daļai, jo tieši to mēs mācīsimies šajā apmācībā. Ja jūs šeit esat jauns, apskatiet Nuvoton apmācības, kurās mēs esam apsprieduši katru N76E003 mikrokontrollera perifēriju, sākot no paša sākuma darba apmācības. Ja vēlaties uzzināt, kā lietot I2C kopā ar citiem mikrokontrolleriem, varat pārbaudīt tālāk norādītās saites.
- Kā lietot I2C Arduino: saziņa starp diviem Arduino dēļiem
- I2C sakari ar PIC mikrokontrolleru PIC16F877
- Saskarne 16X2 LCD ar ESP32, izmantojot I2C
- I2C saziņa ar MSP430 Launchpad
- LCD saskarne ar NodeMCU, neizmantojot I2C
- Kā rīkoties ar vairākiem sakariem (I2C SPI UART) vienā Arduino programmā
I2C ir svarīgs komunikācijas protokols, kuru izstrādājis Philips (tagad NXP). Izmantojot šo I2C protokolu, MCU var savienot ar vairākām ierīcēm un sākt saziņu. I2C darbojas tikai ar diviem vadiem, proti, SDA un SCL. Kur SDA apzīmē seriālos datus un SCL nozīmē seriālo pulksteni. Tomēr šīm divām tapām ir nepieciešami pievilkšanas rezistori līdz VCC sprieguma līmenim, un ar atbilstošu pievilkšanas rezistoru kopne varētu atbalstīt 127 ierīces ar unikālu adresi.
Kas ir I2C sakaru protokols?
Termins IIC nozīmē “ Inter Integrated Circuits ”. Parasti to dažās vietās apzīmē kā I2C vai I kvadrātu C, vai pat kā divu vadu interfeisa protokolu (TWI), bet tas viss nozīmē to pašu. I2C ir sinhrona sakaru protokola nozīme, abām ierīcēm, kas koplieto informāciju, ir jābūt kopīgam pulksteņa signālam. Tam ir tikai divi vadi informācijas apmaiņai, no kuriem vienu izmanto pulksteņa signālam, bet otru - datu sūtīšanai un saņemšanai.
Kā darbojas I2C komunikācija?
Pirmo reizi I2C komunikāciju ieviesa Filipss. Kā minēts iepriekš, tam ir divi vadi, šie divi vadi tiks savienoti divās ierīcēs. Šeit vienu ierīci sauc par galveno, bet otru par vergu. Saziņai vienmēr vajadzētu notikt un tā notiks starp diviem, Kungu un Vergu. I2C komunikācijas priekšrocība ir tā, ka vairāk nekā vienu vergu var savienot ar Master.
Pilnīga saziņa notiek caur šiem diviem vadiem, proti, seriālo pulksteni (SCL) un sērijas datiem (SDA).
Seriālais pulkstenis (SCL): koplieto galvenā signāla ģenerēto pulksteņa signālu ar vergu
Seriālie dati (SDA): nosūta datus uz galveno un vergu un no tā.
Jebkurā brīdī tikai kapteinis varēs sākt saziņu. Tā kā autobusā ir vairāk nekā viens vergs, kapteinim ir jāatsaucas uz katru vergu, izmantojot citu adresi. Uzrunājot tikai salve ar konkrēto adresi, atbildēs ar informāciju, kamēr pārējie klusēs. Tādā veidā mēs varam izmantot to pašu kopni, lai sazinātos ar vairākām ierīcēm.
Kur izmantot I2C komunikāciju?
I2C sakari tiek izmantoti tikai neliela attāluma sakariem. Tas noteikti ir uzticams zināmā mērā, jo tam ir sinhronizēts pulksteņa impulss, lai padarītu to gudru. Šo protokolu galvenokārt izmanto, lai sazinātos ar sensoru vai citām ierīcēm, kurām informācija jānosūta kapteinim. Tas ir ļoti ērti, ja mikrokontrollerim ir jāsazinās ar daudziem citiem vergu moduļiem, izmantojot vismaz tikai vadus. Ja jūs meklējat tālsatiksmes komunikāciju, jums vajadzētu izmēģināt RS232 un, ja vēlaties drošāku komunikāciju, jums vajadzētu izmēģināt SPI protokolu.
I2C vietnē Nuvoton N76E003 - aparatūras prasība
Tā kā šī projekta prasība ir iemācīties I2C komunikāciju, izmantojot N76E003, mēs izmantosim EEPROM, kas tiks savienots ar I2C datu līniju. Mēs dažus datus saglabāsim EEPROM, kā arī lasīsim tos pašus un parādīsim tos, izmantojot UART ekrānu.
Tā kā saglabātā vērtība tiks drukāta UART, ir nepieciešams jebkura veida USB uz UART pārveidotājs. Varat arī apskatīt apmācību par UART ar Nuvoton, ja esat jauns UART saziņas veids N76E003. Mūsu lietojumprogrammai mēs izmantosim CP2102 UART uz USB pārveidotāju. Izņemot iepriekš minēto, mums ir nepieciešami arī šādi komponenti:
- EEPROM 24C02
- 2gab 4.7k rezistori
Nemaz nerunājot par to, ka, izņemot iepriekš minētos komponentus, mums ir nepieciešama uz mikrokontrolleru balstīta N76E003 izstrādes plāksne, kā arī Nu-Link programmētājs. Visu komponentu savienošanai ir nepieciešami arī paneļa un savienojuma vadi.
Saskarne AT24LC64 ar Nuvoton N76E003 - shēmas shēma
Kā redzam zemāk redzamajā shēmā, EEPROM ir savienots I2C līnijā kopā ar diviem pievilkšanas rezistoriem. Kreisajā malā tiek parādīts programmēšanas saskarnes savienojums.
AT24LC64 IC izmantoju maizes plati un, izmantojot džempera vadus, savienoju IC ar savu nuvoton programmētāja paneli. Mana aparatūras iestatīšana kopā ar nu-ink programmētāju ir parādīta zemāk.
I2C tapas uz Nuvoton N76E003
N76E003 tapu diagramma ir redzama zemāk esošajā attēlā-
Kā redzam, katrai tapai ir dažādas specifikācijas, un katru tapu var izmantot vairākiem mērķiem. Tomēr tapu 1.4 izmanto kā I2C SDA tapu, tā zaudēs PWM un citu funkcionalitāti. Bet tā nav problēma, jo šim projektam nav nepieciešama cita funkcionalitāte. Tas pats notiks ar P1.3 ir I2C SCL tapa.
Tā kā I2C tapas darbojas kā GPIO, tā ir jākonfigurē. Visas GPIO tapas var konfigurēt tālāk aprakstītajā režīmā.
Kā norādīts datu lapā, PxM1.n un PxM2. n ir divi reģistri, kurus izmanto, lai noteiktu I / O porta vadības darbību. Datu lapā ir norādīts, ka, lai izmantotu I2C funkcionalitāti, I / O režīmi ir jāizmanto kā Open-drain ar I2C saistītai komunikācijai.
I2C komunikācija N76E003
I2C perifērija ir svarīga lieta visiem mikrokontrolleru blokiem, kas atbalsta I2C funkcijas. Daudziem dažādu mikrokontrolleru veidiem ir iebūvēta I2C perifērija. Tomēr dažos gadījumos I2C var konfigurēt manuāli, izmantojot programmatūras vadību, kur nav pieejams ar I2C saistīts aparatūras atbalsts (piemēram, daudzi 8051 mikrokontrolleri). Tomēr nuvoton N76E003 nāk ar I2C perifēro atbalstu.
M76E003 I2C režīmos atbalsta četru veidu darbības - galveno raidītāju, galveno uztvērēju, vergu raidītāju un vergu uztvērēju. Tas arī atbalsta I2C līnijas standarta (100 kbps) un ātru (līdz 400 kbps) ātrumu. I2C darbojas ar dažiem vispārīgiem noteikumiem SCL un SDA signālu līnijās.
Sākuma un apturēšanas nosacījums:
Tā ir svarīga lieta I2C komunikācijā. Kad dati tiek pārsūtīti uz līniju I2C, tie sākas ar sākuma nosacījumu un beidzas ar apstāšanās nosacījumu.
Sākuma nosacījums ir pāreja no SDA uz augšu uz zemu, kad SCL līnija ir augsta, un apstāšanās nosacījums ir SDA pāreja no zemas uz augstu, kad SCL līnija ir augsta. Šos divus nosacījumus ģenerē kapteinis (MCU vai jebkas cits, kas kontrolē citas vergu ierīces). Autobusa līnija šajā stāvoklī paliek noslogota, kad tiek uzsākts sākuma nosacījums, un atkal paliek brīva, kad tiek uzsākts apstāšanās nosacījums.
Sākuma un apstāšanās nosacījums ir lieliski parādīts signāla perspektīvā N76E003 datu lapā -
7 bitu adrese ar datu formātu:
N76E003 atbalsta 7 bitu adresi un datu formātu. Pēc sākuma nosacījuma sākšanas galvenajai ierīcei dati jānosūta uz līniju I2C. Pirmie dati ir svarīgi. Ja šie dati nav pareizi izveidoti vai pārsūtīti, pievienotā ierīce netiks identificēta un turpmāku saziņu nevarēs veikt.
Dati sastāv no 7 bitu garas vergu adreses, kas apzīmēta kā SLA. Šai 7 bitu garajai adresei jābūt unikālai katrai ierīcei, ja kopnē ir pievienotas vairākas ierīces. Pēc 7 bitu adreses 8. bits ir datu virziena bits. Tas nozīmē, ka atkarībā no 8. bita kapteinis nosūta vergu ierīcei informāciju par to, vai dati tiks ierakstīti vergu ierīcē vai dati tiks nolasīti no vergu ierīces. 8. bits ir R / W bits, ko sauc par lasīšanas vai rakstīšanas paziņotāju. Kā mēs visi zinām, 8 bitu informācija var būt 128 veidu, tādējādi atbalstot 128 ierīces, bet I2C vienā un tajā pašā kopnē atbalsta 127 ierīču veidus, bet ne 128. Tā kā 0x00 adrese ir rezervēta adrese, ko sauc par vispārējo zvana adresi. Ja kapteinis vēlas nosūtīt informāciju uz visām ierīcēm,tas adresēs 0x00, un katra ierīce atskaņos tāpat kā atsevišķās programmatūras konfigurācijās.
Tādējādi datu pārraide izskatās šādi:
Apstiprināt:
Iepriekš minētajā datu adreses attēlā 9. bitu, kam seko R / W bits, sauc par apstiprināšanas bitu. Tas ir svarīgs, jo, izmantojot šo bitu, galvenais vai vergs reaģē uz datu raidītāju, velkot SDA līniju zemu. Lai iegūtu apstiprinājuma bitu, raidītājam jāatbrīvo SDA līnija.
N76E003 programmēšana I2C komunikācijai
Pilna šajā apmācībā izmantotā programma ir atrodama šīs lapas apakšdaļā. Svarīgu koda segmentu skaidrojums ir šāds:
Iestatiet tapas kā Open Drain un konfigurējiet tās I2C:
Vispirms sāksim ar I2C tapu sadaļu. Kā aprakstīts iepriekš, I2C SCL un SDA porti ir jākonfigurē un jāiestata kā atvērtās aizplūšanas konfigurācija. Lai to izdarītu, mēs izmantojam I2C.h galvenes failu kopā ar I2C.c avota failu . Koda fragments izskatās šādi:
darīt {P13_OpenDrain_Mode; P14_OpenDrain_Mode; clr_I2CPX;} kamēr (0)
Iepriekš minētais kods ir P13 un P14 iestatīšana kā Open-Drain tapas, un clr_I2CPX tiek izmantots, lai atlasītu P13 un P14 kā SCL tapu P1.3 un SDA tapu P1.4.
Šis I2CPX ir I2C vadības reģistra I2CON 0. bits. Ja šī I2C_PX ir iestatīta kā 1, tapas tiek mainītas uz P0.2 kā SCL un P1.6 kā SDA. Tomēr mēs izmantosim P13 un P14. Alternatīvas tapas šeit netiek izmantotas.
I2C vadības reģistrs I2CON:
I2C vadības reģistrs I2CON tiek izmantots I2C darbību kontrolei. Pirmais bits ir I2C tapu izvēles bits. Iestatot 0, I2C tapa tiek konfigurēta kā P13 un P14.
AA bits ir apstiprinājuma apliecinājuma karogs. Ja AA karodziņš ir iestatīts, ACK tiks atgriezts SCL līnijas apstiprināšanas pulksteņa impulsa laikā. Ja tas tiek notīrīts, NACK (augsts SDA līmenis) tiks atgriezts apstiprinātā SCL līnijas pulksteņa impulsa laikā.
Nākamais bits ir SI, kas ir I2C statusa pārtraukums. Ja ir iespējota I2C statusa pārtraukšana, lietotājam jāpārbauda I2STAT reģistrs, lai noteiktu, kurš solis ir pagājis, un jāveic darbība.
STO ir STOP karogs, kas tiek iestatīts galvenajā režīmā. STO tiek automātiski dzēsti pēc aparatūras, kad STOP nosacījums ir konstatēta.
Nākamais bits ir STA bits. Ja šis karodziņš ir iestatīts, tad I2C ģenerē START nosacījumu, ja kopne ir brīva. Ja autobuss ir aizņemts, I2C gaida STOP nosacījumu un pēc tam ģenerē START nosacījumu. Ja STA ir iestatīta, kamēr I2C jau ir galvenajā režīmā un ir pārsūtīts vai saņemts viens vai vairāki baiti, I2C ģenerē atkārtotu START nosacījumu. STA programmatūrai ir jānotīra manuāli.
Pēdējais, I2CEN, ir I2C kopnes iespējošanas vai atspējošanas bits.
EEPROM 24C02:
Tagad, tuvojoties 24C02. N76E003 dēļu atbalsta pakotnei ir 24LC64 I2C kods, un to var viegli modificēt. Tomēr, lai saprastu funkciju I2C, mēs izmantosim vienkāršu metodi.
Ja kāds vēlas izmantot detalizētu saskarni ar EEPROM 24C02, tad var izmantot EEPROM programmu BSP.
24C02 mēs savienosim tikai I2C, kur N76E003 būs galvenais un EEPROM būs vergs. Tādējādi mēs ierakstīsim visus datus EEPROM adresē un lasīsim to pašu.
24C02 EEPROM pinout ir parādīts zemāk-
A0, A1 un A2 ir trīs adrešu izvēles tapas. WP tapas ir rakstīšanas aizsargtapas, un tām jābūt savienotām ar VSS, lai varētu rakstīt uz EEPROM.
Baitu rakstīšanas funkcionalitāte ir parādīta zemāk
Pilns rakstīšanas cikls notiek ar sākuma bitu. Pēc tam ir jāiesniedz kontroles baits. Kontroles baitā ir nepieciešamas šādas lietas:
Pēc sākuma bita sastāv no verga adreses. 1010 ir statiskā, un A0, A1 un A2 ir aparatūras savienojuma adrese. Ja trīs tapas ir savienotas ar GND vai VSS padevi, tas tiks nolasīts kā 0. Pretējā gadījumā, ja tas ir savienots ar VCC, tas tiks lasīts kā 1. Mūsu gadījumā visi A0, A1 un A2 ir savienoti ar VSS. Tādējādi visi šie skaitļi būs 0.
Izdevumi lasīšanas vai rakstīšanas nosacījumiem. Adreses vērtība ar bitu Lasīt vai Rakstīt būs - 0xA0 rakstīšanai un 0xA1 lasīšanai. Nākamais ir bits Apstiprinājums, un pēc tam tiks nosūtīta 8 bitu adrese, kur dati ir jāuzglabā, un visbeidzot - dati, kas tiks saglabāti attiecīgajā vietā. Šīs lietas tiek veiktas soli pa solim formātā galvenajā funkcijā.
Galvenā funkcija un cilpa:
void main (void) {char c = 0x00; InitialUART0_Timer3 (115200); TI = 1; // Svarīgi, funkcijai prinft ir jāiestata TI = 1; I2C_init (); kamēr (1) {EEPROM_write (1,0x55); c = EEPROM_lasīt (1); printf ("\ n nolasītā vērtība ir% x", c & 0xff); }; }
Galvenā funkcija ir vienkārša, tā nepārtraukti raksta vērtības EEPROM adresē 1 un nolasa datus. Pēc tam dati tiek drukāti, izmantojot printf funkciju. Printf drukā vērtību sešstūrī.
EEPROM rakstīšanas funkcija sastāv no šādām lietām, kas tika aprakstītas sadaļā EEPROM:
void EEPROM_write (neparakstīta char adrese, neparakstīta char vērtība) {I2C_start (); I2C_write (0xA0); I2C_write (adrese); I2C_write (vērtība); I2C_stop (); }
I2C starta funkcija sastāv no šādām lietām:
void I2C_start (void) {parakstīts int laiks = taimauts; set_STA; clr_SI; while ((SI == 0) && (laiks> 0)) {laiks--; }; }
Šajā funkcijā tiek pārbaudīts SI statuss kopā ar iepriekš noteiktu noildzes periodu (definēts I2C.h, kur iepriekš definētais laiks ir iestatīts kā 1000). Sākuma funkcija sākas ar STA iestatīšanu un SI notīrīšanu.
void I2C_stop (void) {parakstīts int laiks = taimauts; clr_SI; set_STO; while ((STO == 1) && (laiks> 0)) {laiks--; }; }
Tāpat kā tiek izmantota funkcija Start, stop. Apturēšanas funkcija tiek uzsākta, izveidojot STO seko notīrot SI. Zemāk ir I2C lasīšanas funkcija-
neparakstīta char I2C_read (neparakstīta char ack_mode) {parakstīts int laiks = taimauts; neparakstīta char vērtība = 0x00; set_AA; clr_SI; kamēr ((SI == 0) && (t> 0)) {laiks--; }; vērtība = I2DAT; ja (ack_mode == I2C_NACK) {t = taimauta_skaitlis; clr_AA; clr_SI; kamēr ((SI == 0) && (t> 0)) {laiks--; }; } atgriešanās vērtība; }
Ack_mode un I2C_NACK gan tiek definēti I2C galvenes failā kā 0 un 1 attiecīgi.
Līdzīgi tiek izveidota rakstīšanas funkcija-
void I2C_write (neparakstīta char vērtība) {parakstīts int laiks = taimauts; I2DAT = vērtība; clr_STA; clr_SI; while ((SI == 0) && (laiks> 0)) {laiks--; }; }
Mirgo kods un izvade
Kods atgrieza 0 brīdinājumu un 0 kļūdas, un Keil to mirgo, izmantojot noklusējuma mirgošanas metodi. Ja esat jauns, skatiet darba sākšanu ar nuvoton apmācību, lai saprastu, kā augšupielādēt kodu. Koda apkopošanas informāciju var atrast zemāk.
Veidot mērķi 'I2C_EEPROM', apkopojot I2C_EEPROM.c… sastādot I2C.c… saistot… Programmas lielums: dati = 59,2 xdata = 0 kods = 2409, veidojot sešstūra failu no ". \ Output \ I2C_EEPROM"… ". \ Output \ I2C_EEPROM "- 0 kļūda (-as), 0 brīdinājums (-i). Izveides laiks pagājis: 00:00:04 Sērijas izveides kopsavilkums: 1 izdevās, 0 neizdevās, 0 izlaists - laiks pagāja: 00:00:04
Aparatūra tiek uzstādīta uz maizes dēļa un darbojas kā paredzēts. Kā redzat zemāk esošajā attēlā, mēs varējām ierakstīt vērtību EEPROM un nolasīt to no atmiņas un parādīt seriālajā monitorā.
Apskatiet tālāk sniegto video, lai pilnībā parādītu, kā dēlis darbojas ar šo kodu. Ceru, ka jums patika apmācība un uzzinājāt kaut ko noderīgu, ja jums ir kādi jautājumi, atstājiet tos komentāru sadaļā zemāk. Varat arī izmantot mūsu forumus, lai izliktu citus tehniskus jautājumus.