mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik "Pingu920" - ARM9 Linux Embedded zum selbst Löten


Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anbei ein kleines Projekt, an dem ich gerade arbeite.

Es handelt sich um einen Einplatinencomputer auf Basis des Atmel 
AT91RM9200, der darauf ausgelegt wird, möglichst preisgünstig und vor 
allem mit "Hausmitteln" herstellbar zu sein.

Auf der Platine:

* AT91RM9200 (ARM920T @ 180 MHz)
* 64 MByte SD-RAM
* 4 MByte serielles Dataflash für Bootloader
* USB-Host mit Buchse Typ A
* USB-Device mit Buchse Typ B
* Ethernet 10/100-Base-T mit Buchse RJ45
* SD-Karten-Slot
* Schaltnetzteil 3,3V und 1,8V mit genügend Reserven für weitere 
Peripherie

Ein einfacher 64-poliger Wannenstecker stellt folgende externe 
Schnittstellen zur Verfügung:

* 4 x serielle Schnittstelle RXD/TXD, 3 x zusätzlich RTS/CTS
* 1 x SPI mit Chip-Select
* 1 x TWI bzw. I2C
* External Bus Interface (EBI) mit 16bit Datenbus und 4 Adressleitungen 
für MMIO
* zahlreiche GPIO
* alle für ein IDE-Interface erforderlichen Signale stehen extern zur 
Verfügung

Programmieren lässt sich das Board ganz einfach ohne JTAG, da das 
interne Bootprogramm im ROM des AT91RM9200 den Download per XMODEM über 
eine serielle Schnittstelle, die sog. "Debug Unit", zulässt. Diese Debug 
Unit ist über einen FT232R als USB nach draußen geführt. Über das 
Einlöten von Widerständen wird festgelegt, ob die USB-B-Buchse auf der 
Platine mit der Debug Unit oder dem USB Device Port des AT91RM9200 
verbunden ist.

Die Platine wird etwa eine halbe Eurokarte groß sein und in ein 
handelsübliches Aluprofil-Gehäuse passen. SD-Karten-Slot und alle 
Buchsen sind an einer Seite angeordnet, so daß sie über die Frontplatte 
zugänglich sind.

Es kommen keinerlei BGA- oder QFN-Bauteile zum Einsatz. Der "schlimmste" 
Pitch ist 0,5mm; solche Bauteile lassen sich auch mit einfachem Werkzeug 
und etwas Efahrung per Hand löten. Die Platine ist zwar vierlagig, die 
Anforderungen bleiben mit 0,3mm als kleinster Bohrung und 150µm als 
feinster Struktur im Kupfer jedoch im Rahmen. Die Platine ist nur 
einseitig bestückt.

Aktueller Stand: Schaltplan und Platinenlayout "so gut wie fertig".

Autor: Oliver Döring (odbs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vorläufiger Schaltplan.

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt hoffe ich natürlich, daß zahlreiche Tipps und 
Verbesserungsvorschläge eintrudeln, bevor die Platine in die 
Prototypen-Fertigung geht! Allerdings wird sich am grundlegenden Konzept 
nichts mehr ändern, denn ich benötige genau eine solche Platine als 
Bestandteil für ein größeres Projekt.

Wer gravierende Fehler findet, wird im nächsten Iterationsschritt mit 
einer Gratis-Platine bedacht - "so lange der Vorrat reicht" ;)

Autor: Tüddel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein paar Ferite / Filter täten in den Stromversorgungszweigen und in den 
Steckkontackten ganz gut..

Zusätzlicher Spannungsversorgungsstecker falls man man "Stand Alone" 
sein will

Naja halt allerlei rund um EMV-Schutz und Störausstrahlung fehlt halt... 
Aber es kommt auch sehr stark auf das Layout an!

Hab auch schon diverse mehrlagige (10+) EMV-Gerechte (mit bestandenen 
Test) zig MHz DSP-Layouts mit EAGLE ;) geroutet... ist halt alles ein 
sache des Könnens und des Wissens um Proble prahl ;)

