Junior Computer ][

  • Super Jörg! :thumbup:

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Mann o Mann, das war jetzt eine schwere Geburt.

    Gestern Abend hatte ich noch die Read_Blk Routine fertig geschrieben und ausprobiert. Block 0, also der Boot Block, wurde völlig problemlos gelesen. Also kurzerhand den Startsektor (block) der Bootpartition aus der Partitionstabelle gelesen ($00000084) und als Parameter der Read_Blk Routine übergeben. Ergebnis "Address Error". Also nochmal einfach als Parameter $00000001 übergeben um Block 1 zu lesen. Ergebnis "Address Error".


    Nach vielem Rumprobieren und nochmaligen Nachlesen, kam mir dann vorhin die Erkenntnis, dass bei SD-Karten bis 2GB der Übergabeparameter tatsächlich in Byte statt in Blocks angegeben werden muss. Also statt $84 dann $00010800 ($84 x 512 Bytes/Sektor). Und siehe da...



    Bei größeren SD-Karten muss dann natürlich in Blocks gerechnet werden.

  • Das soll ein Mensch ahnen!

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Das ist ja auch ein M$ Format. Da gehören solche "Quirks" wohl einfach dazu.

    Die Problematik hat wahrscheinlich ziemlich direkt mit dem alten CHS (Cylinder/Head/Sector) Mist zu tun. Irgendwann gab es dann LBA mit 32 Bit um größere Platten zu unterstützen und mittlerweile sind wir bei 38 Bit LBA.

    Das Blöde ist halt, dass man für jede Version eine andere Sonderbehandlung benötigt.

    Die Initialisierungsroutinen inklusive all den Checks, um was für einen Kartentyp (SD Vers. 1, SD Vers. 2, MMC) es sich handelt, braucht von den bisher benötigten 366 Bytes allein151.

    Da die Karten mit größerer Kapazität länger benötigen, um auf eine Read Anfrage zu antworten, musste ich auch noch eine gesonderte Warteroutine einbauen, die dann bei Nichtantwort mit einem Timeout beenden.

    Und für die Umrechnung einer FAT LBA müssen jetzt neben dem Little-Endian/Big-Endian Swap auch noch bei kleineren Karten (Vers. 1) Shift Operationen vorgenommen werden, damit das ganze dann eben in Bytes statt in Blöcken angegeben ist.


    Aber immerhin, ich hab jetzt hier ein halbes dutzend Karten, inklusive einer die sich zwar initialisieren, aber nicht auslesen lässt und einer die die MISO Leitung nicht auf Anhieb auf High zieht. Bisher laufen alle Karte soweit möglich, bzw. werfen dann Fehlermeldungen.


    Das soll ein Mensch ahnen!

    Eigentlich hatte ich den betreffenden Satz auf elm-chan.org vermutlich schon mehrmals gelesen, aber dann im entscheidenden Moment wieder vergessen, weil es doch ziemlich viel zu beachten gibt, um eine SD-Karte anzusprechen. Hier mal der Entscheidungsbaum nur für die Initialisierung



    und da ist der SPI Teil noch garnicht dabei...

  • Sind jetzt vielleicht alberne Vorschläge, aber die Phantasie schlägt da u.a. folgendes vor:


    Man kann ja a.) erstmal den Kartentyp ein bißchen beschränken, dann läufts erstmal man braucht aber halt den passenden Cardtyp und b.) man kann die Erkennung machen und dann den eigentlichen Code nochmal nachladen (das funktioniert dann bißchen so wie mit dem GRUB Bootloader mit seiner komischen halben Stufe vor eigentlichem Start des Filesystemreaders)

    und als Extra c.) wenn das Auslesen dann läuft, muß man evtl. irgendwelche Zahlen gar nicht mehr umrechnen sondern kann die aus Tabellen nachladen, die man wiederrum auf der Karte als File abgelegt hat. Evtl. ist das sogar schneller als das Ausrechnen.



    Ansonsten: auch C/H/S hat schon Blöcke benutzt. Schlechtes Argument ... ;)

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Die 'SD' Karten fingen damals[tm] wirklich als SPI serielle FLASH an. Da ist Byteadressierung normal.

    Wir können wirklich froh sein, dass die Karten immer noch SPI unterstützen (sollen), denn die Benutzung des SD-Modus (4 Datenleitungen) ist nicht nur komplizierter, sondern unterliegt auch der Lizenzpflicht (nicht relevant, solange man nichts in Verkehr bringt).

  • Man kann ja a.) erstmal den Kartentyp ein bißchen beschränken, dann läufts erstmal man braucht aber halt den passenden Cardtyp und b.) man kann die Erkennung machen und dann den eigentlichen Code nochmal nachladen (das funktioniert dann bißchen so wie mit dem GRUB Bootloader mit seiner komischen halben Stufe vor eigentlichem Start des Filesystemreaders)

    Das Problem ist, dass die aufwändige Initialisierung so oder so gemacht werden muss. Den Teil für die MMC Karten habe ich sowieso gleich weggelassen, da die eh nicht mehr groß genutzt werden und der Micro SD-Karten Slot dafür auch ungeeignet ist.

    Meines Erachtens nach hat man den Initialisierungsvorgang auch unnötig verkompliziert, indem man statt des vorhandenen CMD1 Befehls den zusätzlichen ACMD41 Befehl, der ja aus dem Prefixbefehl CMD55 plus ACMD41 besteht, eingeführt hat. Das hätte man einfacher haben können.

    und als Extra c.) wenn das Auslesen dann läuft, muß man evtl. irgendwelche Zahlen gar nicht mehr umrechnen sondern kann die aus Tabellen nachladen, die man wiederrum auf der Karte als File abgelegt hat. Evtl. ist das sogar schneller als das Ausrechnen.

    Da das Bitshifting (Byte/Block Modus) sowieso im Treiber Layer gemacht werden muss, und es sich dabei ja eigentlich nur um einen Byte plus einen Bit-Shift handelt, macht es auch Sinn das gleich mit dem Endian-Swapping zu erledigen. Da spart man dann Zeit und (Code) Bytes. Der Rest (FAT handling, etc) wird sowieso dann als DOS von der Karte nachgeladen.


    Die 'SD' Karten fingen damals[tm] wirklich als SPI serielle FLASH an. Da ist Byteadressierung normal.

    Ah, das wusste ich nicht. Da wurde dann also der Lizenzbehaftete SD Native Mode soz. drüber gestülpt, um da nochmal Kasse machen zu können. Interessant.


    Mein Verständnisproblem mit dem Byte/Block Modus war allerdings der Tatsache geschuldet, dass ich ja mit dem Kommando CMD16 die Blockgröße einstellen kann/muss. Hier könnte ich ja auch einfach 1 wählen, um Byte Adressierung zu bekommen. Eine durchgängig auf die eingestellte Blockgröße gerichtete Adressierung wäre mehr als logisch gewesen.

    Stattdessen muss man sich selber um die Umrechnung kümmern. Da ich bei einer 2GB Karte (Byte orientiert) mit gewählter Blockgröße 512 Byte die Adressen 1..511 sowieso nicht auswählen kann, ist das ganze System ziemlich unstimmig und kompliziert.

    Bei Karten größer 2GB hätte man dann ja einfach eine Einstellung der Blockgröße kleiner 512 verhindern können. Eventuell wird das ja sogar so gehandhabt, was ja auch sinnvoll wäre, da sonst bei Karten > 4GB nicht der gesamte Speicher ausgelesen werden könnte.

  • Wenn Du genau schaust, die allerersten Karten hatten nur 7 Pins. Die zwei äußeren der jetzt 9 Pins wurden dazu gequetscht.

    SD (=secure digital) wurde auch als Kopierschutz eingeführt. Benutzt, denke ich, niemand.

  • Meines Erachtens nach hat man den Initialisierungsvorgang auch unnötig verkompliziert, indem man statt des vorhandenen CMD1 Befehls den zusätzlichen ACMD41 Befehl, der ja aus dem Prefixbefehl CMD55 plus ACMD41 besteht, eingeführt hat. Das hätte man einfacher haben können.


    Das hat sicherlich auch nur was mit Rückwärtskompatibilität zu tun. Damit werden halt die alten Karten anstandlos immer noch erkannt und die neuen können eben dann "anders"/"neu" ihre Größe mitteilen. Sieht aber schon bißchen komisch aus dieses Ablaufdiagramm. Normal könnte ja auch einfach ein Kennbyte geschickt werden, was dann den Typ der Karte mitteilt. Einfach das erste Byte, was die Karte überhaupt ausgibt, wenn man sie einschaltet. Wie ein MagicNumber in Unixfiles oder so.


    Beim Archi machen sie das mit den Blockgrößen ganz einfach. Da gibt es ein Minimum, was man beim Formatieren auch noch bißchen beeinflussen kann, und die eigentliche Größe kommt dann lediglich als "Exponent" daher - also z.B. eine 1 für 256 Byte, eine 2 für 512 Byte eine 4 für 1 KByte usf. Die Diskgröße ist immer in Blöcken. Mit der Erklärung aus #1298, von Reinhard macht das hier natürlich schon so auch Sinn - Byteweise.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Hier mal der Entscheidungsbaum nur für die Initialisierung

    Hallo Jörg,


    die Init-Sequenz hat mich neugierig gemacht: sie unterscheidet sich von der, die hier [1] oder hier [2] beschrieben wird. Darf ich fragen, wo Du Deine Init-Sequenz her hast? Ich frage mich natürlich, ob die gleichwertig sind bzw. wo die Unterschiede her rühren.


    [1] http://chlazza.nfshost.com/sdcardinfo.html

    [2] https://electronics.stackexcha…ize-use-sd-cards-with-spi


    Viele Grüße

    Nils

  • Hallo Nils,

    die Infos habe ich der Seite elm-chan.org entnommen.


    Wenn du dir den Entscheidungsbaum auf chlazza.nfshost.com ansiehst, wirst du feststellen, dass dieser eigentlich identisch zu dem von elm-chan.org ist. Bei Letzterem sind aber z.B. die beiden Kommandos CMD55/ACMD41 einfach zu ACMD41 zusammengefasst, da alle ACMD Befehle das Prefix CMD55 benötigen.


    Ich finde den Flow-Chart von elm hilfreicher, da hier z.B. für den CMD8 Befehl nicht einfach wage "Check Pattern Error" steht, sondern hier die benötigten Send/Response Werte gleich drin stehen. Also "CMD8 (0x000001AA)" senden und dann den Response auf Error (erstes Response Byte <> 0) und danach auf "0x1AA mismatch" prüfen. Also faktisch sendet man 0x000001AA und sollte dann wieder 0xRR0001AA empfangen, wobei RR entweder Null (Version 2 Karte) oder <> Null (Version 1 Karte) ist. Kommt ein ganz anderes Ergebnis zurück, sollte die Karte abgewiesen werden.


    Am hilfreichsten ist es, da mehrere Seiten zu Rate zu ziehen, weil alle irgendwie nicht vollständig sind. Die Info mit dem benötigten CMD55 Prefix musste ich mir auch erst von einer anderen Quelle einlesen. Diese Info hätte ich jetzt dann auch auch der chlazza Seite gefunden.


    Eine gute Info ist auch das angehängte PDF (Vorsicht Confidential !!!)



    ÜBRIGENS:


    Gerade sind die noch fehlenden Tastenkappen eingetroffen, die jetzt eine Woche beim Zoll hängen geblieben sind. Leider musste ich jetzt dann noch fast 50€ Zollgebühren nachzahlen. Ich werde dann Anfang nächster Woche die Päckchen an alle Besteller raussenden, sobald ich alles zusammengepackt und noch die Kurzbeschreibung fertig gemacht habe.

  • Gerade sind die noch fehlenden Tastenkappen eingetroffen, die jetzt eine Woche beim Zoll hängen geblieben sind. Leider musste ich jetzt dann noch fast 50€ Zollgebühren nachzahlen. Ich werde dann Anfang nächster Woche die Päckchen an alle Besteller raussenden, sobald ich alles zusammengepackt und noch die Kurzbeschreibung fertig gemacht habe.

    Super! Die Zollgebühren bekommst selbstverständlich noch von mir nachgeliefert.

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Die Päckchen mit den Tastature-Kits sind schon mal geschnürt. Ich muss mich hier gleich schon mal dafür entschuldigen, dass die Anschlusspins der Taster zum Teil verbogen sind. Das ist der brachialen Verpackungskunst des Lieferanten geschuldet, der alle 600 Schalter in eine gerad so passende Tüte gequetscht hatte.

    Die Anschlüsse lassen sich zwar alle recht leicht wieder hinbiegen, ich hatte da aber bei der Menge jetzt ganz ehrlich keine besonders große Lust das zu machen. Ich habe euch für den Fall, dass eventuell doch ein Pin abbrechen sollte noch einen zusätzlichen Taster dazugelegt. Better save than sorry.


    Da ich jetzt am Wochenende keine große Zeit mehr habe, werde ich die Aufbauanleitung wohl am Montag schreiben und dann alles am Dienstag an euch versenden. Hoffen wir mal, dass bei euch die Post nicht streikt...

  • Na dann bereite ich besser schon mal meinen Elektronikbastelplatz vor: Schraubstock, Hammer, Seitenschneider, Zange,Taschentücher, ... .

    Nee im Ernst Jörg, kein Problem, wird schon hinhauen, ich freue mich schon sehr auf die Sachen! :) Danke für alles!

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Eine gute Info ist auch das angehängte PDF (Vorsicht Confidential !!!)

    Der SPI Teil ist nicht 'confidential', der Rest aber schon :)

    Das PDF enthält aber nur den SPI Teil.

  • Da ich jetzt am Wochenende keine große Zeit mehr habe, werde ich die Aufbauanleitung wohl am Montag schreiben und dann alles am Dienstag an euch versenden. Hoffen wir mal, dass bei euch die Post nicht streikt...

    Freu mich schon drauf. Bitte auch dazuschreiben, was Du noch an Geld für den Zollkram bekommst.

    Das Wissen ist das einzige Gut, das sich vermehrt, wenn man es teilt. (Marie von Ebner-Eschenbach)

  • Es klingelt - der DHL - Paketbote. Hab doch garnix bestellt!?

    Das Päckchen von Jörg!!! Schnell geöffnet bin ich auch diesmal sehr angetan von dem Inhalt: Flachbandkabel mit Quetschsteckern, Platine, Bauteile, Caps und die Taster mit Stabilisierungselementen und ein Schneebesen. Ach ne, das ist ja ein Capsrupfer! Klasse Jörg, alles in super Qualität. Ich bin gespannt wie ein Flitzebogen und es juckt in den Fingern. Aber ich werde wohl erst morgen bei vernünftigem Licht mit dem Zusammenbau anfangen. Danke wieder einmal, lieber Jörg!


    Ergänzung: natürlich sind auch Widerstände, der Quarz, die LEDs und die Fassung dabei.


    Norbert

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Paket ist angekommen und ich muß sagen, 2ee hat sich echt viel Mühe mit der Zusammenstellung gemacht. Sogar Widerstände einzeln beschriftet. Dabei sind die doch eh markiert :) Sieht echt super aus. Bin echt versucht, ins Arbeitszimmer zu gehen und zu basteln. Mal sehen ...


    Zwei Dinge sind mir aber auf die Schnelle aufgefallen: Die LED für CapsLock sollte ja in der Taste sein. Hab aber nur Tastenkappe ohne Loch gesehen. Muß ich das Loch selber bohren? Wenn ja, gibt es da irgendwelche Maße oder muß ich das selbst ermitteln? Zweitens: Für den ATmega wäre ein Standard-ICSP-Anschluß schön. Wenn die Stiftleiste zu sehr das Design stört, dann vielleicht auf der Rückseite Kontaktflächen für ICSP via Pogo-Pins?

  • Zwei Dinge sind mir aber auf die Schnelle aufgefallen: Die LED für CapsLock sollte ja in der Taste sein. Hab aber nur Tastenkappe ohne Loch gesehen. Muß ich das Loch selber bohren? Wenn ja, gibt es da irgendwelche Maße oder muß ich das selbst ermitteln?

    Hallo Martin,

    da du die LOCK LED entweder rechts oben, neben der Power LED oder eben bei der CAPS LOCK Taste einlöten kannst, sind natürlich keine Löcher in den Tasten. Wenn du die Version mit der integrierten LED nimmst, musst du das Loch leider selber ausmessen, bzw. einfach auf der flachen Seite der Kappe diagonale Linien mit dem Bleistift ziehen, wie hier mal grob skizziert - dann natürlich mit dem Lineal.



    Du kannst dann hier auch natürlich evtl. eine 3mm LED nehmen.


    Vergesst bitte auch nicht, dass der CAPS LOCK Taster je nach gewählter Tastenkappe in die richtige Lochposition gelötet werden muss.

    Für den ATmega wäre ein Standard-ICSP-Anschluß schön. Wenn die Stiftleiste zu sehr das Design stört, dann vielleicht auf der Rückseite Kontaktflächen für ICSP via Pogo-Pins?

    Werde ich nochmals drüber nachdenken, aber letztlich muss der ATMega ja nicht wirklich oft umprogrammiert werden.



    Jedenfalls schön, dass alles unbeschädigt angekommen ist.

  • Ist es möglich, daß hier nirgendwo ein Schaltplan der Tastatur ist? Suche gerade die Belegung des Tastaturanschlusses, denn Elektor hatte die Tatstatur ja immer auf 2*7 Pfostenleiste und wäre interessant, ob ich da noch was basteln muß.


    Nachtrag: Hab mal nachgeschaut, welchen Anschluß Jörg auf der Interface-Platine vorgesehen hat. Der ist nicht kompatibel mit Elektor. Muß also was basteln.


    Das müsste so aussehen:

    JC-KBD <-> Elektor Junior/EC/...

    1 <-> N/A ;RESET

    2 <-> 5 (3) ;D3

    3 <-> 4 (13) ;D2

    4 <-> 3 (2) ;D1

    5 <-> 2 (14) ;D0

    6 <-> 6 (12) ;D4

    7 <-> 7 (4) ;D5

    8 <-> 8 (11) ;D6

    9 <-> 14 (8) ;GND

    10 NC

    11 NC

    12 NC

    13 NC

    14 <-> 1 (1) ;/STRB, CA1

    15 <-> 9 (5) ;D7

    16 <-> 11 (6) ;5V

    N/A <-> 10 (10) ; CA2

    N/A <-> 12 (9); -12V


    Da unterschiedliche Stecker beim JC2 die DIL-Nummerierung, bei Elektor als Pfostenleiste und in Klammern als DIL. Der Pin 13 (7) beim Elektor-Anschluß ist nicht verwendet. Wäre also möglich, falls es eine weitere Version der Tastatur-Platine geben sollte, auf 2*7 Pfostenleiste alle Signale aufzulegen, so daß ein 1:1 Anschluß möglich wäre.


    Elektor verwendet nebenbei den CA2 als /READY, so daß eine Tastatur puffern kann und nur dann sendet, wenn READY angezeigt ist.

    Einmal editiert, zuletzt von tante ju ()

  • ich habe es doch noch geschafft, heute die Tasten aufzulöten. Ich werde mangels Lötzinn erst morgen weitermachen. Die Tastatur sieht richtig professionell aus und erinnert mich in der Tat an Tastaturen von OSI, AIM, Apple... . Gut wieder einmal diesen Sound beim Anschlag zu hören. Danke Jörg für die Arbeit, die du dir gemacht hast!

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Hier nochmal der Schaltplan zu der Rev. 1 Tastatur. Bei der zweiten Revision habe ich statt des IC-Sockels einen gewinkelten 2x8 Wannenstecker vorgesehen, da dieser sich dann einfacher und unbeschadet öfter ein- und ausstecken lässt.

    Die Anschlussbelegung ist mit dem Apple 1 kompatibel, da ich die Tastatur eben auch an meiner Apple 1 Replika betreiben möchte.

    D7 wird bei meiner Tastatur auch nicht als als siebtes Datenbit genutzt (würde eh keinen Sinn machen), sondern als Data Available, da ich leider /STROBE nicht an einen Pin hängen konnte der flankengetriggert einen Interrupt setzten kann. Das ist aber nur für den Junior ][ relevant. ansonsten kann man einfach wie gehabt /STROBE nutzen und D7 bleibt (wie auch beim Apple 1) unbelegt.


    Edit: Ich kann ja einen Elektor Junior kompatiblen Anschluss zusätzlich mit drauf setzen.

  • Hallo Jörg, ganz lieben Dank für die Zusendung des Tastatur-Kits.

    Wie immer ein liebevoll zusammengestelltes Paket welches keine Wünsche offen lässt. :anbet:

    Danke danke danke, auch für die I/O LP und die Backplane :sunny::thumbup:


    Ich kann leider erst am Wochenende löten....

    Eine Frage am Rande, für was sind denn die lustigen Tastenkappen mit einer Kuh drauf oder die mit den Chinesischen Zeichen? :mrgreen:
    Sind die überzählig?

  • Eine Frage am Rande, für was sind denn die lustigen Tastenkappen mit einer Kuh drauf oder die mit den Chinesischen Zeichen? :mrgreen:
    Sind die überzählig?

    Das scheint dem eigenartigen chinesischen Geschmack geschuldet. Ich musste deshalb auch recht lange suchen, bis ich einen Tastenkappensatz gefunden hatte, der vollständig normal war. Man glaubt nicht, was es da für "lustige" Gestaltungsmöglichkeiten gibt. :fp:


    Edit: Ja, die sind überzählig und eurem eigenen Spieltrieb unterworfen...

  • Hallo Jörg,


    meine Tastatur funktioniert super! Ist das ein Komfort, jetzt den Junior über die eigene Tastatur bedienen zu können, das macht richtig Spaß. Klasse!


    Gruß Norbert

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Hier ein Blick auf das neue Schätzchen! :)


    Nachtrag: ich bin noch nicht sicher, aber ich denke ich werde die Version ohne die gebohrte Capslock beibehalten. ich habe beides getestet und die ohne Bohrung gefällt mit einfach besser.

    Bilder

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)