Forum: Mikrocontroller und Digitale Elektronik /CE und /OE an FLASH korrekt anschließen


von Steffen H. (steffenh)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

im Datenblatt zu meiner CPU32 (MC68336) wird folgender Aufbau im Anhang 
vorgeschlagen. Was haltet ihr davon?

Aus meiner Sicht ist dort ein Fehler: Der /CSBOOT Ausgang (Chip Select 
aktiv beim Aufstart) ist sowohl mit /CE als auch mit /OE des FLASHs 
verbunden. Dadurch kann sich der Prozessor beim Aufstart natürlich den 
Code aus dem FLASH holen. Aber gleichzeitig wird ein Überschreiben des 
FLASHs unmöglich gemacht! Denn dafür müssen /CE = aktiv, /OE = inaktiv 
und /WE = aktiv sein - was sich mit dem Aufbau nicht einstellen lässt.

Übersehe ich da etwas? Falls es ein Fehler ist - wie verdrahtet man das 
richtig? Das Problem ist ja grundsätzlicher Natur: beim Aufstart müssen 
/CE und /OE gleichzeitig aktiv werden und um das zu Erreichen steht nur 
/CSBOOT zur Verfügung.

Grüße
Steffen

: Bearbeitet durch User
von Steffen H. (steffenh)


Lesenswert?

Hat jemand das Know How und kann mir weiterhelfen?

Steffen

von Michael U. (amiga)


Lesenswert?

Hallo,

das sagt Dir das Datenblatt des konkreten Flashs.
Ich kenne es von früher z.B. von RAM oder EPROM, daß /WE die höhere 
Priorität hat. Bei /WE = low sind die Datenleitungen immer Eingang, egal 
ob /OE aktiv gesetzt ist.
Würde mich wundern, wenn das bei Flash anders wäre.

Gruß aus Berlin
Michael

von Re (r42)


Lesenswert?

Es würde helfen, zu wissen, welchen Flash-Baustein Du konkret vor Dir 
hast, aber vielleicht hilft ja

| https://datasheetspdf.com/pdf-file/706150/STMicroelectronics/M28F102/1

Table-3 weiter. In Figures 8 bis 10 sind die Timings für "Write" 
angegeben.
Da muss zum Schreiben /E (=/CS) immer LOW sein und /G (=/OE) immer HIGH.
Und außerdem muss Vpp angesteuert werden. Beides ist in Deinem 
Schaltplan nicht vorgesehen.

Bei den "gereiften" RAMs und EPROMs wurde im Datenblatt ja auch noch 
ausdrücklich erwähnt, dass /OE zum Schreiben egal ist - bei diesem Flash 
wird das aber afaik nicht garantiert.

Wenn Du einen anderen Flash-Typ vor Dir hast, mag das anders aussehen.

HTH (re)

: Bearbeitet durch User
von Motopick (motopick)


Lesenswert?

Der "vermeintliche" Fehler ist wohl eher anzunehmen, dass die
CPU ueberhaupt in diesen Flash schreibt oder schreiben koennte.

Ich habe hier "Rechner" mit dem 68360. Die haben zwei Flashbereiche.
Einen, byteorientiert, als Bootrom und einen zweiten, 32 Bit breit,
der auch schreibbar ist.

von Thomas Z. (usbman)


Angehängte Dateien:

Lesenswert?

So könnte es funktionieren. Dmit bekommst du aus RW !OE und !WE 
aufgetrennt.

Beim RAM gibts das Problem ja auch da kannst du dann den zweiten Dekoder 
verwenden.

: Bearbeitet durch User
von Steffen H. (steffenh)


Lesenswert?

Michael U. schrieb:
> das sagt Dir das Datenblatt des konkreten Flashs.
> Ich kenne es von früher z.B. von RAM oder EPROM, daß /WE die höhere
> Priorität hat. Bei /WE = low sind die Datenleitungen immer Eingang, egal
> ob /OE aktiv gesetzt ist.

