I2C u ATMega (pokracovanie)

Jan Waclawek konfera@efton.sk
Čtvrtek Červen 5 14:58:08 CEST 2008


Tak som zistil ze ten problem sa prejavuje aj u ATMega TWI modulu konfigurovaneho (resp. pouzivaneho) ciste ako slave (ten multimaster ma vlastnosti aj master aj slave). 

Ak master urobi STOP a nasledne START (s tym, ze sa dodrzi 4.7us, trebars aj trojnasobok), ale slave nestihne obsluzit prerusenie (resp. zapisat do riadiaceho registra TWCR) do toho STARTu, tak sa ten START jednoducho ignoruje.

U slave to ma za nasledok, ze slave nerozozna adresu ktora za tym STARTom nasleduje. Ak je master korektny, zdetekuje NAK za adresou a urobi retry, takze by to nemalo byt fatalne; ale je to prinajmensom neprijemne (nehovoriac o tom ze spusta mastrov najma softwarovych nepredpoklada ze slave si dovoli dat NAK na adresu).

U toho multimastra je to uplne fatalne: ak jeden v roli mastra urobi stop a potom hned start, a druhy "pocuje" len ten stop a chce tiez "hovorit", nastane konflikt, v ktorom jeden zacne tlacit adresu druheho ale ten na nu nepocuva (lebo nepocul start) a snazi sa urobit svoj start. Toto moze skoncit uplne fatalne, lebo ten prvy potom, co dostane akysi nechceny NAK od druheho sa pokusi urobit stop/start sekvenciu, ktoru mu druhy pretlaci svojim startom, a ten prvy vdaka chybe ktoru tam norski studenti zabudovali v tomto okamihu ostane zamrznuty s SDA stiahnutym na nulu...

Podla diskusie na AVRFreaks je to "znama vec", norski studenti z Atmelu samozrejme hraju mrtveho chrobaka.

Ako teraz z toho von? Samozrejme zmeny v hardware atd. neprichadzaju do uvahy... Zrejme cesta vedie cez timeouty, ale privitam akukolvek alternativnu inspiraciu, prip. ak sa uz s tym niekto stretol...


Dakujem

wek




Další informace o konferenci Hw-list