by the way
Was für ein CAD-System benutzt du? Integra?

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das ist nur das schnöde Eagle.

ESD/EMV-Schutz wollte ich für den "User-Port" nicht vorsehen, das wäre 
zu viel Aufwand. Je nachdem, was da angeflanscht wird, muß man das halt 
extern machen. Für USB sollten die Kondensatoren reichen, der verwendete 
Magjack für Ethernet hat das nötige drin.

Stromversorgung generell - ja, da hast du Recht, da werde ich mich 
nochmal dransetzen.

Leider kann ich bei nur vier Lagen und so wenig Platz für Vias die 
"bösen" Signale nicht nach innen legen.

Autor: Jörn Kaipf (joern)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gebe auch noch meinen Senf dazu:

- Ethernet: Pullup für MDIO (Eventuell kann man auch den internen vom 
Atmel nehmen, wenn vorhanden)

- DBGU: R8/R9 sind überflüssig, da die R-Versionen von FTDI die 
Widerstände schon drin haben. Pullup R2 u.U. auch überflüssig, da der 
FTDI interne Pullups an den Eingängen hat.

- JTAG: Wenigstens auf Testpunkte legen. Vielleicht will mal einer doch 
debuggen ;)

- Erweiterungsstecker: Etwas mehr Masseverbindungen wären nicht 
schlecht.

Wie Tüddel schon geschrieben hat ein paar Ferrite würden sich gut 
machen.

Noch eine andere Frage: Warum kein 9260?

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> - Ethernet: Pullup für MDIO (Eventuell kann man auch den internen vom
> Atmel nehmen, wenn vorhanden)

Korrekter Hinweis, danke.

> - DBGU: R8/R9 sind überflüssig, da die R-Versionen von FTDI die
> Widerstände schon drin haben.

Die Widerstände sollen nicht 27 Ohm haben, sondern 0 Ohm. Durch 
Ein-/Auslöten von R8/R9 oder R36/R37 wird die Umschaltung vom USB Device 
Port auf die Debug Unit gemacht.

> Pullup R2 u.U. auch überflüssig, da der
> FTDI interne Pullups an den Eingängen hat.

Der Pin dient beim Starten als BMS - "Boot Mode Select", und auf die 200 
kOhm vom FT232 wollte ich mich nicht verlassen.

> - JTAG: Wenigstens auf Testpunkte legen. Vielleicht will mal einer doch
> debuggen ;)

Pah ;)

> - Erweiterungsstecker: Etwas mehr Masseverbindungen wären nicht
> schlecht.

Ich kaufe... mehr Platz. Na gut, vielleicht kann man ein paar GPIOs 
opfern.

> Noch eine andere Frage: Warum kein 9260?

Erfüllt meine Anforderungen, ist leicht zu bekommen, und außerdem hatte 
ich schon ein Symbol in Eagle dafür gebaut. Keine weiteren guten 
Argumente.

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerade noch selbst gesehen:

Ein Oszillator funktioniert auch besser mit Stromversorgung ;)

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Lösung mit dem Ein-/Auslöten von Widerständen um zwischen 
Programmieren und USB-Device-Port umzuschalten finde ich alles andere 
als praktisch. Ich wäre für Steckbrücken.

Oder bist du der perfekte Programmierer der keine Fehler macht und 
deswegen nur ein mal das Board flashen muss?

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wird eigentlich das Board mit Spannung versorgt? Erfolgt die 
Spannungsversorgung über USB oder wird das Board über K1 mit Spannung 
versorgt oder fehlt da noch ein Stecker für den Niederspannungsanschluss 
inklusiver Verpolungsschutz?

Bei X1 ist Pin 1 mit 5V bezeichnet, bei X2 ist ist Pin 1 mit USBD-C mit 
dem Prozessor verbunden, kann der Prozessor max. 500mA laut 
USB-Spezifikation liefern??? Erscheint mir etwas gewagt.

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Lösung mit dem Ein-/Auslöten von Widerständen um zwischen
> Programmieren und USB-Device-Port umzuschalten finde ich alles andere
> als praktisch. Ich wäre für Steckbrücken.
>
> Oder bist du der perfekte Programmierer der keine Fehler macht und
> deswegen nur ein mal das Board flashen muss?

