- I2C కమ్యూనికేషన్ ప్రోటోకాల్ అంటే ఏమిటి?
- I2C కమ్యూనికేషన్ ఎలా పనిచేస్తుంది?
- I2C కమ్యూనికేషన్ను ఎక్కడ ఉపయోగించాలి?
- నువోటన్ N76E003 పై I2C - హార్డ్వేర్ అవసరం
- నువోటన్ N76E003 - సర్క్యూట్ రేఖాచిత్రంతో AT24LC64 ఇంటర్ఫేసింగ్
- నువోటన్ N76E003 పై I2C పిన్స్
- N76E003 లో I2C కమ్యూనికేషన్
- I2C కమ్యూనికేషన్ కోసం ప్రోగ్రామింగ్ N76E003
- కోడ్ మరియు అవుట్పుట్ను మెరుస్తోంది
ఎంబెడెడ్ అనువర్తనాల యొక్క విస్తారమైన వ్యవస్థలో, మైక్రోకంట్రోలర్ అన్ని కార్యకలాపాలను స్వయంగా చేయలేడు. కొంత దశలో, సమాచారాన్ని పంచుకోవడానికి ఇది ఇతర పరికరాలతో కమ్యూనికేట్ చేయవలసి ఉంటుంది, ఈ సమాచారాన్ని పంచుకోవడానికి అనేక రకాలైన కమ్యూనికేషన్ ప్రోటోకాల్లు ఉన్నాయి , అయితే ఎక్కువగా ఉపయోగించినవి USART, IIC, SPI మరియు CAN. ప్రతి కమ్యూనికేషన్ ప్రోటోకాల్ దాని స్వంత ప్రయోజనం మరియు ప్రతికూలతను కలిగి ఉంటుంది. ఈ ట్యుటోరియల్లో మనం నేర్చుకోబోయేది కనుక ప్రస్తుతానికి ఐఐసి భాగంపై దృష్టి పెడదాం. మీరు ఇక్కడ క్రొత్తగా ఉంటే, నువోటన్ ట్యుటోరియల్స్ ను చూడండి, అక్కడ మేము N76E003 మైక్రోకంట్రోలర్ యొక్క ప్రతి పరిధీయతను చాలా ప్రాథమిక ప్రారంభ ట్యుటోరియల్ నుండి చర్చించాము. మీరు ఇతర మైక్రోకంట్రోలర్లతో I2C ని ఎలా ఉపయోగించాలో తెలుసుకోవాలనుకుంటే, మీరు ఈ క్రింది లింక్లను చూడవచ్చు.
- Arduino లో I2C ని ఎలా ఉపయోగించాలి: రెండు Arduino బోర్డుల మధ్య కమ్యూనికేషన్
- PIC మైక్రోకంట్రోలర్ PIC16F877 తో I2C కమ్యూనికేషన్
- I2C ఉపయోగించి ESP32 తో 16X2 LCD ని ఇంటర్ఫేసింగ్
- MSP430 లాంచ్ప్యాడ్తో I2C కమ్యూనికేషన్
- I2C ఉపయోగించకుండా నోడ్ఎంసియుతో ఎల్సిడిని ఇంటర్ఫేసింగ్
- Arduino యొక్క ఒకే ప్రోగ్రామ్లో బహుళ కమ్యూనికేషన్లను (I2C SPI UART) ఎలా నిర్వహించాలి
I2C అనేది ఫిలిప్స్ (ఇప్పుడు NXP) చే అభివృద్ధి చేయబడిన ఒక ముఖ్యమైన కమ్యూనికేషన్ ప్రోటోకాల్. ఈ I2C ప్రోటోకాల్ ఉపయోగించి, ఒక MCU ను బహుళ పరికరాలతో అనుసంధానించవచ్చు మరియు కమ్యూనికేషన్ ప్రారంభించవచ్చు. I2C కేవలం రెండు వైర్లతో పనిచేస్తుంది, అవి SDA మరియు SCL. SDA అంటే సీరియల్ డేటా మరియు SCL అంటే సీరియల్ క్లాక్. ఏదేమైనా, ఈ రెండు పిన్స్కు విసిసి వోల్టేజ్ స్థాయికి పుల్-అప్ రెసిస్టర్లు అవసరం మరియు తగినంత పుల్-అప్ రెసిస్టర్తో, బస్సు ప్రత్యేకమైన చిరునామాతో 127 పరికరాలకు మద్దతు ఇవ్వగలదు.
I2C కమ్యూనికేషన్ ప్రోటోకాల్ అంటే ఏమిటి?
IIC అనే పదం “ ఇంటర్ ఇంటిగ్రేటెడ్ సర్క్యూట్స్ ”. ఇది సాధారణంగా I2C లేదా I స్క్వేర్డ్ సి లేదా కొన్ని ప్రదేశాలలో 2-వైర్ ఇంటర్ఫేస్ ప్రోటోకాల్ (TWI) గా సూచించబడుతుంది, అయితే ఇవన్నీ ఒకే విధంగా ఉంటాయి. I2C అనేది సింక్రోనస్ కమ్యూనికేషన్ ప్రోటోకాల్ అర్థం, సమాచారాన్ని పంచుకునే రెండు పరికరాలు తప్పనిసరిగా సాధారణ గడియార సంకేతాన్ని పంచుకోవాలి. సమాచారాన్ని పంచుకోవడానికి దీనికి రెండు వైర్లు మాత్రమే ఉన్నాయి, వాటిలో ఒకటి క్లాక్ సిగ్నల్ కోసం ఉపయోగించబడుతుంది మరియు మరొకటి డేటాను పంపడానికి మరియు స్వీకరించడానికి ఉపయోగించబడుతుంది.
I2C కమ్యూనికేషన్ ఎలా పనిచేస్తుంది?
I2C కమ్యూనికేషన్ను మొదట ఫిలిప్స్ పరిచయం చేశారు. ఇంతకు ముందే చెప్పినట్లుగా, దీనికి రెండు వైర్లు ఉన్నాయి, ఈ రెండు వైర్లు రెండు పరికరాల్లో అనుసంధానించబడతాయి. ఇక్కడ ఒక పరికరాన్ని మాస్టర్ అని, మరొక పరికరాన్ని బానిస అంటారు. కమ్యూనికేషన్ మరియు మాస్టర్ మరియు స్లేవ్ రెండింటి మధ్య ఎల్లప్పుడూ జరగాలి. I2C కమ్యూనికేషన్ యొక్క ప్రయోజనం ఏమిటంటే, ఒకటి కంటే ఎక్కువ బానిసలను మాస్టర్కు కనెక్ట్ చేయవచ్చు.
సీరియల్ క్లాక్ (ఎస్సీఎల్) మరియు సీరియల్ డేటా (ఎస్డీఏ) అనే ఈ రెండు వైర్ల ద్వారా పూర్తి కమ్యూనికేషన్ జరుగుతుంది.
సీరియల్ క్లాక్ (ఎస్సీఎల్): మాస్టర్ సృష్టించిన క్లాక్ సిగ్నల్ను బానిసతో పంచుకుంటుంది
సీరియల్ డేటా (SDA): మాస్టర్ మరియు బానిస మధ్య మరియు నుండి డేటాను పంపుతుంది.
ఏ సమయంలోనైనా, మాస్టర్ మాత్రమే కమ్యూనికేషన్ను ప్రారంభించగలుగుతారు. బస్సులో ఒకటి కంటే ఎక్కువ బానిసలు ఉన్నందున, మాస్టర్ ప్రతి బానిసను వేరే చిరునామాను ఉపయోగించి సూచించాలి. ప్రసంగించినప్పుడు ఆ నిర్దిష్ట చిరునామాతో ఉన్న సాల్వ్ మాత్రమే సమాచారంతో తిరిగి ప్రత్యుత్తరం ఇస్తుంది, మరికొందరు నిశ్శబ్దంగా ఉంటారు. ఈ విధంగా, మేము బహుళ పరికరాలతో కమ్యూనికేట్ చేయడానికి ఒకే బస్సును ఉపయోగించవచ్చు.
I2C కమ్యూనికేషన్ను ఎక్కడ ఉపయోగించాలి?
I2C కమ్యూనికేషన్ స్వల్ప దూర కమ్యూనికేషన్ కోసం మాత్రమే ఉపయోగించబడుతుంది. ఇది స్మార్ట్ గా చేయడానికి సమకాలీకరించబడిన గడియారపు పల్స్ కలిగి ఉన్నందున ఇది కొంతవరకు నమ్మదగినది. ఈ ప్రోటోకాల్ ప్రధానంగా సెన్సార్ లేదా ఇతర పరికరాలతో కమ్యూనికేట్ చేయడానికి ఉపయోగించబడుతుంది, ఇది మాస్టర్కు సమాచారాన్ని పంపాలి. మైక్రోకంట్రోలర్ కనీసం అనేక వైర్లను ఉపయోగించి అనేక ఇతర బానిస మాడ్యూళ్ళతో కమ్యూనికేట్ చేయవలసి వచ్చినప్పుడు ఇది చాలా సులభమైంది. మీరు సుదూర కమ్యూనికేషన్ కోసం చూస్తున్నట్లయితే, మీరు RS232 ను ప్రయత్నించాలి మరియు మీరు మరింత నమ్మదగిన కమ్యూనికేషన్ కోసం చూస్తున్నట్లయితే, మీరు SPI ప్రోటోకాల్ను ప్రయత్నించాలి.
నువోటన్ N76E003 పై I2C - హార్డ్వేర్ అవసరం
ఈ ప్రాజెక్ట్ యొక్క అవసరం N76E003 ను ఉపయోగించి I2C కమ్యూనికేషన్ నేర్చుకోవడం, మేము EEPROM ని ఉపయోగిస్తాము, ఇది I2C డేటా లైన్తో అనుసంధానించబడుతుంది. మేము కొంత డేటాను EEPROM లో నిల్వ చేస్తాము మరియు అదే చదివి UART స్క్రీన్ ఉపయోగించి ప్రదర్శిస్తాము.
నిల్వ చేసిన విలువ UART లో ముద్రించబడుతుంది కాబట్టి, ఎలాంటి USB నుండి UART కన్వర్టర్ అవసరం. మీరు N76E003 లో UART కమ్యూనికేషన్కు కొత్తగా ఉంటే నువోటన్తో UART పై ట్యుటోరియల్ని కూడా చూడవచ్చు. మా అప్లికేషన్ కోసం, మేము CP2102 UART ను USB కన్వర్టర్కి ఉపయోగిస్తాము. పైవి కాకుండా, మాకు ఈ క్రింది భాగాలు కూడా అవసరం-
- EEPROM 24C02
- 2 పిసిలు 4.7 కె రెసిస్టర్లు
పైన పేర్కొన్న భాగాలు కాకుండా, మాకు N76E003 మైక్రోకంట్రోలర్ ఆధారిత అభివృద్ధి బోర్డుతో పాటు ను-లింక్ ప్రోగ్రామర్ అవసరం. అదనంగా, అన్ని భాగాలను కనెక్ట్ చేయడానికి బ్రెడ్బోర్డ్ మరియు హుక్అప్ వైర్లు కూడా అవసరం.
నువోటన్ N76E003 - సర్క్యూట్ రేఖాచిత్రంతో AT24LC64 ఇంటర్ఫేసింగ్
దిగువ స్కీమాటిక్లో మనం చూడగలిగినట్లుగా, EEPROM రెండు పుల్ అప్ రెసిస్టర్లతో పాటు I2C లైన్లో అనుసంధానించబడి ఉంది. తీవ్ర ఎడమ వైపున, ప్రోగ్రామింగ్ ఇంటర్ఫేస్ కనెక్షన్ చూపబడుతుంది.
నేను AT24LC64 IC కోసం బ్రెడ్బోర్డ్ను ఉపయోగించాను మరియు జంపర్ వైర్లను ఉపయోగించి IC ని నా నువోటన్ ప్రోగ్రామర్ బోర్డ్కు కనెక్ట్ చేసాను. ను-ఇంక్ ప్రోగ్రామర్తో పాటు నా హార్డ్వేర్ సెటప్ క్రింద చూపబడింది.
నువోటన్ N76E003 పై I2C పిన్స్
N76E003 యొక్క పిన్ రేఖాచిత్రం క్రింది చిత్రంలో చూడవచ్చు-
మనం చూడగలిగినట్లుగా, ప్రతి పిన్కు వేర్వేరు లక్షణాలు ఉన్నాయి మరియు ప్రతి పిన్ను బహుళ ప్రయోజనాల కోసం ఉపయోగించవచ్చు. అయినప్పటికీ, పిన్ 1.4 ను I2C SDA పిన్గా ఉపయోగిస్తారు, ఇది PWM మరియు ఇతర కార్యాచరణను కోల్పోతుంది. ఈ ప్రాజెక్ట్ కోసం మరొక కార్యాచరణ అవసరం లేదు కాబట్టి ఇది సమస్య కాదు. P1.3 కి ఇదే జరుగుతుంది I2C యొక్క SCL పిన్.
I2C పిన్స్ GPIO వలె పనిచేస్తాయి కాబట్టి, దీన్ని కాన్ఫిగర్ చేయాలి. అన్ని GPIO పిన్లను క్రింద వివరించిన మోడ్లో కాన్ఫిగర్ చేయవచ్చు.
డేటాషీట్ ప్రకారం, PxM1.n మరియు PxM2. n అనేది I / O పోర్ట్ యొక్క నియంత్రణ ఆపరేషన్ను నిర్ణయించడానికి ఉపయోగించే రెండు రిజిస్టర్లు. డేటాషీట్లో, I2C కార్యాచరణను ఉపయోగించడానికి, I2C సంబంధిత కమ్యూనికేషన్ల కోసం I / O మోడ్లను ఓపెన్-డ్రెయిన్గా ఉపయోగించాల్సిన అవసరం ఉందని పేర్కొన్నారు.
N76E003 లో I2C కమ్యూనికేషన్
I2C లక్షణాలకు మద్దతిచ్చే ఏదైనా మైక్రోకంట్రోలర్ యూనిట్కు I2C పరిధీయ ముఖ్యమైన విషయం. అనేక రకాలైన మైక్రోకంట్రోలర్లు అంతర్నిర్మిత I2C పరిధీయంతో వస్తాయి. అయినప్పటికీ, కొన్ని సందర్భాల్లో, I2C సంబంధిత హార్డ్వేర్ మద్దతు అందుబాటులో లేని సాఫ్ట్వేర్ నియంత్రణను ఉపయోగించి I2C ను మానవీయంగా కాన్ఫిగర్ చేయవచ్చు (ఉదాహరణకు, చాలా 8051 మైక్రోకంట్రోలర్లు). అయితే, నువోటాన్ N76E003 I2C పరిధీయ మద్దతుతో వస్తుంది.
M76E003 I2C మోడ్లలో నాలుగు రకాల ఆపరేషన్లకు మద్దతు ఇస్తుంది - మాస్టర్ ట్రాన్స్మిటర్, మాస్టర్ రిసీవర్, స్లేవ్ ట్రాన్స్మిటర్ మరియు స్లేవ్ రిసీవర్. ఇది I2C లైన్ కోసం ప్రామాణిక (100kbps) మరియు వేగవంతమైన (400kbps వరకు) వేగానికి మద్దతు ఇస్తుంది. I2C SCL మరియు SDA సిగ్నల్ లైన్లలో కొన్ని సాధారణ నియమాలతో పనిచేస్తుంది.
పరిస్థితిని ప్రారంభించండి మరియు ఆపు:
ఐ 2 సి కమ్యూనికేషన్లో ఇది ఒక ముఖ్యమైన విషయం. డేటా I2C లైన్కు బదిలీ అయినప్పుడు, ఇది ప్రారంభ స్థితితో మొదలై స్టాప్ కండిషన్తో ముగుస్తుంది.
ప్రారంభ పరిస్థితి ఎస్సీఎల్ లైన్ ఎక్కువగా ఉన్నప్పుడు ఎస్డిఎపై అధిక-నుండి-తక్కువ పరివర్తన మరియు ఎస్సిఎల్ లైన్ ఎక్కువగా ఉన్నప్పుడు స్టాప్ కండిషన్ ఎస్డిఎపై తక్కువ-నుండి-అధిక పరివర్తన. ఈ రెండు షరతులు మాస్టర్ చేత ఉత్పత్తి చేయబడతాయి (MCU లేదా ఇతర బానిస పరికరాలను నియంత్రించే ఏదైనా). ప్రారంభ కండిషన్ ప్రారంభించినప్పుడు బస్ లైన్ ఈ స్థితిలో బిజీగా ఉంటుంది మరియు స్టాప్ కండిషన్ ప్రారంభించినప్పుడు మళ్ళీ స్వేచ్ఛగా ఉంటుంది.
ప్రారంభ మరియు ఆపు పరిస్థితి N76E003 డేటాషీట్లోని సిగ్నల్ దృక్పథంలో అద్భుతంగా చూపబడింది-
డేటా ఆకృతితో 7-బిట్ చిరునామా:
N76E003 7-బిట్ చిరునామా మరియు డేటా ఆకృతికి మద్దతు ఇస్తుంది. ప్రారంభ కండిషన్ ప్రారంభించిన తర్వాత, మాస్టర్ పరికరం డేటాను I2C లైన్కు పంపాలి. మొదటి డేటా ముఖ్యమైనది. ఈ డేటా సరిగ్గా సృష్టించబడకపోతే లేదా ప్రసారం చేయబడకపోతే, కనెక్ట్ చేయబడిన పరికరం గుర్తించబడదు మరియు తదుపరి సమాచార మార్పిడి చేయలేము.
డేటా 7-బిట్ పొడవైన బానిస చిరునామాను కలిగి ఉంటుంది, దీనిని SLA గా సూచిస్తారు. బస్సులో బహుళ పరికరాలు అనుసంధానించబడి ఉంటే ఈ 7-బిట్ పొడవైన చిరునామా ప్రతి పరికరానికి ప్రత్యేకంగా ఉండాలి. 7-బిట్ చిరునామా తరువాత, 8 వ బిట్ డేటా దిశ బిట్. అంటే, 8 వ బిట్ను బట్టి, బానిస పరికరంలో డేటా వ్రాయబడుతుందా లేదా బానిస పరికరం నుండి డేటా చదవబడుతుందా అనే దాని గురించి మాస్టర్ సమాచారాన్ని బానిస పరికరానికి పంపుతాడు. 8 వ బిట్ R / W బిట్ అంటే రీడ్ లేదా రైట్ నోటిఫైయర్. మనందరికీ తెలిసినట్లుగా 8-బిట్ సమాచారం 128 రకాలు కావచ్చు, తద్వారా 128 పరికరాలకు మద్దతు ఇస్తుంది, కాని I2C ఒకే బస్సులో 127 రకాల పరికరాలకు మద్దతు ఇస్తుంది కాని 128 కాదు. ఎందుకంటే 0x00 చిరునామా రిజర్వు చేయబడిన చిరునామా, దీనిని సాధారణ కాల్ చిరునామా అంటారు. మాస్టర్ అన్ని పరికరాలకు సమాచారాన్ని పంపాలనుకుంటే,ఇది 0x00 ను పరిష్కరిస్తుంది మరియు ప్రతి పరికరం వ్యక్తిగత సాఫ్ట్వేర్ కాన్ఫిగరేషన్ల ప్రకారం రీప్లే అవుతుంది.
అందువలన, డేటా ట్రాన్స్మిషన్ క్రింద కనిపిస్తుంది-
గుర్తించండి:
పై డేటా అడ్రస్ ఇమేజ్లో, R / W బిట్ తరువాత 9 వ బిట్ను రసీదు బిట్ అంటారు. ఇది చాలా ముఖ్యమైనది ఎందుకంటే ఈ బిట్ను ఉపయోగించడం ద్వారా, మాస్టర్ లేదా బానిస SDA లైన్ను తక్కువ లాగడం ద్వారా డేటా ట్రాన్స్మిటర్కు ప్రతిస్పందిస్తారు. రసీదు బిట్ పొందడానికి, ట్రాన్స్మిటర్ SDA లైన్ను విడుదల చేయాలి.
I2C కమ్యూనికేషన్ కోసం ప్రోగ్రామింగ్ N76E003
ఈ ట్యుటోరియల్లో ఉపయోగించిన పూర్తి ప్రోగ్రామ్ను ఈ పేజీ దిగువన చూడవచ్చు. కోడ్లోని ముఖ్యమైన విభాగాల వివరణ ఈ క్రింది విధంగా ఉంటుంది-
పిన్లను ఓపెన్ డ్రెయిన్గా సెట్ చేయండి మరియు వాటిని I2C కోసం కాన్ఫిగర్ చేయండి:
మొదట I2C పిన్ విభాగంతో ప్రారంభిద్దాం. ముందు వివరించినట్లుగా, I2C SCL మరియు SDA పోర్ట్లను కాన్ఫిగర్ చేసి ఓపెన్-డ్రెయిన్ కాన్ఫిగరేషన్గా సెట్ చేయాలి. దీన్ని చేయడానికి, మేము I2C.h సోర్స్ ఫైల్తో పాటు I2C.h హెడర్ ఫైల్ను ఉపయోగిస్తున్నాము. కోడ్ స్నిప్పెట్ ఇలా కనిపిస్తుంది-
{P13_OpenDrain_Mode చేయండి; P14_OpenDrain_Mode; clr_I2CPX;} ఉండగా (0)
పై కోడ్ P13 మరియు P14 ను ఓపెన్-డ్రెయిన్ పిన్గా సెట్ చేస్తుంది మరియు cl1.I2CPX P13 మరియు P14 ని P1.3 పై SCL పిన్గా మరియు P1.4 పై SDA పిన్గా ఎంచుకోవడానికి ఉపయోగించబడుతుంది.
ఈ I2CPX I2C కంట్రోల్ రిజిస్టర్ I2CON యొక్క 0 వ బిట్. ఈ I2C_PX 1 గా సెట్ చేయబడితే , పిన్స్ P0.2 ను SCL గా మరియు P1.6 ను SDA గా మార్చారు. అయితే, మేము P13 మరియు P14 ని ఉపయోగిస్తాము. ప్రత్యామ్నాయ పిన్స్ ఇక్కడ ఉపయోగించబడవు.
I2C కంట్రోల్ రిజిస్టర్ I2CON:
I2C నియంత్రణ రిజిస్టర్ I2CON I2C కార్యకలాపాలను నియంత్రించడానికి ఉపయోగించబడుతుంది. మొదటి బిట్ I2C పిన్ ఎంపిక బిట్. దీన్ని 0 గా సెట్ చేస్తే I2C పిన్ను P13 మరియు P14 గా కాన్ఫిగర్ చేస్తుంది.
AA బిట్ అనేది అంగీకార నిర్ధారణ జెండా, AA జెండా సెట్ చేయబడితే, SCL లైన్ యొక్క గుర్తించే గడియారం పల్స్ సమయంలో ACK తిరిగి ఇవ్వబడుతుంది. ఇది క్లియర్ చేయబడితే, SCL లైన్ యొక్క గుర్తించబడిన గడియారపు పల్స్ సమయంలో NACK (SDA పై ఉన్నత స్థాయి) తిరిగి ఇవ్వబడుతుంది.
తదుపరి బిట్ SI, ఇది I2C స్థితి అంతరాయం. I2C స్థితి అంతరాయం ప్రారంభించబడితే, వినియోగదారు ఏ దశ దాటిందో తెలుసుకోవడానికి I2STAT రిజిస్టర్ను తనిఖీ చేయాలి మరియు చర్య తీసుకోవాలి.
STO అనేది మాస్టర్ మోడ్లో సెట్ చేయబడిన STOP ఫ్లాగ్. STOP పరిస్థితి కనుగొనబడిన తర్వాత STO స్వయంచాలకంగా హార్డ్వేర్ ద్వారా క్లియర్ చేయబడుతుంది.
తదుపరి బిట్ STA బిట్. ఈ జెండా సెట్ చేయబడితే, బస్సు ఉచితం అయితే I2C START పరిస్థితిని సృష్టిస్తుంది. బస్సు బిజీగా ఉంటే, I2C ఒక STOP కండిషన్ కోసం వేచి ఉండి, START కండిషన్ను అనుసరిస్తుంది. I2C ఇప్పటికే మాస్టర్ మోడ్లో ఉన్నప్పుడు STA సెట్ చేయబడి ఉంటే మరియు ఒకటి లేదా అంతకంటే ఎక్కువ బైట్లు ప్రసారం చేయబడతాయి లేదా స్వీకరించబడితే, I2C పునరావృతమయ్యే START పరిస్థితిని ఉత్పత్తి చేస్తుంది. STA ను సాఫ్ట్వేర్ ద్వారా మానవీయంగా క్లియర్ చేయాలి.
చివరిది, I2CEN అనేది I2C బస్ ఎనేబుల్ లేదా బిట్ డిసేబుల్.
EEPROM 24C02:
ఇప్పుడు, 24C02 కి వస్తోంది. N76E003 యొక్క బోర్డు మద్దతు ప్యాకేజీ 24LC64 కోసం I2C కోడ్ను కలిగి ఉంది మరియు సులభంగా సవరించవచ్చు. అయితే, I2C ఫంక్షన్ను అర్థం చేసుకోవడానికి మేము ఒక సాధారణ పద్ధతిని ఉపయోగిస్తాము.
ఎవరైనా EEPROM 24C02 తో వివరణాత్మక ఇంటర్ఫేసింగ్ను ఉపయోగించాలనుకుంటే, అప్పుడు BSP లోని EEPROM ప్రోగ్రామ్ను ఉపయోగించవచ్చు.
మేము I2C లోని 24C02 ను మాత్రమే కనెక్ట్ చేస్తాము, ఇక్కడ N76E003 మాస్టర్ అవుతుంది మరియు EEPROM బానిస అవుతుంది. ఈ విధంగా, మేము ఏదైనా డేటాను EEPROM చిరునామాలో వ్రాస్తాము మరియు అదే చదువుతాము.
24C02 EEPROM పిన్అవుట్ క్రింద చూపబడింది-
A0, A1 మరియు A2 మూడు చిరునామా ఎంపిక పిన్స్. WP పిన్స్ రైట్ ప్రొటెక్ట్ పిన్స్ మరియు EEPROM లో వ్రాయడానికి వీలు కల్పించడానికి VSS తో కనెక్ట్ కావాలి.
బైట్ రైట్ కార్యాచరణ క్రింది చిత్రంలో చూపబడింది-
పూర్తి వ్రాత చక్రం ప్రారంభ బిట్తో జరుగుతుంది. ఆ తరువాత, కంట్రోల్ బైట్ సమర్పించాల్సిన అవసరం ఉంది. నియంత్రణ బైట్లో, ఈ క్రింది విషయాలు అవసరం-
ప్రారంభ బిట్ తరువాత, బానిస చిరునామాను కలిగి ఉంటుంది. 1010 స్టాటిక్ మరియు A0, A1 మరియు A2 హార్డ్వేర్ కనెక్షన్ ఆధారిత చిరునామా. మూడు పిన్స్ GND లేదా VSS సరఫరాతో అనుసంధానించబడి ఉంటే, అది 0 గా చదవబడుతుంది. లేకపోతే, VCC తో అనుసంధానించబడి ఉంటే, అది 1 గా చదవబడుతుంది. మా విషయంలో, అన్ని A0, A1 మరియు A2 లు VSS తో అనుసంధానించబడి ఉన్నాయి. అందువలన ఇవన్నీ 0 అవుతుంది.
చదవడానికి లేదా వ్రాయడానికి కండిషన్ కోసం ఖర్చు చేయడం. చదవడానికి లేదా వ్రాయడానికి బిట్తో చిరునామా విలువ ఉంటుంది - వ్రాయడానికి 0xA0 మరియు చదవడానికి 0xA1. తదుపరిది అంగీకార బిట్ మరియు ఆ తరువాత, 8-బిట్ చిరునామా ప్రసారం చేయబడుతుంది, అక్కడ డేటాను నిల్వ చేయాల్సిన అవసరం ఉంది మరియు చివరకు, సంబంధిత ప్రదేశంలో నిల్వ చేయబడే డేటా. ఈ పనులు ప్రధాన ఫంక్షన్లో స్టెప్ బై స్టెప్ ఫార్మాట్లో జరుగుతాయి.
ప్రధాన ఫంక్షన్ మరియు లూప్ అయితే:
void main (void) {char c = 0x00; ప్రారంభ UART0_Timer3 (115200); టిఐ = 1; // ముఖ్యమైనది, ప్రింట్ఫ్ట్ ఫంక్షన్ను ఉపయోగించాలి TI = 1; I2C_init (); (1) {EEPROM_write (1,0x55); c = EEPROM_read (1); printf ("read n చదివిన విలువ% x", సి & 0xff); }; }
ప్రధాన ఫంక్షన్ చాలా సులభం, ఇది నిరంతరం చిరునామా 1 లోని EEPROM కు విలువలను వ్రాస్తూ డేటాను చదువుతోంది. ప్రింట్ ఎఫ్ ఫంక్షన్ ఉపయోగించి డేటా ప్రింట్ అవుతోంది. ప్రింట్ ఎఫ్ విలువను హెక్స్లో ప్రింట్ చేస్తోంది.
EEPROM వ్రాసే ఫంక్షన్ EEPROM విభాగంలో వివరించిన క్రింది విషయాలను కలిగి ఉంటుంది-
శూన్యమైన EEPROM_write (సంతకం చేయని చార్ చిరునామా, సంతకం చేయని చార్ విలువ) {I2C_start (); I2C_write (0xA0); I2C_write (చిరునామా); I2C_write (విలువ); I2C_stop (); }
I2C ప్రారంభ ఫంక్షన్ కింది విషయాలను కలిగి ఉంటుంది-
శూన్యమైన I2C_start (శూన్యమైనది) {సంతకం చేసిన int సమయం = సమయం ముగిసింది; set_STA; clr_SI; అయితే ((SI == 0) && (సమయం> 0)) {time--; }; }
ఈ ఫంక్షన్లో, SI స్థితిని ముందే నిర్వచించిన సమయం ముగిసే కాలంతో పాటు తనిఖీ చేస్తున్నారు (I2C.h లో నిర్వచించబడింది, ఇక్కడ ముందే నిర్వచించిన సమయం 1000 గా సెట్ చేయబడింది). ప్రారంభ ఫంక్షన్ STA ను సెట్ చేయడం మరియు SI ని క్లియర్ చేయడం ద్వారా ప్రారంభమవుతుంది.
శూన్యమైన I2C_stop (శూన్యమైనది) {సంతకం చేసిన పూర్ణాంకానికి సమయం = సమయం ముగిసింది; clr_SI; set_STO; అయితే ((STO == 1) && (సమయం> 0)) {time--; }; }
ప్రారంభం వలె, స్టాప్ ఫంక్షన్ ఉపయోగించబడుతుంది. స్టాప్ ఫంక్షన్ SI సుగమం తరువాత STO ఏర్పాటు ద్వారా మొదలవుతుంది. ఫంక్షన్ క్రింద I2C రీడ్ ఫంక్షన్-
సంతకం చేయని చార్ I2C_read (సంతకం చేయని చార్ ack_mode) {సంతకం చేసిన int time = timeout; సంతకం చేయని చార్ విలువ = 0x00; set_AA; clr_SI; అయితే ((SI == 0) && (t> 0)) {time--; }; విలువ = I2DAT; if (ack_mode == I2C_NACK) {t = timeout_count; clr_AA; clr_SI; అయితే ((SI == 0) && (t> 0)) {time--; }; } తిరిగి విలువ; }
Ack_mode మరియు I2C_NACK , రెండు వరుసగా 0 మరియు 1 గా I2C శీర్షిక ఫైల్ లో నిర్వచించబడ్డాయి.
అదేవిధంగా, వ్రాసే ఫంక్షన్ సృష్టించబడుతుంది-
శూన్యమైన I2C_write (సంతకం చేయని చార్ విలువ) {సంతకం చేసిన int time = timeout; I2DAT = విలువ; clr_STA; clr_SI; అయితే ((SI == 0) && (సమయం> 0)) {time--; }; }
కోడ్ మరియు అవుట్పుట్ను మెరుస్తోంది
కోడ్ 0 హెచ్చరిక మరియు 0 లోపాలను తిరిగి ఇచ్చింది మరియు కైల్ చేత డిఫాల్ట్ ఫ్లాషింగ్ పద్ధతిని ఉపయోగించి ఫ్లాష్ చేయబడింది. మీరు క్రొత్తగా ఉంటే, కోడ్ను ఎలా అప్లోడ్ చేయాలో అర్థం చేసుకోవడానికి నువోటన్ ట్యుటోరియల్తో ప్రారంభించడం చూడండి. కోడ్ యొక్క కంపైలింగ్ సమాచారం క్రింద చూడవచ్చు.
I2C_EEPROM.c ను కంపైల్ చేసే టార్గెట్ 'I2C_EEPROM…. కంపైల్ I2C.c… లింక్ చేస్తోంది… ప్రోగ్రామ్ పరిమాణం: డేటా = 59.2 xdata = 0 కోడ్ = 2409 "నుండి హెక్స్ ఫైల్ను సృష్టిస్తోంది. \ అవుట్పుట్ \ I2C_EEPROM"… " \ అవుట్పుట్ \ I2C_EEPROM "- 0 లోపం (లు), 0 హెచ్చరిక (లు). బిల్డ్ సమయం గడిచిపోయింది: 00:00:04 బ్యాచ్-బిల్డ్ సారాంశం: 1 విజయవంతమైంది, 0 విఫలమైంది, 0 దాటవేయబడింది - సమయం గడిచిపోయింది: 00:00:04
హార్డ్వేర్ బ్రెడ్బోర్డ్లో ఏర్పాటు చేయబడుతోంది మరియు.హించిన విధంగా పనిచేస్తోంది. దిగువ చిత్రంలో మీరు చూడగలిగినట్లుగా, మేము EEPROM లో ఒక విలువను వ్రాయగలిగాము మరియు దానిని మెమరీ నుండి తిరిగి చదివి సీరియల్ మానిటర్లో ప్రదర్శించగలిగాము.
ఈ కోడ్ కోసం బోర్డు ఎలా పనిచేస్తుందో పూర్తి ప్రదర్శన కోసం క్రింద ఇచ్చిన వీడియోను చూడండి. మీరు ట్యుటోరియల్ని ఆస్వాదించారని మరియు మీకు ఏవైనా ప్రశ్నలు ఉంటే ఉపయోగకరమైనదాన్ని నేర్చుకున్నారని ఆశిస్తున్నాము, వాటిని క్రింది వ్యాఖ్య విభాగంలో ఉంచండి. ఇతర సాంకేతిక ప్రశ్నలను పోస్ట్ చేయడానికి మీరు మా ఫోరమ్లను కూడా ఉపయోగించవచ్చు.