logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[STM32] [I2C] Brak potwierdzenia gdy transmituję bajt z LSB=1

cool_kuba 24 Cze 2011 16:49 3418 3
REKLAMA
  • #1 9645961
    cool_kuba
    Poziom 12  
    Posty: 138
    Ocena: 8
    Hej

    Mam taki problem: gdy transmituję bajt który kończy się 1 nie dostaję potwierdzenia. Wiem że potwierdzenie w I2C jest realizowane tak że master powinien zwolnić linię SDA i wtedy Slave podciąga ją do GND.
    W moim przypadku próbuję się skontaktować pomiędzy procesorem STM32F103C8T6 a akcelerometrem LSM303DLH którego logika działa na napięciu 1.8V więc po drodze jest jeszcze "bidirectional logic level translator" ADG3300. Po obu stronach Linie SCL i SDA są podciągnięte do plusa przez rezystory 4k7. ADG3300 nie powinien być problemem ponieważ maksymalna częstotliwość sygnału jaki może przenosić to 50MBPS, a ja działam z zegarem 100KHz więc do granicy mam jeszcze spory zapas.
    Czy możliwe że po prostu procesor nie zdąża zwolnić SDA i dlatego nie dostaję potwierdzenia?
    Czy może właśnie naprawdę nie dostaję potwierdzenia tylko gdy ostatnim bitem jest zero jest to odczytywane jako potwierdzenie?
    Co mogę zrobić aby temu zaradzić?
    -Mogę zmienić pull-up (na jakie?), Czas narastania sygnału ( szybszy?),

    Oto fragment kodu aby zobrazować o co mi chodzi:
    Przykład gdy się wiesza przy ustawianiu wartości rejstru:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przykład gdy program zawiesza się przy wyborze rejestru

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przykład gdy wszystko działa
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Dodam jeszcze dtrki jak by ktoś miał jakiś pomysł tylko potrzebował sprawidzić co i jak
    http://www.kamami.pl/dl/lsm303dlh.pdf
    http://www.kamami.pl/dl/stm32f103_x6_x8_xb.pdf
    http://www.analog.com/static/imported-files/data_sheets/ADG3300.pdf

    I interesujący fragment schematu
    [STM32] [I2C] Brak potwierdzenia gdy transmituję bajt z LSB=1

    Ja już naprawdę nie wiem co mogę zrobić więc naprawdę liczę na was!
  • REKLAMA
  • #2 9646565
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    Jedno do mnie nie dociera tylko...jakim prawem podciągasz po obu stronach SDA i SCL, skoro scalak ADG3300 ma wyjscia totem pole na wszystkich I/O? Ten level translator nie będzie ci działać na i2c. Cała idea i2c jest taka, że wszystkie obwody wyjsciowe linii SDA i SCL zawsze są po prostu otwartym kolektorem (czy drenem), i po to podciąga się te linie do plusa. Twój level translator nie bierze tego pod uwagę...
  • REKLAMA
  • #3 9646995
    cool_kuba
    Poziom 12  
    Posty: 138
    Ocena: 8
    No to pięknie i wyszły moje braki wiedzy. Czyli twoim zdaniem skisiłem to ; (. Jeśli możesz to powiedz czy z tym logic translatorem to nie ma szans działać i ewentualnie jakiego mam szukać. Może znajdę w takiej samej obudowie ( Na pewno...) jak nie to smutasek. W każdym razie dzięki za odpowiedź!

    Edit:
    Chyba coś znalazłem czyli jestem uratowany tylko teraz proszę o opinię czy takie coś się nada

    http://focus.ti.com/lit/ds/symlink/txs0108e.pdf
  • #4 9671424
    cool_kuba
    Poziom 12  
    Posty: 138
    Ocena: 8
    Dziś wymieniłem układ na wspierający Open-drain(ten z linku powyżej) i wydaje mi się że wszystko zaczęło działać! Jeszcze raz serdecznie dziękuje za pomoc. Sprawa rozwiązana.
REKLAMA