Hallo... ich betreibe ein TFH-System One Board mit einem AT89C51CC03. Auf dem Board ist ein Rambaustein vom Typ CX62256NLL 70PXC. Da es (vom CAN-Trainceiver abgesehen) die einzige Komponente auf dem Board ist, die ich noch nicht benutzt habe, wollte ich das Teil mal mit nutzen. Als Entwicklungsumgebung setze ich Keil µVision 4 ein. Ich habe ein kleines Testprogramm geschrieben, um erst einmal eine Grundfunktion herzustellen...funktionierte auch prima, dachte ich zumindest... Die Entwicklungsumgebung scheint meine Werte nicht im externen Raumbaustein, sondern im externen Ram des µControllers abzulegen. Wenn ich das Programm starte bekomme ich eine saubere Ausgabe, dass alles ok ist - aber komischer Weise erhalte ich die auch, wenn der Rambaustein NICHT auf dem Board ist -> entweder habe ich einen ota-Baustein, der nicht mal eine Spannungsversorgung benötigt (Patentverdächtig aber eher unwahrscheinlich ;-)oder ich habe an einer anderen Stelle klassisch versagt (sehr wahrscheinlich!!!). Da sicherlich nach der *.map gefragt wird (aus der ich nicht so richtig schlau werde) habe ich (den vermutlich interessanten Teil) auch mal gleich hier: ACTIVE MEMORY CLASSES OF MODULE: test_ram2 (?C_STARTUP) BASE START END USED MEMORY CLASS ========================================================== X:000000H X:000000H X:001FFEH XDATA X:000000H X:000000H X:001FFEH 000FA0H HDATA C:000000H C:000000H C:00FFFFH 000609H CODE I:000000H I:000000H I:0000FFH 000001H IDATA I:000000H I:000000H I:00007FH 00000DH DATA I:000020H.0 I:000020H.0 I:00002FH.7 000001H.1 BIT X:000000H X:000000H X:0000FFH 00000FH PDATA MEMORY MAP OF MODULE: test_ram2 (?C_STARTUP) START STOP LENGTH ALIGN RELOC MEMORY CLASS SEGMENT NAME ======================================================================== = * * * D A T A M E M O R Y * * * * * 000000H 000007H 000008H --- AT.. DATA "REG BANK 0" 000008H 00000CH 000005H BYTE UNIT DATA DATA_GROUP 00000DH.0 00001FH.7 000013H.0 --- --- **GAP** 000020H.0 000021H.0 000001H.1 BIT UNIT BIT BIT_GROUP 000021H.1 000021H 000000H.7 --- --- **GAP** 000022H 000022H 000001H BYTE UNIT IDATA ?STACK * * * X D A T A M E M O R Y * * * * * 000000H 00000EH 00000FH BYTE INPAGE PDATA PDATA_GROUP 00000FH 000FAEH 000FA0H BYTE INSEG HDATA ?FD?RAM Die getätigten Einstellungen in "Options for Target" sind zusammen mit dem Quellcode im Bild zu sehen. Nach 8 Stunden rumprobieren (und googlen) bin ich am Ende und hoffe, dass es hier einen wissenden gibt, der mal das Brett vor meinem Kopf entfernen kann. Gruss Karsten
Hallo Karsten, weise doch deinem Array den Speichertyp XDATA zu. Und far brauchst du hier nicht, der Speicherchip hat nur 32KByte. schreibe statt: far int Vari[2000]; die Anweisung: int xdata Vari[2000]; Gruß. Tom
nun da stellt sich natürlich erst mal die Frage an welchen Addressen dein Ram zu finden ist. Zusätzlich wird vermutlich das onChip SRAM noch eingeschaltet sein Wenn also Internes und ext. XRAM an den gleichen Adressen liegen wird immer ins interne Ram geschrieben, da der Controller beim internen Ram keinen Zugriff mit RD oder WR erzeugt. Die Größe des internen XRams kann auch noch programmiert werden. Thomas
Ohgottohgottohgottohgottohgottohgottohgottohgottchen, also ne. Quelltext postet man nicht als png, sondern als c !!! Die ersten 2k werden intern sein, Du mußt darüber zugreifen.
Hallo Thomas, am Bild kann man sehen, daß Karsten einen Teil des externe Ram im Bereich 0x0000 bis 0x1FFF gewählt hat. Wie der Chip tatsächlich decodiert ist, weiß nur das Handbuch der Platine und (hoffentlich) Karsten. Wenn man das interne Ram des µC nicht abschalten kann, muß darauf, wie du sagst, auch noch geachtet werden. Da der Speicherchip 32K groß ist und der µC internes Ram besitzt, drängt sich der Verdacht auf, das externe RAM ist auf den Adressbereich 0x8000 bis 0xFFFF codiert? Gruß. Tom
Ich sehe grad im Bild, daß Karsten das interne RAM abgeschaltet hat! Kein Häckchen bei "Use On-chip XRAM" Bleibt nur zu klären, in welchem Adressbereich das externe RAM liegt. Bei 32k sollte es ja nur zwei Möglichkeiten geben - 0x0000 bis 0x7FFF oder 0x8000 bis 0xFFFF.
TomA schrieb: > Ich sehe grad im Bild, daß Karsten das interne RAM abgeschaltet hat! > > Kein Häckchen bei "Use On-chip XRAM" Da würde ich erstmal in den entsprechenden Registern nachschauen, ob das tatsächlich ausreicht, um auf externen XRAM zu schalten. IIRC ist das nur ein Hinweis für den Compiler/Linker. Näheres steht im Handbuch.
Hallo... So viele Antworten - und noch mehr Fragen...OK, dann fange ich mal an: @TomA das mit XData war mein erster Versuch...das Ergebnis war das gleiche wie jetzt. Der Baustein liegt auf dem Tisch und die Daten werden trotzdem gespeichert. Daher der Versuch mit far. @ Thomas der RAM liegt im Adressbereich von 0x0000 bis 0x7fff und On-Chip RAM ist deaktiviert-dachte ich zumindest, weil ja der Haken -wie Tom richtig gesehen hat - nicht drin ist. @ Peter ja, Du hast natürlich recht. Es hatte sich bei dem Screenshot nur so angeboten und wird nicht wieder vorkommen. Danke für den Rüffel.. @ Jim in welchen Registern muss ich denn da schauen? Und welches Handbuch meinst Du (Platine, Prozessor, IDE) Wobei das eigentlich das logischste wäre, wenn die Umschaltung nicht klappen würde. Stellt sich dann nur die Frage, wie man das "richtig" macht. So...dann erstmal noch ein schönes Restwochenende... Es grüsst Karsten
So... Lösung gefunden. Der Watchdog ist schuld - bzw. die leere Batterie. Der Watchdog überwacht die Batteriespannung, und scheint, wenn die Batteriespannung zu niedrig ist, das vom Chip-Selectdecoder kommende MEM\ Signal am CE\IN nicht an CE\OUT weiter zu geben. Daher kommt am Speicherbaustein kein RAM\-Signal am CS1\ des Rambausteins an bzw. das VOUT-Signal am CS2 des Ram-Bausteins fehlt. Dass die Daten trotdem gespeichert wurden liegt daran, dass der controllerinterne ERAM den gleichen Adressbereich nutzt, wie der extern erweiterte Rambaustein (siehe auch Datenblatt des Controllers: Internal and External Memory Organisation ERAM-XRAM). Hierfür wird der Chip-Selectdecoder nicht gebraucht, daher klappt auch die Speicherung der Daten. Die Adressierung des Speicherbereichs ist NUR mit dem Schlüsselwort far möglich, mit xdata kann nur der interne ERAM genutzt werden. Für die Verwendung des externen Speichers werden Libarys benütigt, die in das Projekt eingebunden werden müssen: - C51C.LIB - XBANKING.A51 Im Bezug auf den externen Ram sind folgende Einstellungen in Keil notwendig: Options for Target: Use Extended Linker (LX51) instead of BL51 (anhaken) Target: Memory Model: Large Off-chip Xdata memory: Startadresse und Größe eintragen 'far' Memory type support (anhaken) LX51 Locate: Use Memory Layout from Target Dialog (anhaken) Bei größeren Speichern ist natürlich noch das Bankswitching zu konfigurieren, hierzu kann ich aber nichts sagen, da ich biher nur einen 32K Speicherbaustein habe/nutze. Es grüßt Karsten
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.