User Port 2SD
Interfejs UP2SD, czyli jak podłączyć kartę SD do Commodore C64.
Wersja 1 dokumentu.

Ostrzeżenie!!! Jeśli nie czujesz się na siłach, nie podejmuj się konstrukcji tego interfejsu. Nieumiejętne posługiwanie się lutownicą może doprowadzić do uszkodzenia Twojego ciała, lub co gorsza komputera C64.

Jak przenosić dane pomiędzy PC a C64 tutaj -> PORADNIK

1. Wstęp

Około 2006 roku znalazłem stronę, na której Marc Schwarzburg zaprezentował schemat, jak podłączyć kartę MMC/SD do złącza userportu Commodore C64. Niestety obecnie strona nie jest już dostępna, a sam schemat można znaleźć tylko tu: CSDB. Zmontowałem ten układ i uruchomiłem. Udało się nawet napisać procedury zapisujące i odczytujące dane z karty (na podstawie załączonych przykładów do projektu C64 Userport MMC Interface). Projekt podłączenia karty SD do userportu zarzuciłem z tego powodu, że procedury odczytu/zapisu zajmują miejsce w ram komputera i w oryginale były zbyt powolne. Remedium na te problemy to albo rozszerzenie +60k, albo też kupno GeoAction'a, gdzie procedury obsługi karty SD można zamieścić w pamięci SRAM podtrzymywanej bateryjnie. Znalazłem także w ofercie AVT moduł AVT1649, który tak się nieszczęśliwie ;-) składa, że zgadzał się z koncepcją mojej modyfikacji interfejsu wykonanego przez Marca Schwarzburga i nie wymaga posiadania profesjonalnego stanowiska elektronika.
Połączenie modułu z user portem wymaga lutownicy, kilku kabelków, trochę czasu i cierpliwości.

Poniżej zdjęcie prototypu wg schematu Marca Schwarzburga wykonanego na płytce uniwersalnej.

prototyp

Zalety mojej wersji interfejsu to: jego łatwość wykonania, dostępność modułu, oraz szybkość komunikacji.



2. Interfejs.

Do komunikacji z kartami SD w trybie SPI potrzebne są 4 linie: /CS, CLK, Do (MSIO), DI.

Koncepcja połączenia pomiędzy user portem a kartą SD.

user port C64
AVT1649
Karta SD
PB0 – pin C
pin 12
DataOUT pin 7
PB1 – pin D
pin 11
DataIN pin 2
PB2 – pin E
pin 13
CLK – pin 5
PB3 – pin F
pin 8
/CS – pin 1
+5V – pin 2
pin 5V
nie łączymy bezpośrednio!!!
GND – pin 1
pin GND
pin 3 i pin 6


Oczywiście musimy dokonać konwersji napięć z 5V na 3v3 akceptowane przez kartę SD. Można to zrobić na kilka sposobów. Interfejs można mieć inwestując mniej niż 10 zł, np. wykonać go tylko na rezystorach (przykład). Konwersję zasilania z 5V dostępnych na złączu user portu można także wykonać wg schematu wspomnianego już Marca Schwarzburga. Najtrudniej jest z złączem karty SD. Trudno dostać takie, które nie rozleci się w rękach podczas lutowania.

Ja się zdecydowałem na moduł AVT1649, ze względu na pełnowymiarowe złącze kart SD, oraz zmontowany i uruchomiony układ. Na znanym, polskim portalu aukcyjnym można kupic moduł ADPmicroSD firmy Propox, albo KAmodMMC firmy Kamami. Co prawda nie testowałem ich, ale wg schematów publikowanych przez producentów nadają się do podłączenia do user portu. Jeżeli będzie zainteresowanie tematem, to postaram się zdobyć i przetestować te moduły. Poniżej schemat połączenia pomiędzy user portem C64 a modułem AVT1694.
up2sd
UWAGA! Zasilanie jest dostępne na stykach 1 i 2 userportu.
Lutujemy je od góry.
Przewody data lutujemy od dołu złącza.
Do wykonania połączenia potrzebujemy:
Lutownica, może być transformatorowa (takowej użyłem).
Cyna i kalafonia.
Nożyk.
Kilka różnokolorowych przewodów.
Moduł AVT1649 lub inny z wyprowadzeniami karty SD i konwersją napięć z 5V na 3V3.
Karta SD o pojemności 512MB, 1GB, 2GB.(Takie karty testowałem) Karty 4GB i 8GB aktualnie nie działają z napisanymi sterownikami.
Te karty przetestowałem:
kartasd kartasd


