VIA 65c22 als SPI-Master

Als zentraler Peripheriebus des Steckschweins wird SPI eingesetzt. Dies ist eine der fundamentalen Designentscheidungen gewesen, denn so lassen sich unterschiedliche Baugruppen über eine gemeinsame Schnittstelle unabhängig vom Timing des Systembus ans Steckschwein anbinden. Insbesondere die Möglichkeit, eine SD-Karte per SPI anbinden zu können, ist ein großer Vorteil und ermöglicht uns, fast ohne Hardwareaufwand eine Massenspeicherlösung zu realisieren. Die Rolle des SPI Masters erfüllt die VIA 65c22 via „bit banging“ unter Zuhilfename des internen Schiebregisters für MISO. Hierzu ist Port B der VIA folgendermaßen belegt:

PB0 SPICLK
PB1 SS1 SD-Karte
PB2 SS2 PS/2 Tastaturcontroller (ATmega8)
PB3 SS3 RTC (DS1306)
PB4 SS4 (frei)
PB5 SS5 (frei)
PB6 SS6 (frei)
PB7 MOSI
CB1 SPICLK (verbunden mit PB0)
CB2 MISO

Somit besteht Daten lesen im Grunde nur aus „hin und herwackeln“ von PB0. Die SPI-Lesegeschwindigkeit ist somit in erster Linie davon abhängig, wie schnell der Prozesor abwechselnd Daten in den VIA Port schreiben kann. Das interne Schieberegisters der VIA wird also im Modus „Shift In – External CB1 Clock Control (011)“ betrieben. Dies ist genau jener Modus, der vom berühmt-berüchtigten VIA-Bug betroffen ist. Wir haben keinerlei schaltungstechnische Maßnahmen unternommen, um dafür einen Workaround zu schaffen. Stattdessen verlassen wir uns darauf, dass wir den SPI-Takt programmatisch durch den Prozessor erzeugen und damit eine Synchronizität plus entsprechendem Versatz zum Taktsignal haben. Dadurch tritt der Bug nicht auf. Viel gefährlicher ist es, wenn das Schieberegister von einem externen Signal getaktet wird, das asynchron zum Systemtakt ist.

io

Beschaltung der 65C22 VIA. Per SPI sind Tastaturcontroller und RTC angebunden