eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblem z odczytem karty CF
Ilość wypowiedzi w tym wątku: 10

  • 1. Data: 2025-01-03 23:28:08
    Temat: Problem z odczytem karty CF
    Od: Atlantis <m...@w...com>

    Jakiś czas temu złożyłem amatorski komputerek ośmiobitowy na procesorze
    8080 (a właściie polskim MCY7880) i zabrałem się za uruchamianie na nim
    CP/M. Całość była złożona na płytce prototypowej, więc teraz zabrałem
    się za budowę bardziej finalnej wersji, przy okazji przenosząc się na
    8085. Udało mi się uruchomić większość peryferiów i przenieść kod z
    wersji prototypowej. Tak naprawdę wymagane były tylko niewielkie zmiany
    - np. niektóre peryferia znajdują się teraz pod innymi adresami.

    W przypadku karty CF trafiłem jednak na ścianę. Z jakiegoś powodu nie
    jestem w stanie odczytać ani informacji o karcie (przychodzą bzdury, a
    powinna się wyświetlać jej nazwa) ani sektora rozruchowego (kod nie
    znajduje poprawnych wartości w MBR). Najwyraźniej jednak komunikacja
    pomiędzy kartą i systemem działa, bo:
    1. Jestem w stanie zainicjować kartę, a w trakcie operacji zmienia się
    zawartość odczytywanego rejestru STATUS.
    2. Przy próbie odczytu danych z karty zapala się na chwilę dioda na
    linii DASP.

    Rzucił mi się w oczy jeszcze jeden dziwny szczegół. Dobrałem kwarc tak
    samo, aby zegar systemowy był dokładnie taki sam w wersji na 8080 i 8085
    (2,048 MHz). Z jakiegoś powodu pojawiło się inne zachowanie karty, jeśli
    chodzi o timeout podczas jej inicjacji. Timeout to dwie pętle na
    rejestrach B i C. W wersji na 8080 rejestr C miał początkową wartość 32,
    a B był przy każdym przebiegu inicjowany wartością 255.
    W przypadku konstrukcji na 8085 jednak to nie wystarczało i musiałem
    podbić rejestr C do 64, żeby inicjacja miała szanse przejść.

    Patrzę na schemat i nie mogę znaleźć żadnej różnicy w połączeniach. Kod
    jak mówiłem został przeniesiony ze starego projektu, zmienił się tylko
    adres karty.

    Ktoś ma pomysł gdzie szukać przyczyny?


  • 2. Data: 2025-01-04 01:01:53
    Temat: Re: Problem z odczytem karty CF
    Od: "J.F" <j...@p...onet.pl>

    On Fri, 3 Jan 2025 23:28:08 +0100, Atlantis wrote:

    > Jakiś czas temu złożyłem amatorski komputerek ośmiobitowy na procesorze
    > 8080 (a właściie polskim MCY7880) i zabrałem się za uruchamianie na nim
    > CP/M. Całość była złożona na płytce prototypowej, więc teraz zabrałem
    > się za budowę bardziej finalnej wersji, przy okazji przenosząc się na
    > 8085. Udało mi się uruchomić większość peryferiów i przenieść kod z
    > wersji prototypowej. Tak naprawdę wymagane były tylko niewielkie zmiany
    > - np. niektóre peryferia znajdują się teraz pod innymi adresami.
    >
    > W przypadku karty CF trafiłem jednak na ścianę. Z jakiegoś powodu nie
    > jestem w stanie odczytać ani informacji o karcie (przychodzą bzdury, a
    > powinna się wyświetlać jej nazwa) ani sektora rozruchowego (kod nie
    > znajduje poprawnych wartości w MBR). Najwyraźniej jednak komunikacja
    > pomiędzy kartą i systemem działa, bo:
    > 1. Jestem w stanie zainicjować kartę, a w trakcie operacji zmienia się
    > zawartość odczytywanego rejestru STATUS.
    > 2. Przy próbie odczytu danych z karty zapala się na chwilę dioda na
    > linii DASP.
    >
    > Rzucił mi się w oczy jeszcze jeden dziwny szczegół. Dobrałem kwarc tak
    > samo, aby zegar systemowy był dokładnie taki sam w wersji na 8080 i 8085
    > (2,048 MHz). Z jakiegoś powodu pojawiło się inne zachowanie karty, jeśli
    > chodzi o timeout podczas jej inicjacji. Timeout to dwie pętle na
    > rejestrach B i C. W wersji na 8080 rejestr C miał początkową wartość 32,
    > a B był przy każdym przebiegu inicjowany wartością 255.
    > W przypadku konstrukcji na 8085 jednak to nie wystarczało i musiałem
    > podbić rejestr C do 64, żeby inicjacja miała szanse przejść.

    Roznic w czasach instrukcji chyba nie ma ..

    >
    > Patrzę na schemat i nie mogę znaleźć żadnej różnicy w połączeniach. Kod
    > jak mówiłem został przeniesiony ze starego projektu, zmienił się tylko
    > adres karty.
    >
    > Ktoś ma pomysł gdzie szukać przyczyny?

    a) kwarc Ci sie wzbudził na overtonie i masz 6MHz?
    choc pasowałoby raczej 4MHz.

    b) jesli mnie skleroza nie myli system 8080 wymagał kwarca znacznie
    szybszego, który był dzielony w innej kosci. Rozumiem, że dobrałej
    odpowiednio?

    c) a nie zapomniałej zmienic adresu w jakiejs instrukcji?

    d) Use Z80, Luke :-)

    e) Use ARM, Luke :-)

    J.





  • 3. Data: 2025-01-04 09:06:41
    Temat: Re: Problem z odczytem karty CF
    Od: Atlantis <m...@w...com>

    On 4.01.2025 01:01, J.F wrote:

    > Roznic w czasach instrukcji chyba nie ma ..

    Nie, z tego co kojarzę to 8080 i 8085 są ze sobą kompatybilne
    programowo. Są pewne różnice sprzętowe, które musiałem uwzględnić.
    Przykładowo system z 8080 posiada osobne linie IO_RD, IO_WR, MEM_RD i
    MEM_WR, generowane przez kontroler magistrali 8228. 8085 posiada tylko
    linie WR i RD, których funkcja jest zależna od stanu pinu IOM. Musiałem
    więc wygenerować sobie osobne linie dla IO oraz pamięci, za pomocą
    GAL-a. Ale raczej to nie tutaj leży przyczyna, bo wszystkie inne
    testowane peryferia działają poprawnie.


    > a) kwarc Ci sie wzbudził na overtonie i masz 6MHz?
    > choc pasowałoby raczej 4MHz.

    Sprawdzone oscyloskopem. Na linii CLK mam poprawną częstotliwość 2,048 MHz.


    > b) jesli mnie skleroza nie myli system 8080 wymagał kwarca znacznie
    > szybszego, który był dzielony w innej kosci. Rozumiem, że dobrałej
    > odpowiednio?

    Tak, wziąłem to pod uwagę. W przypadku 8080 częstotliwość kwarcu była
    dzielona dziewięć razy, więc do uzyskania 2,048 MHz potrzebny był kwarc
    18,432 MHz. W przypadku 8085 dzielona jest tylko dwa razy, wiec dałem
    kwarc 4,096 MHz.


    > c) a nie zapomniałej zmienic adresu w jakiejs instrukcji?

    Nie wydaje mi się. W projekcie mam wydzielony osobny plik
    definitions.asm, w którym znajdują się rozmaite parametry, które mogą
    się różnić pomiędzy poszczególnymi wersjami. W przypadku karty CF różni
    się tylko CFBASE - adresy poszczególnych rejestrów są generowane przez
    dodanie kolejnych liczb do tej bazy. A ten adres się zgadza. W dodatku
    gdyby się nie zgadzał, karta w ogóle nie byłaby wykrywana i nie
    reagowałaby na próbę inicjacji.

    Dodatkowo:
    1. Przeszukałem diffem kod źródłowy z obydwu wersji. Nie widzę żadnych
    różnic w okolicach związanych z kartą CF.
    2. Złożyłem dwa egzemplarze płytki. Różnią się niewielkimi detalami, ale
    część z kartą CF jest taka sama. Problem jest powtarzalny na obydwu
    płytkach.
    3. Zapomniałem dodać, że linie D0..D7 są podłączone do karty CF za
    pośrednictwem układu 74HCT245 (pin DIR do IO_RD, pin G do sygnału CS
    karty). To jest właśnie efekt eksperymentów na wersji prototypowej,
    gdzie nie byłem w stanie uzyskać stabilnych transmisji - czasem jakiś
    bajt został zgubiony lub przekłamany. Po dodaniu bufora wszystko zaczęło
    działać stabilnie i poprawnie, wiec uwzględniłem go także w wersji na 8085.

    Hmm... Teraz właśnie dotarło do mnie, że w sumie pomiędzy wersjami jest
    istotna różnica - linie D0..D7 w 8085 są multipleksowane z młodszym
    bajtem magistrali adresowej. Może sterując buforem powinienem uwzględnić
    jeszcze sygnał ALE, żeby był zamknięty w momencie, gdy na liniach danych
    są linie adresowe?


    > d) Use Z80, Luke :-)

    Jest też taki plan, jednak 8085 wydawał się prostszym krokiem z poziomu
    już istniejącego projektu na 8080.


    > e) Use ARM, Luke :-)

    E tam, ARM nie pasuje do retro. :)


  • 4. Data: 2025-01-04 11:43:44
    Temat: Re: Problem z odczytem karty CF
    Od: Janusz <j...@o...pl>

    W dniu 4.01.2025 o 09:06, Atlantis pisze:
    > Hmm... Teraz właśnie dotarło do mnie, że w sumie pomiędzy wersjami jest
    > istotna różnica - linie D0..D7 w 8085 są multipleksowane z młodszym
    > bajtem magistrali adresowej. Może sterując buforem powinienem uwzględnić
    > jeszcze sygnał ALE, żeby był zamknięty w momencie, gdy na liniach danych
    >  są linie adresowe?
    Wg mnie to będzie jedyna przyczyna, dane musisz zatrzaskiwać tym ALE.

    --
    Janusz


  • 5. Data: 2025-01-04 20:50:06
    Temat: Re: Problem z odczytem karty CF
    Od: Atlantis <m...@w...com>

    On 4.01.2025 11:43, Janusz wrote:

    > Wg mnie to będzie jedyna przyczyna, dane musisz zatrzaskiwać tym ALE.

    Samo ALE to chyba za mało. W tej chwili polegam tylko na sygnale IO_RD
    do ustawiania kierunku transferu - jeśli linia jest w stanie niskim, to
    mamy odczyt z karty, jeśli jest wysoka, to zapis do niej.
    Gdybym w takim wypadku użył ALE do sterowania pinem G, to za każdym
    razem gdy tylko na liniach D0..D7 pojawiałyby się dane, bufor otwierałby
    się w którąś stronę. Pół biedy, gdyby linia IO_RD znajdowała się wtedy w
    stanie wysokim - karta by po prostu zignorowała to co pojawi się na
    magistrali, nie widząc aktywnych sygnałów CS i RD. Jednak gdyby kierunek
    bufora był ustawiony w przeciwną stronę, to wtedy pojawi się następująca
    sytuacja:
    1. ALE otworzy bufor.
    2. IO_RD ustawi kierunek od karty do magistrali systemowej.
    3. Karta nie widząc sygnału CS, będzie trzymała swoje wyjścia danych w
    stanie wysokiej impedancji. Przez bufor na magistralę trafią więc stany
    nieustalone.

    Trochę poeksperymentowałem, dodając trochę logiki do GAL-a. Na chwilę
    obecną wygląda to tak:

    /MEMRD = /IOM * /RD
    /MEMWR = /IOM * /WR
    /IORD = IOM * /RD
    /IOWR = IOM * /WR
    /LOCPTCS = /LOCIOCS * /A4 * IOM * /WR
    /LOCCFCS = /LOCIOCS * A4 * IOM * /ALE

    Rzeczy, których mogę być pewien:
    - Poprawnie działa generowanie sygnałów MEMRD i MEMWR, bo pamięci
    działają poprawnie i kod z EPROM-u się wykonuje.
    - Poprawnie działa generowanie sygnałów IORD i IOWR, bo peryferia (poza
    kartą) działają poprawnie. Mogę odczytywać i zapisywać z/do nich dane.
    - Poprawnie działa przynajmniej kawałek dekodera adresów, bo linia
    LOCPTCS (sterująca portem 74273) działa poprawnie.

    Tylko z kartą są problemy. Bufor wydaje się być najbardziej oczywistym
    kandydatem, bo to główna różnica w stosunku do innych peryferiów.
    Zastanawiam się teraz czy przypadkiem nie mam jakiegoś problemu z
    timingami i któryś sygnał nie pojawia się za wcześnie lub za późno.
    Przykładowo w chwili obecnej sygnał CS steruje zarówno kartą, jak i
    otwarciem bufora (linia G). Może powinienem to jakoś rozdzielić?

    Nie wiem czy w akcie desperacji nie wywalę w ogóle tymczasowo bufora i
    nie połączę linii danych bezpośrednio. Widziałbym przynajmniej czy coś
    się zmieniło i czy jest poprawa. W prototypie na 8080 karta działała bez
    bufora w miarę ok, ale od czasu do czasu pojawiały się przekłamania w
    transmisjach.


  • 6. Data: 2025-01-04 21:37:58
    Temat: Re: Problem z odczytem karty CF
    Od: Atlantis <m...@w...com>

    Ok, w ramach eksperymentu usunąłem bufor i podłaczyłem kartę
    bezpośrednio do magistrali systemowej. Problem nadal występuje. Teraz
    już w ogóle nie mam pojęcia co może być nie tak. W wersji z 8080 bez
    bufora odczyt był niestabilny, ale przynajmniej był...


  • 7. Data: 2025-01-05 18:52:00
    Temat: Re: Problem z odczytem karty CF
    Od: Atlantis <m...@w...com>

    Czytam jeszcze informacje w Intenrecie, na temat podłączania karty CF do
    starych systemów mikroprocesorowych i z tego co widzę, pojawia się też
    temat opóźniania linii RD. Niektórzy proponują dodanie niewielkiego
    filtra RC, inni stosują dodatkową logikę (np. do synchronizacji RD z
    kolejnym impulsem na linii CLK).
    Skoro nie w buforze, to może tutaj leży przyczyna. Możliwe, że w
    przypadku prototypu sprawę załatwiały pojemności i indukcyjności
    montażowe - karta CF znajdowała się na osobnym module, a montaż był
    wykonany na płytkach uniwersalnych, za pomocą kynaru. W nowej wersji
    slot CF znajduje się tuż przy procesorze, a płytka jest wytrawiona.


  • 8. Data: 2025-01-06 07:32:47
    Temat: Re: Problem z odczytem karty CF
    Od: Marek <f...@f...com>

    On Sun, 5 Jan 2025 18:52:00 +0100, Atlantis <m...@w...com>
    wrote:
    > starych systemów mikroprocesorowych i z tego co widzę, pojawia się
    > też
    > temat opóźniania linii RD.

    Nie bez powodu np. w niektórych peryferiach jest slope config czy
    np. w spi konfiguracja momentu próbkowania linii SDI
    (middle/beginning/end).

    --
    Marek


  • 9. Data: 2025-01-06 21:41:18
    Temat: Re: Problem z odczytem karty CF
    Od: Atlantis <m...@w...com>

    On 6.01.2025 07:32, Marek wrote:

    > Nie bez powodu np.  w niektórych peryferiach jest slope config czy np. w
    > spi konfiguracja momentu próbkowania linii SDI (middle/beginning/end).

    Najwyraźniej to jeszcze ciągle nie to. Dodałem opóźnienie na linii RD
    karty, korzystając z niewykorzystanego pinu układu GAL. Linijka
    realizującego to kodu wygląda następująco:

    DELCFRD.R = IORD

    W wyniku tego stan linii IORD jest zatrzaskiwany na wyjściu DELCDRD za
    pomocą zegara systemowego.

    Sprawdziłem na oscyloskopie - linia DELCFRD faktycznie przechodzi w stan
    niski jeden cykl zegarowy później, ale przejście do stanu wysokiego
    następuje dwa cykle po linii IORD.
    Co ciekawe rozwiązanie to nie chciało zadziałać na ATF16VB - linia
    DELCFRD była cały czas w stanie wysokim. Za to na starym GAL16VA nie ma
    tego problemu.

    Niestety, nic się nie zmieniło w zachowaniu karty. Dioda nadal błyska,
    wskazując na próbę odczytu, nie są jednak odczytywane sensowne dane.

    Połączenia w tej chwili wyglądają następująco:
    1. Magistrala danych podłączona przez dwukierunkowy bufor 74HCT245
    2. Kierunkiem bufora steruje linia IORD (ogólnosystemowa, nieopóźniona)
    3. Sygnałem G bufora steruje linia CS karty CF
    4. Sygnałem RD karty CF steruje opóźniony sygnał DELCFRD, generowany w
    GAL-u według powyższego opisu
    5. Sygrałem WR karty CF steruje sygnał IOWR (równiez ogólnosystemowy,
    nieopóźniony)

    Na chwilę obecną kończą mi się już pomysły...


  • 10. Data: 2025-01-07 09:50:44
    Temat: Re: Problem z odczytem karty CF
    Od: Atlantis <m...@w...com>

    Ok, już po napisaniu poprzedniej wiadomości udało mi się rozwiązać
    problem z wydłużaniem opóźnionego sygnału RD dla karty. Wystarczyło
    dodać XOR wyjścia flip-flopa z jego wejściem. Niestety kosztowało mnie
    to jedną linię GAL16V8A. W lepszym układzie dałoby się to ogarnąć za
    pomocą wejścia asynchronous set, ale niestety ten konkretny GAL takiego
    nie posiada.

    Problem nadal występuje. Niemniej w artykułach z sieci widzę, że ludzie
    dodają opóźnienie także opóźnienie na linii WR. Tego też spróbuję. Nawet
    jeśli nie zadziała, to pewnie i tak zostawię te opóźnienia w projekcie,
    dla zapewniania lepszej kompatybilności z kartami (gdy już uda mi się
    rozwiązać główny problem).

    Przy okazji widzę, że mogę trochę zoptymalizować projekt odziedziczony
    po wersji z 8080. W tej chwili nie ma chociażby sensu generowanie
    osobnych linii IORD/IOWR, skoro dekoder adresów IO jest bramkowany
    sygnałem IOM. Sygnały MEMWR/MEMWR zostawię, bo przerobienie dekodera
    adresów dla pamięci byłoby trochę bardziej kłopotliwe.

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: