Ngườibáocáo:NguynChíLinhTàiliu:TUT02.01
Ngày:9/8/2006Trang:1/10
Tutorialno02.01
Giđến:www.picvietnam.com
Nidung:ChungiaotiếpI2CI2CtrongPIC
MICROSOFTWORD
Tómtt:
GiithiuchungvềI2C
ĐặcđimchungvềI2C:giaothc,địachỉ
Cácchếđộhotđộng:masterslave,multimaster
ModuleI2CtrongViđiukhinPIC
Cutrúcphncng
Chếđộhotđộng:Master,Slave,Multimaster
1. GiithiuchungvềI2C
Ngàynaytrongcáchệthngđintửhinđi,rtnhiuICshaythiếtbịngoivicn
phigiaotiếpvicácICshaythiếtbịkhácgiaotiếpvithếgiibênngoài.Vóimctiêu
đạtđượchiuquảchophncngttnhtvimchđinđơngin,Phillipsđãpháttrin
mtchungiaotiếpnitiếp2dâyđượcgiI2C.I2CtênviếtttcacmtừInter‐
IntergratedCircuitBusgiaotiếpgiacácICvinhau.
LchsửI2CThêmvàođây…(Phnnàysẽthêmsau…)
I2CmcđượcpháttrinbiPhilips,nhưngđãđượcrtnhiunhàsnxutIC
trênthếgiisửdng.I2Ctrởthànhmtchuncôngnghipchocácgiaotiếpđiukhin,
thểkểrađâymtvàitêntuingoàiPhilipsnhư:TexasIntrument(TI),MaximDallas,
analogDevice,NationalSemiconductorBusI2Cđượcsửdnglàmbusgiaotiếpngoi
vichortnhiuloiICkhácnhaunhưcácloiViđiukhin8051,PIC,AVR,ARM,chíp
nhớnhưRAMtĩnh(StaticRam),EEPROM,bộchuynđổitươngtựsố(ADC),sốtươngtụ
(DAC),ICđiukhinLCD,LED…
Hình1.1.BUSI2Ccácthiếtbịngoivi
Ngườibáocáo:NguynChíLinhTàiliu:TUT02.01
Ngày:9/8/2006Trang:2/10
1.1. ĐặcđimgiaotiếpI2C
MtgiaotiếpI2Cgm2dây:SerialData(SDA)SerialClock(SCL).SDAđường
truyndữliu2hướng,cònSCLđườngtruynxungđồnghồchỉtheomthướng.
Nhưhìnhvẽtrên,khimtthiếtbịngoivikếtnivàođườngI2CthìchânSDAcasẽ
nividâySDAcabus,chânSCLsẽnividâySCL.
Hình1.2.KếtnithiếtbịvàobusI2Cởchếđộchun(Standardmode)
chếđộnhanh(Fastmode)
MidâySDAhaySCLđềuđượcniviđinápdươngcanguncpthôngquamt
đintrởkéolên(pullupresistor).Sựcnthiếtcacácđintrởkéonàychângiaotiếp
I2Ccacácthiếtbịngoivithườngdngccmánghở(opendrainoropencollector).
Giátrịcacácđintrởnàykhácnhautùyvàotngthiếtbịchungiaotiếp,thườngdao
độngtrongkhong1KΩđến4.7K.
Trởlivihình1.1,tathyrtnhiuthiếtbị(ICs)cùngđượckếtnivàomtbus
I2C,tuynhiênsẽkhôngxyrachuynnhmlngiacácthiếtb,bimithiếtbịsẽđược
nhnrabimtđịachỉduynhtvimtquanhệch/tớtntitrongsutthigiankết
ni.Mithiếtbịthểhotđôngnhưthiếtbịnhndữliuhaythểvatruynva
nhn.Hotđộngtruynhaynhncòntùythucvàovicthiếtbịđóchủ(master)haytớ
(slave).
MtthiếtbịhaymtICkhikếtnivibusI2C,ngoàimtđịachỉ(duynht)đểphân
bit,cònđượccuhìnhthiếtbịchủ(master)haytớ(slave).Tisaolisựphânbit
này?ĐótrênmtbusI2Cthìquynđiukhinthucvềthiếtbịchủ(master).Thiếtbị
chủnmvaitròtoxungđnghồchotoànhệthng,khigiahaithiếtbịch/tớgiaotiếp
thìthiếtbịchủnhimvụtoxungđồnghồqunđịachỉcathiếtbịtớtrongsut
quátrìnhgiaotiếp.Thiếtbịchủgiữvaitròchủđộng,nthiếtbịtớgiữvaitròbịđộng
trongviêcgiaotiếp.
Ngườibáocáo:NguynChíLinhTàiliu:TUT02.01
Ngày:9/8/2006Trang:3/10

