Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

m32 m88 - eeprom po I2C błąd odczytu

zbynio_k 05 Lut 2016 18:47 828 4
  • #1 05 Lut 2016 18:47
    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ć

    0 4
  • Pomocny post
    #2 05 Lut 2016 19:59
    2675900
    Użytkownik usunął konto  
  • #3 06 Lut 2016 09:26
    excray
    Poziom 39  

    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ą.

    0
  • #4 06 Lut 2016 21:06
    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
    Zaloguj się, aby zobaczyć kod


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


    i2cmaster.h
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #5 08 Lut 2016 20:09
    zbynio_k
    Poziom 10  

    Dziękuję wszystkim za komentarze
    problem rozwiązany z wydatną pomocą kolegi Piotra Rzeszuta

    0