Mikroprozessor Boards/SDIO-Board: Unterschied zwischen den Versionen

Aus
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „right|thumb|200px|SDIO am 6309 Board __NOTOC__ == I/O Board nur mit 74xx TTL für Prozessor Bus == Für mein Mikroprozessor Boar…“)
 
(Firmware)
 
(17 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[File:IOSD-board-09.jpg|right|thumb|200px|SDIO am 6309 Board]]  
+
[[File:Wichit-sd-02.jpg|right|thumb|200px|SDIO Board]] 
 +
[[File:6809kit-03.jpg|right|thumb|200px|6809 Kit + SDIO Board]]  
 
__NOTOC__
 
__NOTOC__
== I/O Board nur mit 74xx TTL für Prozessor Bus ==
+
== SD-IO von Nils Eilers ==
  
Für mein [[Mikroprozessor Boards/6809|6309 Board]] (es geht auch mit dem [[Mikroprozessor Boards/6502|6502 Board]]) möchte ich ein '''SD Karten Interface''' machen. Dazu brauche ich ein paar digitale IO zum Anschluss der SD Karte. Die Idee ist abgekupfert vom Macher des 6309 Board (Wichit Sirichote), auf dem Board sind alle IO mit TTL Bausteine realisiert (außer das SIO).
+
Nils Eilers hat eine SD-Card Platine entwickelt für das [[Mikroprozessor Boards/6809|6309 Board von Wichit Sirichote]]. Die Platine wird über ein Flachbandkabel an den 40 poligen '''Erweiterungsport''' angeschlossen. Der 40 polige '''Erweiterungsport''' führt alle relevanten Signale der CPU heraus. Dazu gehört der ganze Adressbus (A0 bis A15) sowie der Datenbus und der Controlbus.
  
Das Board hat den Adressbus heraus geführt. Aber da müsste man eine Adressdekodierung machen. Wäre zwar simpel mit einem 74138 oder einem GAL, aber es gibt einen einfacheren Weg. Das Board hat (wie alle Boards von Sirichote) einen Anschluss für ein LCD Dsiplay (Standard HD44780). Das LCD Display hat zwei Register und hängt direkt am CPU Bus. Die IO Adresse ist bereits fertig ausdekodiert.
+
Das SD-IO Board von Nils Eilers enthält einen GAL für die Adressdekodierung und Clock Erzeugung für das SD Board.  
 +
Dazu enthält es TTL für IO (D-FF + Input Driver) sowie einen Baustein für die Pegelanpassung zur SD Karte.
  
  
Das einzige Problem, die HD44780 Logik ist verdreht:
+
<gallery mode="traditional" widths=90px heights=90px perrow=9 caption="">
 +
Image:Wichit-sd-01.png
 +
Image:Wichit-sd-02.jpg
 +
Image:IOSD-board-09a.jpg
 +
Image:IOSD-board-09e.jpg
 +
Image:6809kit-03.jpg
 +
</gallery>
 +
 
  
* das LCD "enable" ist HI aktiv
+
Die [[Mikroprozessor Boards/IO Board|erste Version des SDIO]] war noch ein Prototyp auf Lochraster und am '''LCD Port''' angeschlossen.
* das LCD R/W ist nur eine Adressleitung (warum hat Sirichote das so gelöst???)
 
  
Deswegen braucht es noch ein 7400 um die Adressierung passend zu machen
+
Der Vorteil eines SD Boards am Erweiterungsport: das LCD Port ist wieder frei, man kann also SD Karte UND LCD Display zugleich betreiben.
  
 +
'''Vielen Dank an Nils für das wunderschöne Board!'''
  
Das IO Board hat 8 digitale Ausgänge und 8 digitale Eingänge. Als Ausgang wird ein D-Latch 74HC573 benutzt. Als Eingang dient ein 74HC541.
 
  
Zuerst habe ich das ganze natürlich auf einem Steckboard getestet. Danach kam der Aufbau auf einer Lochstreifen Platine. Zum testen der Hardware dient ein Arduino UNO. Die beiden LED zeigen den Lesevorgang der Eingänge (grün) und Schreibzugriff (rot). Als Anzeige der Ausgänge dient bei Test ein Proto LED Board. Zum testen der Eingänge stecke ich ein Proto Taster Board an.
+
'''<u>Update 1</u>:''' für die 30K Firmware braucht es eine ''Hardware Modifikation'' bestehend aus einem Draht (siehe Foto: A1 an Pin 4 des GAL).
 +
 
 +
 
 +
<br />
 +
=== Firmware ===
 +
 
 +
Der Lowlevel Zugriff auf die SD Karte ist in 6309 Assembler Implementiert (SD BIOS). Es liegt im ROM ab Adresse $F800 und belegt etwas weniger als 2KB. Der Zugriff erfolgt über eine Sprungtabelle ab $F800. Neben dem SD Card Code sind einige weitere Routinen enthalten für Zeitverzögerung (Delay_xx) und Terminal Ausgabe (PUTxxx, HEXnn, DUMPmmm ..). Der SD Card Teil beinhaltet SD Initialisierung (SDIOinit, SDIOstatus), SD lesen (SDIOreadCSD, SDIOreadCID, SDIOreadStatus, SDIOreadBlock, SDIOreadBlocks) und SD schreiben (SDIOwriteBlock, SDIOwriteBlocks).
 +
 
 +
