LinkLab linka je dohoda, ne drát

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

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.

tr ≈ 0,85 · R · Cz 30 % na 70 % napájení

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ínkatlačí odpor
doba náběhu ≤ limitdolů (menší R, rychlejší hrana)
proud ≤ 3 mAnahoru (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.

Vzorce v této kapitole

t_r — doba náběhu I²C
t_r ≈ 0,85 · R · C [s] kap. 9