Ah okay. Ich dachte, /OE aktiviert stumpf die Ausgangstreiber. Und dass 
das im JEDEC Standard(?) so festgelegt ist und deshalb bei nahezu allen 
FLASH gleich wäre.


Re schrieb:
> Es würde helfen, zu wissen, welchen Flash-Baustein Du konkret vor Dir
> hast

Ich möchte einen Am29F100 verwenden.


Motopick schrieb:
> Der "vermeintliche" Fehler ist wohl eher anzunehmen, dass die
> CPU ueberhaupt in diesen Flash schreibt oder schreiben koennte.

Dann hätte ich erwartet, dass /WE fest auf high verdrahtet wäre. Aber es 
stimmt schon, das kann natürlich auch der Hintergrund sein.


Thomas Z. schrieb:
> So könnte es funktionieren. Dmit bekommst du aus RW !OE und !WE
> aufgetrennt.

Stark, danke für den Tipp! Von der Logik her passt das prima. Ist das 
evtl. sogar von Dir erprobt? Ich muss mal schauen, ob das vom Timing her 
bei mir funktioniert :-)

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Steffen H. schrieb:
> Ist das erprobt?
nicht mit deiner CPU aber in ähnlichen Fällen hab die 139er schon oft so 
benutzt. HC(T) wird in deinem Fall etwas zu langsam sein, aber AHC(T) 
sollte es tun. (typisch 15ns)

von Steffen H. (steffenh)


Lesenswert?

Klasse, ich probiere das aus! Vielen Dank!

von Re (r42)


Lesenswert?

Steffen H. schrieb:
> Ich möchte einen Am29F100 verwenden.

Dann sagt das das Datenblatt

| 
https://www.physi.uni-heidelberg.de/~angelov/g2/MP042_Controller_68332/MP42-AM29F100.PDF

doch recht eindeutig auf Seite 1-39, dass /CE = /OE = LOW zu in jedem 
Fall zu einem Read-Zugriff führt. Sagt Dein Datenblatt etwas anderes?


> Thomas Z. schrieb:
>> So könnte es funktionieren.
> Ist das evtl. sogar von Dir erprobt?

Das ist eigentlich eine Standardschaltung; Vor Jahr und Tag hatte ich 
sowas auch an einem 68332 (Gott hab ihn selig) in einer dreistelligen 
Kleinstserie drangehabt.

Moderne 74er-Serien gibt es aber sowieso mit nur wenigen ns Delay, wird 
also kein Problem geben.

Für alles andere als Boot ist das ohnehin problemlos, weil das Timing ja 
per Register beeinflussbar ist.

Aber wozu eigentlich? Typischerweise ist das BOOT-(EEP)ROM klein, 
8-Bittig und quasi in Stein gemeißelt und nur der Application-Flash wird 
bei Bedarf neu geschrieben. Alles andere führt dazu, dass Du bei einem 
Fehler während des Flashens das System nicht mehr gebootet bekommst.

HTH (re)

: Bearbeitet durch User
von Motopick (motopick)


Lesenswert?

> Das ist eigentlich eine Standardschaltung; Vor Jahr und Tag hatte ich
> sowas auch an einem 68332

Da vermutlich noch Peripherie dazu kommt, tu dir einen Gefallen
und benutze etwas heute angemesseneres zum dekodieren.

Selbst GAL war schon vorgestern und CPLDs kommen auch schon in
die Jahre.

> Die haben zwei Flashbereiche. Einen, byteorientiert, als Bootrom
> und einen zweiten, 32 Bit breit, der auch schreibbar ist.

> Typischerweise ist das BOOT-(EEP)ROM klein,
> 8-Bittig und quasi in Stein gemeißelt und nur der Application-Flash wird
> bei Bedarf neu geschrieben.

