Flash-Tool für C167

Hallo Leutchen, ich such vergebens nach einem Tool, mit dem ich meinen C167 flashen kann - muss nix komfortables sein. Das einzig funktionstüchtige war bisher FLASHit, kost aber 400 Euro, um die Vollversion freischalten zu können :( Kennt wer Alternativen?

Dankschön fürs Ohr, Robert

Reply to
Robert Theiß
Loading thread data ...

Hi!

es gibt auf dem Phytec ftp-server ein Flashtool für einige Eval-Kits kostenlos. Falls du das nicht findest -> Mail an mich!

mfg Jan

Reply to
Jan Stumpf

Das Phytec Flash-Tool funktioniert gut bei meinem DIP-Modul von Phytec - leider kontrolliert das Programm vorher die Hardware, sodass ichs nur mit Phytec Boards nutzen kann. Und ein eigenes zu schreiben - ja da bin ich wohl viel zu dumm für - ich bekomm da nich mal den Startup-Code für Keil hin. Phytec hat für's DIPModul eins mitgeliefert - lief fein. aber Forth (der Hersteller meines Boards) hat mir bisher unterschiedliche Codes zugeschickt, die alle nich taten. Vieleicht könnt ihr mir mit dem Startup-Code helfen: Hab 256K externen FlashRom und 256Kexternen RAM Der Bus is 16bit demultiplexed Umgebung ist KEIL-C166 In der Anleitung gibts ne vorgeschlagene Speicheraufteilung (weiter unten eingefügt) die zudem einblicken lässt, welcher CS, welchen Baustein kontrolliert Im Startup-Code stehen nun BUSCON-Parameter die sagen welcher Chipselect welchen Bereich ansprechen soll (und mehr). Im KEIL-Compiler schreibt man die Adresszuordnung noch einmal rein - und da fängts an komisch zu werden - wieso 2x definieren ?? Dann hab ich gelesen dass der Code bei 0x00 anfangen soll weil der uC nach nem Reset dort anfängt zu lesen. Nahe der 0x00 liegen aber auch die Interrupts von UART und anderer Peripherien.

Wenn ihr Euch da noch mal über die Philosophie, die dahintersteckt auslassen könnt, wäre fein - ich denk mal, da musste sich jeder C166-Nutzer mal mit auseinandersetzen und wisst ihr gute Foren? Ich werd derweilen weiter mit FLASHit arbeiten (Demo ist auf Hex-Files < 4k begrenzt).

Dankschön nochmal - schön,d ass es Leutchen gibt, die gerne helfen - is bei mir im Institut nich so der Fall Robert

Address range Chip select Bus width Function

40 0000 - 40 FFFF -CS4 8 Bit -CSEXT for 64 kByte external periphery

20 1000 - 20 1FFF -CS3 8 Bit UART, 4 kByte

20 0000 - 20 0FFF -CS2 8 Bit RTC, 4 kByte

10 0000 - 1F FFFF -CS1 16 Bit RAM up to 1Mbyte

00 0000 - 0F FFFF -CS0 16 Bit (Flash-) EPROM up to 1 MByte

After a reset, the CPU fetches the first instruction from address 0. Because only

the chip select signal -CS0 is active after a reset, the Flash-EPROM will be

detected at this address. If there is a program in the EPROM, it will

automatically be started after a reset.

To use the PEC, you have to use the internal RAM or the XRAM, because the

EPROM is mapped into the first segment of the memory.

....Sab 256K externen FlashRom und 256Kexternen RAM Der Bus is 16bit demultiplexed

Reply to
Robert Theiß

Hallo Robert,

"Robert Theiß" schrieb:

Die BUSCON-Register, die im Startupcode eingetragen werden, sorgen dafür, daß der Chipselect-Decoder den richtigen Chipselect-Ausgang aktiviert, wenn z.B. auf Adressen, bei denen RAM vorhanden sein soll, zugegriffen wird. CS0 ist nach Reset ab Adresse 0x00 aktiv, dort muß also der Speicherchip angeschlossen sein, der den Startupcode enthält.

Mit 'Im KEIL-Compiler' meinst Du wahrscheinlich die Einstellungen für den Linker/Locater in der integrierten Entwicklungsumgebung, oder? Diese sind nötig, um die Adressbereiche für den Code, die statisch angelegten Variablen, den Stack etc. festzulegen, damit die Variablen auch im RAM liegen. Da die Namen der vom C166 benutzten Segmente IIRC schlecht dokumentiert sind, vom Memory-Modell und der Größe der Datenstrukturen abhängen, empfiehlt sich auf jeden Fall eine sorgfältige Kontrolle des Map-Files, ob tatsächlich nur die wirklich als Speicherbaustein vorhandenen Bereiche vom Locater belegt wurden. Insbesondere der interne Speicherbereich (IIRC 0xF600...) darf nicht mit Code belegt werden.

Korrekt - der Locater plaziert Reset-Vector und Interrupt-Vectoren ab 0x00 an die richtigen Adressen, abhängig von der Vektornummer, die Du beim 'interrupt'-Schlüsselwort angibst. In größere Lücken mit unbenutzten Interrupt-Vektoren legt er jedoch auch schonmal Code... Zwingend ist nur, daß bei 0x00 der erste auszuführende Befehl steht, üblicherweise ein Sprung zum Beginn des Startupcodes.

HTH Ernst

Reply to
Ernst Schwab

Robert Thei=DF schrieb:

ach

Hallo,

ganz einfach, das Datenbuch dazu lesen, im Kapitel System Reset/C167=20 steht dazu: nach Reset ab Adresse 0, 4 Worte sind freigehalten, danach die=20 Interrupts. Mit einem Sprung an der Adresse 0 zu der wirklichen=20 Startadresse.

Das User Manual lege ich Dir an's Herz, besonders die Kapitel=20 Architectural Overview, Memory Organization, The Central Processing=20 Unit, The External Bus Interface, The Bootstrap Loader, System Reset,=20 System Programming.

slassen

al mit

comp.arch.embedded but in english please!

Ich habe nur Phytec Boards benutzt, dazu gibt es auch genug Beispiele=20 f=FCr Keil C.

Schau mal in den Link Listfile .m66:

INTERRUPT PROCEDURE INT INTERRUPT NAME =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D C_STARTUP 0 RESET

003446H 003591H 00014CH CODE WORD --- --- PRIV ICODE=20 ?C_STARTUP_CODE 003592H 0035ABH 00001AH HDATA WORD --- --- GLOB ---=20 ?C_INITSEC 003446H ?C_STARTUP LABEL --- ICODE=20 ?C_STARTUP_CODE

SYMBOL TABLE OF MODULE: C:\PHYTEC\GRABBER\DEMO5 (?C_STARTUP)

VALUE TYPE REP LENGTH TGR SYMBOL NAME =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D 003446H PUBLIC LABEL --- --- ?C_STARTUP 041000H PUBLIC VAR --- --- ?C_USRSTKBOT 00FA00H PUBLIC CONST --- --- ?C_SYSSTKBOT 000000H GLOBAL INTNO --- --- RESET

und lies im C166 Compiler User's Guide das Kapitel =FCber Startup.a66

Viel Erfolg!

Reply to
Uwe Hercksen

Vielen lieben Dank, das fördert das Hintergrundswissen :) dachte schon, dass der ROM am CS0 hängen muss. Ich fass nochmal zusammen, was ich nu zu wissen glaube: Nach einem Reset wird automatisch CS0 an mit der Anfangsadresse 0x00 aktiviert. An dieser Stelle sollte eine Sprunganweisung zum Startup-Code sein (Bsp.:

0x300). das bedeutet aber auch das mein ROM bei 0x00 anfängt, 0x40000 (256k ROM) und folglich bis 0x3FFFF reicht. All das wird nicht im Startup-Code ausgedrückt, da es selbsverständlich ist, dass der ROM an CS0 hängt und bei 0x00 anfängt. Dann wird der Startup-Code abgearbeitet und Startwert + Größe für CS1 - CS4 werden festgelegt. In meinem Fall wieder 256k RAM an CS1 also ist jede Adresse >= 0x40000 recht, oder? KEIL jedoch muss ich nun sagen, dass trotz des durchgehenden ROM-Bereiches auf bestimmten Bereichen kein Code abgelegt werden darf, da bestimmte Adressbereiche den uC-internen Speicher zugewiesen sind, welcher im Falle einer Überlagerung die höhere Priorität hat und der Programmcode in diesem Bereich nich gelesen werden könnte.

