I2C bus lock, PIC
Kovács Árpád
arpad.kovacs at freemail.hu
Thu Dec 7 23:25:29 CET 2006
Szia!
>Hat muszaj lesz hosszu ideju adatrogzitessel az analizator, mert tarolos
>szkoppal nem megy. Pont nem vagyok ott, amikor eloall a hiba.
Igen, és ez gyanús is, ha ennyire rapszódikus és nem tudod szándékosan
előidézni, akkor nem biztos, hogy itt kell keresni a hibát. Ha például IT-t
használsz ellenőrizd, hogy minden legyen mentve, ami megváltozhat az
ISR-ben.
>Egyebkent slave receive modban lehet valahogy NACK-ot kuldeni a masternek,
>ha nem tetszik a vett adat?
>Nagyon ugy tunik, hogy ilyenkor a PIC automatikusan generalja az ACK jelet.
Igen a slave egység automatikusan küldi az ACK-ot, negatív nyugtát csak
master tud küldeni. Ha nem tetszik a vett adat, akkor is végig kell játszani
a kommunikációt :)
>Kozben a clock streching-el kapcsolatban nezem az adatlapot:
>"Clock Stretching for 7-bit Slave
>Receive Mode (SEN = 1)
>
>Note 1: If the user reads the contents of the
>SSPBUF before the falling edge of the
>ninth clock, thus clearing the BF bit, the
>CKP bit will not be cleared and clock
>stretching will not occur."
>
>Hogy lehet az SSPBUF-ot kiolvasni a 9.-ik clock lefuto ele elott?
>Interrupt-tal szerintem sehogy, mert a BF bit ugyan bebillen a 8-ik clock
>utan, de az SSPIF csak a 9.-ik utan, tehat csak ekkor tudom kiolvasni.
Igen ez tényleg így van. Tehát csak úgy tudod kiolvasni a beérkezett adatot
az SSPBUF-ból a 9. clock előtt, ha nem IT-ben csinálod, hanem poolingolod a
BF-et és akkor olvasod ki.
Ezért nem is megy le alacsonyra a CKP, és nem lesz clock streching sem,
hiszen miért segítsen neked a periféria, ha olyan gyors vagy, hogy ki is
olvastad.
A clock streching-et azért találták ki, hogyha nem tudod addig feldolgozni a
vett adatot, amíg jön a másik, addig várakoztatja neked a mastert a CLK
alacsonyban tartásával. (Ezt jelzi neked a CKP nullázása.) A master
észreveszi, hogy nem megy vissza magasba a clock (fogja a slave) és ezért
vár a további adatok küldésével. Te pedig nyugodtan kiolvasod az SSPBUF-ot
(a BF erre törlődik automatikusan), akár molyolhatsz tovább, mert addig nem
megy tovább a kommunikáció, amíg azt nem mondod, hogy a master folytathatja:
a CKP-t magasba visszabillented, és erre a CLK lehúzása is megszűnik.
Megjegyzendő továbbá, hogy nem is kötelező használni ezt a funkciót, ha
gyorsan át tudod venni az adatokat és nincs ráfutás veszélye.
Ha korrekten meg van írva a master és a slave is, akkor az I2C nem fagyhat
le. Még akkor sem, ha Te földelsz bele vezetékkel teszt célból :) Még a
diagnosztikához annyit, hogy célszerű kitalálni valamit arra, hogy ha lenn
maradnak a jelek meg tudd állapítani műszerrel, hogy ki fogja lenn. pl.
mindkét oldalra felhúzó ellenállásokkal és kis értékű ellenállással
összekötve egymással a két egység.
Sok sikert,
Árpi
--
((( Móczik Gábor )))--((( pm -> @ -> progzmaster -> . -> hu )))
((( Skype: moczik )))--((( Website: http://www.progzmaster.hu )))
-----------------------------------------
elektro[-flame|-etc]
More information about the Elektro
mailing list