Olimex AT91SAM7X256-Board SAM7-EX256
Olimex AT91SAM7X256-Board (SAM7-EX256)
Softwarevoraussetzungen
Die folgenden Anleitungen setzen das Vorhandensein einer ARM-GCC-Toolchain voraus.
Minimalbeispiel
Dieses einfache Beispielprojekt mit Makefile basiert auf dem GCC-Tutorial von Atmel. Enthalten ist kein OS, nur ein paar Funktionen für UART-Kommunikation.
Download: http://www.mikrocontroller.net/attachment/25724/Olimex_SAM7_EX256_StartupMinimal_2007.08.17.zip
Installation von FreeRTOS
Merkmale von FreeRTOS:
- präemptives Multitasking
- Unterstützung für viele Prozessoren und Controller
- Demos für viele verschiedene Boards enthalten
- Beispiele für die Anbindung verschiedener IP-Stacks enthalten (lwIP, uIP)
- Codequalität der Demos durchwachsen
Funktionsumfang des Beispielprojekts:
- TCP/IP-Stack lwIP
- Webserver
- virtueller serieller Port über USB realisiert (CDC, Windows-Treiber enthalten)
Als Ausgangspunkt dient das Beispiel "lwIP_Demo_Rowley_ARM7" aus FreeRTOS 4.4.0. Die für das Olimex-Board angepasste (und ein bisschen aufgeräumte) Version kann man hier herunterladen. Die Datei muss in den Demo-Ordner von FreeRTOS entpackt werden. Die Änderungen gegenüber der Originalversion sind in der Datei changes.txt dokumentiert.
Die IP-Adresse ist standardmäßig auf 192.168.0.111 gesetzt und lässt sich in der Datei BasicWEB.c ändern.
Kompiliert wird das Projekt wie üblich durch Eingabe von make
.
Installation von Ethernut
Ethernut bzw. Nut/OS ist ein Betriebssystem mit TCP/IP-Stack, das ursprünglich für AVR-Controller entwickelt wurde, später aber u.a. auf ARM portiert wurde.
Merkmale von Nut/OS:
- sehr sauberer und gut kommentierter Code
- Buildsystem mit Konfigurations-GUI; Vorteil: einfacher Einstieg, Nachteil: Gesamtsystem manchmal etwas undurchsichtig
- nur kooperatives Multitasking
- zielt hauptsächlich auf AVR ab, ARM-Unterstützung noch nicht weit fortgeschritten
- im Vergleich zu lwIP spartanischer IP-Stack
Funktionsumfang des Beispielprojekts:
- verschiedene Netzwerk-Beispielanwendungen (HTTP, FTP, DHCP)
- serieller Port
Getestet wurde diese Anleitung mit der Ethernut-Version 4.2.1.
Als Ausgangspunkt dient die Konfiguration at91sam7x-ek.conf. Für das Olimex-Board sind ein paar kleine Änderungen nötig.
PHY-Konfiguration ändern
Unter Architecture/ARM/AT91 EMAC Driver:
PHY-Initialisierung patchen
In der Funktion EmacReset in der Datei at91_emac.c den Block mit dem Kommentar /* For some unknown reason...
durch folgenden Code ersetzen:
/* PHY ID */
#define MII_DM9161_ID_H 0x0181
#define MII_DM9161_ID_L 0xb8a0
#define MII_AM79C875_ID_H 0x0022
#define MII_AM79C875_ID_L 0x5540
#define MII_MICREL_ID_H 0x0022
#define MII_MICREL_ID_L 0x1610
/* For some unknown reason it seems to be required to read the ID registers first. */
// Check for DM PHY (as used on the ATMEL EK)
if (phy_inw(NIC_PHY_ID1) != MII_DM9161_ID_H ||
(phy_inw(NIC_PHY_ID2) & 0xFFF0) != MII_DM9161_ID_L) {
// Check for MICREL PHY (as used on the Olimex SAM7-EX256)
if (phy_inw(NIC_PHY_ID1) != MII_MICREL_ID_H ||
(phy_inw(NIC_PHY_ID2) & 0xFFF0) != MII_MICREL_ID_L) {
outr(EMAC_NCR, inr(EMAC_NCR) & ~EMAC_MPE);
return -1;
}
}
Fehlende Definition ergänzen
Falls eine Fehlermeldung auftritt dass EMAC_PIO_SODR nicht definiert ist, folgenden Code in der Datei at91_emac.c vor #ifdef PHY_PWRDN_BIT\n /* Disable PHY power down. */
einfügen:
#ifndef EMAC_PIO_SODR
#define EMAC_PIO_SODR PIOB_SODR
#endif
Ausprobieren
Wenn man das Beispielprogramm httpserv kompiliert (make
eingeben) und in den Controller geladen hat sollte man über das UART (115.2 kBaud) die erfolgreiche Initialisierung bestätigt bekommen:
Nut/OS 4.2.1 HTTP Daemon...Configure eth0...OK 192.168.0.21 ready
Jetzt kann man die angezeigte IP-Adresse im Browser eingeben und sollte die Testseite zu sehen bekommen.