Mit nur einem Flash im System, wirst du auf Probleme stossen,
wenn du den im Betrieb beschreiben willst.
Besonders schnell wird das mit den byteweisen Zugriffen auch nicht.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Motopick schrieb:
> Mit nur einem Flash im System, wirst du auf Probleme stossen,
> wenn du den im Betrieb beschreiben willst.

Das System hat ja auch noch RAM, wenn ich das richtig sehe.

von Mi N. (msx)


Lesenswert?

Motopick schrieb:
> Da vermutlich noch Peripherie dazu kommt, tu dir einen Gefallen
> und benutze etwas heute angemesseneres zum dekodieren.
>
> Selbst GAL war schon vorgestern und CPLDs kommen auch schon in
> die Jahre.

Na, was ist denn heute angemessen?
74HCT139 habe ich auch noch in der Kiste. Schönes Teil, um R/W in die 
Form /RD und /WR zu bringen und noch weitere /CS zu erhalten.
Aber die obige Schaltung würde ich vor dem Nachbau zunächst 
funktionfähig aufzeichnen. Da stimmt Einiges nicht.

Erzeugt der gezeigte MC68k /DTACK für die Peripherie bereits intern oder 
muß man noch ein 74HCT164 ergänzen?

von Thomas Z. (usbman)


Lesenswert?

Motopick schrieb:
> Da vermutlich noch Peripherie dazu kommt, tu dir einen Gefallen
> und benutze etwas heute angemesseneres zum dekodieren.
>
> Selbst GAL war schon vorgestern und CPLDs kommen auch schon in
> die Jahre.

ja eben weil Gals und CPLDs ziemlich obsolet sind und das ein 5V Design 
ist, ist doch ein Decoder mit TTL gar keine schlechte Wahl.

Das Flashen ist kein Problem, man muss halt die Flashroutinen ins Ram 
kopieren und von dort starten. Die einzige Gefahr besteht darin, dass 
man während des Flashens das System kaputt machen kann. Das kann man 
aber schon hinbekommen wenn man einen Sektor schreibschützt und nur 
Sektorerase verwendet.

von Motopick (motopick)


Lesenswert?

> Das System hat ja auch noch RAM, wenn ich das richtig sehe.

Ich kenne den MC68336 zu wenig, um ganz sicher sagen zu koennen,
dass es reicht die Programmteile zum Flashen dann im RAM vorzuhalten.
Ich denke da z.B. an Interrupte und aehnliche Stoerquellen :).

Es schadet sicher nicht, den TO darauf hinzuweisen.

Ich habe von Winzsystemen mit dem 68302 abgesehen, bislang nur
die Zweiteilung in Boot-ROM und Flash gesehen.

von Mi N. (msx)


Angehängte Dateien:

Lesenswert?

Motopick schrieb:
> Ich habe von Winzsystemen mit dem 68302 abgesehen, bislang nur
> die Zweiteilung in Boot-ROM und Flash gesehen.

Dann zeige ich Dir eine Schaltung, wie es Mitte der 90er schon 
funktioniert hatte (seinerzeit noch mit H8/3002 bzw. 68HC001).

von Motopick (motopick)


Lesenswert?

> Dann zeige ich Dir eine Schaltung
Ja, sehr hypsch.

Ich kann und darf leider keine Schaltung zeigen, weil die
in einem ASIC "verschwunden" ist. War an einem 68360.

von Mi N. (msx)


Lesenswert?

Motopick schrieb:
> Ich kann und darf leider keine Schaltung zeigen, weil die
> in einem ASIC "verschwunden" ist. War an einem 68360.

Da sieht man den Unterschied zwischen Herr und Knecht. Ich darf Dir 
alles erzählen ;-)

