maniek86.xyz

Powrót do listy

Własna karta diagnostyczna POST ISA 8-bit



Kategoria: Elektronika | 29/06/2025 | Komentarzy: 0

Wstęp

Jakiś czas temu kupiłem w internecie kartę diagnostyczną POST (Power On Self Test) - kombo PCI/ISA. Karty POST służą do diagnozowania problemów z komputerami: odczytują kody POST wysyłane przez BIOS, dzięki czemu można zidentyfikować problemy, zanim nawet grafika się zainicjuje. Są szczególnie przydatne podczas napraw.

Kupiłem ją w czasach, gdy nie miałem dużej ilości sprzętu z slotami ISA, więc używałem jej głównie na magistrali PCI. Po jakimś czasie trafiła do mnie uszkodzona płyta 486, która miała tylko sloty ISA. Okazało się wtedy, że część karty z ISA to scam - mogła jedynie mierzyć napięcia oraz sygnały CLK, RDY i reset. Byłem rozczarowany. Musiałem naprawić płytę bez pomocy kodów POST. Ostatecznie udało się ją naprawić, ale karta zawiodła moje oczekiwania. Wtedy wpadłem na pomysł, by zamiast kupować kolejną kartę, zbudować własną.

Karta POST, która mnie oszukała
Karta, która mnie oszukała

Chociaż kartę kupiłem 2-3 lata temu, dopiero teraz postanowiłem zająć się budową własnej. Powód zwłoki był prosty: brakowało mi doświadczenia, części i funduszy. 


Ale jak zbudować kartę ISA? - Teoria

Magistrala ISA nie jest szczególnie skomplikowana. Wersja 8-bitowa ma 62 piny, z których powoła to linie adresowe i linie danych. Posiada ona 20 linii adresowych, co pozwala zaadresować 1 MB pamięci, oraz 8 linii danych, umożliwiających przesyłanie jednego bajta naraz. Wersja 16-bitowa rozszerza te możliwości, pozwalając przesyłać dwa bajty naraz (16-bit) oraz adresacje już do 16 MB (24-bit). Skupię się na wersji 8-bitowej, bo to wystarcza do stworzenia karty POST.

W architekturze x86 mamy pojęcie portów I/O. Służą one do komunikacji z urządzeniami wejścia/wyjścia i są adresowane niezależnie od pamięci. x86 definiuje 65536 (2^16) takich portów, które współdzielą tą samą magistralę adresową i danych co pamięć. Procesor używa dedykowanego pinu, by wskazać, czy operacja dotyczy pamięci, czy portów I/O. Płyta główna dekoduje ten sygnał i steruje odpowiednimi liniami sterującymi magistrali ISA.

Na magistrali ISA są cztery główne linie sterujące przepływem danych:

Kody POST są standardowo wysyłane przez BIOS do portu 0x80 jako pojedynczy bajt. Niektóre systemy mogą używać innych portów lub w ogóle ich nie wysyłać. Teoretycznie karta POST musi jedynie przechwycić bajt wysyłany na port 0x80 (gdy IOW zmienia stan z niskiego na wysoki, a pierwsze 16 bitów linii adresowych równa się 0x80) i wyświetlić go. Wydaje się to proste i można to zrobić nawet przy użyciu układów TTL, ale ja postanowiłem zrobić to inaczej, dzięki czemu mogłem jeszcze dodać kilka przydatnych funkcji.


Płytki prototypowe

Zanim przystąpię do budowy prototypu, muszę rozwiązać problem podłączenia się do magistrali ISA. Postanowiłem poszukać płytek prototypowych ISA w Polsce, ale bezskutecznie. Znalazłem je dopiero na zagranicznych stronach i eBayu, lecz ceny były absurdalnie wysokie. Dodatkowo, wiele z tych płytek mi się nie podobały ze względu na design. Generalnie przeszkadzała mi ta cena i fakt, że te płytki nie wykorzystywały w pełni powierzchni PCB.

Postanowiłem więc zaprojektować własną płytkę i zamówić ją u jakiegoś producenta PCB. Projekt pozwoli mi stworzyć dokładnie to, czego potrzebuję, jednocześnie redukując koszty i eliminując problemy z niedoskonałością gotowych rozwiązań. Dodatkowo na taką własno zaprojektowaną płytkę mogę sobię wstawić swoję napisy/logo.

