29F040B in Schaltung programmieren

OP #1961301
Lesenswert?

Hallo,
ich befasse mich grad mit der Planung!!, wie ich einen 29F040B EEPROM,
im laufenden Betrieb programmieren kann. D.h. im EEPROM ist ein 
bestimmter
Speicherbereich zu ändern, OHNE das die anderen davon beeinflusst 
werden!
Hat jemand Erfahrung damit ? Ich setz ein Z80 System mit 6Mhz ein.

Danke für Eure Hilfe sagt Ralph
#1961305
Lesenswert?

Der 29F040  ist ein Flashbaustein und kein EEPROM.
Den kannst du nur Block/Komplettweise loeschen. Solange er im 
Loesch/Schreibmodus ist kannst du keine Daten auslesen aus den anderen 
Bloecken. Du must den Code zum Schreiben/Loeschen in anderen 
Speicherbausteinen stehen haben.
OP #1961360
Lesenswert?

Hm.. stimmt natürlich. Da hast Du vollkommen Recht Helmut ! ABer wenn
ich immer nur 64k Blöcke löschen und schreiben kann, ist der 29F040B
dann doch nicht geeignet, denn ich hab nur 48k Puffer.. und keine 64K 
die
nötig wären, um die grad gelöschte Bank wieder zu beschreiben.

Da werd ich entweder doch den IC rausnehmen oder nen anderen verwenden, 
oder? Seh ich das richtig so ?
(Firma: 100nF 0603 X7R) #1961371
Lesenswert?

> Ralph H. (guru)
> Da werd ich entweder doch den IC rausnehmen oder nen
> anderen verwenden, oder? Seh ich das richtig so ?

Nicht unbedingt.
Das 8051 System, das ich hier benutze,
kopiert die Flash-Routinen in einen RAM-Bereich,
springt dann ins RAM, und bearbeitet von dort aus den Flash.

So ist in dem System nur
1x RAM IC
1x Flash IC.

Das sollte mit dem Z80 genauso funktionieren.

(Das System ist nicht vor mir, sondern von Hr.Wickenhäuser.)

HTH,
Jörg
#1961372
Lesenswert?

Du darfst hat kein Flash einsetzen sondern EEPROM

Das hier sollte das koennen. Ist aber ein bisschen kleiner.
http://www.atmel.com/dyn/resources/prod_documents/doc0010.pdf

>Hm.. stimmt natürlich. Da hast Du vollkommen Recht Helmut ! ABer wenn
>ich immer nur 64k Blöcke löschen und schreiben kann, ist der 29F040B
>dann doch nicht geeignet, denn ich hab nur 48k Puffer.. und keine 64K
>die
>nötig wären, um die grad gelöschte Bank wieder zu beschreiben.

Die 64 Kbyte kannst du nur am Stueck loeschen. Schreiben geht auch 
Byteweise.
Ansonsten 28C010 von Atmel.

Wie machst du das den ueberhaupt mit deinem Z80. Bei soviel Speicher 
muesstes du doch Banking einsetzen? Kannst du das RAM nicht erweitern ?
#1961379
Lesenswert?

Die kleinen seriellen DataFlashs von Atmel sollten einfacher zu 
beschreiben sein, mit nur wenigen Leitungen, das Auslesen ins RAM dauert 
dann etwas länger.
http://www.atmel.com/dyn/products/devices.asp?family_id=616
je 4 kbyte löschbar, bis 64 Mbit, allerdings 3,3V oder weniger.

oder gleich eine SD-Speicherkarte
http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten
OP #1961396
Lesenswert?

also ich will mal die vorigen Beiträge zusammenfassen.. :-)

Ich brauch definitiv 8bit DB-Breite.. seriel kommt nicht in Frage, weil
die Software direkt im ROM läuft! der RAM ist mit 64k schon maximal
ausgebaut, braucht aber noch Systembereiche.. ich hab als PUFFER nur 
48k!!
und wenn ich in einer 64k Bank nur 1k ändern will, muss ich ja die 
restlichen 63k irgendwo puffern.. dafür will ich keine zusätzliche 
Schaltung bauen müssen..  PLCC kommt ni in Frage, nur DIL! wegen der LP
Ich frag ja deswegen hier, damit ich den Aufwand minimal halte ;-)
#1961403
Lesenswert?

Fass ich das mal kurz zusammen.

Das du 8 Bit brauchst ist klar.

Der Z80 hat 64K Addressraum.

48K Byte ist mit RAM belegt.
Bleiben 16KByte fuers Flash.

So nun die Frage wie willst du das ganze Flash mit 512KByte ansprechen.
Dazu brauchst du ein Bankinglogik.

Wie sieht dein System den jetzt nun aus.
OP #1961416
Lesenswert?

