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ć?