Próbuję zmodyfikować istniejącą sekwencję inicjowania (inicjalizacja niskiego poziomu SDRAM), aby uwzględnić zmianę konfiguracji sprzętowej: istniejąca SDRAM na moim iMX31 została zastąpiona innym rozmiarem, w przeciwnym razie ten sam typ / producent / układ / piny / czasy. zgodnie ze specyfikacją.
Krótki scenariusz instalacji i zachowanie błędu: Udało mi się uruchomić bootowanie płyty (sekwencja jest taka: uruchom bootloader z NAND, skopiuj „step2 bootloader” do pamięci RAM, uruchom „step2 bootloader” z pamięci RAM). Ale wydaje mi się, że niektóre ustawienia są nieprawidłowe, ponieważ wykonanie z pamięci RAM (po przejściu do kroku 2) nie udaje się konsekwentnie.
Zrobiłem dużą ilość dogłębnych testów, aby zidentyfikować nieprawidłowe parametry, moje wyniki są następujące: - jednobajtowe / odczyty / zapisy słów działają, gdy są wykonywane z NAND lub JTAG - zapisy blokowe / sekwencyjne wydają się działać po wykonaniu z NAND ( JTAG również) Interesująca rzecz: - po zapisie blokowym potrzebuję wielu odczytów na dowolnym adresie SDRAM, aby odczytać poprawny bajt / słowo (!) - jeśli zmienię ustawienia kolumn, aby WYŁĄCZNIE używać wyższej (+1) ilości kolumny dla „trybu ładowania”, ale nie dla wstępnego ładowania / odświeżania, to działa, ale niespójnie (według mojej teorii działa niezawodnie dla dolnego zakresu adresów, gdzie brakująca kolumna nie ma znaczenia).
Aby uzyskać wyobrażenie o mojej konfiguracji: ustawienia z pamięci RAM są prawie identyczne z tymi w tym pytaniu. Nie jest to zaskakujące, ponieważ są one dostarczane przez Freescale, oprócz taktowania pamięci RAM: Jak mogę przetłumaczyć adres SDRAM na adres procesora w Freescale iMX31? Moje oryginalne ustawienie jest identyczne (również 64 MB SDRAM jak w linku), moja nowa pamięć RAM to 128 MB. Wszystkie karty referencyjne są dostarczane z 64 MB lub 128 MB, więc obie wartości są obsługiwane przez iMX31 i pochodne.
Zmiana, którą muszę wprowadzić (uwaga: założenie!) Dotyczy tylko konfiguracji COLUMN (to jeszcze jedna kolumna) pamięci RAM. Pamięć RAM ma podwójny rozmiar, ale poza tym specyfikacja twierdzi dokładnie takie same czasy itp. Ponieważ ma tylko jedną kolumnę (patrz link powyżej, moje rejestry trybu ładowania wstępnego, odświeżania i ładowania zmieniają się z 0x92100000 na 0x92200000 dla nowej pamięci RAM - na przykład ) nic innego się nie zmienia.
Pytanie 1: Czy moje założenie ma sens, że jeśli wszystkie czasy i fizyczne właściwości chipów (wpływające na siłę napędu, czas i zużycie energii) są podobne, to zmiana liczby kolumn może być „lokalna” (nie wpływająca na inne ustawienia)? Co ciekawe, porównałem moje ustawienia z wieloma innymi dostępnymi online (U-Boot, Red-Boot z 128 MB) i oprócz ustawień specyficznych dla płyty, takich jak siła napędu, nie widzę różnic.
Pytanie 2: Moje zachowanie błędu powyżej (zapisywanie pracy, odczytywanie tylko częściowe) jest prawdopodobnie unikatowe dla określonego nieprawidłowego ustawienia pamięci RAM. Czy ktoś jest w stanie udzielić mi porady, na które ustawienie przyjrzeć się bliżej? Możliwe może być również ustawienie „bezpiecznych” parametrów, aby nawet przy zmniejszonej wydajności system pozwolił mi zawęzić winowajcę.
Odpowiedzi:
W przypadku 2 zacznij od ustawień z płyty demonstracyjnej iMX31. Następnie zmodyfikuj je zgodnie z wymaganiami części (głównie szybkość i rozmiar). W szczególności prawdopodobnie masz niepoprawną liczbę stanów oczekiwania podczas odczytu.
źródło