Rozpocząłem projektowanie. Do projektowania użyłem KiCada 9. Aby zaoszczędzić czas i uniknąć błędów związanych z wymiarowaniem płytki PCB lub footprintu, postanowiłem poszukać gotowego szablonu na internecie. Znalazłem fajny projekt na GitHubie: https://github.com/JayesonLS/ISA-Cards (katalog IsaTemplate). Płytka była już wymierzona do rozmiaru 100mm*100mm i zawierała slot ISA - idealnie! Taki rozmiar pozwala skorzystać z żniżek oferowanych przez wielu producentów PCB. Jedyną modyfikacją, jaką wprowadziłem, to było skrócenie styków przy krawędzi PCB, ponieważ chciałem zamówić płytkę z tzw. "v-cut" (wcięcie w kształcie V na złączu). Wcięcie to ułatwia wkładanie karty do slotu i zwiększa żywotność slotu. Styki zostały skrócone, aby dostosować je do wcięcia pod kątem 45 stopni.

Zdecydowałem się pominąć tworzenie schematu i od razu przejść do edytora PCB. Najpierw stworzyłem jednak własny footprint dla pojedynczego pola lutowniczego. W tym celu zmodyfikowałem standardowy footprint wtyku pin 1x1, usuwając warstwę opisową. Efektem była kwadratowa powierzchnia lutownicza wokół otworu, która mi się spodobała, więc postanowiłem ją tak zostawić. Dodałem ten footprint na płytkę, a następnie, korzystając z wbudowanego narzędzia, utworzyłem siatkę 39 x 34. Pozostawiłem trochę miejsca na dole płytki, aby stworzyć pola do połączeń sygnałów ISA. Dla tych pól zaprojektowałem dwa dodatkowe footprinty: zwykłe pole lutownicze bez otworu, w wersji na dolną i górną warstwę. Duplikacje footprintów wykonałem w podobny sposób jak dla pól wcześniej (31 w osi X ale 1 w Y). Aby połączyć te pola ze slotem ISA, wyłączyłem sprawdzanie poprawności połączeń w edytorze. Złączyłem razem sygnały GND i +5V na złączu ISA (na slocie są dwa piny +5V i trzy piny GND) oraz dodałem po dwa dodatkowe piny dla GND i +5V w pozostałym miejscu po prawej stronie PCB.

Projekt wykończyłem napisami na warstwie opisowej. Jeszcze na koniec umieściłem fajne oznaczenie "86" w lewym górnym rogu płytki, pomiędzy polami lutowniczymi.

protoboard 3D render

Gotową płytkę zamówiłem. Za 5 sztuk wyszło taniej niż kupienie jednej sztuki z zagranicy. Poczekałem 2 tygodnie i dotarło. Oto rezultat:

Otrzymane PCB 1
Otrzymane PCB 2
Otrzymane PCB 3

Nie popełniłem żadnych błędów w projekcie, co samo w sobie uważam za sukces. Wymiary są OK oraz nadruk wyszedł dobrze. Jestem zadowolony. Umieściłem projekt płytki na moim GitHubie oraz napisałem stronę projektu dla części angielskiej mojej strony.


Podziękowania dla PCBWay!

Chciałbym dodatkowo serdecznie podziękować PCBWay za to, że postanowili zasponsorować dodatkowe płytki PCB dla projektu płytki prototypowej! PCBWay to dobrze znana firma zajmująca się prototypowaniem i produkcją płytek PCB, zapewniająca wysokiej jakości płytki i doskonałą obsługę klienta. Pracowałem z ich płytkami w przeszłości oraz na podstawie dodatkowych płytek co otrzymałem mogę powiedzieć, że są one świetnej jakości. Łatwo złożyłem zamówienie na płytki PCB na ich platformie, produkcja oraz dostawa była szybka. Sponsoring obejmował również darmową opcję szybkiej dostawy. Jeśli szukasz niezawodnych usług w zakresie prototypowania i produkcji PCB, serdecznie polecam ich sprawdzić.

PCBWay
Płytka PCBWay


