Flash-Tool für C167

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
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



Re: Flash-Tool für C167
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



Phytec Flash-Tool funktioniert nur mit Phytec Boards :(
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



Re: Phytec Flash-Tool funktioniert nur mit Phytec Boards :(
Hallo Robert,

"Robert Theiß" schrieb:

Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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



Bedankt
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



Re: Bedankt
Hallo Robert,

"Robert Theiß"  schrieb :

Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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).

Quoted text here. Click to load it

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

Quoted text here. Click to load it

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

Gruß
Ernst



Re: Bedankt
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



Re: Phytec Flash-Tool funktioniert nur mit Phytec Boards :(


Robert TheiDF% schrieb:
Quoted text here. Click to load it

Hallo,

ganz einfach, das Datenbuch dazu lesen, im Kapitel System Reset/C16720%
steht dazu:
nach Reset ab Adresse 0, 4 Worte sind freigehalten, danach die20%
Interrupts. Mit einem Sprung an der Adresse 0 zu der wirklichen20%
Startadresse.

Das User Manual lege ich Dir an's Herz, besonders die Kapitel20%
Architectural Overview, Memory Organization, The Central Processing20%
Unit, The External Bus Interface, The Bootstrap Loader, System Reset,20%
System Programming.
Quoted text here. Click to load it

comp.arch.embedded but in english please!

Ich habe nur Phytec Boards benutzt, dazu gibt es auch genug Beispiele20%
fFC%r Keil C.

Schau mal in den Link Listfile .m66:

INTERRUPT PROCEDURE               INT  INTERRUPT NAME
3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%
3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%
3D%3D3D%
C_STARTUP                           0  RESET

003446H   003591H   00014CH   CODE  WORD   ---  ---  PRIV  ICODE20%
?C_STARTUP_CODE
003592H   0035ABH   00001AH   HDATA WORD   ---  ---  GLOB  ---20%
?C_INITSEC

       003446H   ?C_STARTUP                       LABEL ---  ICODE20%
?C_STARTUP_CODE

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

       VALUE     TYPE      REP       LENGTH  TGR   SYMBOL NAME
       3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D=
3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%3D3D%
3D%3D3D%3D3D%3D3D%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 FC%ber Startup.a66

Viel Erfolg!


Re: Phytec Flash-Tool funktioniert nur mit Phytec Boards :(
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



Site Timeline