Flash-Tool für C167

R

Robert Theiß

Guest
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
 
Robert Theiß schrieb:

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?
Hallo,

von Phytec bekam ich zum Minimodul 80c167 die FlashTools 16W umsonst
dazu, die funktionieren mit Hex-Files von der Keil Umgebung bestens.
Die Speicherverteilung muß natürlich auch passen.

Bye
 
Robert Theiß wrote:
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?
kommt der C167 jetzt mit integriertem Flash ? Sonst macht doch ein
generisches Flashtool keinen Sinn, da es dann ja je nach eingesetztem
Flashbaustein angepasst werden muss.

Wir verwenden auch den C167 in nem Produkt und schrieben ein eigenes
speziell angepasstes Flashtool.

tschaule
Martin
 
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
 
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
 
Hallo Robert,

"Robert Theiß" schrieb:

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 ??
[...]
Wenn ihr Euch da noch mal über die Philosophie, die dahintersteckt auslassen
könnt, wäre fein [...]
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.

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.
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
 
Robert Theiß schrieb:
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.
Hallo,

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

Das User Manual lege ich Dir an's Herz, besonders die Kapitel
Architectural Overview, Memory Organization, The Central Processing
Unit, The External Bus Interface, The Bootstrap Loader, System Reset,
System Programming.
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?
comp.arch.embedded but in english please!

Ich habe nur Phytec Boards benutzt, dazu gibt es auch genug Beispiele
für Keil C.

Schau mal in den Link Listfile .m66:

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

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

003446H ?C_STARTUP LABEL --- ICODE
?C_STARTUP_CODE

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

VALUE TYPE REP LENGTH TGR SYMBOL NAME
====================================================== 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 über Startup.a66

Viel Erfolg!
 
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
 
Hallo Robert,

"Robert Theiß" schrieb :

An dieser Stelle sollte eine Sprunganweisung zum Startup-Code sein (Bsp.:
0x300).
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.

CINITTAB (0x10000-0x3FFFF)
wobei ich keine Ahnung hab, was CINITTAB heißt :(
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).

Steht der eigentliche Programm-Code eigentlich direkt hinter dem
Startup-Code?
Wahrscheinlich ja, jedenfalls landen Programmcode und Startupcode
ab 0x10000. Siehe Mapfile.

Und die Interrupt-Routinen, sind die Programmcode, das im ROM (von KEIL)
abgelegt wird oder sind die auf dem uC selbst abgelegt ???
Interrupt-Routinen werden wie normaler Programmcode abgelegt, zusätzlich
wird noch der Interrupt-Vektor initialisiert.

Gruß
Ernst
 
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
 
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
 

Welcome to EDABoard.com

Sponsor

Back
Top