Mam projekt wykorzystujący LPC1788 wraz z modułem SDRAM od ISSI ( IS42S32800D ). To jest interfejs 32-bitowy.
Rozesłałem ten projekt i miałem prototyp wykonany z producentem PCB, który wykonuje prototypy 6-warstwowe. Prototypowa płytka drukowana działa dobrze. Pomyślałem wtedy, że otrzymam płytkę drukowaną w małej ilości (100) od mojego zwykłego dostawcy PCB. Podałem im informacje o stosach, które wykorzystał mój prototyp, aby upewnić się, że nie będzie żadnych problemów.
Jednak! Mam ogromne problemy z płytą produkcyjną. Na początku nie byłem w stanie uzyskać żadnej odpowiedzi z SDRAM-a tym samym kodem, którego użyłem na mojej prototypowej płytce. Poprzednia płyta działała przy 120 MHz, więc byłem pewien, że coś jest nie tak z tą nową płytą. Potem znalazłem post, w którym ludzie sugerowali używanie trybu Repeater w liniach danych SDRAM (wcześniej tego nie używałem) i to wywołało odpowiedź z SDRAM, jednak nie jest stabilna. Mogę zapisywać na około 16 adresów, ale potem przy kolejnych odczytach zwracane dane (pod każdym adresem) to dane, które ostatnio zapisałem (prawdopodobnie z powodu trybu Repeater). Po wyłączeniu trybu repeatera zwracane dane to 0xFFFFFFF. Próbuję teraz połączyć się z częstotliwością 48 MHz, najniższą konfiguracją, dla której mam taktowanie.
Używam tych samych rezystorów terminujących (na liniach danych) o wartości 22 Ohm na obu płytach, linie danych mają średnio 3 cm długości. Linia zegara ma 2,4 cm długości. Linie adresowe mają średnio 3,8 cm długości.
Czy to też nie jest zgodne ze specyfikacją, czy powinienem opóźnić zegar, jeśli jest znacznie krótszy? Naprawdę utknąłem tutaj, ponieważ nic nie zmieniłem w projekcie, liczyłem na bezproblemową produkcję tych płyt.
Maximum Data Line Length: 59mm (Although this includes the branch to the NAND Flash)
Minimum Data Line Length (Ctrl to Res): 18mm
Maximum Address Line Length: 44mm
Minimum Address Line Length: 24mm
CLK: 24.5mm
CKE: 25mm
CAS: 28mm
RAS: 28.7mm
Oto konfiguracja stosu PCB dla oryginalnego (działającego) prototypu:
Oto konfiguracja stosu PCB dla produkcyjnych (niedziałających) PCB
Oto routing dla SDRAM:
źródło
Odpowiedzi:
To kiepska robota. Rdzenie powinny wynosić 0,2 mm, a równowaga grubości powinna znajdować się w prepregie między warstwami 3 i 4 (wewnętrzna 1 i wewnętrzna 2).
Powodem tego jest to, że dla każdego sygnału na śladzie musi znajdować się ścieżka prądu powrotnego na płaszczyźnie tuż pod nią. Prąd powrotny w płaszczyźnie będzie próbował zminimalizować indukcyjność (tj. Obszar pętli), co oznacza, że będzie próbował podążać pod śladem sygnału. Jeśli ślad sygnału jest oddalony od płaszczyzny, będzie szukać innych śladów, aby znaleźć ścieżkę powrotną. To jest elektromagnetyczna walka.
Ponadto, mając warstwy wewnętrzne w różnych odległościach od ich płaszczyzn odniesienia (pamiętaj, że wszystkie szyny zasilające wyglądają jak uziemienie w AC!) W porównaniu do odległości warstwy zewnętrznej, tworzysz zmianę impedancji za każdym razem, gdy zamieniasz warstwy (chociaż można temu przeciwdziałać za pomocą zmiany szerokości śladu, chociaż uznałem, że było to warte kłopotu tylko raz), a Ty znacznie zwiększasz potencjał przesłuchu i innych zakłóceń.
Kolejną rzeczą, którą musisz sprawdzić, są użyte materiały: na przykład istnieje ponad 20 różnych materiałów, które nazywają siebie „FR-4”. Rzeczy, których zwykle używam, nazywa się 370-HR. Zachowuje się całkiem dobrze z szybkimi sygnałami 100-500 MHz.
Jeśli chodzi o linię zegara, IIRC na mojej ostatniej konstrukcji SDRAM miałem zegar ustawiony tak, aby jego krawędź była ostatnia (jego ślad był najdłuższy o 1 cm), po ustabilizowaniu się wszystkich linii adresu i danych. Tak, warto spróbować opóźnić zegar. Nie potrzebowałem żadnej kontroli impedancji na liniach SDRAM.
Rezystory zakończeniowe powinny być umieszczone jak najbliżej sterowników linii. Jeśli nie znajdują się w odległości około 0,5 cm, mogą same powodować odbicia, powodując przeregulowanie i dzwonienie. IMHO, długość ścieżki 3 cm jest okropnie krótka, aby potrzebować rezystorów terminujących (używam ich od około 6-10 cm); próbowałeś właśnie je wyjąć?
Kolejną rzeczą do sprawdzenia są twoje samoloty: czy masz ślady sygnałów przekraczających cięcia samolotów? Jest to ogromne „nie”, ponieważ zmusza prąd powrotny do pokonania długiej trasy.
Wreszcie szybkość krawędzi jest ogromnym problemem w tych projektach. Wiele układów ma niepotrzebnie krótkie czasy narastania i opadania, a zmniejszenie częstotliwości taktowania nie ma na to wpływu . Te szybkie krawędzie świetnie nadają się do tworzenia odbić. Właśnie to próbują naprawić twoje oporniki terminatorowe 22 Ω: spowalniają krawędzie. Chociaż, jeśli naprawdę to naciskasz, narzędzie takie jak HyperLynx firmy Mentor Graphics może być użyte do znalezienia optymalnego projektu zakończenia.
Niektóre książki, które mogę Wam polecić, które obejmują to wszystko i wiele więcej, a przysięgamy na nie w pracy:
Te książki dotyczą redukcji zakłóceń elektromagnetycznych, projektowania ekranów, podtrzymywania obwodów drukowanych, kontroli impedancji, oddzielania zasilania i wielu innych. Ponadto, Ott prowadzi seminaria na ten temat (zawiera darmową kopię swojej książki).
źródło
Przy takiej częstotliwości wydaje mi się, że problemy z długością ścieżki nie będą poważnym problemem, z pewnością z powodu opóźnień. Ponieważ problemy zaczęły się od nowej płytki drukowanej, pierwszą rzeczą do zrobienia byłoby przetestowanie ciągłości wszystkich linii (w arkuszu danych, a nie na schemacie, w przypadku błędów na schemacie), i zakres każdego pinu, aby sprawdzić, czy kształty fal są na najmniej prawdopodobne - nawet jeśli twój zakres nie jest w stanie sprawdzić szczegółów pomiaru czasu, powinno być dość oczywiste, czy są jakieś otwarte lub zwarte piny.
Robienie tego rodzaju rzeczy bez odpowiedniego zakresu jest obarczone potencjalnymi zagrożeniami - skąd wiesz, ile masz marginesu? Nawet jeśli to działa, to skąd wiesz, czy jesteś na krawędzi i jesteś podatny na awarie pola / produkcji z powodu tolerancji, temperatury lub fazy księżyca?
źródło
2. dodanie Zakładaliśmy, że Twój projekt został przetestowany pod kątem marginesów, a kod był idealny w twoich pytaniach. (nie) Sugeruję zweryfikowanie następujących;
Czy używasz pętli for / next lub kodu dyskretnego, takiego jak;
Pamiętam debugowanie mojego pierwszego projektu CMOS od studenta fizyki na przenośnym nagrywaniu sejsmicznym, z przełączaną tablicą czasową. Nie było oprogramowania układowego ani oprogramowania uC, ale nigdy nie przeprowadził analizy najgorszego przypadku tolerancji, a sprzęt miał warunki wyścigowe w całym miejscu, kiedy zbudowałem i debugowałem kilkanaście kolejnych płyt. Profesor Sejsmiczny zwrócił się do Kierownika Wydziału Fizyki, aby zapytać, dlaczego nie mogę debugować tablic, a następnie musiałem mu doradzić, że zmienność komponentów ujawniła wiele wad konstrukcyjnych zwanych warunkami wyścigu czasowego ze względu na metastabilne warunki i zastosowaną krawędź zegara. Nadal nie rozumiał, a potem poprosiłem go, aby powiedział mi, ile palców rozłożyłem, podnosząc rękę, zanim osiągnęła poziom talii od niskiego do wysokiego. Potem powiedział: nie możesz tego zrobić i oczekiwać poprawnej odpowiedzi. Powiedziałem dokładnie. To prymitywny warunek rasowy. Stają się mniej oczywiste przy większym stopniu złożoności. U Manitoba 1973.
Dodano 1: Z którego schematu terminacji autobusów korzystałeś? preferowana jest metoda (1), Czy 1,25 V DC jest czyste?
Stała dielektryczna na deskach i # warstwach pre-preg kontroluje impedancję linii paskowej i mikropasków wraz z szerokością śladu i odstępem.
Istnieje wiele bezpłatnych kalkulatorów online dla linii paskowej.
Możesz spróbować zmierzyć pojemność na dużych torach lub płaszczyznach uziemienia i porównać obie nagie płyty.
Spójrz również na sygnały o dużym zakresie prędkości i obserwuj przekroczenie i wzorzec zegara <> danych.
Musi istnieć proste wyjaśnienie błędów, ale nie jest łatwe do znalezienia. Ale kiedy znajdziesz podstawową przyczynę ... nie popełnisz tego błędu ponownie.
dodano: Kolejnym błędem, który znalazłem, jest to, że diagram wysokości stosu nie wskazuje grubości warstwy Cu i nie ma wystarczającej ilości miejsca, aby zmieścić się w 6 warstwach, chyba że jest nieprawidłowy lub grubość Cu wynosi 0,039 mm (NIE;)
źródło