Skocz do zawartości

Pomocna odpowiedź

Napisano

Na liście projektów na bliższą przyszłość znajdują się u mnie dwa urządzenia, które chciałbym zaprojektować i uruchomić, trochę w ramach wyzwania i stworzenia sobie okazji, żeby nauczyć się czegoś nowego.

  1. Konsolka do gier na STM32H7 (planuję wykorzystać STM32H753), w której pliki binarne z z grami byłyby ładowane z karty pamięci do RAM-u i uruchamiane z niego. Plan zakłada przeportowanie na to kilku gier dostępnych w formie źródeł (np. Dooma i Wolfenstaina 3D) oraz jakichś emulatorów.
  2. Płytka z mocniejszym mikrokontrolerem wyposażonym w MMU, który pozwoliłby na boot Linuksa. Tutaj stawiam na PIC32MZ2064DAH176.

Jeden i drugi plan będzie wymagał podłączenia do MCU zewnętrznej pamięci SDRAM. Jedno jest pewne - tym razem odpada stosowanie samodzielnie trawionej płytki (ciągle lubię je stosować w swoich projektach) i będę musiał skorzystać z oferty JLCPCB.

Założenia w chwili obecnej są następujące:

  • Początkowo myślałem zresztą, żeby upchnąć wszystko na dwóch warstwach, ale obecnie zaczynam się godzić z myślą, że chyba prościej będzie zamówić płytkę czterowarstwową, aby mieć spokój z prowadzeniem masy i zasilania - przeznaczę na nie dwie wewnętrzne warstwy, zewnętrzne zostawiając na sygnały.
  • Chciałbym uniknąć stosowania elementów w obudowach BGA. Na pewno same mikrokontrolery będą w obudowach LQFP, pamięć także wolałbym w wersji przyjaznej dla standardowej lutownicy. 😉
  • Mikrokontroler i pamięć planuję umieścić po przeciwnych stronach płytki, tak aby połączenia były jak najkrótsze.

Obydwa mikrokontrolery są relatywnie szybkie (PIC może być taktowany zegarem 200 MHz, STM32 nawet 480 MHz) co przekłada się na szybkie sygnały na magistrali pamięci. Dlatego chciałbym zapytać czy powinienem się trzymać jakichś konkretnych wytycznych projektując płytkę? Wystarczy jeśli połączenia będą jak najkrótsze, a poszczególne ścieżki będą tej samej długości? Konieczne jest wyrównywanie długości ścieżek albo nawet liczenie ich impedancji, czy mogę się obejść od tego?

Jeśli zdecyduję się na płytkę z czterema warstwami (a prawdopodobnie to zrobię) to w jaki sposób prowadzić masę? Na pewno będę miał jedną warstwę wewnątrz płytki w całości wykorzystaną na masę (oraz jedną na plus zasilania). Powinienem też jeszcze dodatkowo "wylać" masę ma zewnętrznych warstwach, umieszczając w miarę gęsto przelotki?

  • Lubię! 1
37 minut temu, atlantis86 napisał:

Konieczne jest wyrównywanie długości ścieżek albo nawet liczenie ich impedancji, czy mogę się obejść od tego?

To bardzo skomplikowany temat... Krótka odpowiedź: tak.

Ścieżki wewnątrz grupy komunikacyjnej powinny być tej samej długości, impedancji... Musisz zminimalizować składową urojoną impedancji, stosować równą ilość (między ścieżkami w grupie), a najlepiej żadnych przelotek, uwzględnić obecność pola masowego wokół ścieżki, unikać całkowcie prowadzenia ścieżki nad przerwą w płaszczyźnie referencyjnej... I jeszcze z 500 innych rzeczy 😄 Nie polecam bawić się z tym bez porządnego szkolenia / kursu pracy z wysokimi częstotliwościami.

  • Lubię! 1
(edytowany)
40 minut temu, H1M4W4R1 napisał:

Nie polecam bawić się z tym bez porządnego szkolenia / kursu pracy z wysokimi częstotliwościami.

Zapytam inaczej: czy jest szansa, że to będzie działało w sposób stabilny, jeśli będę się trzymał tych kilku podstawowych, wymienionych wyżej zasad? To jest projekt amatorski. Zdaję sobie sprawę z tego, że żadnego badania EMC nie przejdzie. 🙂 Wystarczy mi, jeśli będzie działał.

Dlaczego pytam? Bo nasłuchałem się opinii, że interfejsu Fast Ethernet wbudowanego w mikrokontrolery nie da się wykorzystywać w amatorskich projektach, na samodzielnie trawionych płytkach. Tymczasem w kilku swoich projektach użyłem tego interfejsu, z PHY połączonym na magistrali RMII (50 MHz) i wszystko działa poprawnie. Żadnych zgubionych pakietów, żadnych problemów z połączeniem wskazujących na warstwę sprzętową.

Raz natknąłem się na problem z długością ścieżek (też na samodzielnie trawionej płytce) w przypadku czterobitowego SDIO. Tylko tam faktycznie przesadziłem i dwie linie danych były zauważalnie dłuższe od dwóch pozostałych i zegara. Do tego złącze karty znajdowało się dość daleko od MCU. W efekcie przy większych częstotliwościach komunikacja z kartą się załamywała. Na jednobitowej wersji magistrali SDIO wszystko działało poprawnie. Gdy wyrównałem długości linii (już na płytce zamówionej w JLCPCB) problem zniknął.