Das Startup-Programm liegt im FLASH 0x0 - 0x3fff und programmiert sich 
die /CS-Leitungen so um, daß anschließend das RAM ab 0x0 liegt und das 
auszuführende Programm im Flash so ab 0x804000 (typisch 1/2 
Adressbereich). Startup wartet ca. 0,5 s auf Befehle per RS232 und 
springt ansonsten ins Hauptprogramm.
Wird ein "Kennwort" empfangen, kann der Bootloader im Flash ein Programm 
ins RAM schreiben und starten. Erst dieses Programm enthält Routinen zum 
Programmieren des Flash. Das Flashprogramm kann sich somit nicht selber 
"zerschiessen".

Das RAM war neben der Uhr auch noch batteriegepuffert. Im Prinzip hat es 
ausgereicht, das eigentliche Programm nur ins RAM zu laden und dort 
laufen zu lassen. Das war für die Entwicklung etwas schneller als 
erneutes Beschreiben des Flash.

von Motopick (motopick)


Lesenswert?

> Da sieht man den Unterschied

Nun ja, ich moechte dafuer mal wetten, dass du noch keinen ASIC
versenkt hast. Das ist fuer den "Herrn" naemlich ganz schoen teuer.

Im uebrigen ist auch keiner mehr ueber mir.

Bei meinem zweiten Z80-Rechner:
Das Startup-Programm liegt im EPROM 0x0 - 0x3ff und programmiert
sich  die /CS-Leitungen so um, daß anschließend das RAM ab 0x0 liegt.
Das ist also auch nicht gerade neu :).

von Mi N. (msx)


Lesenswert?

Motopick schrieb:
> Das Startup-Programm liegt im EPROM 0x0 - 0x3ff und programmiert
> sich  die /CS-Leitungen so um, daß anschließend das RAM ab 0x0 liegt.
> Das ist also auch nicht gerade neu :).

Und, was war das Ziel der Übung? Hast Du ihn dann per PC per DFÜ 
umprogrammiert?
Beim M68k konnte man sich damit zur Laufzeit die Vektoren 
umprogrammieren, was viele Leute dann auf die Palme brachte. Da wurde 
argumentiert, sie könnten ja zerschossen werden und das Programm zum 
Absturz bringen.
Aber die selben Leute haben den Stack im RAM liegen lassen ;-)

Was für den TO eine zeitgemäße Dekodierung wäre, hast Du übrigens noch 
nicht verraten. ASIC mit 5V Pegelwandlern?

von Steffen H. (steffenh)


Lesenswert?

Re schrieb:
> Dann sagt das das Datenblatt
>
> |
> 
https://www.physi.uni-heidelberg.de/~angelov/g2/MP042_Controller_68332/MP42-AM29F100.PDF
>
> doch recht eindeutig auf Seite 1-39, dass /CE = /OE = LOW zu in jedem
> Fall zu einem Read-Zugriff führt. Sagt Dein Datenblatt etwas anderes?

Das ist interessant! Dein Datenblatt ist Revision B (November 1995). 
Meines ist Revision C (März 1998) und darin steht in Table 1, dass /WE 
auf "H" liegen muss.

Link: 
https://pdf1.alldatasheet.com/datasheet-pdf/view/55463/AMD/AM29F100.html


Re schrieb:
> Aber wozu eigentlich? Typischerweise ist das BOOT-(EEP)ROM klein,
> 8-Bittig und quasi in Stein gemeißelt und nur der Application-Flash wird
> bei Bedarf neu geschrieben. Alles andere führt dazu, dass Du bei einem
> Fehler während des Flashens das System nicht mehr gebootet bekommst.

Wie später im Thread beschrieben, wird mein Bootloader in einem 
schreibgeschütztem Sektor liegen. Die Programmier-Routinen lade ich ins 
RAM. Dieser Aufbau ist bereits grob vorgegeben. Ich möchte ihn lediglich 
für Messzwecke erweitern und dabei nicht zu viel umbauen.


Motopick schrieb:
> Besonders schnell wird das mit den byteweisen Zugriffen auch nicht.

Danke für den Hinweis. Ich verwende Wortbreite. Das ist zwar immer noch 
nicht schnell, aber ich komme zurecht.