Hình1.3.Truynnhndữliugiach/tớ
Nhìnhìnhtrêntathyxungđồnghồchỉmthướngtừchủđếnt,cònlungdữliu
thểđitheohaihướng,từchủđếntớhayngượclitớđếnch.
VềdữliutruyntrênbusI2C,mtbusI2Cchuntruyn8bitdữliuhướngtrên
đườngtruynvitcđộ100Kbits/sChếđộchun(Standardmode).Tcđộtruyn
thểlênti400Kbits/sChếđộnhanh(Fastmode)caonht3,4Mbits/sChếđộcao
tc(Highspeedmode).
MtbusI2Cthểhotđộngởnhiuchếđộkhácnhau:
- Mtchủmttớ(onemasteroneslave)
- Mtchủnhiutớ(onemastermultislave)
- Nhiuchủnhiutớ(Multimastermultislave)
ởchếđộnào,mtgiaotiếpI2Cđềudavàoquanhệch/t.GiảthiếtmtthiếtbịA
mungidữliuđếnthiếtbịB,quátrìnhđượcthchinnhưsau:
ThiếtbịA(Ch)xácđịnhđúngđịachỉcathiếtbịB(t),cngvivicxácđịnh
địach,thiếtbịAsẽquyếtđịnhvicđọchayghivàothiếtbịtớ
ThiếtbịAgidữliutithiếtbịB
ThiếtbịAkếtthúcquátrìnhtruyndữliu
KhiAmunnhndữliutừB,quátrìnhdinranhưtrên,chỉkhácAsẽnhndữliu
từB.Tronggiaotiếpnày,AchủcònBvnt.Chitiếtvicthiếtlpmtgiaotiếpgia
haithiếtbịsẽđượctảchitiếttrongcácmcdướiđây.
1.2. STARTandSTOPconditions
STARTSTOPnhngđiukinbtbucphikhimtthiếtbịchủmunthiết
lpgiaotiếpvimtthiếtbịnàođótrongmngI2C.STARTđiukinkhiđầu,báo
hiubtđầucagiaotiếp,cònSTOPbáohiukếtthúcmtgiaotiếp.Hìnhdướiđâytả
điukinSTARTSTOP.
Banđầukhichưathchinquátrìnhgiaotiếp,cảhaiđườngSDASCLđềuởmc
cao(SDA=SCL=HIGH).LúcnàybusI2Cđượccoidi(“busfree”),snsàngchomt
giaotiếp.HaiđiukinSTARTSTOPkhôngthểthiếutrongvicgiaotiếpgiacác
thiếtbịI2Cvinhau
Ngườibáocáo:NguynChíLinhTàiliu:TUT02.01
Ngày:9/8/2006Trang:4/10
Hình1.4.ĐiukinSTARTSTOPcabusI2C
ĐiukinSTART:mtsựchuynđổitrngtháitừcaoxungthptrênđườngSDA
trongkhiđườngSCLđangởmccao(cao=1;thp=0)báohiumtđiukinSTART
ĐiukinSTOP:MtsựchuynđổitrngtháitừmcthplêncaotrênđườngSDA
trongkhiđườngSCLđangởmccao.
CảhaiđiukinSTARTSTOPđềuđượctorabithiếtbịch.SautínhiuSTART,
busI2Ccoinhưđangtrongtrangtháilàmvic(busy).BusI2Csẽri,snsàngchomt
giaotiếpmisautínhiuSTOPtừphíathiếtbịch.
SaukhimtđiukinSTART,trongquatrìnhgiaotiếp,khimttínhiuSTART
đượclplithaymttínhiuSTOPthìbusI2Cvntiếptctrongtrngtháibn.Tín
hiuSTARTlpliSTARTđềuchcnănggingnhaukhitomtgiaotiếp.
1.3. Địnhdngdữliutruyn
DữliuđượctruyntrênbusI2Ctheotngbit,bitdliuđượctruynđitimisườn
dươngcaxungđồnghồtrêndâySCL,quátrìnhthayđổibitdữliuxyrakhiSCLđang
ởmcthp.
Hình1.5.Quátrìnhtruyn1bitdữliu
Mibytedữliuđượctruynđộdài8bits.Sốlượngbytethểtruyntrongmt
lnkhônghnchế.MibyteđượctruynđitheosaumtbitACKđểbáohiuđã
nhndữliu.Bittrngsốcaonht(MSB)sẽđượctruynđiđầutiên,cácbítsẽđược
truynđilnlượt.Sau8xungclocktrêndâySCL,8bitdữliuđãđượctruynđi.Lúcnày
thiếtbịnhn,saukhiđãnhnđủ8bítdữliusẽkéoSDAxungmcthptomtxung
ACKứngvixungclockthứ9trêndâySDAđểbáohiuđãnhnđủ8bit.Thiếtbịtruyn
khinhnđượcbitACKsẽtiếptcthchinquátrìnhtruynhockếtthúc.
Ngườibáocáo:NguynChíLinhTàiliu:TUT02.01
Ngày:9/8/2006Trang:5/10
Hình1.6.DữliutruyntrênbusI2C
Hình1.7.BitACKtrênbusI2C
TruynNhn
Hình1.8.Lưuđồthuttoánquátrìnhtruyêngnhndữliu
Buffer=databit
BufferFull?
ReadBuffer
SendACK
NO
YES
SDA=data_bit
Clock=8?
ACK?
Next_byte
or STOP
STOP
NO
NO
YES
YES
Kimtraxem
đãtruynđủ
8
b
i
tch
ưa