Forum: Mikrocontroller und Digitale Elektronik C167CR - Ändern der Optionen und START167 zum Flashen


von niels (Gast)


Lesenswert?

hallo zusammen.

Ich habe in µVision eine Motorsteuerung geschrieben die auch ganz gut 
funktioniert. Jetzt geht es darum, das Programm in den Flash zu brennen 
und zwar so dass es funktioniert.
Ich benutze ein EVA-Board von ertec mit einem Infineon C167CR-16F mit 
128kB internem Flash. Auf dem board sind zwei 1MBit RAM-Bausteine. Zum 
Flashen benutze ich memtool3 von Infineon.

Ich weiss, das ich etwas in den "Options for Target" und/oder in der 
START167.A66 ändern muss, aber was, oder wie ich am besten an das 
Problem herangehe, ist mir im Moment noch schleierhaft.

Kann mmir da jemand helfen oder nen Tip geben?!

mfg der niels...

von Gast (Gast)


Lesenswert?

Hi,

ich hab mal mit den Dingern was machen dürfen (fürs Studium). Um da wat 
in den Flash zu bekommen, musste man die Adressbereiche entsprechend 
einstellen (war im Datenblatt zum Eva-Board kurz beschrieben) und es 
muss eine hex-file generiert werden, die dann mit einem Extratool in den 
Flash geladen wurde. Mit den Einstellungen für den Monitor oder 
Debugg-Modus hat es nicht funktioniert.

Vielleicht helfen dir die Sachen als Stichpunkte weiter...

Gruß,
Gast.

von Carsten (Gast)


Lesenswert?

Seit wann gibt es C167CR mit Flash? Entweder du hast ein XC167 (da gibt 
es kein CR) oder du hast einen C167 als OTP vorliegen.

von niels (Gast)


Lesenswert?

hallo.

@gast:
die speicherbereiche - genau das ist mein problem. was muß ich wo wie 
einstellen?!

@Carsten
du bist nicht der erste der das fragt, aber ja - der C167CR-16F hat 128 
kB Flash.
http://www.keil.com/dd/docs/datashts/infineon/d167r16f.pdf

und was ist OTP?

mfg der niels...

von Carsten (Gast)


Lesenswert?

OTP heißt OneTimeProgramming, also nur einmal programmierbar.
O.K. das Teil ist ja noch aus der Siemens-Zeit, kein Wunder findet man 
bei Infineon keine Info drüber.

Die Einstellungen der Speicherbereiche sind in den Projektsettings 
(glaube bei Linker) einzustellen.

von niels (Gast)


Lesenswert?

aber was muss ich wie ändern?

soweit ich mich da jetzt reingelesen habe, denke ich dass in SYSCON und 
einem BUSCON sich was ändern muss, oder irgendwas mit Chipselect. auch 
die ROM- und RAM-Bereiche sind doch jetzt sicher woanders. und wo steht 
eigentlich die INTERRUPT-VECTOR-Tabelle?

mfg der niels...

von Carsten S. (carsten)


Lesenswert?

Du musst den EA Pin auf 1 legen, somit wird vom internen Speicher 
gestartet und kein externen Bus konfiguriert.
Wenn du unter target (in den Projketsettings) "use on-chip ROM" 
auswählst werden dir die Bereiche beim Linker-Locator richtig 
eingetragen. Dann musst du ggf. nur noch die Resettabelle (L166 Misc) 
anpassen - steht im Datenblatt wo die liegt (typischerweise ab dem 1. 
Byte im Programmspeicher - Resetvektor).

von Max Murks (Gast)


Lesenswert?

Dieses Thema wurde schon ein paar mal hier durchgekaut, einfach mal die 
Suchfunktion verwenden.

> Seit wann gibt es C167CR mit Flash?

Ich benutze Flash Derivate seit ca. 5 Jahren.

von Carsten S. (carsten)


Lesenswert?

O.K. man lernt nie aus, aber die sind nicht mehr bei Infineon 
erhältlich, oder lieg ich auch da falsch.
Sind zumindest nicht mehr auf der Webseite erwähnt, noch in der 
aktuellen Preisliste.

von niels (Gast)


Lesenswert?

Danke für die Ratschläge!

Werde das dann gleich mal ausprobieren.

mfg der niels...

von Daniel (Gast)


Lesenswert?

 niels (Gast)

