Dies ist eine alte Version des Dokuments!


SD-Karte mit AVR

SD-Karte am Z9001 - die Lösung von Kingstener

Von Kingstener habe ich ein fertig aufgebautes SD-CARD-Interface für die KC's bekommen. Zur Nutzung am Z9001 kann man das noch abspecken, benötig wird i.W. nur ein Mikrocontroller ATMEGA32 und eine SD-CARD-Fassung. Die Hardware wird am User-Port und anstelle des Kassettenrecorders am Tape-Eingang angeschlossen und fungiert als digitaler Kassettenrecorder. Nach RESET wird automatisch ein kleines Monitorprogramm an den Tape-Eingang gesendet, was auf dem Z9001 gestartet wird und die weitere Kommunikation mit der SD-Karte über den USER-Port übernimmt. Das ganze ist wirklich recht schnell und funktioniert sehr gut. Ich will die Software noch ein wenig ausbauen, mit dem Ziel, dass die Systemfunktionen zur Kassettenarbeit komplett auf die SD-Card umgebogen werden, so dass von jedem Programm aus direkt und schnell auf SD-Karte geschrieben und gelesen werden kann.

sdcard1.jpg Kommandos (diese werden alle im Mikrokontroller ausgeführt - das Terminalprogramm im Z9001 ist nur wenige Byte groß)!
sdcard2.jpg Die Leiterplatte. Am z9001 kann fast alles oberhalb des Mikrocontrollers entfallen. Die Fassung für die SD-Karte ist auf der Leiterseite. Die SD-Karte schaut oben hervor (blau).
sdcard3.jpg Verzeichniswechsel, Directory listen, Programm laden

KC ↔ Terminalprogramm zur Byte-Ein- und Ausgabe ↔ User-Port ↔ SDKC-Modul

KC ↔ Kassettenrekorderanschluss ↔ SDKC-Modul

Die SD-Karte ist FAT32-formatiert. Auf ihr sind die Programme „load87“ und beliebige Z9001-Programme im TAP-Format abgelegt. Unterverzeichnisse sind natürlich möglich.

Das Modul wird am Userport und am Kassettenrekorderport angeschlossen.

Nach Einschalten des Z9001 erhält auch das Modul Spannung vom Z9001 und es wird das Programm „load87“ von der SD-Karte an den Kassettenanschluss ausgegeben. Wenn man schnell ist, kann man beim Booten am Z9001 noch „SDX“ <ENTER> eingeben. Ist man zu langsam und es erscheint „bad record“, muss man am Modul reset drücken und es halt nochmal versuchen.

Das Programm SDX - das Terminalprogramm - startet automatisch. Mit H gibt es eine Hilfe, mit L programmname wird ein Programm eingelesen. So einfach ist das!

Die Schaltungsunterlagen von Kingstener plaenesd2kc.zip sind unverändert. Wird das Modul nur für den z9001 genutzt, kann fast alles oberhalb des Mikrocontrollers entfallen (s. Stromlaufplan). Dann ist ein kompakterer Aufbau möglich.

Initial muss der Controller den Bootloader (bootloader-0x7838434B.hex) einprogrammiert bekommen. Das geht mit einem externen AVR-Programmer oder einer selbstgebauten Lösung, wie etwa unter usb beschrieben. Wichtig ist das korrekte Setzen der Fuses:

Fuses: bootsz1, bootrst, crc ignorieren
BOOTSZ1 = 1 und BOOTSZ0 = 0 (Boot Size 2048 Byte = 1024 Word)
BOOTRST = 0: Ein Reset führt direkt zur Ausführung des Boot Loaders.

Der Atmega-Microcontroller kann auch später im fertigen Gerät über das SPI-Interface programmiert werden!

Der verwendete Bootloader stammt aus dem mikrocontroller-Forum SD_Bootloader_für_AT_Mega. Er wurde ein wenig angepasst.

Befindet sich auf der SD-Karte eine Datei SD2KC.BIN mit neuerer Version als im Controller gespeichert, so kopiert der Bootloader diese Datei in den internen Flash als Firmware (= Betriebssystem) für sich und startet dieses. Damit ist auf einfachste Weise ein Update der Firmware möglich.

Auf die Mit FAT16 formatierte SD-Karte müssen die beiden Programme

  • load87
  • SD2KC.BIN

ins Root-Verzeichnis.

Der Bootloader programmiert den AVR beim Start mit SD2KC.BIN, wenn die Version auf der SD-Karte neuer ist als die im AVR befindliche.

Z9001-Programme müssen in TAP-Format vorliegen. Sie können beliebig in Unterverzeichnissen der SD-Karte liegen.

Tipp: Da nur 8+3-(DOS)-Filenamen angezeigt werden, sollte man die TAP-Dateien entsprechend umbenennen.

Ich habe erstmal eine relokatible Version von SDX erstellt, die sich ans vorhandene RAM-Ende stellt. Damit muß man nicht mit verschiedenen Versionen arbeiten.

  • z9001/erweiterungen/sdcard2.1283499162.txt.gz
  • Zuletzt geändert: 2010/09/02 22:00
  • (Externe Bearbeitung)