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...
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.
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.
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...
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.
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...
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).
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.
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.
Danke für die Ratschläge! Werde das dann gleich mal ausprobieren. mfg der niels...
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...
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.