Budowa prototypu

Dysponując płytką prototypową pod magistralę ISA, mogłem rozpocząć prace nad projektem. Jak wspomniałem wcześniej, chcialem by karta oferowała dodatkowe przydatne funkcje. Te funkcje to:

Mierzenie sygnału CLK (4.77–8.33 MHz, zależnie od systemu) pozwala sprawdzić działanie głównego zegara ISA. OSC to stały sygnał o częstotliwości 14.31818 MHz, którego brak/niepoprawne działanie również może powodować problemy.

Do realizacji tych funkcji użyłem układu CPLD (Complex Programmable Logic Device). CPLD to programowalny układ logiczny, który pozwala na implementację skomplikowanych połączeń bramek logicznych i przerzutników za pomocą języków opisowych, takich jak VHDL czy Verilog. Akurat uczyłem się w tym czasie VHDL, więc ten projekt stał się fajnym praktycznym ćwiczeniem dla takiego początkującego mnie. Wybrałem model XC95144XL od Xilinxa – stary układ z 1999 roku, który wciąż jest wystarczający do tego typu zastosowań. Posiada on 144 makroceli, 3200 dostępnych bramek i działa na napięciu 3.3V, lecz jego piny ustawione na wejście tolerują 5V. Kilka sztuk tego CPLD zdobyłem z złomu, ale można go kupić za mniej niż 10 zł z np. Aliexpress. Wersje, którą tego układu posiadam to dokładnie XC95144XL-10TQG100I. Wersja ta potrafi pracować maksymalnie aż z częstotliwością 178MHz według dokumentacji oraz posiada 81 pinów I/O. Jest ona w obudowie TQFP-100, więc do zamontowania tego scalaka na płytce użyłem adaptera, który kiedyś kupiłem za grosze.

Po zgromadzeniu części rozpocząłem budowę prototypu.

Prototyp, budowa, góra
Prototyp, budowa, tył

Na zdjęciach powyżej widać nieukończony prototyp. Postanowiłem dać tej karcie aż 6 cyfr. W początkowej wersji segmenty były podłączone bezpośrednio do CPLD, co spowodowało spalenie układu podczas pierwszych testów. Na szczęście ostatnio lutowanie takich układów scalonych idzie mi coraz lepiej, więc wymiana CPLD nie była dużym problemem. Poprawiłem projekt, dodając układ ULN2803, który umożliwia obsługę segmentów bez stresu o przeciążenie układu. ULN2803 to układ zawierający osiem par tranzystorów Darlingtona, często stosowany do sterowania obciążeniami wymagającymi większego prądu. Po tej poprawce wszystko zaczęło działać poprawnie.

Wymiana spalonego CPLD

Dodałem także diody sygnalizacyjne do monitorowania napięć na magistrali ISA: czerwone dla linii +5V i -5V, oraz żółte dla +12V i -12V. Kolejne diody sygnalizują stan linii CLK, RDY i RESET. Projekt był realizowany "na żywca" - schemat powstał później. Na płytce znajduje się regulator 3.3V do zasilania CPLD, układ 74244 (bufor), używany do sterowania diodami sygnalizującymi stany linii magistrali ISA oraz układ 74245 (transciever), który umożliwia przesyłanie danych na magistralę ISA z CPLD, podciągając napięcie z 3.3V do 5V. Chociaż w sumie nie jestem pewien, czy kiedykolwiek wykorzystam tę funkcjonalność. Przylutowałem również Timera 555, którego używałem do eksperymentów. Pozostał na płytce, mimo że ostatecznie nie jest używany w projekcie (nie chciało mi się już go wylutować). Połączenia z CPLD opisałem sobię w arkuszu kalkulacyjnym. Można zobaczyć to tutaj.

Gotowy prototyp karty POST
Gotowy prototyp karty POST - tył

Programowanie