Folgende interne Adressbereiche glaube ich erkannt zu haben: On-Chip ROM(bei mir nich vorhanden): 0x0000 - 0x7FFF On-Chip RAM+SFR's+ESFR's: 0xF000 - 0xFFFF On-Chip CAN+XRAM: 0xE000 - 0xE7FF => 0xE000 - 0xFFFF sind

Mein Linker-File sieht so aus: SECTIONS(?C_STARTUP_CODE%ICODE (0x010000)) RESERVE (08H-0BH, 0ACH-0AFH) VECTAB (0x0) CLASSES ( ICODE (0x10000-0x3FFFF), FCODE (0x10000-0x3FFFF), FCONST (0x10000-0x3FFFF), HCONST (0x10000-0x3FFFF), XCONST (0x10000-0x3FFFF), NCONST (0x10000-0x13FFF), NDATA (0x40000-0x43FFF), NDATA0 (0x40000-0x43FFF), SDATA (0xE000-0xE7FF, 0xF600-0xFDFF), SDATA0 (0xE000-0xE7FF,

0xF600-0xFDFF), IDATA (0xF600-0xFDFF), IDATA0 (0xF600-0xFDFF), FDATA (0x40000-0x7FFFF), FDATA0 (0x40000-0x7FFFF), HDATA (0x40000-0x7FFFF), HDATA0 (0x40000-0x7FFFF), XDATA (0x40000-0x7FFFF), XDATA0 (0x40000-0x7FFFF) ) CINITTAB (0x10000-0x3FFFF) wobei ich keine Ahnung hab, was CINITTAB heißt :( Steht der eigentliche Programm-Code eigentlich direkt hinter dem Startup-Code? Und die Interrupt-Routinen, sind die Programmcode, das im ROM (von KEIL) abgelegt wird oder sind die auf dem uC selbst abgelegt ???

Ich sach nochma dankschön für's durchlesen und bitte um Korrektur bei schwerwiegenden Denkfehlern, Robert

Reply to
Robert Theiß

Hallo Robert,

"Robert Theiß" schrieb :

im Prinzip ja, dein Beispiel 0x300 passt jedoch nicht zu den Linker/Locater- Einstellungen, da der Startupcode irgendwo ab 0x10000 landet. Der Sprung sollte aber automatisch richtig generiert werden.

Das könnte (muß aber nicht) was mit vorinitialisierten C-Variablen zu tun haben - steht nichts dazu im Handbuch? Eventuell läßt sich im Mapfile erkennen, was dort gespeichtert wird, falls überhaupt irgendetwas dort gespeichert wird (könnte ja auch ein SODA-Eintrag sein, der einfach nur so da ist).

Wahrscheinlich ja, jedenfalls landen Programmcode und Startupcode ab 0x10000. Siehe Mapfile.

Interrupt-Routinen werden wie normaler Programmcode abgelegt, zusätzlich wird noch der Interrupt-Vektor initialisiert.

Gruß Ernst

Reply to
Ernst Schwab

Nochmals Dankschön, so nach und nach, könnts passieren, dass ich Herr der Suppe werde. Der Doofe uC baut zwar immer noch Unfug, aber das Verständnis für die Dinge wächst. Ich glaub aber das Linker-File sollte nun fitt sein, ist eher noch der Startup-Code, der vielleicht noch weniger volkommen ist. Uwe Hercksen hat empfohlen im C166-Manual über Startup.a66 nachzuschlagen, da steht bestimmt auch was über den Linker-File drinn. Manchmal vergisst man, wie naheliegend Lösungswege sein können, wenn man schon ne Weile gegen die Wand gerannt ist, Robert

Reply to
Robert Theiß

Dankschön, die Newsgroup macht n guten Eindruck - mit englisch sollte nich so schwierig werden. Mit der Tabelle aus dem Linker-File kann ich nich so richtig viel anfangen; da bin ich vielleicht noch ne Stufe zu weit von entfernt. Ich werd als nächstes nochmal das C166 Manual bezüglich Linker-File und Startup-Code lesen, häufig fehlt mir jedoch das Basiswissen, sodass viele Anleitungen nich viel nützen. N bischen n Riecher hab ich ja mittlerweile, sodass ich die C166-Manual vielleicht verstehe. So viel geredet nix gesagt - ich schau mir die jetzt an. Dir nochmals Danke und n schönen Tag, Robert

Reply to
Robert Theiß

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.