Natürlich nicht. Allerdings würde es reichen, den Bootloader "u-boot" 
einmal auf dem Dataflash zu installieren. Das Board würde anschließend 
entweder über NFS vom PC booten, oder Betriebssystem und Kernel sind auf 
der SD-Karte installiert. Die Programmentwicklung oder das Anpassen des 
Kernels würde also nicht ein ständiges Umlöten erfordern. Trotzdem sind 
normale Jumper natürlich schöner. Ich ändere das, wenn noch Platz ist.

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie wird eigentlich das Board mit Spannung versorgt? Erfolgt die
> Spannungsversorgung über USB oder wird das Board über K1 mit Spannung
> versorgt oder fehlt da noch ein Stecker für den Niederspannungsanschluss
> inklusiver Verpolungsschutz?

Das Board soll über K1 mit stabilisierten +5V versorgt werden. Grund 
ist, daß in meinem Projekt eine Basisplatine zur Verfügung steht, auf 
der weitere Peripherie und das "Hauptnetzteil" vorhanden sind.

Ein Niederspannungsanschluß wäre natürlich schön, solange man das Board 
als Entwicklungsplattform auf dem Schreibtisch einsetzt, auf der Platine 
ist aber definitiv kein Platz mehr für ein solch sperriges Teil.

> Bei X1 ist Pin 1 mit 5V bezeichnet, bei X2 ist ist Pin 1 mit USBD-C mit
> dem Prozessor verbunden, kann der Prozessor max. 500mA laut
> USB-Spezifikation liefern??? Erscheint mir etwas gewagt.

USBD-C soll als Eingang programmiert werden und dient nur der Erkennung, 
ob an X2 - dem USB-Device - ein Host angeschlossen ist. Deshalb auch der 
Spannungsteiler von 5V auf 3,3V. Das USB-Device versorgt nichts mit 
Spannung, und das Board selbst wird anders herum auch nicht über USB 
versorgt.

Bei dem USB-Host - also X1 - habe ich einfach die 5V-Versorgung 
durchgeschleift. Theoretisch könnte man natürlich so einen Chip nehmen, 
wie er z.B. in USB-Hubs eingebaut ist, der den Strombedarf überwacht und 
den Port ggf. wegschaltet. Das halte ich aber für Overkill bei so einer 
Anwendung - die meisten ARM9-Boards machen das auch nicht anders.

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ noch folgender Vorschlag:

Wenn du den FT232RL wirklich nur ein mal benötigst, dann wäre es sogar 
sinnvoller, diesen komplett vom Board zu nehmen und nur die nötigen 
Leitungen zum Programmieren heraus zu führen und extern dann den RS232RL 
auf eine eigene Platine zusetzen!?

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eher nicht, weil diese USB-Verbindung die Linux-Konsole darstellt. Den 
Bootvorgang kann man anders schlecht überwachen. So lange es noch kein 
Telnet, SSH etc. gibt, wäre das Board "stumm" und Kernelprobleme würden 
sich schlecht rausdebuggen lassen.

Hat man irgendwann einmal eine fertige Anwendung, die keine Konsole, 
aber dafür ein USB-Device-Port benötigt, steht es einem natürlich frei, 
den FT232R einfach nicht zu bestücken.

Ich brauche das USB-Device in meiner Anwendung sogar überhaupt nicht, 
und würde im Zweifelsfall eher die serielle Schnittstelle über den 
FT232R behalten als ein "echtes" USB-Device.

Autor: Oliver Döring (odbs)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die überarbeitete Version

