i2c - jak slave pozna, ze je ve fast-transfer modu?

David Belohrad david na belohrad.ch
Středa Únor 7 17:45:22 CET 2018


Ahojte vsichni,

implementovali jsme v FPGA soft-i2c core. Tzn. v podstate firmware dokaze vygenerovat: start bit, stop bit, write data, read data. V software (pythonu, pres tisic vrstev) pak posilame do FPGA prikazy aby vygeneroval start bit, zapsal adresu, zapsal data, zapsal stop bit (v pripade ze zapisujeme).

Problem je v tom, ze ten cip za urcitych okolnosti proste odmita spolupracovat - po zaslani start-bitu + adresy nenasleduje ACK. A my hledame, kde se to deje. Ten chip ma 2 mody prenosu: std a fast. A jedine, co nas zatim napadlo je, ze ten cip se 'nejak' rozhodne, jestli to co mu posilame je fast nebo slow, a podle toho si upravi timing. A pak kdyz se rozhodne, ze je slow, tak proste ignoruje co mu posleme. Takze ted ta otazka: co rozhoduje, ze chip akceptuje sda/scl signalove stavy jako fast-mode?

Jen pro doplneni: python+ ty vrstvy jsou pomerne pomale, tzn, mezi vygenerovanim start bitu a poslanim adresy zarizeni je mezera kolem 2.5ms, a pak nasleduje adresa zarizeni, ktera je vychrlena hodinovym kmitoctem asi 300kHz, a pak se ceka na ACK - ktery neprijde. A me napada, jestli to nahodou neni tim, ze pokud je mezi start bitem a prvnim hodinovym clockem velky interval, tak se to prepne do standard modu, a pokud je kmitocet vetsi nez 100kHz na te prvni periode, tak se prepne do fast....

Jedna se o Si5338 PLL.

diky za kazdou radu, uz se s tim hraju cely den

.d.


Další informace o konferenci Hw-list