Hm.. ich wollte ni mein Z80 System erörtern oder ändern, sondern ne 
Info..
aber ich erklärs.. Der EEPROM wird über eine einfache Logik mit 8k als
BS im Adressbereich von 0..01FFF und als Steuerlogik für die ROMDISK von
0F000..0FFFF eingeblendet-- d.h. das ist BANK 0 ! über einen einfachen
IO-Port werden dann die Bänke2..7 adressiert und in RAM 16K Blockweise
eingeblendet wo die Tools dann umgeladen werden.. Das ganze geht mit 4 
IC
und 64K SRAM :-)
#1961427
Lesenswert?

Ralph H. schrieb:
> Hm.. ich wollte ni mein Z80 System erörtern oder ändern, sondern ne
> Info..

Du willst doch Hilfe.

Ralph H. schrieb:
> aber ich erklärs.. Der EEPROM wird über eine einfache Logik mit 8k als
> BS im Adressbereich von 0..01FFF und als Steuerlogik für die ROMDISK von
> 0F000..0FFFF eingeblendet-- d.h. das ist BANK 0 ! über einen einfachen
> IO-Port werden dann die Bänke2..7 adressiert und in RAM 16K Blockweise
> eingeblendet wo die Tools dann umgeladen werden.. Das ganze geht mit 4
> IC
> und 64K SRAM :-)

Ok . Also eine Bankinglogik.

Wenn du jetzt nicht 512KByte haben willst sondern auch mit 128kByte 
zufrieden bist sollte der doch der 28C010 gehen. Das ist ein EEPROM der 
Byteweise neubeschrieben / geloescht werden kann. Eventuell 4 Stueck 
einbauen.

Oder eine ganz andere Loesung. Bau ein 512KByte RAM ein anstatt des 
EEPROM und puffer das mit einer Batterie.
Nur so als Vorschlag.
OP #1961439
Lesenswert?

Danke Helmut.. aber 128k sind mir zuwenig.. und die RAM Variante hat das 
Problem das ein abgestürztes Tool alles löschen könnte...

Nun aber nochmal zum Kern der Sache.. also geht der 29F040b nicht..
Welcher Baustein hat mind 256k ? das würde mir reichen hab ich grad
errechnet ! Hauptsache einfach und DIL !!!
#1961450
Lesenswert?

Also meine Recherche hat ergeben das es keine groesseren als 128 KByte 
Parallel EEPROMs gibt. Das interssiert keinen Hersteller mehr.
Die setzen mehr auf FLASH. Und wo diese Teile reinkommen ist auch mehr 
RAM drin.
Also bliebe als einzige Option 2 Stueck 28C010 EEPROMS zu nehmen.
Eventuell Huckepack uebereinander loeten.
Gast #1961589
Lesenswert?

SST39F040 mit 4kB Sektoren.

Wie man sieht gibt es doch einige die für deinen Zweck
verwendbar wären. Ein grosses NVRAM wäre auch noch eine
Möglichkeit. Ein Problem bei den Flash könnte die Adress-Sequenz
zum freischalten des Schreibens werden. Das könnte mit deinem
Banking und anderen Adressen im Adressraum deines Z80 kollidieren.
Gast #1966566
Lesenswert?

du kannst einen 29f040 nehmen, musst allerdings einen sektor dir frei 
halten.
die isp programmierroutinen müssen komplett aus dem RAM heraus laufen, 
da das flash-businterface während des programmiervorganges toggelnde 
bitmuster ausgibt (als code-fetch nun wirklich nicht zu gebrauchen ;-).
was an inhalt nicht verändert werden soll in den vorher gelöschten 
freien sektor kopieren, dann die zu ändernden daten mit dazu (einfügen).
den "alten" sektor kannst du nun für die nächste änderung als freien 
sektor verwenden.

gruss, tom.
Gast #1966609
Lesenswert?