Na początek przygotowujemy przewody. U mnie max. 10 cm. Zdejmujemy z ich końców (ok. 5 mm) delikatnie izolację i cynujemy. Następnie dajemy trochę cyny z kalafonią na złącza user portu. Następnie lutujemy przewody najpierw do modułu AVT1649 a następnie złacza C64 wg schematu połączeń z rysunku.

Link do sklepów, gdzie można kupić zmontowany układ AVT 1649:
Cyfronika
Sklep AVT

Alternatywne moduły nieopisane i nie testowane z C64.
KAmodMMC firmy Kamami
ADPmicroSD firmy Propox

3. Oprogramowanie.

Aktualnie napisałem (na podstawie m.in. analizy sterownika wspomnianego już C64 Userport MMC Interface) obsługę interfejsu, czyli odbiór/zapis bajtów, odbiór/zapis bloków po 512 bajtów z karty SD. Testy wykazują, ze transfer podczas zapisu i odczytu pliku z karty SD porównywalny jest z prędkością zapisu/odczytu z/do stacji 1541 w turbo. Jednak fastloader z ActionReplay, lub każdy inny używający transmisji dwubitowej, jest szybszy. Nie są to jednak tak duże różnice, aby eliminowały funkcjonalność interfejsu.

Listing programu wczytującego z karty SD dane do pamięci Commodore C64.
Myślę, że analiza listingu pozwoli na zrozumienie działania interfejsu i komunikacji z kartą SD w trybie SPI.

Kilka słów wyjaśnienia. Procedury są zrozumiale nazwane, także nie powinno być problemu z analizą programu.
Jednakowoż:
1. Fragment kodu:
;---------------------------------------
;POLECENIA
CMD17    ;BLOCKREAD
         .BYTE $51,$00,$04,$7E,$00,$FF
;---------------------------------------
gdzie:
$51 - rozkaz BLOCKREAD
$00,$04,$7e,$00 - adres początku pamięci karty SD, czyli offset $00047e00
$ff - "suma kontrolna"

Jeżeli chcemy załadować program do C64 pod inny adres, zmieniamy etykietę BUFOR1 na inną wartość.
Jeżeli chcemy kontrolować wielkośc pliku ładowanego do pamięci C64 zmieniamy wartość LDA #112 na inną, gdzie 112 jest to liczba bloków 512 bajtowych.
Program nie posiada obsługi błędów.
Procedury SPI i SPIFR nie są tożsame. O ile procedura SPI jednocześnie odczytuje i wysyła bajt, to procedura SPIFR szybko odczytuje bajt, natomiast na wyjściu ustawia na czas odczytu stan wysoki.


Zawartość tego dokumentu może ulec zmianie w miarę postępu prac nad interfejsem UP2SD oraz oprogramowaniem.
Tutaj -> FORUM można podyskutować na temat tego dokumentu, interfejsu, oraz możliwości rozwoju projektu.

Tomasz K.
Ostatnia aktualizacja: 5.02.2013

Lista zmian w dokumencie.
5.02.2013 Dodanie linka do wątku na forum, gdzie można dyskutować o interfejsie.
1.02.2013 Dodałem link do poradnika , jak w praktyce wykorzystać zbudowany interfejs.
30.01.2013 Poprawiłem literówki, nazewnictwo, oraz pomniejsze błędy.
Dodałem link do dokumentacji związanej z modułem AVT1694.
27.1.2013 Publikacja pierwszej wersji niniejszego dokumentu.
c64, 6502, MMC/SD, User Port, SPI