A jak to vypadá, když dáš SDA na 0 (drátem)?
Muzes prosim poucit bastlirskeho zacatecnika, co by mel v takovem pripade videt?
Neco smysluplneho? Nebo jenom to, ze na adrese 0x20 se uz neozve vubec nic?
Jako amater bych si asi na SCL a SDA povesil osciloskop a snazil bych se pochopit, co se tam deje.
Pískomil zřejmě osciloskop nemá.
Další postup má více alternativ, napadá mně třeba:
- Měřit - takže ten tebou zmíněný osciloskop, nebo nějaký i velmi jednoduchý logický analyzátor
- Testovat zjednodušeně bez hlubší znalosti věci (pokus-omyl) - je k dispozici jiná I2C součástka? Třeba EEPROM paměť, nebo nějaký teploměr? Šup tam s ní a vyzkoušet
- Testovat důkladně. Rozumíš I2C protokolu? Rozumíš přesné funkci a datovému rozhraní expanderu MCP a nemáš vybavení na měření? Naplánuj si testy a zkus vydedukovat co se děje a proč.
A co se stane při připojení SDA na zem? Pokud není přerušená (zřejmě ne, jinak by se neozvalo jen zařízení na adrese 0x20), tak bude i2cdetect hlásit přítomnost zařízení na všech testovaných adresách. A proč? Protože i2cdump kontroluje jediné - a to ACK na zaslanou adresu. A ACK znamená SDA v 0. Stejně tak by šlo zkusit SDA na logickou 1 - to potom "není vidět" žádné zařízení, protože od žádného nepřijde do kontroléru ACK.
Pokud Pískomil nemá osciloskop ani nic jiného, ať vezme i2cdump + datasheet obvodu a zjistí, jestli se mu na sběrnici něco děje a jestli je to to, co očekává.
V základu sběrnice totiž funguje - zcela jistě jdou hodiny a jde zapsat adresu na SDA + přečíst zpět ACK. To ale neznamená, že tam nemůže být jiná bota...
Pískomil postupuje dost chaoticky. Vrací mu i2cset Write error jenom až na to 4. volání nebo už při prvním? Proč to nezkusí po jednom? Čeho vlastně chtěl dosáhnout těmi 4 zápisy (GPIOA, GPIOB, IODIRA, IODIRB)?
Atd, atp...