Olimex AT91SAM7X256-Board SAM7-EX256

Wechseln zu: Navigation, Suche

Olimex AT91SAM7X256-Board (SAM7-EX256)

sam7-ex256-small.jpg

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:
Olimex-sam7x-ethernut-phy-conf.png

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.

Forum

Weblinks