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

m32 m88 - EEPROM I2C: Błąd odczytu, zawsze zwraca FF, zawieszanie programu

zbynio_k 05 Lut 2016 18:47 1140 4
  • #1 15406943
    zbynio_k
    Poziom 10  
    Witam,
    po zrobieniu fajnego zegarka na DS3231 wydawało mi się (ale tylko wydawało > odczyt i zapis czasów alarmów itd itp), że magistrala I2C to nie jest piekło.

    Niestety przystępując do komunikacji z EEPROM po I2C .... zaczęło się dla mnie niemożliwe, najpierw napisałem własną procedurkę chyba ze wszystkimi szykanami zgodnie z datasheetem i NIC z tego.

    Odczyt komórki pamięci zawsze FF > jakby nie była widzialna pamięć
    przetestowałem wiele gotowców, m.in. od Kardasia, od radzia i inne 'działające' z elektrody i dalej nic z tego, na jednych odczytuje znowu FF (odczyt bajtu) a na innych program zawisa na odczycie z EEPROM'a, zapewne dlatego, że przy odczycie blokowym tylko ostatni bajt jest NOACK (pierwsze z ACK) jakby czekał na potwierdzenie.

    Wydaje mi się, że adresy na 99,999% dobrze wpisuję > np. dla EVB jest 0xAC (sprawdzałem miernikiem oraz linie SCL i SDA są podpięte do Vc przez 10k)
    albo jestem tępawy albo robię kardynalny błąd a przecież odczytywałem i zapisywałem bloki bajtów z i do RTC.

    Może jakaś wskazówka ... gdzie szukać błędu.
    Wiem o opóźnieniu po zapisie i poruszam się w obrębie 256 bajtów, więc niema potrzeby stronicowania - a może zawsze jest konieczny MSB adresu ??

    Kardaś mi się zawiesza w odczycie bloku danych penie nie dostaje ACK
    może jest jakiś prosty test sprawdzający czy urządzenie o podanym adresie jest na magistrali ??

    pozdrawiam
    EDIT - poprawiłem i dalej nie mogę odpowiedzieć
  • Pomocny post
    #2 15407228
    Konto nie istnieje
    Konto nie istnieje  
  • #3 15408503
    excray
    Poziom 41  
    Może zamiast marudzić na to jaka ta magistrala I2C jest straszna lepiej załącz kod, a my Ci wytkniemy wszystkie Twoje niedociągnięcia. Bo jakoś nie wierzę że napisałeś wszystko zgodnie ze sztuką.
  • #4 15410555
    zbynio_k
    Poziom 10  
    Dzięki Piotrus_999
    A to takie proste (trzeba tylko zajarzyć) > adres 'bazowy' plus b3b2b1 pimijając b0 (RW) i czekać czy 'odpowie'

    Dodano po 18 [minuty]:

    Witam,
    załączam kod programu
    jest to 'przykład' z DOXYGEN'a
    skopiowany 1 do 1

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


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


    i2cmaster.h
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 15417103
    zbynio_k
    Poziom 10  
    Dziękuję wszystkim za komentarze
    problem rozwiązany z wydatną pomocą kolegi Piotra Rzeszuta
REKLAMA