Akcelerator grafiki 2D na FPGA i STM32F429
Spodnia strona, która faktycznie będzie znajdowa
Pamięć EEPROM
Pamięć EEPROM jest prostym układem przechowującym dane w sposób trwały.
Układ Rohm o pojemności 32 Kb jest sterowany przez dwuprzewodowy interfejs I2C. Niewiele więcej można tu powiedzieć – pamięć jest dołączona do układu peryferyjnego I2C mikrokontrolera. I2C jest dwukierunkowa, jednoliniową magistralą. Rozwiązanie typu otwarty dren zapewnia zabezpieczenie przed nieoczekiwanym wysterowaniem przez kilka układów. Oznacza to, że magistrala (i linia zegara) muszą mieć rezystory podciągające. Umieściłem rezystory o wartości 4,7 kΩ blisko mikrokontrolera, co widać na schemacie.
Gniazdo SD
Gniazdo SD ALPS SCHD3A0100 pozwala podłączyć kartę micro SD. Ten model pozwala wsunąć kartę SD, która następnie jest zatrzaskiwana po cofnięciu o około milimetr. Dzięki temu będzie utrzymana w miejscu i nie wypadnie sama z siebie.
Przewiduję, że dane dotyczące grafiki zajmą znacznie więcej, niż dostępna pamięć mikrokontrolera – potrzebny jest zatem zewnętrzny interfejs, który mógłby je pomieścić. Karty SD są najwygodniejsze. Na dodatek mikrokontroler ma już odpowiedni układ peryferyjny SDIO, który pozwala na dostęp do karty w szybkim trybie 4-bitowym. SDIO jest kolejną magistralą, która wymaga rezystorów podciągających na linii danych i komend, ponieważ także pracuje w konfiguracji z otwartym drenem. Dodałem rezystory 10 kΩ widoczne na schemacie mikrokontrolera.
Wtyki złącz
Dwa złącza o rozstawie wyprowadzeń 2,54 mm pozwalają na debugowanie i podłączenie urządzeń do wejść GPIO.
Układ wyprowadzeń gniazda debuggera odpowiada wymaganiom podanym przez STMicroelectronics dla protokołu SWD i programatora/debuggera ST-Link/v2. Ten model naprawdę przypadł mi do gustu i używam go teraz cały czas wraz z aplikacją obsługującą debugger OpenOCD – nigdy się nie zawiodłem.
Gniazdo GPIO jest połączone z kilkoma wyprowadzeniami mikrokontrolera i może pełnić różne funkcje. Upewniłem się, że może obsłużyć kilka typów często używanych urządzeń peryferyjnych, w tym urządzeń I2S – które mogę wykorzystać w przyszłości, aby zrealizować obsługę audio.
Projekt płytki
Zdecydowałem się na tanią dwuwarstwową płytkę o wymiarach 10 x 10 cm – rozwiązanie, które hobbysta może tanio zamówić u chińskich dostawców prototypów. Poprowadzenie wszystkich ścieżek zajęło dużo czasu.
Pierwszym komponentem było złącze LCD – musi ono być fizycznie umieszczone w odpowiednim miejscu, aby ekran LCD dało się zamontować w określonej pozycji umożliwiającej rozmieszczenie innych złącz wokół niego. Złącze LCD jest faktycznie umieszczone na spodzie płytki, patrząc od strony, którą widać na biurku.
Następnym komponentem jest układ FPGA, który umieściłem blisko środka – ale z rozwagą, aby kolejny układ z setką wyprowadzeń dało się zmieścić w bliskiej odległości.
Następne są pamięci Flash i SRAM umieszczone tak blisko FPGA, jak to możliwe. Ich ścieżki muszą być poprowadzone szczególnie ostrożnie.
Kolejnymi elementami są zasilacze FPGA i odsprzęgane ścieżki. Te ścieżki są szersze, niż większość odsprzęgających kondensatorów ceramicznych i umieszczone tak blisko wyprowadzeń FPGA, jak to możliwe. Oznacza to użycie bardzo małych elementów, w niektórych przypadkach o wymiarze 0402. Pozostałe ścieżki są odsprzężone z drugiej strony płytki za pomocą większych elementów w rozmiarach 0603 i 0805.
Po rozmieszczeniu układów o szczególnych wymaganiach wystarczy umieścić mikrokontroler w najlepszym miejscu, jakie pozostało i poprowadzić resztę sygnałów. Ten etap nie był trudny, ale czasochłonny.
Ostatnie czynności obejmują przejrzyste logo, otwory montażowe M3 i zaokrąglone rogi płytki PCB do dekoracji. Otwory montażowe są w rzeczywistości dość ważne, ponieważ płytka będzie pracować z komponentami umieszczonymi na dole, zatem muszę zadbać o podpórki zapewniające odpowiedni prześwit.
Przyjrzyjmy się kompletnej płytce PCB. Usunąłem z grafiki pola masy, aby lepiej pokazać ścieżki i elementy.
Do wykonania płytki wybrałem firmę Elecrow, jednego z chińskich dostawców, który za rozsądna cenę wydrukuje 10 kopii płytek zamówionych przez internet. Dwa-trzy tygodnie później płytki dotarły i wyglądają bardzo dobrze.
Warto zwrócić uwagę, że wszystkie ważne ścieżki biegną z FPGA do docelowych układów jako magistrala bez przelotek. Jedną z zalet pracy z układami FPGA jest to, że można samemu wybrać funkcję każdego z pinów. Odpowiednie planowanie pozwala zaprojektować elegancką i przejrzystą płytkę.
Obejrzałem płytkę PCB pod lupą i znalazłem tylko jeden problem, który był z pewnością moją winą. Wywiercone otwory na wtyczkę zasilacza były za wąskie o około 1 mm. Wprowadziłem złe wartości do programu i nie zauważyłem tego podczas wcześniejszych obserwacji. Na szczęście ten problem dało się łatwo rozwiązać – wystarczyło przypiłować nóżki złącza zasilającego, aby wszystko zaczęło do siebie pasować.
Montaż płytki PCB
Złożenie tego wszystkiego wymagało nieco planowania naprzód. Chciałem przylutować większość elementów w moim halogenowym piecu lutowniczym. Problem stanowiło jednak 34-pinowe złącze LCD o rozstawie 0,4 mm po drugiej stronie, które też należało przylutować.
Ostatecznie nie było to takie trudne. Zakryłem obszar pod złączem LCD, który na szczęście zawierał tylko kilka małych układów scalonych dla sterownika podświetlenia, a następnie przylutowałem pozostałe elementy w moim piecu lutowniczym. W drugim etapie odwróciłem płytkę na drugą stronę i przylutowałem tylko złącze LCD za pomocą płyty grzewczej – nad płytą znajdował się tylko zakryty wcześniej obszar.
Teraz mogłem powrócić do zakrytego obszaru i przylutować pozostałe elementy SMD ręcznie z użyciem gorącego powietrza. Na końcu za pomocą zwykłej lutownicy przymocowałem elementy przewlekane. Po krótkiej kąpieli w spirytusie na płytce nie ma zanieczyszczeń i jest gotowa do zdjęć:
Powyżej strona ze wszystkimi rozmieszczonymi układami. To pierwsze moje lutowanie poważnego projektu w halogenowym piecu. Wszystko odbyło się bezproblemowo, mimo to wolałem poprawić niektóre połączenia za pomocą lutownicy pod mikroskopem.