Ich habe von gut 10 Jahren Flash-Routinen für einen 29F010 erstellt, 
ebenfalls für den Z80 mit Banking-Logik.
Dabei läuft der Bootloader in einem der 8 dort vorhandenen 16k Byte 
Blöcke. Über die Banking-Logik wird sichergestellt, daß dieses Bootblock 
bei Reset auf Adresse 0x0000 sichtbar ist; ist ja Startadresse des Z80.
Zusätzlich ist dieser Boot-Block löschgeschützt (da keine +12V am 
29F010). Die Vorprogrammierung muss durch externes Programmiergerät 
erfolgen.
Die restlichen 7 Blöcke je 16 kByte sind löschbar (einzeln oder gesamt).
Vorteil: Komplett ausfallsicher, auch wenn Fehler, Spannungsverlust, 
während des Flashvorgangs.
Wie bereits Tom vorher schrieb, müssen die eigentlichen Zugriffsroutinen 
für Flash löschen und Byte-für-Byte programmieren aus dem RAM erfolgen.
Aber es genügt, nur wenige kleine Unterprogramme ins Ram zu kopieren und 
aufzurufen. Die ganzen Hauptroutinen können aus dem 29F010 laufen.
Der 29F040 dürfe identisch zu 29F010 sein, nur mit grösseren Blöcken.
Hersteller waren damals AMD sowie 2nd Source STM.
Wie  holger  schrieb, ist die Banklogik zu beachten. Es dürfen keine 
kleineren Blöcke als die Command-Tabellen des Bausteins benannten 
Adressbereich verwendet werden, da sonst die Adress-Sequenzen ggf. nicht 
mehr korrekt am Baustein ankommen. Beim 29F010 sind das A0-A10, für die 
Sequenz-Adressen "555" und "2AA" (hexadezimal).
Von FLASH-Bausteinen 28xxx ist abzuraten. Die haben keine Blöcke und 
keinen Kopierschutz. Auch ist der Löschvorgang kompliziert und kann 
leicht zum Zerstören des Bauteils führen (da nicht "self-timed").
Mit letztem Absatz sind EEPROMs (auch "28...") nicht gemeint. Aber damit 
kenne ich mich weniger aus.
Erich
Gast #1966666
Lesenswert?

Ralph H. schrieb:
> Danke Erich und Tom :-) Ich hab grad gelesen das es wohl doch nur immer
> eine 64K Bank sein kann... Was ist denn nun richtig ?

Hallo,

das steht im Datenblatt. Aber auch wenn das so ist:

1. Die Zwischenspeicherung kann ja im Flash erfolgen, wenn du nicht 
genügend RAM hast.

2. Löschen eines Sektors sollte gehen, weil du dafür ja nicht den ganzen 
Sektor adressieren musst, sondern nur den Befehl geben.

3. Schreiben kannst du auch in 2 32k-Blöcken.

Ausprobiert habe ich das allerdings nicht.

Gruss Reinhard
Gast #1967092
Lesenswert?

Ralph H. schrieb:
> OK ich kanns ja mal probieren :-) .. und wie groß ist nun ein Sektor ?

Soweit ich gelesen habe, 64 kB (AM29F010_120JC) - es soll von anderen 
Firmen auch andere geben, hab ich aber noch nicht gesehen.

Insbesondere ist es so, dass die Sektoren mit 3 Adressbits ausgewählt 
werden, es kann also nur 8 geben.

Gruss Reinhard
Gast #1967292
Lesenswert?

Hallo

in meinem Beitrag  Datum: 07.12.2010 17:14
beschrieb ich primär das Bauteil 29F010 mit 8 Sektoren je 16 kByte.

Das Flash 29F040 ist 4 mal so gross.
Es hat ebenfalls (nur) 8 Sektoren, hier als zu je 64 kByte.

Löschen kann man immer nur mind. einen ganzen Block.
Oder den gesamten Baustein auf einmal (wobei geschützte Sektoren nicht 
gelöscht werden, siehe meine Ausführungen von gestern).
Nach dem Löschen ist der Inhalt 0xFF.

Schreiben (programmieren) kann man BYTEweise.
Man kann auch "überschreiben" wenn einem klar ist, hierbei nur Bits vom 
Zustand "1" nach "0" ändern zu könnnen.

Man muss eben die Sequenzen lt. Datenblatt einhalten (Tabelle "Command 
Definitions").

Gruss
Gast #1974740
Lesenswert?

@erich:
danke für die zusätzliche info an den fragenden

@guru:
bitte selbst mal in die datenblätter von 29f010 und 29f040 gucken, da 
ist genau beschrieben wie gross die einzelnen sektoren (banks) sind.
dann schaust du was du brauchst und wie du das busmässig an deine cpu 
gefrickelt bekommst.
immer dran denken, die programmierroutinen müssen aus dem RAM (oder 
einem anderen physikalischen speicherbaustein) gefetched werden, da der 
zu löschende/programmierende chip auf seinem businterface dann bitmuster 
rumtoggelt.
wie du das chip-select mässig usw. hinbekommst mit deiner HW ist deine 
sache.

bei beiden typen generell:

1. Löschen kann man nur einen kompletten sektor
2. programmieren kann man byteweise (bits von 1->0), ein leeres byte im 
flash steht auf 0xff. wer will kann nun jedes einzelne bit davon 
nacheinander gen 0 programmieren, nur bits von 0->1 programmieren geht 
nicht. das kann nur das sektor-erase. dieses kann z.B. beim 29f040 max. 
sogar 2.2secs dauern...

hmmm, ich würde mal schauen ob es da nicht isp-fähige flashes gibt, 
ansonsten kannst du da schnell irre werden mit burn-and-learn und sockel 
raus/rein...

gutt lack, tom ;o)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren