STM32L-Discovery: nemožné odosielať I2C na SDA pin LM75BD

Pracujem zrovna na rozbehaní I2C komunikácie môjho STM32L-discovery s teplotným senzorom LM75BD. Malo by ísť o jednoduché čítanie 2 bajtov zo senzoru. Program sa mi vždy zasekne v časti po odoslaní adresy senzoru na SDA pin. Neviete mi nikto poradiť? Vonkajšie pull-up rezistory mám zapojené (3k9).

Pripájam súbor main.c a I2C_tsensor.c

:arrow_right: administrator: přejmenováno z “STM32L-Discovery - problém s I2C”
i2c_tsensor.c (3.16 KB)
main.c (11.4 KB)

Něco se mi matně vybavuje, že se tu něco podobného už řešilo, něco v tom smyslu, že I2C zařízení bylo špatně inicializované a nechodila od něj odpověď a zakouslo se to na čekání na ni. Třeba si někdo vzpomene co to kde bylo.

Asi by byl dobrý postup zjistit nejdříve přesně místo, kde se to zakousne - např. rozsvítit indikační LED a ten příkaz posouvat programem až se najde přesné místo zakousnutí. Pak už by se dala přesněji řešit příčina. U ARMu ale může být příčinou i padnutí na výjimce, proto by chtělo LED indikaci i v obsluhách hw výjimek.

Tak ja si dávam vypisovať na displej kam sa mi dostane program a vždy to je po tento while:

/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

Skúšala som si vyvoriť funkcie na generovanie start, požiadavku na čítanie a generovanie stop tak, že som sama inicializovala piny ako output a input a menila ich úrovne, čím som akoby generovala hodiny na SCL a data na SDA a takto mi od senzoru priši data aj ACK. Zaujímavé, že postup bol ten istý, tie isté adresy aj poradie príkazov …

Ahoj co píše ten chroustač bambusů na tom něco bude. Nedávno jsem sám narazil na problém, že mi I2C fungovalo, ale jakmile jsem k tomu náhodně přiložil telefon tak se to zbortilo. Také jsem tam měl podobnou čekací smyčku. V tuto chvíli jí tam mám stále, ale před vstupem do ní plním nějakou proměnou, kterou jinde dekrementuju. Pokud dojde k její vynulování tak se while musí ukončit…Nejhorší na tomje to, že na tohle se přišlo až rok po tom co to zařízení bylo uvedeno do provozu.

Tak aby som tuto temu uzavrela, dnes som konecne spominane I2C rozbehala. Presne ako som predpokladala, chyba nie je v kode, ale v navrhu discovery kitu … na potrebne piny, ktore su deklarovane pre I2C1 su povesane napr. ledky aj s odpormi a ani za boha ich neprinutite zmenit uroven. Preto odporucam pouzit piny pre I2C2, co su PB10 a PB11. Pridete tak o nejake segmenty na LCD (konkretne v 4 znakovom poli spodna polovica), ale aj to sa zrejme da nejako vyriesit, pripadne sa budem snazit odstranit z kitu diody, aj tak su mi nanic.

Chcela by som este odporucit nekontaktovat nikoho z STM, trvalo 2 tyzdne kym mi odpisal clovek, ktory sa tomu rozumel a aj ten mi poradil len CPAL kniznicu, ktora je urcena pre EVAL board a pripojil ze “our I2C is difficult to handle” :smiley: