Forum: Mikrocontroller und Digitale Elektronik Speicher Adressierung


von Tina B. (tina)


Angehängte Dateien:

Lesenswert?

Hallo,

was muss ich mir genau unter dem großen Adressenbereich vorstellen, der 
für die EBI Chip Selects drauf geht?

Tina

von opacer (Gast)


Lesenswert?

Was soll man sich darunter schon vorstellen? In den Adressbereich wird 
externe Peripherie gehangen die über den Daten/Adressbus angeschlossen 
ist.

Dafür hast du mehrere Chipselects zur Verfügung. Jeder Chipselect hat 
einen 256MB großen Speicherbereich (ein Display braucht den eher nicht, 
ein Flash oder RAM dagegen schon - wenn auch nicht ganz). In diesem 
Speicherbereich laufen die Zugriff auf die Peripherie. Die Hardware 
kümmert sich dann selber um das schalten der CS-Leitungen.

Oder hab ich die Frage falsch verstanden?

Grüße

von Tina B. (tina)


Lesenswert?

>In diesem Speicherbereich laufen die Zugriff auf die Peripherie.

genau, das hab ich noch nicht ganz verstanden, wie die einzelnen 
Vorgänge da nach einander ablaufen.

Wenn man z.B. seinen Programmcode im externen Flash-Speicher hat, wird 
dann in diesem Speicherbereich die Adressen angelegt für den externen 
Speicher, die benötigt werden für einen Zugriff?

Tina

von opacer (Gast)


Lesenswert?

> Wenn man z.B. seinen Programmcode im externen Flash-Speicher hat, wird
> dann in diesem Speicherbereich die Adressen angelegt für den externen
> Speicher, die benötigt werden für einen Zugriff?

Also wenn ich z.B. ein externes Businterface habe, und habe mein 16Bit 
NOR-Flash dran mit dem Program (CS0 meistens). Außerdem habe ich an CS1 
ein SRAM mit x KB/MB größe. In meiner IDE (Keil µVision) habe ich z.B. 3 
möglichkeiten für onChip-Memory und 3 Möglichkeiten für offChip-Memory. 
Dort stelle ich ein das an CS1 (also in dessen Speicherbereich von - 
bis) Read/Write Speicher ist. Natürlich muss ich auch das NOR-Flash 
angeben (als ReadOnly Speicher). Der Compiler resp. Linker stetzt die 
Adressen dann automatisch um, im Startup-File müssen zudem die 
ChipSelects konfiguriert werden (Busbreite, Wait-States etc.).

Die Adressen kann man natürlich auch manuell ansprechen über Pointer 
(z.B.). Natürlich auch erst nach Konfiguration.

Bei einem 8051 mit seinem sehr begrenzen Adressraum braucht man z.B. 
externe Adressdecoder, die es einem ermöglichen Speicher, LCD etc. an 
den Datenbus zu hängen. Diese Logic hat der ARM bereits eingebaut. 
Außerdem hat man hier durch 32Bit Register wesentlich mehr Adressraum 
zur Verfügung.

Welcher µC genau und welche IDE?

von Tina B. (tina)


Lesenswert?

ich hab auch seit gestern die Keil µVision Umgebung. Jedoch hab ich da 
noch einige Probleme mit dem Linker-File (ELF wird bei GNU Compiler 
nicht erzeugt, obwohl das compilieren erfolgreich ist - keine ahnung, 
was da noch falsch ist) und das Startup-File muss ich mir auch noch 
genau anschauen.

>In meiner IDE (Keil µVision) habe ich z.B. 3 möglichkeiten für onChip->Memory und 
3 Möglichkeiten für offChip-Memory.

unter Options for Target - Target?

>Welcher µC genau und welche IDE?

AT91RM9200 und Keil µVision - dazu gibt es als Beispiel-File von µVision 
das Blinky-Programm...

>Startup-File müssen zudem die ChipSelects konfiguriert werden
>(Busbreite, Wait-States etc.).

im Startup-File vom AT91 sehe ich die ganzen Felder, wie NWS, WSEN etc. 
Kennst du dazu ein gutes pdf, Buch etc. wo ich mit diesen ganzen Werten 
besser vertraut werden kann? Chip-Select Signale sind mir schon ein 
Begriff - wird ein Speicher etc. am Datenbus hängend ausgewählt bzw. 
angesprochen..

Tina

von opacer (Gast)


Lesenswert?

Also ein Buch dazu kenne ich nicht. So viel ist das eigentlich nicht. 
Such mal bisschen im www. Außerdem stehen die Parameter alle in den 
Datenblättern drin.

Den GNU Compiler nutze ich nicht, kann daher dazu leider auch nicht 
weiterhelfen. Aber unter Options - Target sind die Einstellungen.
Bei dem RM9200 kommt es auch auf den Bootmode an (Boot-ROM oder Flash an 
CS0).

von Tina B. (tina)


Lesenswert?