Mi N. schrieb:
> Aber die obige Schaltung würde ich vor dem Nachbau zunächst
> funktionfähig aufzeichnen. Da stimmt Einiges nicht.

Meinst Du die Schaltung aus dem Datenblatt oder den vorgeschlagenen 
Dekoder von usbman?


Mi N. schrieb:
> Was für den TO eine zeitgemäße Dekodierung wäre, hast Du übrigens noch
> nicht verraten. ASIC mit 5V Pegelwandlern?

Ich brauche eine Lösung, die funktioniert ;-) Wenn es einen Dekoder mit 
mehr Vorteilen gibt - klar, gerne! Aber zeitgemäß ist für mich 
unwichtig.


Vielen Dank für Eure Hilfe!
Steffen

von Motopick (motopick)


Lesenswert?

> Und, was war das Ziel der Übung?

Man konnte ihn ueber ein gleichspannungsfreies synchrones
Datenprotokoll booten. Z.B. von einem Tape.
Das erste Band wurde von meinem ersten Z80-Rechner per
Monitor erstellt. Auf dem Band war ein Monitorprogramm fuer den
zweiten Z80 Rechner...
Spaeter kamen dann noch ein Basic, CP/M, ...

> Hast Du ihn dann per PC per DFÜ umprogrammiert?

"Den" PC gab es zu dieser Zeit bei mir nicht.
Aber er bekam spaeter seinen Code auch von einem C64.
Und noch ein wenig spaeter von einem C128D.

> Was für den TO eine zeitgemäße Dekodierung wäre...

Dafuer war der TO mit Informationen zum gesamten System viel
zu sparsam. In seinem ersten Beitrag war ein "Minimalsystem"
dargestellt.
Ich persoenlich wuerde wohl zu ispLSI1016 und Abkoemmlingen greifen
wenn es etwas komplexer wird.

Wenn der Aufwand der Dekodierung ueberschaubar bleibt,
kann der TO ja machen was er will :).
Mache ich ja auch.

von Mi N. (msx)


Lesenswert?

Steffen H. schrieb:
> Mi N. schrieb:
>> Aber die obige Schaltung würde ich vor dem Nachbau zunächst
>> funktionfähig aufzeichnen. Da stimmt Einiges nicht.
>
> Meinst Du die Schaltung aus dem Datenblatt

Die aus dem Datenblatt. Vergleiche doch einfach einmal die obige 
Funktionszeichnung und die realen Anschlüsse am Flash.

> Ich brauche eine Lösung, die funktioniert ;-)

Da frage ich mich, warum Du gerade diesen Controller verwenden möchtest. 
So schön die Schaltung mit ihm auch sein möge, sie hat keinen 
praktischen Nutzen mehr. Er hatte seine Zeit, aber die ist vorbei.

von Re (r42)


Lesenswert?

Steffen H. schrieb:
> Meines ist Revision C (März 1998) und darin steht in Table 1, dass /WE
> auf "H" liegen muss.

Huch? Tatsächlich, das Verhalten für /WE = /CE = /OE = "LOW" ist in der 
neueren Revision C gar mehr definiert. However, ein garantiertes "Write" 
wird das in keinem der beiden Fälle.

Der Schaltungsvorschlag aus dem Datenblatt setzt den typischen Fall 
voraus, dass das BOOT-ROM niemals überschrieben werden soll. Bei Dir 
soll das anders sein, also passt der 08/15-Vorschlag des DB nicht mehr. 
Aus meiner Sicht kein Fehler im DB, sondern nur andere Voraussetzungen.


Die Lösung von Thomas Z. mit 74139 ist jedenfalls jahrzehntelang 
bewährt, wenn dadurch das Timing-Budget nennenswert strapaziert wird, 
nimmt man eben die F-Serie.

https://pdf1.alldatasheet.com/datasheet-pdf/view/7960/NSC/74F139.html


(re)

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.