Dlatego chciałbym wiedzieć, czy mam szansę uzyskać działającą pamięć SDRAM, jeśli narzucę sobie nieco wyższe standardy (np. właśnie w związku z użyciem czterowarstwowej płytki, żeby zasilanie nie przeszkadzało w prowadzeniu linii danych).

Edytowano przez atlantis86
14 minut temu, atlantis86 napisał:

Dlatego chciałbym wiedzieć, czy mam szansę uzyskać działającą pamięć SDRAM, jeśli narzucę sobie nieco wyższe standardy (np. właśnie w związku z użyciem czterowarstwowej płytki, żeby zasilanie nie przeszkadzało w prowadzeniu linii danych).

Szansę zawsze masz, zależy jak dokładnie do tego podejdziesz. Wszystko da się zrobić amatorsko... tylko nie zawsze będzie działało poprawnie, mimo że tak wygląda.

58 minut temu, atlantis86 napisał:

Bo nasłuchałem się opinii, że interfejsu Fast Ethernet wbudowanego w mikrokontrolery nie da się wykorzystywać w amatorskich projektach, na samodzielnie trawionych płytkach.

Akurat Ethernet jest bardzo odporny na nieidealne warunki. Pamięci to już dużo bardziej wymagający temat.

32 minuty temu, Harnas napisał:

Akurat Ethernet jest bardzo odporny na nieidealne warunki. Pamięci to już dużo bardziej wymagający temat.

Sam Ethernet tak. Tylko ja tutaj nie mówię o danych transmitowanych po parach różnicowych, ale o magistrali RMII, która łączy MAC w MCU z układem PHY. W tym przypadku też mamy do czynienia z sytuacją, kiedy długość ścieżek ma znaczenie, a częstotliwość na magistrali jest dość wysoka (50 MHz).

Tak swoją drogą, czytam właśnie o projektowaniu płytek korzystających z SDRAM. Spotkałem się z dwiema zupełnie różnymi poradami. Jedna zakłada umieszczenie SDRAM po przeciwnej stronie płytki, dokładnie pod MCU. Tyle tylko, że takie rozwiązanie wiąże się z koniecznością umieszczania przelotek na każdej linii sygnałowej, co powoduje dodanie pojemności oraz poszatkowanie warstwy masy pod ścieżkami. Dlatego spotkałem się też z opinią, że MCU i SDRAM powinny znajdować się na tej samej warstwie i to właśnie na niej powinno się prowadzić połączenia między nimi, ograniczając w ten sposób liczbę przelotek. Które podejście jest bardziej poprawne?

Tak swoją drogą, może trochę za bardzo się tym przejmuję? Przyglądam się właśnie projektowi komputera "Sarge" (jednopłytkowy kompterek ARM, opisywany w EP w 2009), którego egzemplarz sobie złożyłem jakiś czas temu. Tam płytka była dwuwarstwowa. Autor projektu chyba jakoś szczególnie nie pilnował długości ścieżek (nie widać menadrów), magistrala też była relatywnie szybka (procesor taktowany 180 MHz) a pomimo tego urządzenie działa poprawnie. 😉

1 godzinę temu, atlantis86 napisał:

Które podejście jest bardziej poprawne?

A która pizza jest lepsza? Neapolitańska czy rzymska... Pizza to pizza - każda ma swoje zalety. Tak samo podejścia, każde ma swoje zastosowanie.

Btw. 180-200MHz to są wciąż niskie częstotliwości 😉 Pogadaj z sygnałami 800-1200MHz (DDR3/4)😉 

(edytowany)
Dnia 2.06.2025 o 10:31, H1M4W4R1 napisał:

Btw. 180-200MHz to są wciąż niskie częstotliwości 😉 Pogadaj z sygnałami 800-1200MHz (DDR3/4)😉 

Płyty głównej pod Pentium 4 to jak na razie jeszcze nie mam zamiaru projektować. 😉

Pamięć DRAM pracująca w okolicy 100-130 MHz będzie jak najbardziej zadowalającym rezultatem w tym projekcie. Tym bardziej, że sporo moich projektów to retro, gdzie 20-30 MHz to sporo. 🙂

Edytowano przez atlantis86
  • Lubię! 1
(edytowany)

Doradzam podglądanie co wróg czyni, czyli pobrać dokumentacje do devkitów ST, najlepiej takich co używają pamięć taką jaką Ty sam chcesz użyć, zaopatrzyć się w jakiś program typu gerber viewer oraz podglądać jak to jest zroutowane. ST udostępnia gerbery od swoich zestawów.

Edytowano przez virtualny

Jeszcze w temacie pamięci SDRAM, mam jedno pytanie.

Czy użycie pamięci z 16bitową szyną danych jest mocno wskazane? A może ośmiobitowa wersja będzie wystarczająca?

Zrobiłem przegląd swoich podręcznych zapasów i widzę, że mam następujące układy od Samsunga:

  • K4S561632C (4Mbit x 16 bit x 4 banki)
  • K4S560832A (8Mbit x 8bit x 4 banki)

Szersza magistrala oczywiście przekłada się na większą wydajność, jednak czy będzie to faktycznie zauważalna różnica? Osiem linii danych mniej znacząco ułatwi prowadzenie ścieżek, jednocześnie zostawiając trochę linii GPIO w zapasie.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...