>Bei dem RM9200 kommt es auch auf den Bootmode an (Boot-ROM oder Flash an
>CS0).

anfangs wollte ich ohne Bootloader arbeiten, um mit der ganzen thematik 
warm zu werden.. und erst danach den u-boot bootloader wieder 
aufspielen...  bis jetzt ist dieser bootloader noch drauf, den ich über 
die RS232 erstmal löschen muss, ansonsten kann ich eh nichts mit JTAG 
auf den Prozessor spielen...

>Den GNU Compiler nutze ich nicht, kann daher dazu leider auch nicht 
>weiterhelfen.

verwendest du den Keil CARM Compiler oder den RealView Compiler (mit dem 
funktioniert es bei mir bis jetzt). Bei den CARM Compilern hab ich 
gelesen, dass diese mit der neuen Installation von Keil nicht mehr 
mitgeliefert werden. Konnte jedenfalls keinen entsprechenden Ordner 
finden.

Das Problem mit dem GNU Compiler haben zum Glück auch ein paar andere 
Leute, aber leider bis jetzt keine lösung im netz gefunden. 
Wahrscheinlich stimmt die Meldung, dass alles gelinkt worden ist, nicht. 
Aber warum der Linker nicht angesprochen wird - vielleicht muss man da 
irgendwas im linker-file noch verändern...

Tina

von opacer (Gast)


Lesenswert?

Ich arbeite mit dem RealView Compiler .. bislang ohne Probleme. Den 
RM9200 kenn ich nur vom Datenblatt, ich arbeite Hauptsächlich mit den 
neueren SAM926x. Dort auch ohne Bootloader (also Programm im Flash an 
CS0).

Welche Peripherien willst du denn anschließen? Nur RAM/Flash oder sonst 
noch was?

von Tina B. (tina)


Lesenswert?

hab mir das board hier zukommen lassen.
http://www.taskit.de/produkte/portux/index.htm

auf dem Board sind zwei SDRAMs und ein Flash-Speicher mitintegriert.. 
aber erst einmal ist mir nur der flash wichtig - step by step.

Tina

von opacer (Gast)


Lesenswert?

Wo genau ist das Problem? An dem ELF File? Startup? Oder überhaupt mal 
was blinken zu lassen?

von Tina B. (tina)


Lesenswert?

http://www.keil.com/support/man/docs/uv3/uv3_ca_tool_options.htm

hier werden dann die entsprechenden Adressen eingegeben für CS0, CS1 
etc.

Aber was ist genau der Unterschied zwischen ARM-Mode und Thumb-Mode bei 
der Code-Generation? Auf der Keil Homepage konnte ich bis jetzt auch 
noch nichts zu den Begriffen "Use Cross-Module Optimization" und "Use 
MicroLib" finden.

>Wo genau ist das Problem? An dem ELF File? Startup? Oder überhaupt mal
>was blinken zu lassen?

Wenn ich den GNU Compiler verwende, bekomm ich kein ELF File. Build 
target -> 0 error and 0 warnings --> aber leider auch kein ELF-File.

Das Startup-File muss ich mir genau anschauen... der erste schritt ist 
natürlich erst mal nur was blinken zu lassen, mehr nicht...

Tina

von opacer (Gast)


Lesenswert?

ARM-Mode / Thumb-Mode

Die ARM Kerne (ARM7/9) unterstützten zwei Befehlsmodi .. ARM und Thumb. 
Der ARM-Mode benutzt 32Bit Befehle, der Thumb Mode 16Bit. Im Allgemeinen 
kann man kurz sagen .. ARM Mode ist schnell, Thumb Mode macht kleinere 
Programmgrößen.

Cross Module Optimization schmeißt - so weit ich weis - einfach 
Funktionen die nicht benötigt werden aus dem Programm raus und 
verkleinert somit das Program. In dem Zusammenhang .. wird in dem 
Startup auch die Main-Routine aufgerufen? Nicht das der Linker das alles 
rauswirft..

MicroLib:
http://www.arm.com/support/faqdev/18376.html

Beim Startup-File gibt es doch ne Art Konfigurationsbildschirm. Und 
warum kannst du JTAG nicht direkt nutzen? (ist das ne eigenart vom 
RM9200 ?)

Grüße

von Tina B. (tina)


Lesenswert?

>In dem Zusammenhang .. wird in dem Startup auch die Main-Routine >aufgerufen?

wo genau muss die main denn aufgerufen werden? im c-file von Blinky.c 
existiert auf jeden fall eine main-routine. Im Startup-Code selbst wird 
main (void) nicht aufgerufen.

; Enter the C code

                IMPORT  __main
                LDR     R0, =__main
                BX      R0


                IF      :DEF:__MICROLIB

                EXPORT  __heap_base
                EXPORT  __heap_limit

                ELSE
; User Initial Stack & Heap


>Und warum kannst du JTAG nicht direkt nutzen? (ist das ne eigenart vom >RM9200 ?)

hier wird mir der Zugriff verweigert... vll wegen dem u-boot bootloader, 
der installiert ist?

Tina

von opacer (Gast)


Lesenswert?

Ok, also die Main Routine wird aufgerufen (Adresse von Main in R0 legen 
und zu Adresse in R0 springen).

Prüf mal den BMS Pin. Wenn der High ist bei Reset, dann geht der in den 
Bootloader sonst startet er vom Flash.

Möchtest du später darauf Linux laufen lassen?

von Tina B. (tina)


Lesenswert?

betreibe das board mit 9volt und hab unter options for target - 
utilities in den settings vom ulink "erase full chip" angeklickt - aber 
beim load kommt immer folgende fehlermeldung:

JTAG Communication Failure - die Comp LED vom Ulink leuchtet aber
Flash Download Failed - targett DLL has been cancelled.

>Möchtest du später darauf Linux laufen lassen?

vielleicht später (den U-boot kann ich ja jederzeit wieder aufspielen, 
ist mitgeliefert worden) - zuerst mal nicht, sondern mit C/C++ 
Programmieren und die RS232 ansprechen und Ethernet etc.


Tina

von Tina B. (tina)


Lesenswert?

es gibt zwar auf diesem board einen jumper "bootmode" den ich schon mal 
gesetzt und nicht gesetzt habe bevor ich das board mit spannung versorgt 
habe, aber leider bringt das keine veränderung... ob der u-boot jedesmal 
startet kann ich grad nicht nachschauen, da ich kein RS232 crossover 
kabel hier habe, und der u-boot spricht nur über die rs232 
schnittstelle...

tina

von opacer (Gast)


Lesenswert?

Welches Flash hast du ausgewählt im µVision? Stell mal die Frequenz vom 
uLink kleiner ob da irgendein Problem ist. Im Datenblatt habe ich jetzt 
nicht gefunden ob man JTAG irgendwie anschalten muss (die NXP LPCs muss 
man das z.b.) .. hab aber nur kurz geschaut. ich schaue jetzt nochmal

von opacer (Gast)


Lesenswert?

Welchen Level hat der JTAGSEL Pin?

von Tina B. (tina)


Lesenswert?

unter target hab ich ROM1: 0x10 000 000  und als Size 0x800000 Startup 
eingegeben.

im pdf von diesem Board steht drinnen:
Address
0x10 000 000 bis 0x1F FFF FFF

EBI
Chip Select 0.  für das 4MB externe Flash.


Die Frequenz von Ulink hab ich jetzt auf 200kHz gestellt (unter Debug 
settings) - unter utilities hab ich diese einstellung nicht gefunden.

unter utilities hab ich unter Programming algorithm AT49xV32x Flash mit 
externen Flash 4MB angegeben und den Adressbereich von 0x10 000 000 bis 
0x103FFFF eingegeben

>Im Datenblatt habe ich jetzt nicht gefunden ob man JTAG irgendwie anschalten muss

davon hab ich auch noch nichts gelesen im datenblatt.

Tina

von Tina B. (tina)


Lesenswert?

>Welchen Level hat der JTAGSEL Pin?

ist genau das problem, ich hab von diesem board keine gute beschreibung 
von taskit erhalten.. da steht nichts über die pins etc. drinnen... also 
ob dieser gegen VCC gezogen worden ist...

Tina

von opacer (Gast)


Lesenswert?

Das Manual von Taskit ist mal gelinde gesagt ***ei*e ..

Probier mal unter Options - Target - Debug - uLink ARM Debugger Settings 
- "Reset at Startup" einzuschalten. Vielleicht hilft dir das weiter.

von Tina B. (tina)


Lesenswert?

das ist das ganze technische manual von taskit - aber wie du schon 
gesagt, hast ist es sehr schlecht... der Pin 105 (JTAGSEL) ist z.B. gar 
nicht erwähnt..

das mit dem Reset at startup hat leider nicht geholfen...

Aber die Adressierung vom externen Flash mit 0x10 000 000 als Startpunkt 
und 0x0F FFF FFF als länge oder kürzer müsste passen.

http://www.taskit.de/ftp/manuals/Portux_TechnicalReference.pdf
(Seite 9)

welche Position muss ich beim Linker angeben unter R/O und R/W Base? 
einen Wert ab 0x10 000 000?

Tina

von opacer (Gast)


Lesenswert?

R/O also Read/Only ist das Flash (startup)
R/W also der RAM (Read/Write) ist 0x20 000 000 (default)

von Tina B. (tina)


Angehängte Dateien:

Lesenswert?

kannst du kurz mal drüber schauen, ob ich noch irgendwelche 
haarstreubenden fehler in diesem file gemacht habe?

Tina

von Tina B. (tina)


Lesenswert?

waren noch irgendwelche fehler oder eingaben die ich nicht gemacht habe, 
drinnen?

Tina

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.