<<< Previous topic - Next topic >>> |
|
Author |
Message |
nfgs
Joined: 08 Dec 2006 Posts: 3
|
Posted: 08.12.2006, 12:01 Post subject: Zugriff auf den Expansion Bus |
|
|
Für eine Semester-Projektarbeit muss es mir möglich sein auf den Expansion Bus des DNP9200 zugreifen zu können.
Leider ist mir aus den Datenblättern, welche auf der CD vom SK23 (EVA9) mitgeliefert sind, nicht ersichtlich wie ich auf den Expansion Bus zugreifen kann.
Ist der Expansion Bus am External Bus Interface (EBI) des AT91RM9200 angeschlossen?
Falls ja, besteht weiterhin die Frage wie, da laut Datenblatt von Atmel das EBI über einen 16 oder 32-bit Daten Bus, einen bis zu 26-bit Adress Bus und 8 CS Leitungen verfügt. Am Expansion Bus befinden sich jedoch nur 8 Daten- 4 Adress- und 4 CS-Leitungen.
Oder erfolgt der Zugriff über den PIO Controller der über 32 programmierbare I/O Leitungen verfügt?
Sind diese Fragen geklärt besteht weiterhin die Frage ob ich unter dem embedded Linux direkt in einem Programm auf den Bus zugreifen kann, oder ich einen Kernel Mode Treiber für meine Peripherie programmieren muss.
Ich bitte um Ratschläge.
Danke schon mal im Voraus
Nicolas |
|
Back to top |
|
|
ssc
Joined: 05 May 2006 Posts: 36
|
Posted: 04.01.2007, 11:34 Post subject: |
|
|
Hallo nfgs,
der externe Datenbus ist direkt an die Datenleitungen des AT91RM9200 angeschlossen.
Es werden nur die untern 8Bit verwendet. Ebenso verhält es sich mit den Adressleitungen. Es sind lediglich die unteren 4 Adress-Bits auf den Sockel geführt.
Die CS-Leitungen sind festen Adressen im Speicherraum des AT91RM9200 zugewiesen:
0x4000.0000 - 0x4FFF.FFFF Sockel-Pin CS1 (NCS3 des AT91) 8-bit R/W
0x5000.0000 - 0x5FFF.FFFF Sockel-Pin CS2 (NCS4 des AT91) 8-bit R/W
0x6000.0000 - 0x6FFF.FFFF Sockel-Pin CS3 (NCS5 des AT91) 8-bit R/W
0x7000.0000 - 0x7FFF.FFFF Sockel-Pin CS4 (NCS6 des AT91) 8-bit R/W
Siehe auch http://www.dilnetpc.com/dnp0070.htm
Über das EBI kannst du Waitstates, Zugriffszeiten und andere BUS relevante Dinge einstellen (siehe Datenblatt).
Schöne Grüße,
ssc |
|
Back to top |
|
|
nfgs
Joined: 08 Dec 2006 Posts: 3
|
Posted: 14.01.2007, 19:09 Post subject: |
|
|
Danke für die Informationen. Jetzt sind wir jedoch auf ein weiteres Problem gestoßen.
Um vom Bus zu lesen, wollen wir ein Kernel Modul schreiben. Der Aktuelle Stand des Moduls ist dass es beim laden und entladen eine entsprechende Meldung auf der Konsole ausgibt. Mehr ist momentan nicht implementiert.
Kompiliert wurde das Modul mit der auf der CD enthaltenen Toolchain.
Das Problem ist, dass sich das Modul nicht laden lässt. Es erscheint folgende Fehlermeldung:
Code: |
expbus.o: kernel-module version mismatch
expbus.o was compiled for kernel version 2.4.0-test5-rmk1-np1
while this kernel is version 2.4.27-vrs1-ssv1.
|
ich denke das liegt daran dass die falschen kernel header in der toolchain enthalten sind.
Meine Frage ist nun, wo ich die richtigen konfigurierten kernel header finde, oder auf welche Art ich dieses Problem lösen kann. Die kernel header Dateien müssen meines Wissens nach konfiguriert sein, so dass einfaches kopieren der header aus den Kernel Sourcen nicht aus reicht (Quelle: Building Embedded Linux Systems von Karim Yaghmour , O'REILLY ISBN 0-596-00222-X)
Gruß
Nico |
|
Back to top |
|
|
ssc
Joined: 05 May 2006 Posts: 36
|
Posted: 15.01.2007, 10:39 Post subject: |
|
|
Hallo Nico,
du hast deinen Treiber mit den falschen Quellen übersetzt, oder in die falsche Kernelversion eingebaut.
Du solltest deinen Treiber in die Kernelquellen 2.4.27-vrs1-ssv1 des DNP/9200 einpflegen, bzw. diesen Kernel verwenden um deinen Treiber zu übersetzen.
Schöne Grüße,
ssc |
|
Back to top |
|
|
nfgs
Joined: 08 Dec 2006 Posts: 3
|
Posted: 15.01.2007, 14:41 Post subject: |
|
|
Hallo ssc,
danke erstmal für die schnelle Antwort, jedoch war mir bereits klar dass ich den Treiber mit den falschen Quellen übersetzt habe.
Was ich eigentlich wissen wollte ist, wie ich die richtigen Kernel header in die Toolchain einbinde.
Im Verzeichnis "/usr/local/arm-linux/arm-linux/sys-include/linux" sind die Header der Version "2.4.0-test5-rmk1-np1"
Auf der mir zur Verfügung stehenden CD habe ich im Verzeichnis " Linux/src" folgende Dateien:
Code: |
linux-2.4.27-vrs1-ssv1.tar.gz # kernel sourcen
linux-2.4.27-vrs1-ssv1.diff.gz # kernel patch
patch-2.4.27-vrs1.bz2 # kernel patch
|
Entpacke ich die Kernel-sourcen und kopiere die enthaltenen Header nach "sys-include/linux" kann ich das Modul erst gar nicht kompilieren, da die Header-Datei "version.h" nicht existiert (wird beim Konfigurieren des Kernels erzeugt).
Die Kernel-Sourcen scheinen bereits gepatcht zu sein, da der aufruf von patch mit den entsprechenden Parametern mir dies meldet (Reversed (or previously applied) patch detected!).
woher bekomme ich nun die passenden Kernel Header?
Gruß Nico |
|
Back to top |
|
|
ssc
Joined: 05 May 2006 Posts: 36
|
Posted: 16.01.2007, 10:30 Post subject: |
|
|
Hallo Nico,
der Kernel von der CDROM enthält bereits alle Patches für unser Board.
Die Kernel Header der Toolchain können für alle 2.4er Kernel verwendet werden, die Header des DNP/9200 Kernel brauchen nicht in die Toolchain kopiert werden.
Am Besten du versetzt alles wieder in den Urzustand.
Dann versuch einmal mit der Toolchain so wie sie ist (oder war ) einen lauffähigen Kernel zu erzeugen, um sicher zu gehen, das alles funktioiert.
Um den Treiber korrekt zu übersetzen musst du den Pfad zum 2.4.27 Kernel am besten in deinem Makefile "bekannt" machen. Schau dir mal das Beispiel ssvirq-demo auf der CDROM genauer an, da wird dieser Mechanismus benutzt.
Schöne Grüße,
ssc |
|
Back to top |
|
|
|