Auf dem SD BIOS aufgesetzt wird das [http://elm-chan.org/fsw/ff/00index_e.html FAT-FS von Elm Chan]. Das FATFS kann man mit dem großartigen CMOC Compiler übersetzen. Es sind nur geringe Änderungen in der Datei FF.C notwendig, weil der vorliegende CMOC Probleme mit dem Operator ? hat.
 +
 
 +
Das große Problem des mit CMOC übersetzte FATFS ist die Größe des Modul. Der CMOC produziert relativ großen Code. Wenn man alle Optionen des FATFS in der Datei ffconf.h aktiviert, dann braucht es 32KB und hat keinen Platz mehr im ROM. Die aktuelle Version v1.01 hat die allerwichtigsten Dinge aktiviert und belegt fast 22KB des ROM. Der Code hat auch eine Sprungtabelle ganz am Anfang an der Adresse $A000. Die Sprungtabelle ist aber auf CMOC Code ausgelegt und kann direkt von C Funktionen im RAM verwendet werden (siehe Beispiel Code). Dadurch wir der C Code im RAM sehr kompakt.  
  
  
 
<gallery mode="traditional" widths=90px heights=90px perrow=9 caption="">
 
<gallery mode="traditional" widths=90px heights=90px perrow=9 caption="">
Image:IOSD-board-01.jpg
 
Image:IOSD-board-02.jpg
 
Image:IOSD-board-05.jpg
 
Image:IOSD-board-06.jpg
 
Image:IOSD-schematic.GIF
 
</gallery>
 
<gallery mode="traditional" widths=90px heights=90px perrow=9 caption="">
 
Image:SDIO-Tera-01.png
 
 
Image:SDIO-Tera-02.png
 
Image:SDIO-Tera-02.png
 
Image:SDIO-Tera-04.png
 
Image:SDIO-Tera-04.png
 
Image:SDIO-Tera-05.png
 
Image:SDIO-Tera-05.png
Image:SDIO-Tera-06.png
+
SDIO-Tera-06.png
 +
SDIO-firmware-01.png
 
</gallery>
 
</gallery>
  
  
Der Lowlevel Zugriff auf die SD Karte ist in 6309 Assembler Implementiert. Darauf aufgesetzt ist das [http://elm-chan.org/fsw/ff/00index_e.html FAT-FS von Elm Chan]. Die FAT-FS kann man mit dem großartigen CMOC Compiler übersetzen. Es sind nur geringe Änderungen in der Datei FF.C notwendig, weil der vorliegende CMOC Probleme mit dem Operator ? hat.
 
  
<br />
+
* V1.00 - erste Version, FATFS nur lesen
=== Specifications ===
+
* V1.01 - FATFS lesen/schreiben, Datei löschen, Directory lesen, Dateiattribute setzen
 +
 
  
* 8x digitaler Ausgang über 74HC573
+
Der nächste Schritt wäre die Implementierung von [https://nitros9.sourceforge.io/wiki/index.php/Main_Page NitrOS-9] statt der FATFS Sache. OS9 ist viel kompakter als FAT und eben für die Motorola 6809 optimiert.
* 8x digitaler Eingang über 74HC541
 
* Chip Select Aufbereitung über 74LS00
 
* ein SD Card Modul
 
  
 
<br />
 
<br />
Zeile 51: Zeile 59:
 
=== Dokumentation ===
 
=== Dokumentation ===
  
* [[Media:IOSD-schematic.GIF|Schematic des SD-IO Board]]
+
* [[Media:Wichit-sd-board-final.pdf|SDIO Platine von Nils Eilers (Schematic)]]
* Implementierung für das 6809 Wichit Board
+
* [[Media:SDIO-Firmware 1.01.zip|Firmware v1.01 für SDIO Board von Nils Eilers + 6809 Board von Wichit Sirichote (30K patch + SDIO Bios)]]
 +
* [[Media:Cmoc-win32 01.zip|Win-32 Toolchain - CMOC + Utilities: SREC2BIN, Gnu-MAKE]]
  
 
<br />
 
<br />
Zeile 60: Zeile 69:
  
 
* [[Mikroprozessor_Boards/6809|6809/6309 Mikroprozessor Board von Wichit Sirichote]]
 
* [[Mikroprozessor_Boards/6809|6809/6309 Mikroprozessor Board von Wichit Sirichote]]
 +
* [[Mikroprozessor Boards/IO Board|digital I/O Karte mit SD-Karte]]
 
* [http://elm-chan.org/docs/mmc/mmc_e.html SD Card Dokumentation von Elm Chan]
 
* [http://elm-chan.org/docs/mmc/mmc_e.html SD Card Dokumentation von Elm Chan]
 
* [http://elm-chan.org/fsw/ff/00index_e.html FAT Filesystem für Embedded Systems (Implementierung von Elm Chan]
 
* [http://elm-chan.org/fsw/ff/00index_e.html FAT Filesystem für Embedded Systems (Implementierung von Elm Chan]
 +
* [https://nitros9.sourceforge.io/wiki/index.php/Main_Page NitrOS-9 Wiki]
 
* [http://www.rjhcoding.com/avrc-sd-interface-3.php Interfacing an SD Card]
 
* [http://www.rjhcoding.com/avrc-sd-interface-3.php Interfacing an SD Card]
 
* [https://www.kampis-elektroecke.de/2018/11/avr-mit-einer-sd-karte-erweitern-teil-1/ SD Card Implementierung für AVR (Kampis Eletroecke)]
 
* [https://www.kampis-elektroecke.de/2018/11/avr-mit-einer-sd-karte-erweitern-teil-1/ SD Card Implementierung für AVR (Kampis Eletroecke)]
 
* [https://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html SD/SDHC Card Interfacing with ATmega8 /32 (FAT32 implementation)]
 
* [https://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html SD/SDHC Card Interfacing with ATmega8 /32 (FAT32 implementation)]
 
* [https://community.st.com/s/question/0D50X00009XkaGD/sdio-command-crc-error-on-acmd41 CRC Problem mit ACMD-41]
 
* [https://community.st.com/s/question/0D50X00009XkaGD/sdio-command-crc-error-on-acmd41 CRC Problem mit ACMD-41]

Aktuelle Version vom 26. Juni 2020, 19:07 Uhr

SDIO Board
6809 Kit + SDIO Board

SD-IO von Nils Eilers

Nils Eilers hat eine SD-Card Platine entwickelt für das 6309 Board von Wichit Sirichote. Die Platine wird über ein Flachbandkabel an den 40 poligen Erweiterungsport angeschlossen. Der 40 polige Erweiterungsport führt alle relevanten Signale der CPU heraus. Dazu gehört der ganze Adressbus (A0 bis A15) sowie der Datenbus und der Controlbus.

Das SD-IO Board von Nils Eilers enthält einen GAL für die Adressdekodierung und Clock Erzeugung für das SD Board. Dazu enthält es TTL für IO (D-FF + Input Driver) sowie einen Baustein für die Pegelanpassung zur SD Karte.



Die erste Version des SDIO war noch ein Prototyp auf Lochraster und am LCD Port angeschlossen.

Der Vorteil eines SD Boards am Erweiterungsport: das LCD Port ist wieder frei, man kann also SD Karte UND LCD Display zugleich betreiben.

Vielen Dank an Nils für das wunderschöne Board!


Update 1: für die 30K Firmware braucht es eine Hardware Modifikation bestehend aus einem Draht (siehe Foto: A1 an Pin 4 des GAL).



Firmware

Der Lowlevel Zugriff auf die SD Karte ist in 6309 Assembler Implementiert (SD BIOS). Es liegt im ROM ab Adresse $F800 und belegt etwas weniger als 2KB. Der Zugriff erfolgt über eine Sprungtabelle ab $F800. Neben dem SD Card Code sind einige weitere Routinen enthalten für Zeitverzögerung (Delay_xx) und Terminal Ausgabe (PUTxxx, HEXnn, DUMPmmm ..). Der SD Card Teil beinhaltet SD Initialisierung (SDIOinit, SDIOstatus), SD lesen (SDIOreadCSD, SDIOreadCID, SDIOreadStatus, SDIOreadBlock, SDIOreadBlocks) und SD schreiben (SDIOwriteBlock, SDIOwriteBlocks).

Auf dem SD BIOS aufgesetzt wird das FAT-FS von Elm Chan. Das FATFS kann man mit dem großartigen CMOC Compiler übersetzen. Es sind nur geringe Änderungen in der Datei FF.C notwendig, weil der vorliegende CMOC Probleme mit dem Operator ? hat.

Das große Problem des mit CMOC übersetzte FATFS ist die Größe des Modul. Der CMOC produziert relativ großen Code. Wenn man alle Optionen des FATFS in der Datei ffconf.h aktiviert, dann braucht es 32KB und hat keinen Platz mehr im ROM. Die aktuelle Version v1.01 hat die allerwichtigsten Dinge aktiviert und belegt fast 22KB des ROM. Der Code hat auch eine Sprungtabelle ganz am Anfang an der Adresse $A000. Die Sprungtabelle ist aber auf CMOC Code ausgelegt und kann direkt von C Funktionen im RAM verwendet werden (siehe Beispiel Code). Dadurch wir der C Code im RAM sehr kompakt.



  • V1.00 - erste Version, FATFS nur lesen
  • V1.01 - FATFS lesen/schreiben, Datei löschen, Directory lesen, Dateiattribute setzen


Der nächste Schritt wäre die Implementierung von NitrOS-9 statt der FATFS Sache. OS9 ist viel kompakter als FAT und eben für die Motorola 6809 optimiert.


Dokumentation


Links