I2C tvärlåser vid mottagning
Postat: 4 november 2007, 20:38:38
Jag har en PIC som skall kommunicera med en RTC via I2C.
Sändning löps igenom, om mottagen data kommer fram kan jag inte inte verifiera på något säkert sätt.
Vid mottagning går allt bra när startbit och adress skickas, sedan vid själva mottagningen så fastnar SDA låg med SCL hög. Endast power off / power on får loss den efter detta.
Det är RTC som håller SDA låg. Tar jag bort kretsen löps programmet igenom och båda linjerna stannar höga precis som de skall. Detsamma om jag skickar en nonsensadress, vilket tyder på att skickad data tycks tas emot som den skall.
Varför låser kretsen SDA på detta sätt? Kan det vara timingproblem? PIC körs i 20MHz och den enda synkningen är att vänta på att SSPIF skall sättas och därefter direkt fortsätta med nästa steg i I2C-proceduren. Jjag använder ingen interrupt till detta, utan kollar bara flaggan.
Sändning löps igenom, om mottagen data kommer fram kan jag inte inte verifiera på något säkert sätt.
Vid mottagning går allt bra när startbit och adress skickas, sedan vid själva mottagningen så fastnar SDA låg med SCL hög. Endast power off / power on får loss den efter detta.
Det är RTC som håller SDA låg. Tar jag bort kretsen löps programmet igenom och båda linjerna stannar höga precis som de skall. Detsamma om jag skickar en nonsensadress, vilket tyder på att skickad data tycks tas emot som den skall.
Varför låser kretsen SDA på detta sätt? Kan det vara timingproblem? PIC körs i 20MHz och den enda synkningen är att vänta på att SSPIF skall sättas och därefter direkt fortsätta med nästa steg i I2C-proceduren. Jjag använder ingen interrupt till detta, utan kollar bara flaggan.