wenn du im debugging-modus vom ram aus arbeitest, simuliert ein ram 
bereich das flash. wenn du das flash nun effektiv laden möchstest, musst 
du hardwaremässig nix ändern (wie einige geschrieben haben).
Was anders sein muss, sind die Target Options (Speicherbereiche die du 
auswählst - standartwerte Rom von 0x0 aus, ram von 0x100000 ausgehend 
(nicht vergessen unter L166 Misc -> User Selections die Einträge 
anzupassen)
beim flashen solltest du das Start167.A66 von keil zusätzlich 
verewenden, damit der controller in einem definierten zustand ist 
(kannst es auch beim debuggen drinlassen, aber hat dort null wirkung), 
wobei dieses je nach deveriat angepasst werden muss, falls es probleme 
gibt werden sie wohl hier sein...

von niels (Gast)


Lesenswert?

es funktioniert nur soweit, dass die kontroll-led erlischt, was soviel 
bedeutet wie EINIT-command ausgeführt.

ich hab jetzt wieder die orginal START167.A66 von keil eingefügt.
meine "Options for Target" sehen so aus:

TARGET:
(x) Use On-chip ROM
(x) Use On-chip CAN+XRAM
Memory Model: Small

ROM - 0x000000 - 0x8000
RAM - 0x100000 - 0x8000

und der Linker-Controll-String:
TO "29_03_2007"
RESERVE (8H-0BH, 0ACH-0AFH, 0x3E900-0x3EAFF)
VECTAB (0x000000)
CLASSES (ICODE (0x0-0x7FFF), NCODE (0x20000-0x2FFFF),
FCONST (0x0-0x7FFF, 0x18000-0x2FFFF), HCONST (0x0-0x7FFF, 
0x18000-0x2FFFF),
XCONST (0x0-0x7FFF, 0x18000-0x2FFFF), NCONST (0x4000-0x7FFF),
NDATA (0x100000-0x103FFF), NDATA0 (0x100000-0x103FFF),
SDATA (0xF600-0xFDFF), SDATA0 (0xF600-0xFDFF),
IDATA (0xF600-0xFDFF), IDATA0 (0xF600-0xFDFF),
FDATA (0x100000-0x107FFF), FDATA0 (0x100000-0x107FFF),
HDATA (0x100000-0x107FFF), HDATA0 (0x100000-0x107FFF),
XDATA (0x100000-0x107FFF), XDATA0 (0x100000-0x107FFF))
 CINITTAB (0x18000-0x2FFFF)

ich hoffe es kennt sich jemand mehr aus als ich und hat eine idee wo der 
fehler liegen könnte

mfg der niels...

von Max Murks (Gast)


Lesenswert?

Ein Unterschied zwischen, starten vom RAM (über Loader oder Debugger) 
und Flash ist:

   ggf. - Watchdog disablen !!!
        - CS-Speicherzuordnung
        - End of initialization
        - Interrupts freigeben !!!


        DISWDT
        MOV  SYSCON,   #0x0080
  MOV  ADDRSEL1, #0x406
  MOV  ADDRSEL2, #0x2008
  MOV  BUSCON0,  #0x48f
  MOV  BUSCON1,  #0x48f
        EINIT

        @_CALL( _main, R1)



       void main()
       {
          // InitHardware...
          Init();

          // Interrupts freigeben
          IEN=1;

          ....

          while(1);

       }


GRUNDSÄTZLICH!

1. Hardware analysieren
1.1 FLASH Größe, RAM Größe
1.2 Welche CS-Signale zu welchen Speicherbausteinen (CS0=FLASH; CS1=RAM)
?
1.3 Boot Info Hardware Codiert (P0H, P0L) über Pullup Widerstände

2. Software Konfiguration
2.1 SYSCON gemäß Hardware konfigurieren (siehe Datenblatt)
2.2 BUSCONX gemäß Hardware konfigurieren (siehe Datenblatt)
2.3 ADDRSELX gemäß Hardware konfigurieren (siehe Datenblatt)

3. Compiler/Linker/Locater Einstellungen
3.1 ROM-Bereich festlegen (LocMemRom=0h-01FFh,10000h-2FFFFh)
3.2 RAM-Bereich festlegen (LocMemRam=0F000h-0F1FFh, 30000h-3FFFFh)

Kurz gesagt:
Hardware, Firmware und Linker/Locater müssen aufeinander abgestimmt
werden!




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.