Autor: Oliver Döring (odbs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uncompressing Linux.......................... done, booting the kernel.

Linux version 2.6.32.3 (x@y) (gcc version 4.3.4 (GCC) ) #12 Sat Jan 9 07:38:14 CET 2010

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVT instruction cache

Machine: Pingu920

Warning: bad configuration page, trying to continue

Memory policy: ECC disabled, Data cache writeback

Clocks: CPU 179 MHz, master 59 MHz, main 18.432 MHz

Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256

Kernel command line: mtdparts=spi0.0-AT45DB321x:16896(dfboot),16896(env),236544(uboot),2162688(linux),1892352(root) root=/dev/mtdblock4 rootfstype=cramfs mem=64M

PID hash table entries: 256 (order: -2, 1024 bytes)

Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)

Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)

Memory: 64MB = 64MB total

Memory: 62688KB available (1860K code, 173K data, 80K init, 0K highmem)

SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1

Hierarchical RCU implementation.

NR_IRQS:192

AT91: 96 gpio irqs in 3 banks

console [ttyS0] enabled

Calibrating delay loop... 89.79 BogoMIPS (lpj=350208)

Mount-cache hash table entries: 512

CPU: Testing write buffer coherency: ok

NET: Registered protocol family 16

bio: create slab <bio-0> at 0

SCSI subsystem initialized

usbcore: registered new interface driver usbfs

usbcore: registered new interface driver hub

usbcore: registered new device driver usb

LinuxPPS API ver. 1 registered

Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>

Switching to clocksource 32k_counter

NET: Registered protocol family 2

IP route cache hash table entries: 1024 (order: 0, 4096 bytes)

TCP established hash table entries: 2048 (order: 2, 16384 bytes)

TCP bind hash table entries: 2048 (order: 1, 8192 bytes)

TCP: Hash tables configured (established 2048 bind 2048)

TCP reno registered

NET: Registered protocol family 1

io scheduler noop registered

io scheduler anticipatory registered (default)

atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL

atmel_usart.1: ttyS1 at MMIO 0xfffc0000 (irq = 6) is a ATMEL_SERIAL

atmel_usart.2: ttyS2 at MMIO 0xfffc4000 (irq = 7) is a ATMEL_SERIAL

atmel_usart.3: ttyS3 at MMIO 0xfffc8000 (irq = 8) is a ATMEL_SERIAL

atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffe0000 (irq 13)

mtd_dataflash spi0.0: AT45DB321x (4224 KBytes) pagesize 528 bytes (OTP)

5 cmdlinepart partitions found on MTD device spi0.0-AT45DB321x

Creating 5 MTD partitions on "spi0.0-AT45DB321x":

0x000000000000-0x000000004200 : "dfboot"

0x000000004200-0x000000008400 : "env"

0x000000008400-0x000000042000 : "uboot"

0x000000042000-0x000000252000 : "linux"

0x000000252000-0x000000420000 : "root"

at91_ether: probe of at91_ether failed with error -1

ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver

at91_ohci at91_ohci: AT91 OHCI

at91_ohci at91_ohci: new USB bus registered, assigned bus number 1

at91_ohci at91_ohci: irq 23, io mem 0x00300000

usb usb1: configuration #1 chosen from 1 choice

hub 1-0:1.0: USB hub found

hub 1-0:1.0: 1 port detected

Initializing USB Mass Storage driver...

usbcore: registered new interface driver usb-storage

USB Mass Storage support registered.

udc: at91_udc version 3 May 2006

TCP cubic registered

VFS: Mounted root (cramfs filesystem) readonly on device 31:4.

Freeing init memory: 80K

Ein paar Fehler sind gefunden und behoben, ein paar andere sind noch 
offen (siehe oben). Der Ethernet PHY macht noch Probleme 
(25MHz-Oszillator läuft nicht an) und das JFFS2 als RootFS funktioniert 
nicht auf dem Dataflash. Letzteres ist anscheinend aber ein bekanntes 
Problem.

Aber immerhin habe ich schon eine Partie GNUchess gegen das kleine Board 
gespielt.

Autor: Gerrit G. (liggi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es was neues oder ist das Projekt tot?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.