( apal | 2020. 11. 17., k – 14:04 )

Ez a clock stretching, ami teljesen normál buszművelet, ha implementált.

Igenigen, de ez szerintem abszolute resze az altalad is emlitett "ötelező minimumnak". Es ha jol lattam, pl az atmel-avr vonalon is tudja ezt a rendszer, es halistennek pont ugy fogalmazza meg ahogy kell, meglehetosen lakonikusan: While the TWINT Flag is set, the SCL low period is stretched. Szoval akar transmitter akar receiver modban vagy, es nincs lezarva az elozo folyamat es/vagy nem tudsz uj adattal felkeszulni akkor hagyod az interupt flag-ot ahogy van, es az huzza a clock-ot. 

Mikor FPGA-kon jatszottam i2c-vel akkor viszonylag gyorsan felfogtam hogy nem "master" meg "slave" meg "receiver" meg "transmitter" - vagyis enneka 4 kombinaciojaval leirhato - modzatok vannak itt hanem van egy "transciever" meg van egy "clock generator". A master az abban kulonbozik a slave-tol hogy ott van egy clock generator is, de az egesz allapotgepet (beleertve clock stretching-et) joval logikusabb ugy implementalni hogy csinalsz egy transcievert, ami lehuzza a clock-ot ha epp' szeretne/kellene nem tud tovabblepni a kovetkezo allapotba. A slave oldalon ez pont azt is csinalhatja amit mondasz (azaz "a kovetkezo allapot az az lenne mikor az EEPROM befejezte az irast", de boven ugyanez a kategoria az is hogy "slave transmitter modban vagyok de a processzor meg nem kuldott semmi atkuldendo byte-ot", de az is hogy "slave vagyok, megcimeztek, de a processzor nem szolt hogy ezt a cimet ack-olhatom most vagy sem". A master oldalon meg siman lehet ez akar a "meg nincs adat de majd biztos lesz" allapot. Azaz tkp a 8+1 bit barmelyik fazisaban huzhatod a clock-ot, ha epp' ugy jon ki a lepes :) 

Ettol fuggetlenul persze, az igaz, hogy a "ket processzor beszelget" esetben lehet kavarni a mindennel ;) De ez ezeket az alapokat nem kell hogy erintse. 

A Figure 15 -> min 800us és a Figure 17 -> min 30us késleltetések nem valósíthatók meg az egyszerű i2c hardverrel

Ld. fentebb. Ha ATmega328p-n csinalod, akkor egyszeruen varsz egy kicsit miutan megkaptad a TWINT-et es nem lepsz tovabb a kovetkezo allapotba (fig 15-nel a TWSTO-ba, fig 17-nel meg nem ugrasz at egy darabig meg a master receiver kovetkezo, TWCR =(1<<TWINT)|(1<<TWEN)|(1<<TWEA) allapotaba). Ez lehuzza az SCL-t, es pont azt csinalja ami az abran van.