Linuxbasierendes µC-Board
Ein ARM9 Rechner von der Idee bis zum funktionierenden Rechner inkl. Betriebssystem
Auf der Suche nach leistungsfähigen Controllern wird man immer auf die ARMs stoßen. Kleine ARM Controller mit internem Flash und RAM sind einfach im Layout und einfach in der Programmierung, aber hier soll es um ein System mit mehreren MByte an RAM, USB, Ethernet, und grafischem Display (Notebook TFT) etc. gehen.
Aufgrund der recht komplexen Peripherie ist es von Vorteil, ein Betriebssystem einzusetzen um nicht alles selbst implementieren zu müssen. Für ARMs ist Linux zweckmäßig.
Hier verwenden wir einen AM1707 von Texas Instruments, dieser Controller ist recht günstig zu bekommen und trotzt BGA relativ gut zu verarbeiten, auf Grund des recht großen Pinabstands.
Zusammenfassung der Hardware
- 456 MHz ARM9
- 32 MByte SDRAM
- 10/100 Mb/s Ethernet
- SD/MMC Steckplatz
- NAND Flash statt SD Karte verwendbar
- 4 MByte Flash für Bootloader
- LVDS Ausgang für Display
- 3 USB Ports (1x FT232 am UART, 1x USB Host, 1x USB 2.0 OTG)
- Alle unbenutzten Pins auf Stiftleisten zugänglich
- Ladeschaltung für Li Akkus
- Akku- oder Netzbetrieb
- Überwachung aller Spannungsebenen
- Linux 2.6.33 Kernel, Debian squeeze
Realisierung
Stromversorgung
Bei jeder Schaltung kommt früher oder später die Frage der Stromversorgung auf. Welche Spannungen werden benötigt und welche stehen zur Verfügung? Hier werden lediglich 1,3 V Kernspannung, 5 V für USB und 3,3 V für den Rest benötigt. Zur Verfügung stehen hier 12 V vom Netzteil oder 8,4 V vom Akku zur Verfügung. Mit drei Schaltreglern werden hier beide Spannungen bereitgestellt.
Peripherie
Eigentlich möchte man alle Funktionen des Controllers nutzen können. Leider geht das nicht immer, da einiges gemultiplext wird. Beispielsweise lässt sich der eine Speichercontroller entweder für SD Karte oder NAND Flash nutzen, aber nicht beides zeitgleich. Die oben aufgelistete Peripherie ist ein Kompromiss der realisierbar ist und eigentlich alles nötige beinhaltet
Herausforderungen und Probleme
Ein toller Spaß ist ein 32 Bit Speicherbus, der mit 150 MHz taktet. Stichwort Leitungslänge und Impedanzen. Erstaunlicherweise zeigt sich diese Teil deutlich unkritischer als erwartet. Leitungslängenunterschiede im cm Bereich sind kein Problem.
Interessanterweise gibt es dafür große Probleme mit SPI. Der Zugriff auf den SPI Flash funktioniert nur wenn man mit einem Oszilloskoptastkopf nachmessen will was los ist. Es scheint als ob die Flanken so steil sind, dass es zu Reflektionen kommt. Ich kann mit meiner Messtechnik da nichts sinnvolles ausmessen. 22pF an den richtigen Leitungen haben das Problem für mich erledigt.
Alle weiteren Ärgernisse sind Softwareärger. Zum Teil ist die Dokumentation etwas lückenhaft, weshalb ausprobieren angesagt ist. Die Kerneltreiber die TI bereitstellt sind teilweise verbesserungswürdig (SPI funktioniert nicht mit DMA) oder müssen erstmal implementiert werden. Nicht zu vergessen ist das anpassen von UBoot an das Board, vorallem wenn man TFTP zum booten nutzen möchte bedeutet das einiges an Spaß!
Nach viel Softwarefluchen ist aber alles geschafft und das Board bootet problemlos in ein Debian squezze von SD Karte, NFS oder USB. Ich möchte hier nicht jedes Detail bezüglich anpassen von Software beschreiben. Außerdem möchte ich weder Schaltplan, Layout noch Software einfach unkontrolliert freigeben, da etliches an Arbeit drinnen steckt und es durchaus Leute oder Firmen gibt, die Arbeit anderer gewinnbringend vermarkten und der der die Arbeit hat nichtmal was davon weiß. Wer Interesse an dem Board hat für nicht kommerzielle Zwecke kann gerne eine Email schreiben.
Dieses Board ist durchaus Spieletauglich ;-) Maus und Tastatur sind per USB angeschlossen, als Display dient ein Notebookdisplay. So hat man einen komplett selbstgebauten Rechner!