Mam aplikację, w której mam mikrokontroler (NXP LPC1343 ), który jest podłączony do FPGA przez 16-bitowy interfejs SPI. Istnieje również karta SD korzystająca z tego samego portu SPI (MISO / MOSI), ale z innym pinem CS / SS (oba są aktywne nisko, zgodnie ze specyfikacją SPI). Jedną z rzeczy, które muszę zrobić, to zapisać dane z FPGA do pliku na karcie SD za pomocą FAT32 , a to jest zadanie mikrokontrolera. Mikrokontroler korzysta z FatFS , który sam niezawodnie działam .
Ponieważ mikrokontroler ma tylko niewielką ilość pamięci RAM, tylko niewielka ilość danych może być buforowana jednocześnie. Dlatego mikro musi odczytać bufor z FPGA, zmienić tryb SPI na 8-bit, a następnie zapisać te dane do FATFS. Przypomnij sobie, że aby skonfigurować kartę SD w trybie SPI, należy wysłać polecenie, gdy magistrala SPI pracuje z częstotliwością 400 kHz, i musi nastąpić pewna ilość oczekiwania. Dlatego chciałbym wykonać inicjalizację tylko raz.
Jednak wykonywanie transakcji na FPGA, nawet przy wysokim CS na karcie SD, wydaje się wprowadzać kartę SD w dziwny stan, tak że musi ona ponownie przejść przez inicjalizację. Jest to oczywiście niepożądane, ponieważ inicjalizacja może potrwać kilka milisekund, aby zapisać zaledwie 4 kB danych (ponownie ograniczone przez małą pojemność pamięci RAM mojej mikro). Ponieważ muszę jak najszybciej zapisać kilka megabajtów, zmniejsza to wydajność z około 500 kB / s do mniej niż 100 kB / s.
Wiem, że karty SD nie są technicznie w pełni zgodne z SPI, ale jak rozwiązać ten problem?
Odpowiedzi:
Dobra, właściwie to rozgryzłem. Powinienem był wejść na trochę głębiej. Okazuje się, że karty SD nie działają dokładnie tak, jak urządzenia SPI, gdy współużytkują magistralę, zgodnie z instrukcją obsługi MMC / SDC :
Karta SD i FPGA prawdopodobnie próbowały doprowadzić DO, a karta SD zgubiła się, więc zresetowała się. Wydaje się, że wysłanie dodatkowego bajtu go rozwiązało.
źródło