chuẩn giao tiếp I2C trong pic ppt

10 799 6
chuẩn giao tiếp I2C trong pic ppt

Đang tải... (xem toàn văn)

Thông tin tài liệu

Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 1/10 Tutorialn o 02.01  Gửiđến: www.picvietnam.com Nộidung: ChuẩngiaotiếpI2C–I2CtrongPIC  MICROSOFTWORD  Tómtắt: GiớithiệuchungvềI2C ‐ ĐặcđiểmchungvềI2C:giaothức,địachỉ ‐ Cácchếđộhoạtđộng:master‐slave,multi‐master ModuleI2CtrongViđiềukhiểnPIC ‐ Cấutrúcphầncứng ‐ Chếđộhoạtđộng:Master,Slave,Multi‐master  1. GiớithiệuchungvềI2C Ngàynaytrongcáchệthốngđiệntửhiệnđại,rấtnhiềuICshaythiếtbịngoạivicần phảigiaotiếpvớicácICshaythiếtbịkhác–giaotiếpvớithếgiớibênngoài.Vóimụctiêu đạtđượchiệuquảchophầncứngtốtnhấtvớimạchđiệnđơngiản,Phillipsđãpháttriển mộtchuẩngiaotiếpnốitiếp2dâyđượcgọilàI2C.I2ClàtênviếttắtcủacụmtừInter‐ IntergratedCircuit–BusgiaotiếpgiữacácICvớinhau. LịchsửI2C–Thêmvàođây…(Phầnnàysẽthêmsau…) I2Cmặcdùđượcpháttriểnbớ iPhilips,nhưngnóđãđượcrấtnhiềunhàsảnxuấtIC trênthếgiớisửdụng.I2Ctrởthànhmộtchuẩncôngnghiệpchocácgiaotiếpđiềukhiển,có thểkểrađâymộtvài têntuổingoàiPhilipsnhư:TexasIntrument(TI),Maxim‐Dallas, analogDevice,NationalSemiconductor…BusI2Cđượcsửdụnglàmbusgiaotiếpngoại vichorấtnhiềuloạiICkhácnhaunhưcácloạiViđiềukhiển 8051,PIC,AVR,ARM,chíp nhớnhưRAMtĩnh(StaticRam),EEPROM,bộchuyểnđổitươngtựsố(ADC),sốtươngtụ (DAC),ICđiểukhiểnLCD,LED…   Hình1.1.BUSI2Cvàcácthiếtbịngoạivi Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 2/10  1.1. ĐặcđiểmgiaotiếpI2C MộtgiaotiếpI2Cgồmcó2dây:SerialData(SDA)vàSerialClock(SCL).SDAlàđường truyềndữliệu2hướng,cònSCLlàđườngtruyềnxungđồnghồvàchỉtheomộthướng. Nhưhìnhvẽtrên,khimộtthiếtb ịngoạivikếtnốivàođườngI2CthìchânSDAcủanósẽ nốivớidâySDAcủabus,chânSCLsẽnốivớidâySCL.  Hình1.2.KếtnốithiếtbịvàobusI2Cởchếđộchuẩn(Standardmode) vàchếđộnhanh(Fastmode) MỗidâySDAhaySCLđềuđượcnốivớiđiệnápdươngcủanguồncấpthôngquamột điệntrởkéolên(pull‐upresistor).Sựcầnthiếtcủacácđiệntrởkéonàylàvìchângiaotiếp I2Ccủacácthiếtbịngoạivithườnglàdạngcựcmánghở(open‐drainoropen‐collector). Giátrịcủacácđiệntrởnàykhácnhautùyvàotừngthiếtbịvàchuẩngiaotiếp,thườngdao độngtrongkhoảng1KΩđến4.7KΩ. Trởlạivớihình1.1,tathấycórấtnhiềuthiếtbị(ICs)cùngđượckếtnốivàomộtbus I2C,tuynhiênsẽkhôngxảyrachuyệnnhầmlẫngiữacácthiếtbị,bởimỗithiếtbịsẽđược nhậnrabởimột địachỉduynhấtvớimộtquanhệchủ/tớtồntạitrongsuốtthờigiankết nối.Mỗithiếtbịcóthểhoạtđôngnhưlàthiếtbịnhậndữliệuhaycóthể vừatruyềnvừa nhận.Hoạtđộngtruyềnhaynhậncòntùythuộcvàoviệcthiếtbịđólàchủ(master)haytớ (slave). MộtthiếtbịhaymộtICkhikếtnốivớibusI2C, ngoàimộtđịachỉ(duynhất)đểphân biệt,nócònđượccấuhìnhlàthiếtbịchủ(master)haytớ(slave).Tạisaolạicósựphânbiệt này?ĐólàvìtrênmộtbusI2Cthìquyềnđiềukhiểnthuộcvềthiếtbịchủ(master).Thiếtbị chủnắmvaitròtạoxungđồnghồchotoànhệthống,khigiữahaithiếtbịchủ/tớgiaotiếp thìthiếtbịchủcónhiệmvụt ạoxungđồnghồvàquảnlýđịachỉcủathiếtbịtớtrongsuốt quátrìnhgiaotiếp.Thiếtbịchủgiữvaitròchủđộng,cònthiếtbịtớgiữvaitròbịđộng trongviêcgiaotiếp. Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 3/10   Hình1.3.Truyềnnhậndữliệugiữachủ/tớ Nhìnhìnhtrêntathấyxungđồnghồchỉcóm ộthướngtừchủđếntớ,cònluồngdữliệu cóthểđitheohaihướng,từchủđếntớhayngượclạitớđếnchủ. VềdữliệutruyềntrênbusI2C,mộtbusI2Cchuẩntruyền8‐bitdữliệucóhướngtrên đườngtruyềnvớitốcđộlà100Kbits/s–Chếđộchuẩn(Standardmode).Tốcđộtruyềncó thểlêntới400Kbits/s–Chếđộnhanh(Fastmode)vàcaonhấtlà3,4Mbits/s–Chếđộcao tốc(High‐speedmode). MộtbusI2Ccóthểhoạtđộngởnhiềuchếđộkhácnhau: - Mộtchủmộttớ(onemaster–oneslave) - Mộtchủnhiềutớ(onemaster–multislave) - Nhiềuchủnhiềutớ(Multimaster–multislave) Dùởchếđộnào,mộtgiaotiếpI2Cđều dựavàoquanhệchủ/tớ.Giảthiếtmộtthiếtb ịA muốngửidữliệuđếnthiếtbịB,quátrìnhđượcthựchiệnnhưsau: ‐ ThiếtbịA(Chủ)xácđịnhđúngđịachỉcủathiếtbịB(tớ),cừngvớiviệcxácđịnh địachỉ,thiếtbịAsẽquyếtđịnhviệcđọchayghivàothiếtbịtớ ‐ ThiếtbịAgửidữliệutớithiếtbịB ‐ ThiếtbịAkếtthúcquátrìnhtruyềndữliệu KhiAmuốnnhậndữliệutừB,quátrìnhdiễnranhưtrên,chỉkháclàAsẽnhậndữliệu từB.Tronggiaotiếpnày,AlàchủcònBvẫnlàtớ. Chitiếtviệcthiếtlậpmộtgiaotiếpgiữa haithiếtbịsẽđượcmôtảchitiếttrongcácmụcdướiđây.  1.2. STARTandSTOPconditions STARTvàSTOPlànhữngđiềukiệnbắtbuộcphảicókhimộtthiếtbịchủmuốnthiết lậpgiaotiếpvớimộtthiếtbịnàođótrongmạngI2C.STARTlàđiềukiệnkhởiđầu,báo hiệubắtđầucủagiaotiếp,cònSTOPbáohiệukếtthúcmộtgiaotiếp.Hìnhdướiđâymôtả điềukiệnSTARTvàSTOP. Banđầukhichưathựchiện quátrìnhgiaotiếp,cảhaiđườngSDAvàSCLđềuởmức cao(SDA=SCL=HIGH).LúcnàybusI2Cđượccoilàdỗi(“busfree”),sẵnsàngchomột giaotiếp.HaiđiềukiệnSTARTvàSTOP làkhôngthểthiếutrongviệcgiaotiếpgiữacác thiếtbịI2Cvớinhau Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 4/10  Hình1.4.ĐiềukiệnSTARTvàSTOPcủabusI2C ĐiềukiệnSTART:mộtsựchuyểnđổitrạngtháitừcaoxuốngthấptrênđườngSDA trongkhiđườngSCLđangởmứccao(cao=1;thấp= 0)báohiệumộtđiềukiệnSTART ĐiềukiệnSTOP:MộtsựchuyểnđổitrạngtháitừmứcthấplêncaotrênđườngSDA trongkhiđườngSCLđangởmứccao. CảhaiđiềukiệnSTART vàSTOPđềuđượctạorabởithiếtbịchủ.SautínhiệuSTART, busI2Ccoinhưđangtrongtrangtháilàmviệc(busy).BusI2Csẽrỗi,sẵnsàngchomột giaotiếpmớisautínhiệuSTOPtừphíathiếtbịchủ. SaukhicómộtđiềukiệnSTART,trongquatrìnhgiaotiếp,khicómộttínhiệuSTART đượclặplạithayvìmộttínhiệuSTOPthìbusI2Cvẫntiếptụctrongtrạngtháibận.Tín hiệuSTARTvàlặplạiSTARTđềucóchứcnănggiốngnhaulàkhởitạomộtgiaotiếp.  1.3. Địnhdạngdữliệutruyền DữliệuđượctruyềntrênbusI2Ctheotừngbit,bitdữliệuđượctruyềnđitạimỗisườn dươngcủaxungđồnghồtrêndâySCL,quátrìnhthayđổibitdữliệuxảyrakhiSCLđang ởmứcthấp.  Hình1.5.Quátrìnhtruyền1bitdữliệu Mỗibytedữliệuđượctruyềncóđộdàilà8bits.Sốlượngbytecóthểtruyềntrongmột lầnlàkhônghạnchế.MỗibyteđượctruyềnđitheosaulàmộtbitACKđểbáohiệuđã nhậndữliệu.Bitcótrọngsốcaonhất(MSB)sẽđượctruyềnđiđầutiên,cácbítsẽđược truyềnđilầnlượt.Sau8xungclocktrêndâySCL,8bitdữliệuđãđượctruyềnđi.Lúcnày thiếtbịnhận,saukhiđãnhậnđủ8bítdữliệusẽkéoSDAxuốngmứcthấptạomộtxung ACKứngvớixungclockthứ9trên dâySDAđểbáohiệuđãnhậnđủ8bit.Thiếtbịtruyền khinhậnđượcbitACKsẽtiếptụcthựchiệnquátrìnhtruyềnhoặckếtthúc. Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 5/10  Hình1.6.DữliệutruyềntrênbusI2C  Hình1.7.BitACKtrênbusI2C TruyềnNhận                Hình1.8.Lưuđồthuậttoánquátrìnhtruyêngnhậndữliệu Buffer=databit BufferFull? ReadBuffer SendACK NO YES SDA=data_bit Clock=8? ACK? Next_byte or STOP STOP NO NO YES YES Kiểmtraxem đãtruyềnđủ 8 b i tch ưa  Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 6/10 MộtbytetruyềnđicókèmtheobitACKlàđiềukiênbắtbuộc,nhằmđảmbảochoquá trìnhtruyềnnhậnđượcdiễnrachínhxác.Khikhôngnhậnđượcđúngđịachỉhaykhi muốnkế tthúcquátrìnhgiaotiếp,thiếtbịnhậnsẽgửimộtxungNot‐ACK(SDAởmức cao)đểbáochothiếtbịchủbiết,thiếtbịchủsẽtạoxungSTOPđểkếtthúchaylặplạimột  xungSTARTđểbắtđầuquátrìnhmới.  1.4. Địnhdạngđịachỉthiếtbị Mỗithiếtbịngoạivithamgiavàobusi2cđềucómộtđịachỉduynhất,nhằmphânbiệt giữacácthiếtbịvớinhau.Độdàiđịachỉlà7–bit,điềuđócónghĩalàtrênmộtbusI2Cta cóthểphânbiệttốiđa128thiếtbị.Khithiếtbịchủmuốngiaotiếpvớingoạivinàotrênbus I2C,nósẽgửi7bitđịachỉcủathiếtbịđ órabusngaysauxungSTART.Byteđầutiênđược gửisẽbaogồm7bitđịachỉvàmộtbítthứ8điềukhiểnhướngtruyền.  Hình1.8.Cấutrúcbytedữliệuđầutiên Mỗimộtthiếtbịngoạivisẽcómộtđịachỉriêngdonhàsảnxuấtranóquyđịnh.Địachỉ đócóthểlàcốđịnhhaythayđổi.Riêngbitđiềukhiểnhướngsẽquyđịnhchiềutruyềndữ liệu.Nếubitnàybằng“0”cónghĩalàbytedữliệutiếptheosausẽđượctruyềntừchủđến tớ,cònngượclạinếubằng“1”thìcácbytetheosaubyteđầutiênsẽlàdữliệutừcontớgửi đếnconchủ.Việcthiếtlậpgiátrịchobitnàydoconchủthihành,contớsẽtùytheogiátrị đómàcósựphảnhồitươngứngđếnconchủ.  1.5. TruyềndữliệutrênbusI2C,chếđộMaster‐Slave Việctruyềndữliệudiễnragiữaconchủvàcontớ.Dữliệutruyềncóthểtheo2hướng, từchủđếntớhayngượclại.Hướngtruyềnđượcquyđịnhbởibitthứ8 trongbyteđầu tiênđượctruyềnđi.  Hình1.9.Quátrìnhtruyềndữliệu Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 7/10 • Truyềndữliệutừchủđếntớ(ghidữliệu):Thiếtbịchủkhimuốnghidữliệuđến contớ,quátrìnhthựchiệnlà: ‐ ThiếtbịchủtạoxungSTART ‐ Thiếtbịchủgửiđịachỉcủathiếtbịtớmànócầngiaotiếpcùngvớibit =0rabusvàđợixungACKphảnhồitừcontớ ‐ KhinhậnđượcxungACKbáođãnhậndiệnđúngthiếtbịtớ,conchủbắt đầugửidữliệuđếncontớtheotừngbytemột.Theosaumỗibytenàyđều làmộtxungACK.Sốlượngbytetruyềnlàkhônghạnchế. ‐ Kếtthúcquátrìnhtruyền,conchủsaukhitruyềnbytecuốisẽtạoxung STOPbáohiệukếtthúc.  Hình1.10.Ghidữliệutừchủđếntớ • Truyềndữliệutừtớđếnchủ(đọcdữliệu):Thiếtbịchủmuốnđọcdữliệutừthiếtbị tớ,quátrìnhthựchiệnnhưsau: ‐ Khibusrỗi,thiếtbịchủtạoxungSTART,báohiệubắtđầugiaotiếp ‐ Thiếtbịchủgửiđịachỉcủathiếtbịtớcầngiaotiếpcùngvớibit =1và đợixungACKtừphíathiếtbịtớ ‐ SauxungACKdầutiên,thiếtbịtớsẽgửitừngbyterabus,thiếtbịchủsẽ nhậndữliệuvàtrảvềxungACK.Sốlượngbyte khônghạnchế ‐ Khimuốnkếtthúcquátrìnhgiaotiếp,thiếtbịchủgửixungNot‐ACKvà tạoxungSTOPđểkếtthúc.  Hình1.11.Đọcdữliệutừthiếtbịtớ • Quátrìnhkếthợpghivàđọcdữliệu:giữahaixungSTARTvàSTOP,thiếtbịchủcó thểthựchiệnviệcđọchayghinhiềulần,vớimộthaynhiềuthiếtbị.Đểthựchiện việcđó,saumộtquátrìnhghihayđọc,thiếtbịchủlặplạimộtxungSTARTvàlại gửilạiđịachỉcủathiết bịtớvàbắtđầumộtquátrìnhmới. Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 8/10  Hình1.12.Quátrìnhphốihợpđọc/ghidữliệu ChếđộgiaotiếpMaster‐SlavelàchếđộcơbảntrongmộtbusI2C,toànbộbusđược quảnlýbởimộtmasterduynhất.Trongchếđộnàysẽkhôngxảyra tìnhtrạngxungđột bushaymấtđồngbộxungclockvìchỉcómộtmasterduynhấtcóthểtạoxungclock. 1.6. ChếđộMulti‐Master TrênbusI2Ccóthểcónhiềuhơnmộtmasterđiềukhiểnbus.KhiđóbusI2Csẽhoạt độngởchếđộMulti‐Master. Vấnđềnàysẽđượcbànthảosau. 2. ModuleI2CtrongViđiềukhiểnPIC Vớinhữngtiệníchđemlại,khốigiaotiếpI2Cđãđượctíchhợpcứngtrongkhánhiều loạiViđiềukhiểnkhácnhau.TrongcácloạiViđiềukhiểnPICdòngMid‐rangephổbiến tạiViệtNam,chỉtừ16F88mớicóhỗtrợphầncứngI2C,còncácloại16F84,16F628thì khôngcó.VớinhữngloạiViđiềukhiểnkhôngcóhỗtrợphầncứnggiaotiếpI2C,đểsử dụngtacóthểdùngphầnmềmlậptrình,khiđótasẽviếtmộtchươngtrinhdiềukhiển2 chânbấtkỳcủaViđiềukhiểnđểnóthựchiệngiaotiếpI2C (cáchàmSTART,STOP, WRITE,READ).TrongbàiviếtnàytađềcậpđếnviệcsửdụnggiaotiếpI2Ccủacácloại PICcótíchhợpkhốiI2Csẵntrongnó,màcụthểlàViđiềukhiển PIC16F877A.  2.1. Đặcđiểmphầncứng HìnhdướiđâychỉracấutrúcphầncứngcủakhốiđiềukhiểnGiaotiếpnốitiếpđồngbộ (MSSP)hoạtđộngởchếđộI2C.KhốiI2Ccódầyđủchứcnăng,hoạtđộngởcả2chếđộlà MASTER(chủ)vàSLAVE(tớ),cóngắtxảyrakhicóđiềukiệnSTARThaySTOPxảyra, nhằmđịnhrõđườngI2Ccódỗihaykhônơng(chứcnăngMulti‐master).Chếđộđịachỉ có thểlà7‐bithay10‐bit. KhốiI2Ccó6thanhghiđiềukhiểnhoạtđộng,đólà: ‐ SSPCON:Thanhghiđiềukhiển ‐ SSPCON2:Thanhghiđiềukhiểnthứ2 ‐ SSPSTAT:Thanhghitrạngthái Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 9/10 ‐ SSPBUF:Thanhghibộđệmtruyềnnhận ‐ SSPSR:Thanhghidịch ‐ SSPADD:Thanhghiđịachỉ CácthanhghiSSPCON,SSPBUF,SSPADDvàSSPSON2cóthểtruycậpđọc/ghiđược. ThanhghiSSPSRkhôngthểtruycậptrựctiếp,làthanhghidichdữliệurahayvào.Các thanhghiSSPCON,SSPCON2vàSSPSTATđượcđịnhđịachỉbit,mỗibitcóchứcnăng riêng.Ýnghĩacủatừngthanhghivàcủamỗibittrongtừngthanhghiđãđượcđềcậpkỹ trongtàiliệuDatasheetcủaPICvàtrongtàiliệuTUT04.02.PVN.MAFDcủabạnMạnh,tôi khôngđềcậpthêmởđây.TrongtàiliệunaygtôisẽtậptrungvàoviệcsửdụngkhốiI2C củaPICởcácchếđộMastervàSlavetrongphầnmềmbiêndịchCchoPIClàCCS   Hình2.1.CấutrúckhốiI2CtrongPIC  2.2. CáchthứcsửdụngModuleI2CtrongCCS TrongviệclậptrìnhchoPICsửdụnggiaotiếpI2Ccủanótrongcácứngdụng,người lậptrìnhcóthểthựchiệnmộtcáchdễdàngvớitrìnhdịchCCS.Nóidễdàngởđâylàchỉvề mặtcúpháplệnh,takhôngcầnsửdụngnhiềucâulệnhkhónhớnhưtronglậptrìnhASM. Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 10/10 Việckhởitạo,chọnchếđộhoạtđộngvàthựchiệngiaotiếpcủaI2Cđãcócáchàmdựng sẵncủaCCSthựchiện.CáchàmliệtkêdướiđâylàcủaphiênbảnCCS3.242,đólà: ‐ i2c_isr_state():ThôngbáotrạngtháigiaotiếpI2C ‐ i2c_start():TạođiềukiệnSTART ‐ i2c_stop():TạođiềukiệnSTOP ‐ i2c_read():ĐọcgiátrịtừthiếtbịI2C,trảvềgiátrị8bit ‐ i2c_write():Ghigiátrị8bitđếnthiếtbịI2C ĐểsửdụngkhốiI2Ctasửdụngkhaibáosau: #usei2c(chế_độ,tốcđộ,sda=PIN_C4,scl=PIN_C3) ‐ Chếđộ:MasterhaySlave ‐ Tốcđộ:Slow(100KHz)hayFast(400KHz) ‐ SDAvàSCLlàcácchâni2ctươngứngcủaPIC Saukhaibáotrên,tacóthểsửdụngcáchàmnêutrênđểthựchiện,xửlýcácgiaotiếp i2cvớicácthiếtbịngoạivikhác. Còntiếpnữa… 3. Kếtluận           . Tutorialn o 02.01  Gửiđến: www.picvietnam.com Nộidung: Chuẩn giao tiếp I2C – I2C trong PIC  MICROSOFTWORD  Tómtắt: Giớithiệuchungvề I2C ‐ Đặcđiểmchungvề I2C: giao thức,địachỉ ‐. SSPADD:Thanhghiđịachỉ CácthanhghiSSPCON,SSPBUF,SSPADDvàSSPSON2cóthểtruycậpđọc/ghiđược. ThanhghiSSPSRkhôngthểtruycậptrực tiếp, làthanhghidichdữliệurahayvào.Các thanhghiSSPCON,SSPCON2vàSSPSTATđượcđịnhđịachỉbit,mỗibitcóchứcnăng riêng.Ýnghĩacủatừngthanhghivàcủamỗibit trong từngthanhghiđãđượcđềcậpkỹ trong tàiliệuDatasheetcủa PIC và trong tàiliệuTUT04.02.PVN.MAFDcủabạnMạnh,tôi khôngđềcậpthêmởđây. Trong tàiliệunaygtôisẽtậptrungvàoviệcsửdụngkhối I2C của PIC ởcácchếđộMastervàSlave trong phầnmềmbiêndịchCcho PIC làCCS   Hình2.1.Cấutrúckhối I2C trong PIC  2.2. CáchthứcsửdụngModule I2C trong CCS Trong việclậptrìnhcho PIC sửdụng giao tiếp I2C củanó trong cácứngdụng,người lậptrìnhcóthểthựchiệnmộtcáchdễdàngvớitrìnhdịchCCS.Nóidễdàngởđâylàchỉvề mặtcúpháplệnh,takhôngcầnsửdụngnhiềucâulệnhkhónhớnhư trong lậptrìnhASM. Ngườibáocáo: NguyễnChíLinh Tàiliệu: TUT02.01 Ngày: 9/8/2006 Trang: 10/10

Ngày đăng: 23/03/2014, 14:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan