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

EEPROM w PIC32MK1024MCF064

theWituch 23 Mar 2018 17:03 990 8
  • #1 23 Mar 2018 17:03
    theWituch
    Poziom 7  

    Witam,
    mam problem z zaprzęgnięciem do pracy EEPROMu z uC PIC32MK1024MCF064. Nie używam Harmony, może stąd takie problemy...

    A więc do rzeczy, zgodnie z tym co jest napisane w DS (DS60001402D) ten uC ma 4KB emulowanego EEPROMu. Co to oznacza, że jest on emulowany? Rozumiem to, że nie jest to fizyczna pamięć EEPROM ale czy w takim razie konieczne jest użycie emulacji DEE? W DS wyraźnie zaznaczono, że posiada on 4KB EEPROMu, więc za tym podążyłem.

    Z FRM sekcja 58. Data EEPROM (DS60001326A) przeczytałem jak używać SFRów do obsługi tego emulowanego EEPROMu. Na podstawie przykładowych fragmentów kodu zbudowałem bibliotekę, której używam potem do zapisywania i odczytywania danych, w taki sposób:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Po wykonaniu bit RW jest elegancko resetowany, nie ma błędu w bitach ERR. Mimo to zapis nie działa, każdy odczyt zwraca -1.
    Szukałem pomocy na forum Microchipa i nikt nie jest w stanie mi pomóc, a artykułów dotyczących tego uC jest jak na lekarstwo :/
    Będę naprawdę wdzięczny za każdą pomoc i naprowadzenie co jest źle, albo czego nie ma. Na co powinienem zwrócić uwagę, gdzie szukać, co sprawdzać.

    Jestem też gotów odpowiednio odwdzięczyć się za skuteczną pomoc, bo naprawdę ugrzązłem totalnie :P

    0 8
  • CControls
  • #2 24 Mar 2018 17:46
    JarekC
    Poziom 27  

    A próbowałeś zwiekszyć ilość cykli wait state.
    W Harmony ilość WS jest zależna od SYCCLK i dla 100MHz wpisują 9.

    JarekC

    0
  • #3 26 Mar 2018 09:09
    theWituch
    Poziom 7  

    Dzięki za odpowiedź,
    sprawdziłem wszystkie możliwe opcje zgodnie z DS (wartości od 0 do 5 w CFGCON2.EEWS) i bez zmian z tym, że dla EEWS=0 odczyt zwrócił 0.

    Jedno czego nie jestem całkowicie pewny w zbudowanej bibliotece, to zapisu konfiguracji do EEPROMu w funkcji setup_EEPROM()
    W przykładzie inicjalizacji z DS wymieniono 8 słów konfiguracji DEVEEx(1-8) a dla mojego uC istnieją 4 DEVEE(0-3), dlatego odpowiednio zmodyfikowałem kod.
    Kod z DS

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • CControls
  • #4 26 Mar 2018 14:02
    JarekC
    Poziom 27  

    Wygenerowałem przykład w Harmony i mam następujące spostrzeżenia:
    Są cztery rejestry kalibracyjne DEVEE0-DEVEE3 ale są one 32-bitowe, odczytane wartości są dzielone na 16-bitowe liczby i dopiero te są zapisywane do EEPROMu:

    Poniżej fragment kodu przygotowującego dane kalibracyjne:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dla zegara systemowego= 100MHz biblioteka wpisała WS=9.

    Pozdrawiam
    JarekC

    0
  • #5 26 Mar 2018 18:11
    theWituch
    Poziom 7  

    Uwzględniłem podział każdego z rejestrów DEVEEx(0-3) na 16 bitów tworząc 8 słów konfiguracyjnych. EEWS ustawione na 9 (testuję też 12 dla warunku <120MHz). Pod kolejne adresy, licząc od 0 z przesunięciem w lewo o dwa bity, zapisuję konfiguracje do EEPROMu. Nic się nie zmieniło :(

    Biblioteka po modyfikacji:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #6 26 Mar 2018 20:56
    JarekC
    Poziom 27  

    Niestety nie mam u siebie żadnego układu PIC32MK aby przetestować to co wygenerowało Harmony.

    Z funkcji Setup_EEPROM usuń jeszcze zapis do EEKEY przed włączeniem i gotowością EEPROMu.

    Jak uruchamiasz układ, masz programator/debbuger?

    JarekC

    0
  • #7 26 Mar 2018 21:12
    theWituch
    Poziom 7  

    Używam PICkit3. Mógłbym spróbować uruchomić projekt z Harmony i wykonać testowe operacje zapisu i odczytu z EEPROMu jednak to dla mnie aktualnie czarna, zagmatwana magia :P Choć w przypadku braku dalszych pomysłów, chyba okaże się to nieuniknione...

    0
  • #8 04 Kwi 2018 14:37
    JarekC
    Poziom 27  

    Udało się rozwiązać problem?

    JarekC

    0
  • #9 24 Kwi 2018 08:21
    theWituch
    Poziom 7  

    Niestety jeszcze nie. Staram się zrobić podejście do Harmony i tam spróbować, ale nie znam tego a mam mało czasu i tak temat odwleka się ciągle.

    A jeszcze takie pytanie - jaki byłby objaw zużycia się flashu wykorzystanego pod EEPROM? Czy przy wykonaniu operacji zapisu w EECON.ERR powinien pojawić się błąd w tym przypadku?
    Nie jestem pewien ale jest szansa, że gdzieś omyłkowo do głównej pętli wpadły mi wykonania zapisu. A wtedy wystarczy kilka sekund, żeby zużyć całą stronę?

    0