Grasshopper - Das AVR32 Basisboard mit GNU/Linux Support Benedikt Sauter, 7.2.2008, sauter@ixbat.de Mit Grasshopper/Nova ist eine freie Plattform für die AVR32 Entwicklung von In-Circuit GmbH enstanden. Das Projekt gibt es als Open Source Projekt unter dem Namen Grasshopper. Offiziell heißt das Produkt bei der Firma In Circuit GmbH ICnova AP7000 Base.
Kommerziellen Support gibt es von der Firma In-Circuit (http://www.in-circuit.de). Für den Open-Source-Support gibt es ein Forum bei Embedded Projects: http://forum.embedded-projects.net/viewforum.php?id=16
Ziel war es, eine leistungsfähige und doch zugleich günstige Plattform für AVR32 Entwicklungen als Open Source Projekt zu schaffen, d.h. es wird wieder alles - also wirklich alles - per freier Lizenz veröffentlicht. Howto für die ersten Schritte: http://www.ic-board.de/data/datasheet/icnova-base_welcome_(deutsch).pdf Hier gehts zum Shop von Embedded Projects Hier gehts zum Shop von In-Cirucuit
Technischer Ansprechpartner für das Produkt:
In-Circuit GmbH Königsbrücker Str. 69 D-01099 Dresden Germany
fon. +49 (0) 351 - 42 66 850 fax. +49 (0) 351 - 42 66 849 mail. office@in-circuit.de web. http://www.in-circuit.de Technische Daten - 140 MHz max. 200 MHz
- 64 MB SDRAM (32 Bit breit angeschlossen)
- 8 MB Flash
- 10/100 MBit/s Netzwerk
- 1 USB Highspeed Anschluss
- 8 LED
- 1 Taster
- Power LED (kann auch angesteuert werden)
- Reset Taster
- Spannungsversorgung: 5-10V verpolungssicher ,USB Kabel oder über Pinleisten
- Über die Pinleisten sind alle wichtigen Ports herausgeführt
GNU/Linux Softwareumgebung Grasshopper oder ICnova AP7000 Base ist das ideale Linux Einsteigerboard. Mitgeliefert wird der Linux-Kernel mit Patches sowie die komplette Toolchain. - GCC
- uClibc
- Busybox
- SSH Zugang für direkten Zugriff auf die Kommandozeile per Ethernet
- Netzwerkeinstellung automatisch per DHCP
- HTTP Server
- Voller Zugriff auf sämtliche GPIOs und Geräteschnittstellen
Erste Schritte unter GNU/Linux mit Grasshopper/Nova - Anstecken an USB
- Jetzt sollte eine neue serielle Schnitttstelle erkannt worden sein: /dev/ttyUSB0
- Über ein Terminalprogramm kann man sich jetzt mit der Schaltung verbinden und U-Boot + Linux bei der Arbeit zusehen und sich einloggen.
- Als Terminal kann kermit verwenden (In Debian installierbar mit apt-get install ckermit)
- Aufruf: kermit
- Eingabe: set line /dev/ttyUSB0
- Eingabe: set flow none
- Eingabe: set speed 115200
- Eingabe: set carrier-watch off
- Eingabe: c (um Verbindung zu starten)
- Drückt man jetzt Reset auf der Schaltung, erscheint folgende Bildschirmausgabe:
U-Boot 1.3.1-gd2cbfd4b-dirty (Mar 25 2008 - 11:49:26) U-Boot code: 00000000 -> 0000e820 data: 00014010 -> 0001a658 SDRAM: 64 MB at address 0x10000000 Testing SDRAM...OK malloc: Using memory from 0x13fa5000 to 0x13fe5000 DMA: Using memory from 0x13fa1000 to 0x13fa5000 Flash: 8 MB at address 0x00000000 DRAM Configuration: Bank #0: 10000000 64 MB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: macb0 Press SPACE to abort autoboot in 3 seconds partition changed to nor0,2 ### JFFS2 loading '/boot/uImage' to 0x10400000 Scanning JFFS2 FS: ........ done. ### JFFS2 load complete: 1309661 bytes loaded to 0x10400000 ## Booting image at 10400000 ... Image Name: Linux-2.6.24-rc3-icnova_base1 Image Type: AVR32 Linux Kernel Image (gzip compressed) Data Size: 1309597 Bytes = 1.2 MB Load Address: 10000000 Entry Point: 90000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Starting kernel at 90000000 (params at 13fa5008)... Linux version 2.6.24-rc3-icnova_base1 (benjamin@marvin) (gcc version 4.0.4-atmel.0.99.0) #2 Tue Mar 25 18:32:38 CET 2008 CPU: AP7000 [01] revision 0 (AVR32B revision 1) CPU: MMU configuration: Shared TLB CPU: features: dsp simd ocd perfctr java CPU: Running at 140.000 MHz Physical memory: 10000000-13ffffff Reserved memory: 10000000-1016ea2b: Kernel code 1016ea2c-102280a7: Kernel data Exception vectors start at 9000f000 CPU: Paging enabled Node 0: start_pfn = 0x10000, low = 0x14000 Node 0: mem_map starts at 9022b000 Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256 Kernel command line: console=ttyS0 root=1F02 rootfstype=jffs2 mtdparts=physmap-flash.0:128k(boot)ro,64k(env)ro,-(root) PID hash table entries: 256 (order: 8, 1024 bytes) timer: AT32AP system timer/counter at 0xfff00c00 irq 22 Console: colour dummy device 80x25 console [ttyS0] enabled Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) Memory: 62720k/62752k available (1406k kernel code, 2784k reserved, 117k data, 60k init) Calibrating delay using timer specific routine.. 280.42 BogoMIPS (lpj=560840) Mount-cache hash table entries: 512 net_namespace: 64 bytes NET: Registered protocol family 16 ICNova: 9 Leds pdc pdc.0: Atmel Peripheral DMA Controller enabled at32_eic at32_eic.0: External Interrupt Controller at 0xfff00100, IRQ 19 at32_eic at32_eic.0: Handling 4 external IRQs, starting with IRQ 64 smc smc.0: Atmel Static Memory Controller at 0xfff03400 cpufreq: AT32AP CPU frequency driver dmac0: DesignWare DMA controller at 0xff200000 irq 2 Time: avr32 clocksource has been installed. 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 audit: initializing netlink socket (disabled) audit(1167609600.334:1): initialized JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc. io scheduler noop registered io scheduler cfq registered (default) atmel_usart.0: ttyS0 at MMIO 0xffe01000 (irq = 7) is a ATMEL_SERIAL atmel_usart.1: ttyS1 at MMIO 0xffe00c00 (irq = 6) is a ATMEL_SERIAL MACB_mii_bus: probed eth0: Atmel MACB at 0xfff01800 irq 25 (00:00:00:00:00:00) eth0: attached PHY driver [Davicom DM9161A] (mii_bus:phy_addr=0:00, irq=-1) physmap platform flash device: 00800000 at 00000000 physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank Amd/Fujitsu Extended Query Table at 0x0041 number of CFI chips: 1 cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness. mtd: scanning for physmap-flash.0 3 cmdlinepart partitions found on MTD device physmap-flash.0 Creating 3 MTD partitions on "physmap-flash.0": 0x00000000-0x00020000 : "boot" ftl_cs: FTL header not found. 0x00020000-0x00030000 : "env" ftl_cs: FTL header not found. 0x00030000-0x00800000 : "root" ftl_cs: FTL header not found. block2mtd: version $Revision: 1.30 $ atmel_usba_udc atmel_usba_udc.0: MMIO registers at 0xfff03000 mapped at fff03000 atmel_usba_udc atmel_usba_udc.0: FIFO at 0xff300000 mapped at ff300000 ether gadget: using random self ethernet address ether gadget: using random host ethernet address usb0: Ethernet Gadget, version: May Day 2005 usb0: using atmel_usba_udc, OUT ep2out-bulk IN ep1in-bulk STATUS ep3in-int usb0: MAC 32:31:96:60:47:24 usb0: HOST MAC f2:30:65:c8:c7:52 usb0: RNDIS ready Registered led device: pwrled:red Registered led device: led1:green Registered led device: led2:green Registered led device: led3:green Registered led device: led4:green Registered led device: led5:green Registered led device: led6:green Registered led device: led7:green Registered led device: led8:green TCP cubic registered NET: Registered protocol family 1 NET: Registered protocol family 17 RPC: Registered udp transport module. RPC: Registered tcp transport module. VFS: Mounted root (jffs2 filesystem). Freeing init memory: 60K (90000000 - 9000f000) init started: BusyBox v1.5.0 (2008-03-03 14:15:42 CET) multi-call binary Thank you for using In-Circuit ICNova icnova login: Jetzt kann man sich mit dem Benutzernamen: default (kein Passwort) anmelden. Möchte man mit Root-Rechten arbeiten, muss man einfach su eingeben. Ist während dem Starten ein Netzwerkkabel angeschlossen, an dem sich zugleich ein DHCP-Server befindet, kann die Schaltung dann auch über Netzwerk angesteuert werden. (Telnet + SSH + HTTP)
Aktuell erscheint immer die Meldung: sh: can't access tty; job control turned off (es ist noch nicht klar, woher die Meldung kommt - aber sie kann ignoriert werden)
Erste Schritte unter Windows mit Grasshopper / ICNova Base
- USB Kabel zwischen Grasshopper und Linux Rechner anbringen
- Meldung: Neue Hardware gefunden CP2102 USB to UART Bridge Controller
- Windows sucht jetzt einen Treiber
- Normalerweise sollte Windows passende USB-Klassentreiber selbst installieren. Falls dies nicht klappt, können die Treiber vom Hersteller der UART-Bridge Silabs installiert werden: http://www.silabs.com/public/documents/software_doc/drivers/Microcontrollers/Interface/en/CP210x_VCP_Win2K_XP_S2K3.exe
- Jetzt kann man sich mit dem Programm Hyperterminal mit der Schaltung verbinden
- Verbindungsname: Grasshopper
- Verbindung herstellen über: com4 (dies ist bei jedem anders. Meist haben die USB COM Schnittstellen höhere Nummern)
- Bits pro Sekunde: 115200, Datenbits: 8, Parität: keine, Stoppbits: 1, Flusssteuerung: Keine
- Ok -> Jetzt sollte man nach dem drücken von Reset die U-Boot- und Linuxmeldungen sehen
- Mit dem Benutzernamen: default und keinem Passwort kann man sich anmelden
LEDs ein- und ausschaltenDie LEDs können über das Dateisystem angesteuert werden. Dafür wird man am besten zum Benutzer root. - Eingabe: su
- In Verzeichnis wechseln: cd /sys/class/led
- LEDs anschauen: ls
- In Verzeichnis der gewünschten LED gehen: cd pwrled\:red/
- LED ausschalten: echo 1 >> brightness
- LED einschalten: echo 0 >> brightness
Ports ein und ausschaltenAn den Seiten der Schaltung sind ein großer Teil der GPIO-Leitungen herausgeführt. Diese können wie folgt über die Konsole angesteuert werden. Setup - In entsprechendes Verzeichnis wechseln: cd /config/gpio
- Verzeichnis anlegen: mkdir iotest
- In dem Verzeichnis finden Sie 4 vom System angelegte Dateien
- In die Datei gpio_id tragen Sie den Port des AP7000 ein: echo X >> gpio_id
(X entspricht dabei der Portnummer. Tragen Sie hier eine 0 für Port A oder eine 1 für Port B ein) - In der Datei pin_mask setzen Sie die Pin-Maske für alle Pins welche genutzt werden sollen.
- In der Datei oe_mask werden spezifiziert ob ein Pin ein Ein- oder Ausgang ist. Eine 1 an der entsprechenden Stelle bedeutet der Pin ist ein Ausgang. Eine 0 entsprechend ein Eingang.
- Zum Schluss tragen Sie in die Datei enable eine 1, um die Konfiguration zu aktivieren
Zugriff - In alter UNIX/Linux Manier muss eine Datei für das Gerät im Dateisystem unter dem Ordner /dev angelegt werden: touch /dev/iotest
- Zugriff auf die Pins: echo 1 >> /dev/iotest (wird direkt auf dem Port ausgegeben)
- Zustand lesen: cat /dev/iotest
Linuxkernel + Umgebung selbst übersetzen Das ist dank einer Buildrootumgebung eine sehr einfache Sache. Die Umgebung für Grasshopper wurde nach dem Datenblatt (AVR32003) von Atmel erzeugt. Das Ganze kann eigentlich jeder der ein Linuxrechner hat, mit dem man ins Internet gehen kann, ganz einfach nachvollziehen. - Buildroot Umgebung herunterladen: wget http://sr11.sharebase.de/files/grasshopper.tar.gz
- Archiv entpacken: tar xzf grasshopper.tar.gz
- In den Ordner grasshopper gehen: cd grasshopper
- Dort entweder mit: make direkt den Übersetzungs- und Installationsprozess starten (Es werden alle benötigen Programme automatisch heruntergeladen und installiert)
- Gerne kann auch weitere Software ausgewählt werden, die in das Linux integriert werden soll:
make menuconfig Viel Spaß beim Bauen einer eigenen Linuxumgebung für Grasshopper. Support Hilfe gibts hier: http://forum.embedded-projects.net/viewforum.php?id=16 Download Da die folgenden Dateien sehr groß sind (127 MB und 140 MB), liegen sie auf einem Server von http://www.sharebase.de. Sharebase.de ist ein Dienst, um Dateien mit anderen Leuten zu tauschen. Das Sharebase.de Team sponsert uns offiziell Platz und Traffic für das Gasshopper-Projekt. Vielen Dank dafür! |