I²C: dva vodiče, adresa — a odpor, který je návrh
SPI potřebuje na deset čidel čtrnáct vývodů. I²C potřebuje dva, protože zařízení se nevybírají vodičem, ale adresou poslanou po téže lince. Za to se platí rychlostí a jednou vlastností, která překvapí.
Otevřený kolektor: zařízení umí jen táhnout dolů
Žádné zařízení na I²C nikdy nevytáhne linku nahoru. Umí ji jen přizemnit, nebo pustit. Nahoru ji vytáhne zvedací odpor, jeden na každý vodič. Důvod je praktický: takhle se nikdy nemůže stát, že jedno zařízení tlačí nahoru a druhé dolů — a zkrat by byl.
Důsledek, který je vidět na osciloskopu: sestupná hrana je ostrá, protože ji dělá tranzistor. Náběžná je exponenciála, protože je to nabíjení kapacity sběrnice přes odpor. A ta exponenciála je limit celé sběrnice.
Norma dovoluje 1000 ns při 100 kHz a 300 ns při 400 kHz. Dosaďte 4,7 kΩ a 200 pF (což je metr kabelu a pár zařízení) a vyjde 800 ns — při 100 kHz to projde, při 400 kHz ne. Odpor se tedy musí zmenšit, jenže tím roste proud, který musí zařízení uzemnit, a ten je omezený na 3 mA. Mezi těmi dvěma podmínkami je celý návrh sběrnice.
| podmínka | tlačí odpor |
|---|---|
| doba náběhu ≤ limit | dolů (menší R, rychlejší hrana) |
| proud ≤ 3 mA | nahoru (větší R, menší proud) |
Adresa má sedm bitů, což je málo
Sedm bitů je 128 adres, z toho několik vyhrazených. Čidla téhož typu mají tutéž adresu a obvykle jde změnit jen jeden nebo dva spodní bity vývodem — takže čtyři stejné čidla na jedné sběrnici jsou často maximum. Řeší se to přepínačem sběrnic, nebo se prostě udělá druhá I²C.
Potvrzení, které SPI nemá
Po každém bajtu vysílající strana pustí linku a čeká jeden hodinový takt. Když ji příjemce v tu chvíli přizemní, je to ACK — potvrzení, že tam někdo je a bajt vzal. Když se nic nestane, je to NACK. Tím se pozná odpojené čidlo, což je proti SPI velký rozdíl: adresu lze zkusit a zjistit, jestli někdo odpoví.
Cena za to je, že sběrnice se dá zaseknout. Když podřízené zařízení uprostřed bajtu ztratí napájení a drží datovou linku dole, sběrnice je mrtvá a resetem řídicí strany se to nespraví. Standardní postup je vyslat devět hodinových pulsů „naprázdno“, aby zařízení dokončilo bajt a linku pustilo.