contiki:rz_raven_usb_at90usb1287_xram_with_xmem
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
contiki:rz_raven_usb_at90usb1287_xram_with_xmem [2013/09/14 09:00] – sven_zehl | contiki:rz_raven_usb_at90usb1287_xram_with_xmem [2017/01/24 18:49] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== RZ_Raven_USB Stick (AT90USB1287) External RAM Erweiterung (XRAM) über die XMEM Schnittstelle ====== | ====== RZ_Raven_USB Stick (AT90USB1287) External RAM Erweiterung (XRAM) über die XMEM Schnittstelle ====== | ||
- | Da der interne SRAM des RZ Raven USB Sticks (AT90USB1287) mit 8KByte relativ klein ist, entstehen immer wieder Probleme, welche meist durch einen Überlauf des Stacks in den Heap oder umgekehrt entstehen können, siehe folgende Abbildung | + | Da der interne SRAM des RZ Raven USB Sticks (AT90USB1287) mit 8KByte relativ klein ist, entstehen immer wieder Probleme, welche meist durch einen Überlauf des Stacks in den Heap oder umgekehrt entstehen können, siehe folgende Abbildung. |
{{: | {{: | ||
- | Besonders beim Einsatz als RPL Border Router ([[contiki: | + | Besonders beim Einsatz als RPL Border Router ([[contiki: |
===== Benötigte Hardware ===== | ===== Benötigte Hardware ===== | ||
Zeile 12: | Zeile 12: | ||
{{: | {{: | ||
- | Da um Pins zu sparen der Datenbus und die High Order Adress Bits über die gleichen Pins gesteuert werden, ist zusätzlich ein Latch erforderlich, | + | Da um Pins zu sparen der Datenbus und die High Order Adress Bits über die gleichen Pins gesteuert werden, ist zusätzlich ein Latch erforderlich, |
{{: | {{: | ||
Zeile 23: | Zeile 23: | ||
{{: | {{: | ||
- | Empfohlen werden laut [[http:// | + | Empfohlen werden laut [[http:// |
- | ===== Register | + | ===== Register Konfiguration zur Aktivierung des externen |
- | Um den neuen externen SRAM nun zugänglich zu machen, muss dieser aktiviert werden. Dazu muss das Register XMCMRA, genauer PIN7 von XMCMRA auf High gesetzt werden. | + | Um den neuen externen SRAM nun zugänglich zu machen, muss dieser aktiviert werden. Dazu muss das Register |
{{: | {{: | ||
- | Die restlichen PINs 0-6 (SLR0-SLR2, SRW10, SRW11, SRW00 und SRW01) sind zur Einstellung von " | + | Die restlichen PINs 0-6 ('' |
+ | Ebenfalls nicht benötigt werden die Einstellung von Register '' | ||
+ | Umgesetzt in C Code kann folgende Funktion verwendet werden: | ||
+ | <code c> | ||
+ | void xram_enable(void) | ||
+ | { | ||
+ | |||
+ | XMCRA = ((1 << SRE)); | ||
+ | //switch Bit 7 of XMCRA on to enable XMEM usage | ||
+ | | ||
+ | XMCRB = 0; //use all Port C Pins for XRAM Addresses, Port C7 no needed, | ||
+ | //but we don't need it till it is not connected to anything | ||
+ | } | ||
+ | </ | ||
+ | ==== Umsetzung in Contiki ==== | ||
+ | Um die Funktion sinnvoll in Contiki zu platzieren, bietet es sich an dies im Ordner '' | ||
+ | Dazu bietet sich folgendes Vorgehen an (alles im Ordner '' | ||
+ | - Erstellen der C und Header Datei, z.B. [[contiki: | ||
+ | - Integration von [[contiki: | ||
+ | - Aufruf innerhalb der Lowlevel Initialisierung '' | ||
+ | - Optional: An und Abschalten des externen RAMS durch Makro in [[contiki: | ||
+ | ===== Sinnvolle Nutzung des SRAMS ===== | ||
+ | Es stellt sich nun die Frage, wie die zusätzlichen 32KByte sinnvoll genutzt werden können. Eine Möglichkeit ist z.B. den internen Speicher für den Stack zu Nutzen und den Heap sowie die .data und .bss Sections in den externen RAM zu verschieben, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Um dies umzusetzen, muss das Vorhaben dem Linker mitgeteilt werden. Dazu genügt es beim kompilieren GCC mit folgendem Anweisungen aufzurufen. | ||
+ | |||
+ | <code c> | ||
+ | |||
+ | -Wl, | ||
+ | |||
+ | </ | ||
+ | |||
+ | Dadurch beginnt die .data Section ab der Adresse '' | ||
+ | |||
+ | Die Adresse '' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Das Ende des Heap, also das Ende des externen SRAMS ergibt sich dann durch Addition der 32KByte (32*1024=32768='' | ||
+ | |||
+ | Innerhalb von Contiki lässt sich die Linker Anweisung einfach in das Makefile mit dem Zusatz '' | ||
+ | |||
+ | Überprüfen lässt sich die Änderung der Grenzen nach der Kompilierung mit dem Tool '' | ||
+ | |||
+ | ===== Ermöglichung der Nutzung des kompletten 32KByte SRAMS ===== | ||
+ | |||
+ | Vielleicht taucht beim Lesen die Frage auf, wie der komplette SRAM genutzt wird. Da der externe SRAM nach dem internen SRAM gemappt wird, führt eine Adressierung der ersten 8448 Byte immer zum internen RAM und nicht zum externen RAM. Das bedeutet, dass normalerweise der externe RAM erst ab dem 8449. Byte addressiert werden kann, wodurch ein Speicherbereich mit der Größe des internen SRAMS nicht genutzt werden kann. | ||
+ | Um dieses Problem zu umgehen, haben die Entwickler des Raven USB Sticks das Adressbit A15, welches normalerweise das höchste Addressbit darstellt nicht mit dem externen SRAM verbunden (siehe Schaltplan weiter oben). Das führt dazu, dass ab dem Nutzen der Adresse '' | ||
+ | |||
+ | {{: |
contiki/rz_raven_usb_at90usb1287_xram_with_xmem.1379149251.txt.gz · Zuletzt geändert: 2017/01/24 18:49 (Externe Bearbeitung)