SD card am Paralellport, MS-DOS

  • Am 20.März, gab es von 1ST1 folgenden Beitrag:


    Es gibt was anderes: LPT to SD ... http://www.vcfed.org/forum/sho…-driver-for-MSDOS-ver-1-1

    Im Thread: USB & DOS ...


    Ich hab das Ganze mal am Wochenende aufgebaut, aber ohne Funktion :(


    Frage:
    Hat das schon mal jemand ans Laufen gebracht ?
    Hat jemand den Treiber SD.SYS
    Ok der liegt im Download mit dabei, aber er funtioniert nicht.

    Ich ruf den Treiber wie folgt in der Config.Sys auf:
    DEVICE=C:\DOS\SD.SYS /d /p=1 /b=2

    Die Parameter für debug=on, partition=1, lpt=378


    Der Treiber wird geladen und meldet:
    SD pport device driver V1.1 ...

    SD: initializing drive

    SD: drive not connected or not powered


    Jetzt hab ich mal den SALEA Logik Analyzer dran gemacht.
    Es tut sich was allerdings verstehe ich es noch nicht.
    Als SD-Card Adapter hab ich einen für Micro SD mit IC als Level Shifter (3,3 <--> 5V)


    Bitte um Erfahrungsbericht, falls das schon mal jemand zum Laufen gebracht hat.



    mfG. Klaus Loy

  • Hallo Toast_r,


    danke für deinen Link, scheinbar ist das ein älterer Treiber.
    Aber das geht auch nicht. Zumindest sehen die Output Signal PC --> Card Adapter, auf dem SALEA ähnlich aus.
    Es gibt entweder ein Pegelproblem bei der MISO Leitung, mein Treiber liefert aktuell nur 3,3V zum PC hin.
    Da hab ich schon ein wenig variert.
    Oder das MISO Signal liegt einfach auf dem falschen Eingangspin.
    Laut Readme des neuen Treibers soll der auf Pin 13 SELECT gehen.
    Die Select Leitung ist OK, der Pegel kann invertiert mit AFDPRO.EXE, von 0x379 eingelesen werden.
    Ich bin am zweifeln, ob der MISO an disen Pin 13 dran kommt.

    Morgen ist auch wider ein Tag, ...


    mfG. Klaus Loy

  • ok, der Thread ist halt schon ziemlich alt.


    Ich werd erst noch ein wenig Analyse betreiben.
    schon mal Danke für die Hilfe.


    mfG. Klaus Loy

  • Hier hatte wohl auch jemand Probleme beim erkennen der SD Karte... vielleicht hilft das


    https://www.vogons.org/viewtopic.php?p=705291#p705291

    Gruß Torsten

    BFZ MFA, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, MSX VG8010, Amstrad NC100, Cambridge Z88, C64, C128D, Amiga 500 & 1200, Atari Portfolio, HP200LX, IBM PC5155, TP755c, TP755cx, T20, T41, T61, PS/2 (Model 40SX), PS/2E, Accura 101, Apple //e, Sharp PC1401 & PC1403H, TI59 m. PC-100c, HP48SX & HP48GX


    An die Person, die meine Schuhe versteckt hat, während ich auf der Hüpfburg war: Werd' erwachsen! :motz:


    ::matrix::

  • Danke tokabln für den interessanten Link.
    Mitlerweile weiß zumindest das meine Leitung an Pin 13 definitiv richtig angeschlossen ist.
    Ich hab mir den Sourcecode von Version 11 etwas näher angesehen.
    Jetzt werd ich mir heute Abend nochmal die Signale mit dem Logik Analyser ansehen.

    Das Bild mit den Widerständen ist ganz nett, wird mir aber wohl nichts bringen, weil ich eine Pegelwandler drauf habe. Ich werd mir aber den Pegel des Pin 13 mal mit Oszi ansehen müssen und evtl. von 3,3V auf einen sauberen TTL Pegel bringen müssen.

    Im Moment hab ich die Idee, dass etwa mit meiner Karte und der Partition nicht stimmt.
    Ich hatte sie mit Linux mit FAT16 formatiert, evzl .passt da etwas nicht.
    Laut Treiber Sourcecode müssen am Anfang einige Magik Bytes stehen.
    Wenn nicht kommt eben auch meine Fehlermeldung.
    Der Treiber unterscheidet nicht ob "garnichts geht" oder ob da eine falsche Partition ist.


    Nachtrag:

    Ich glaub ich hab den Fehler jetzt gefunden.
    Hab grad mit Linux und DD die ersten Sektoren von verschiedenen SD-Cards ausgelesen.
    Meine Karte hatte ich am Sonntag und Gestern mit Linux mit einer FAT Partition versehen.
    Das war eine schlechte Idee.

    Die Karte muss scheinbar nur ein FAT Filesystem enthalten, hierzu muss der FS-Header im ersten Sektor sein.
    Und da müssen Magic Bytes sein:
    Offset 0x01FE: 55 AA ansonsten Fehler

    Offset 0x0036: 46 41 54 ; FAT wenn so, dann OK
    oder

    Offset 0x0052: 46 41 54 ; FAT wenn so, dann OK


    Weil ich eine partition gemacht hatte waren da nicht die 'FAT' String und daher Fehler.


    Mal schaun ob ich dann heute Abend hin bekomme.


    mfG. Klaus Loy

  • Hallo Klaus,


    ich empfehle bei USB- oder SD Kartenproblemen immer den SD-Formatter... der macht keine Sauerein


    https://www.sdcard.org/downloads/formatter/

    Gruß Torsten

    BFZ MFA, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, MSX VG8010, Amstrad NC100, Cambridge Z88, C64, C128D, Amiga 500 & 1200, Atari Portfolio, HP200LX, IBM PC5155, TP755c, TP755cx, T20, T41, T61, PS/2 (Model 40SX), PS/2E, Accura 101, Apple //e, Sharp PC1401 & PC1403H, TI59 m. PC-100c, HP48SX & HP48GX


    An die Person, die meine Schuhe versteckt hat, während ich auf der Hüpfburg war: Werd' erwachsen! :motz:


    ::matrix::

  • Super dass sich das so entwickelt. Das könnte sich noch zu einer schicken Sache entwickeln.


    Ich gehe mal davon aus, dass die SD-Karte von Linux wie eine Festplatte partitioniert wurde, der Treiber erwartet aber das "Superfloppy"-Format ohne Partitionsdaten außen herum. Kann man so machen, schöner wäre allerdings, wenn der Treiber auch die andere Variante beherrscht.

    1ST1

  • Leute, nichts geht.
    Zumindest sieht das soweit sinnvoll aus was der SALEA anzeigt.
    Aber es gehen nur ein paar Kommandos hin und her und dann kommt halt die Fehlermeldung:
    SD: drive not connected or not powered

    Zuvor wird geprüf ob dieses oder jenes, ...

    Nähers siehe C-Files SDMMC.C ab Zeile 587
    Hier der Source: SDPP11.zip


    Zum Übersetzen des Treibers braucht man Borland-C_4.5 (oder so).
    Ich hab auch teilweise schon mal übersetzen können, aber dann ist es ja auch wieder nur ein Treiber.
    Zum Test wär ein abgespecktes C-Programm erst mal sinnvoll.


    Ich versuch grad mit TURBOC V2.1 auf meinem Toshiba T5200 ein Testprogramm aus dem SDMMC.C zu bauen um etwas mehr zu verstehen.
    Diese Partitionsdaten werden erst nach disk_initialize () abgefragt, aber soweit kommt es scheinbar nicht.
    Die Karte wird sehr wohl gesehen, weil ohne Karte wird einfach blind das Cmd_0 fünfmal wiederholt.
    Mit Karte geht da ein Wenig mehr hin und her.
    Wie gesagt ich probier jetzt mal ein kleines C-Programm mit debug (printf) Ausgaben zu basteln.

    Ok man könnte so eine Karte auch mal an den Arduino hängen, aber da geht es sicher.

    Und da sieht auch Init Code sicherlich ganz anders aus.


    mfG. Klaus Loy

  • TURBOC V2.1 ist erstmal eine Sackgase, das ist einfach zu alt, es mag den Code nicht fressen.

    Dann muss ich es auf einem Win_XP mit Borland_C machen und immer das EXE rüber kopieren.
    Zumindest hab ich ein Netzwerk.


    Mal schaun.

  • Nur zur Sicherheit... hast Du die Karte mit dem SD-Formatter wie von mir vorgeschlagen formatiert?


    Das geht aus Deinem aktuellen Bericht nicht hervor...

    Gruß Torsten

    BFZ MFA, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, MSX VG8010, Amstrad NC100, Cambridge Z88, C64, C128D, Amiga 500 & 1200, Atari Portfolio, HP200LX, IBM PC5155, TP755c, TP755cx, T20, T41, T61, PS/2 (Model 40SX), PS/2E, Accura 101, Apple //e, Sharp PC1401 & PC1403H, TI59 m. PC-100c, HP48SX & HP48GX


    An die Person, die meine Schuhe versteckt hat, während ich auf der Hüpfburg war: Werd' erwachsen! :motz:


    ::matrix::

  • Ja hab ich.
    Aber der SD-Formatter war nicht mein Freund.
    Der scheint wieder eine echte Partition auf der Karte anzulegen.
    Ich hab es mit Linux und dd getestet dd if=/dev/sdb of=card.img
    Und da war dann ein Partition Sector angelegt.
    Und grad das mag ja der SD.SYS Treiber nicht haben.
    Der mag einen "boot sektor", mit der Kennung "FAT" an position a oder b.

    Sorry aber mit dem SD-Formatter ging das erstmal auch nicht.

    mfG. Klaus Loy

  • ah... okay. Danke für die Info...

    Gruß Torsten

    BFZ MFA, ZX80Core, AX81, ZX81, ZX81NU, Spectrum+, Harlequin, MSX VG8010, Amstrad NC100, Cambridge Z88, C64, C128D, Amiga 500 & 1200, Atari Portfolio, HP200LX, IBM PC5155, TP755c, TP755cx, T20, T41, T61, PS/2 (Model 40SX), PS/2E, Accura 101, Apple //e, Sharp PC1401 & PC1403H, TI59 m. PC-100c, HP48SX & HP48GX


    An die Person, die meine Schuhe versteckt hat, während ich auf der Hüpfburg war: Werd' erwachsen! :motz:


    ::matrix::

  • wo sind die c / c++ experten ?


    BYTE n, d;


    n=10;

    do

    {

    rcvr_mmc(&d, 1);

    }

    while ((d & 0x80) && (--n)); <-- Warning Possibly incorrect assignment in function xxx


    Wie funktioniert das Abbruch Kriterium, und warum meckert der Compiler.
    OK er übersetzt alles, aber jedesmal landet der Cursor an dieser Stelle.
    Vieleicht weiß jemand wie ich es umformulieren kann.


    mfG. Klaus Loy

  • Die C Frage oben bleibt bestehen.

    Mein Testprogramm schein sinnvolle Werte zu liefern, näheres gibt es erst morgen, jetzt ist Feierabend.

    Aber hier noch zwei Bilder einmal meint HW-Setup und dann ein Screenshot mit Debug Ausgaben.


    Hardware Aufbau, Hinterseite Toshiba T3200 mit micro SD-Adapter und Kabel zu SALEA 8 Kanal Logic Analyer


    Screenshot, mit Debug Printf Anzeigen, der Function disk_initialize () und send_cmd() aus dem Modul SDMM.C
    Das Testprogramm benutz im Moment nur dieses Modul.
    Die Function disk_initialize () scheint mit Succes, bzw. Result: 0 zu enden und hat zuvor einen Card Type: 4 ermittelt.


    Echt interessant, forschen macht spaß.


    mfG. Klaus Loy

    • Offizieller Beitrag

    Erstmal ist das kein Abbruchkriterium, sondern eine Laufbedingung.

    Die while laeuft solange die Bedingung != 0 ist.

    (Ich weiss, etwas Besserwisser maessig)


    Die Schleife laeuft solange Bit 7 in d gesetzt ist und n != 0, wobei n vorher dekrementiert wird.

    Also die Schleife laeuft max. 10 mal.

    d enthaelt vermutlich ein Statusbit in Bit 7, solange das gesetzt ist, darfst du warten.


    Zur Warnung: Der Compiler ist sich nicht sicher, ob er das gleiche meint wie der Programmierer.

    Z.B. ist bei dem --n nicht definiert, ob es durch gefuehrt wird. Ist d == 0 bricht die Schleife ab, ein Test des --n ist nicht mehr noetig.


    Alle Klarheiten beseitigt?

  • @funkenzupfer

    > Z.B. ist bei dem --n nicht definiert, ob es durch gefuehrt wird. Ist d == 0 bricht die Schleife ab, ein Test des --n ist nicht mehr noetig.

    Ok, klar könnte ja sein erste Bedingung falsch dann würde --n nicht mehr ausgeführt, daher das Warning. Ich habs halt nicht verstanden und wollt es aber auch nicht kaputt machen.

    @1ST1
    das ist ein ganz stinknormaler Parallelport.
    Er kann zwar dieses "modernenen Modis" aber das hab ich abgeschaltet weil ist meinte das es deswegen evtl. nicht funktioniert.


    Das Projekt ist ja nicht von mir. Ich wollt es halt am Sonntag grad mal eben aufbauen, aber nichst ging.
    Und jetzt bin ich halt am untersuchen und verstehen. Mach spaß.

    Gute Nacht

  • @Holger,
    unidirektional mein ja nur, dass Datenleitungen D0..7 nur rauswärts gehen (write only).
    Aber die Steuerleitungen werden für das Lesen missbraucht, damit geht es dann hin und her.

    Erst die neueren Parallelport waren dann bidirektional ausgelgt um richtig Daten hin und transferieren zu können.


    Und weil es in wenigen Minuten 1.April ist:
    In der Zeitschrift c't gab es in den 80er ein April Projekt das his WOM, diese Teil war an den Parallelport angeschlossen
    und bestand aus acht Dioden und einem Kondensator. Als write only Memory.


    Hier zwei Links:

    Die besten Aprilscherze aus der c't-Redaktion


    write-only-memory.pdf


    Gute Nacht.


    mfG. Klaus Loy

    • Offizieller Beitrag

    write-only-memory.pdf

    Zu diesem WOM musst du dir mal den Hintergrund durchlesen.

  • Ich habe ja keine Ahnung, aber das wäre dann write only memory. lesen ist bei SD card ein nicht zu unterschätzendes Feature.

    Du wirst lachen, aber an unidirektionalen Parallelports von PCs gelingt es sogar, ZIP-Laufwerke zu betreiben. Also warum nicht auch das? Bei PCs gibt es halt nunmal mindestens 3 Funktionsmodis der Parallelschnittstelle, unidirektional und ECP, EPP. Für Drucker macht das keinen Unterschied, für vieles weitere schon. Das ist dann halt eine Frage des Verbindungskabels und der Treibersoftware.

    1ST1

  • Das LPT Interface war ja für DRUCKER gedacht.
    Wie sollten die Entwickler damals an sowas denken, dass da jemand Daten auch in den PC rein schicken möchte. Das ist ja "Quatsch", Drucker sind ja AUSGABE Geräte.

    Aber wo ein Wille ist findet sich auch meist ein Weg :)


    mfG. Klaus Loy

  • Gibts überhaupt "unidirektionale" = nur in eine Richtung funktionierende parallele Schnittstelle?

    Ja, die einfachen parallelen Schnittstellen an den ersten XTs, auch meine Olivetti M24 ist davon "betroffen". EPP und ECP kamen erst später.


    Und die M24 ist besonders zickig, den Palmzip-Treiber bekomme ich da nicht ans Laufen. :(

    1ST1

  • Das LPT Interface war ja für DRUCKER gedacht.
    Wie sollten die Entwickler damals an sowas denken, dass da jemand Daten auch in den PC rein schicken möchte. Das ist ja "Quatsch", Drucker sind ja AUSGABE Geräte.

    Aber wo ein Wille ist findet sich auch meist ein Weg :)


    mfG. Klaus Loy


    Naja für Drucker …

    Technisch gesehen ist es eine 5V digital IO Port.


    Was man da dran hängt ist vollkommen egal, wenn die technische Spec passt.



    Gibts überhaupt "unidirektionale" = nur in eine Richtung funktionierende parallele Schnittstelle? Schon die https://en.wikipedia.org/wiki/IEEE_1284 IEE284 beschreibt den Port als bidirektional.


    Natürlich gibt es digitale IO die nur in eine Richtung gehen.


    Zum Beispiel beim Commodore IEEE-488 Bus die ATN Leitung: die Rechner haben da Ausgang und die Floppy Laufwerke einen digitalen Eingang.


    Möglicherweise haben sich einige Hersteller nicht an die IEEE-1284 Spec gehalten.

    Um es einfacher/billiger zu machen.

    Eben nur Ausgang oder nur Eingang bei einigen Pins.

    Für Drucker funktioniert es und für andere Anwendungen nicht unbedingt.