eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikakarta SD i pamięć RAM na jednej magistrali - dziwne zachowaniekarta SD i pamięć RAM na jednej magistrali - dziwne zachowanie
  • Data: 2021-04-17 12:30:49
    Temat: karta SD i pamięć RAM na jednej magistrali - dziwne zachowanie
    Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Jest sobie układ z MCU STM32F107. Do magistrali SPI3 podłączone dwa
    urządzenia: karta SD oraz pamięć RAM 23LC1024. Każde z urządzeń z osobna
    dział prawidłowo. Mogę zapisywać i odczytywać dane do/z pamięci RAM, a
    karta SD jest prawidłowo obsługiwana przez FatFS. Każde z urządzeń jest
    aktywowane software'owo swoim własnym pinem CS.

    Bardzo konkretny problem pojawia się natomiast w bardzo konkretnej
    sytuacji. Mianowicie:
    1) W programie mamy otwarty plik, z którego kilkanaście razy na sekundę
    czytana jest porcja danych.
    2) Raz na 25 sekund wykonywany jest test zapisu i odczytu do/z pamięci
    23LC1024. Trafia do niej pewna porcja danych, która następnie jest
    odczytywana.

    Problem pojawia się w momencie, gdy po zakończeniu ostatniej operacji na
    SPI RAM przychodzi czas na kolejną operację na karcie (czyli w
    opisywanym przypadku odczyt kolejnego fragmentu danych z pliku, chociaż
    próbowałem wstawiać też w tym miejscy operację zapisu do innego pliku i
    efekt był taki sam). Mianowicie wywalany jest wtedy błąd funkcji
    readSECTOR sterownika karty SD, którego numer wskazuje na odrzucenie
    komendy READ_SINGLE, wysłanej do karty (funkcja wysyłająca komendę
    odbiera z magistrali odpowiedź inną niż 0).

    Problem występuje raz, odczyty kolejnych porcji danych już tego błędu
    nie wywalają, to znaczy do czasu aż upłynie kolejnych 25 sekund i
    przyjdzie kolej odczytania porcji tuż po zakończeniu kolejnej operacji
    na pamięci SPI.

    Same operacje na RAM-ie poprzedzające ten błąd wykonują się prawidłowo.

    Dodatkowe informacje/co udało mi się wykluczyć:
    1) Analizator stanów logicznych pokazuje, że linie CS obydwu urządzeń
    nigdy NIE znajdują się w stanie niskim jednocześnie.
    2) Czas jaki upływa od podniesienia linii CS_RAM-u do upuszczenia linii
    CS_SD zdaje się nie mieć znaczenia. Normalnie pomiędzy tymi zdarzeniami
    upływa trochę ponad 3ms (pomiędzy operacjami jest jeden printf) ale
    próbowałem wstawiać tam ręcznie opóźnienia idące w setki ms - nie pomagało.
    3) Magistrala SPI jest konfigurowana przy inicjacji karty SD. Sterownik
    pamięci RAM nie ingeruje w konfigurację magistrali. Przyjmuje stan
    zastany i jedynie wysyła/odbiera dane.
    4) Nie używam RTOS-a. Wszystkie operacje są wykonywane sekwencyjnie w
    pętli głównej.
    5) Nie używam przerwań do transmisji SPI ani nie inicjuję transmisji z
    funkcji obsługi przerwań.
    6) Nie używam DMA do obsługi transmisji SPI.

    Ktoś ma jakiś pomysł co może być przyczyną tak dziwnego zachowania
    układu/programu? Co jeszcze mogę sprawdzić?

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: