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