Całość zaprogramowałem w VHDL przy pomocy Xilinx ISE 10.1 (stare środowisko do programowania FPGA, CPLD Xilinxa pochodzące jeszcze z roku 2008. Na moim drugim komputerze z Windowsem 10 jakoś jeszcze działa!). Do programowania układu CPLD użyłem Rasbperry Pi Pico z użyciem projektu https://github.com/kholia/xvc-pico. Co ciekawe musiałem go zmodyfikować przez powiększenie bufera, ponieważ były problemy z zaprogramowaniem, ale po tym się jakoś udało pomimo braku testu kompatybilności na stronie projektu! (moja prosta modyfikacja jest dostępna na moim GitHubie, wraz z skompilowanym programem). Programowanie było całkiem przyjemnie pomimo tego, że był to mój pierwszy praktyczny projekt z pisaniem kodu VHDL. Jedynie pod koniec implementacja nie chciała się zmieścić! Na szczęście po przeszukaniu internetu znalazłem opcje w Xilinx ISE do włączenia optymalizacji powierzchni. Kod VHDL z gotowym wsadem będzie dostępny wkrótce też na moim GitHubie.


Rezultat

Przewijając czas do przodu. Po wielu godzinach, eksperymentach oraz walką z zmieszczeniem implementacji udało się! Kod, który realizuje wszystkie funkcje jakie chciałem!

Gotowy prototyp (POST)
Tryb POST, tutaj jeszcze nie zaprogramowałem wyświetlania 3 ostatnich kodów POST, tylko jednego

Gotowy prototyp (Bus)
Tryb analizatora magistrali, tutaj tryb magistrali adresowej

Gotowy prototyp (cz.)
Tryb miernika częstotliwości, tutaj mierzenie CLK

Karta posiada 6 przełączników. Trzy dla wyboru trybu wyświetlania (SW1-SW3) oraz trzy do wyboru portu I/O przechwytywania kodów POST (CFG_SW1-CFG_SW3). Na płytce prototypowej rozmieszczenie tych przełączników DIP wygląda tak, że dwa górne to są SW1 i SW2 a te pod spodem to od lewej to są SW3, CFG_SW1-3. Co potrafi ta karta w poszczególnych trybach?:

Porty I/O którę ta karta może badać to: 0x80, 0x84, 0x90, 0x300, 0x680, 0x60, 0x190 i 0x378. Funkcja wyboru portu jest szczególnie przydatna przy naprawie niestandardowych komputerów.


Ciąg dalszy...

Ale to nie koniec historii! Podczas rozmowy z PCBWay zapytałem, czy byli by zainteresowani wsparciem projektu, sponsorując produkcję dedykowanej płytki PCB dla tej karty POST. Ku mojej radości, odpowiedzieli pozytywnie! Jeszcze raz serdeczne podziękowania dla PCBWay za ich wsparcie. Jeśli wszystko pójdzie zgodnie z planem, już niedługo opublikuję drugą część tego artykułu, w której zaprezentuję kartę przeniesioną na profesjonalnie wykonaną płytkę PCB. Po otrzymaniu tej odpowiedzi od razu zabrałem się za projektowanie płytki oraz dokończenie schematu. W zasadzie gotowy projekt można już zobaczyć na moim GitHubie (https://github.com/maniekx86/isa_debug_post_card). Jest to moja pierwsza poważna płytka PCB zaprojektowana samodzielnie, więc proszę o wyrozumiałość dla wszelkich niedoskonałości.

Dziękuję za uwagę i do następnego razu!

Render wersji PCB karty POST
3D render przodu wersji PCB karty POST
3D render tyłu wersji PCB karty POST




Komentarze

Brak komentarzy.

Dodaj komentarz





Dozwolone tagi: <a><br><strong><b><em><i><blockquote><pre><code><ul><ol><li><del>
Proszę o zachowanie podstawowych zasad i kultury w komentarzach.
Komentarze ze spamem, nienawiścią, brakiem kultury, niepoprawnym emailem będą natychmiastowo usuwane.


CAPTCHA Image

Reload Image





Ostatnie artykuły:

Własna karta diagnostyczna POST ISA 8-bit
29/06/2025

Modyfikowanie procesora Celeron 300A na Slot I do działania w systemie wieloprocesorowym
19/02/2025

Renowacja kontrolera Multi I/O VLB
09/02/2025

Karta GPIO PCI z starego tunera TV PCI
17/01/2023

Modyfikowanie nawigacji aby dodać port szeregowy
02/08/2022


Główna strona blogu
Wszystkie artykuły jako lista