Projekt Hardware Anleitung |
MXE11: Unix auf dem Mikrocontroller
V1.74 (c) 2017-2019 Jörg Wolfram 1 GrundversionGleich vornweg: Eine 1:1 Nachbauanleitung für alle möglichen Varianten gibt es nicht, da ich meist die Bauteile nehme, die ich geade da habe oder von alten Projekten und Leiterplatten "recyclen" kann. Lediglich für die SPC56EL60- und die STM32F405-Variante gibt es ein relativ aktuelles Layout.Als Erweiterung sind 4 analoge Inputs, 4 analoge Outputs (via PWM) und jeweils 4 digitale Inputs/Outputs vorgesehen. Für später ist eine Netztwerkfunktion via CAN geplant. Das Layout ist einseitig (mit ein paar Drahtbrücken) und beinhaltet den STM32F405RG, einen AT45DB642 und einen ATMega88 als RTC. Es ist mit gEDA PCB erstellt und befindet sich im doc Archiv. Ich habe es zur Zeit nicht weiter dokumentiert, da meistens andere Layoutprogramme bevorzugt werden. 1.1 AllgemeinesIm Schaltplan sind meist nur die Signalbezeichnungen angegeben. Als externer Datenträger können entweder ein AT45DB642 Dataflash (Binary page mode) oder eine SD-Karte verwendet werden. Die Anschlussbelegung am Controller ist in beiden Fällen gleich. Als serielle Schnittstellen sind momentan TTY8 (/dev/tty8) und TTY0 (/dev/tty0) vorgesehen, wobei TTY8 die primäre Konsole ist. Als ISP-Schnittstelle sind die Anschlüsse vom UPROG2 angegeben. Falls ein AT45DB642 eingesetzt werden soll, empfehle ich, anstatt eines Reset-Tasters einen Rastschalter aufzubauen. Damit lässt sich der Mikrocontroller währen der Programmierung des Flashes deaktivieren und stört nicht die Programmierung.In der Tabelle steht OK für erfolgreich getestet (und gemessen), NT für nicht getestet (ich hatte auf dem Board keinen Zugriff auf die Signale) und --- für nicht implementiert. 1.2 SPC56EL60das ist die Ur-Version, die ich mit einem Testboard aufgebaut habe. Die Quarzfrequenz beträgt 16MHz, die CPU-Frequenz 120MHz. Zur Zeit wird nur 1 Core verwendet.1.2.1 IO-Belegung
1.3 STM32F103Diese STM32-Version habe ich eingestellt, da mein Board nicht alle notwendigen Signale herausgeführt hatte.1.4 STM32F107Als Board habe ich das Olimex STM32-H107 Board verwendet, Quarzfrequenz liegt bei 8MHz, 72MHz Taktfrequenz.1.4.1 IO-Belegung
1.5 STM32F411Als Board habe ich das STM32F411E-Discovery Board verwendet, Quarzfrequenz liegt bei 8MHz.1.5.1 IO-Belegung
1.6 STM32F405Board ist hier ein eigenes Board für den MXE11, Quarzfrequenz liegt bei 16MHz.1.6.1 IO-Belegung
1.7 STM32L475Board ist hier das MXE11-Board wie beim STM32F405, lediglich die Signale für TTY0 wurden parallelverdrahtet, da sie auf PC4/PC5 anstelle PC6/PC7 liegen. Die Quarzfrequenz liegt ebenfalls bei 16MHz. ADC und PWM funktionieren momentan noch nicht.1.7.1 IO-Belegung
2 Die RTCAuch wenn einige der verwendeten Mikrocontroller eine integrierte RTC besitzen (STM32), habe ich eine eigene (externe) Lösung entwickkelt, die mit allen eingesetzten Controllern funtioniert. Über eine 2-Draht Schnittstelle sind neben dem Sekundenregister (32 Bit) noch 15 weitere batteriegestützte 32-Bit Register zur universellen Verwendung verfügbar.2.1 SchaltungKernstück der Schaltung ist im konkreten Fall ein ATMega48/88/168/328, der genaue Typ ist zweitrangig. Der Controller läuft mit internem RC-Oszillator, zusätzlich ist ein 32758 Hz Uhrenquarz notwendig. Die Kommunikation mit dem Host-Controller erfolgt über zwei Leitungen (Clock und Data), wobei die Clock-Leitung über einen NPN-Transistor invertiert wird. Die Datenleitung erhält einen Entkopplungswiderstand von 1KOhm, um Signalkonflikte während der Richtungsumschaltung zu vermeiden. Versorgt wird der ATMega über eine 3V Lithium-Knopfzelle.2.2 ProtokollDie Kommunikation seitens des Host-Controllers erfolgt über 2 frei wählbare I/O Pins und softwareseitig über meine Unilib. Der RTC-Controller befindet sich die meiste Zeit im Sleep und wird in regelmäßigen Abständen über den Timer 2 aufgeweckt. Als weitere Interrupt-Quelle dient INT0, der über den externen Transistor mit der Clock-Leitung verbunden ist. Die maximale Taktfrequenz für die Übertragung beträgt ca. 16KHz. Da das Auslesen der RTC nur beim Start des Emulators erfolgt, spielt die für die Kommunikation erforderliche Zeit nur eine untergeordnete Rolle.Danach werden clocksynchron 4 Adressbits und ein R/W Bit zur RTC gesendet. Abhängig von R/W Bit folgen dann 32 Bits Daten entweder von der RTC zum Host oder vom Host zur RTC. Danach ist die Kommunikation abgschlosssen und die RTC geht wieder in den Sleep-Mode. Bei einer unvollständigen Kommunikation bricht die RTC nach ca. 0,5 Sekunden mit einem Timeout ab und geht wieder in den Sleep-Mode. Auf diese Weise werden kurze Störimpulse ausgefiltert. 2.3 SoftwareDie Software auf dem ATMega ist in Assembler geschrieben und nutzt sowohl Timer 2 als auch Int0 als Wake-Up und Interrupt-Quellen.Die Fuse-Einstellungen für einen ATMega88 lauten:
created with latex2web.pl v0.64 © 2006-2018 Joerg Wolfram |