Forum: Mikrocontroller und Digitale Elektronik 29F040B in Schaltung programmieren


von Ralph H. (guru)


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

von Helmut L. (helmi1)


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.

von Ralph H. (guru)


Lesenswert?

Hm.. das heißt ich kann ihn nur in 64k Blöcken löschen und dannach
wieder beschreiben ?, also nicht Byteweise?
Wenn das so ist, welcher Baustein mit mind. 256k*8Bit im DIL kann das?

Danke für die schnelle Antwort !

von Michael_ (Gast)


Lesenswert?

Also, dieser kann das doch:
http://www.datasheetcatalog.org/datasheet/AdvancedMicroDevices/mXtwzuv.pdf
Einzelprogrammierung sollte auch gehen.

von Ralph H. (guru)


Lesenswert?

Na genau den hab ich doch im Auge :-) Bist Du sicher das er es kann ?
Ich möchte darin einfach nur selten geänderte Programme für das 
Z80-System
unterbringen, aber den IC nicht jedesmal rausnehmen wenn ich etwas 
umprogrammieren möchte !

von Helmut L. (helmi1)


Lesenswert?

Ralph H. schrieb:
> Hm.. das heißt ich kann ihn nur in 64k Blöcken löschen und dannach
> wieder beschreiben ?, also nicht Byteweise?

Du kannst ihn nur Sektorweise loeschen (Seite 10 Datasheet) 
programmieren kannst du ihn Byteweise.

von Ralph H. (guru)


Lesenswert?

Hm.. ich versuch das grad aus dem Datenblatt zu entnehmen..bin aber des
Englischen leider nicht sehr mächtig ...
Frage.. Kann ich beim Bytesweise programmieren, aus ner 00H ein FFH 
machen ? das würde doch reichen..

von Helmut L. (helmi1)


Lesenswert?

Ralph H. schrieb:
> Frage.. Kann ich beim Bytesweise programmieren, aus ner 00H ein FFH
> machen ? das würde doch reichen..

Nur umgekehrt. Du kannst nur aus FF -> 00 machen. Beim loeschen werden 
alle Bits zu '1' gesetzt. Sonst braeucht man das loeschen ja nicht.

von Ralph H. (guru)


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 ?

von Joerg L. (Firma: 100nF 0603 X7R) (joergl)


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

von Helmut L. (helmi1)


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 ?

von Entwickler (Gast)


Lesenswert?

Die AT29C040 können in Häppchen mit je 256 Byte programmiert werden. Die 
hat Atmel allerdings abgekündigt.
Funktionskompatibel dazu sind die W 29C040P-90. Du müßtest Dir aber 
einen Lieferanten für DIP suchen; ich kenne nur PLCC32.
http://www.reichelt.de/?ACTION=3;ARTICLE=68735;GROUPID=;SID=30@TNBPVX8AAAIAAHukQdcdf7a6c0b7ae9e8efa4b3c0dd04d357f

von reimann (Gast)


Lesenswert?

Wie wäre es mit einem EPROM-Simulator? Hat mir bei der Entwicklung einer 
Z80 System-Software sehr geholfen. Diesen o.ä.
http://www.holger-klabunde.de/eprsim/eprsim.htm

von Christoph db1uq K. (christoph_kessler)


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

von Michael_ (Gast)


Lesenswert?

Kommt darauf an, wieviel Daten du zum Ändern hast. Brauchst ja nicht die 
ganzen 64K nutzen.
Ich hab mir kurz den Toggl-Modus angesehen. Kann man damit ein Byte 
umdrehen?

von Helmut L. (helmi1)


Lesenswert?

Michael_ schrieb:
> Ich hab mir kurz den Toggl-Modus angesehen. Kann man damit ein Byte
> umdrehen?

Nein du kannst damit kein Byte umdrehen. Das ist eine Methode um 
festzustellen wann der Programmiervorgang zu ende ist.

von Ralph H. (guru)


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

von Helmut L. (helmi1)


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.

von Ralph H. (guru)


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

von Helmut L. (helmi1)


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.

von Ralph H. (guru)


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 !!!

von Helmut L. (helmi1)


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.

von holger (Gast)


Lesenswert?

AT29C040 hat 256 Byte Sektoren:

http://www.atmel.com/dyn/resources/prod_documents/doc0333.pdf

Bleibt die Frage wo man den bekommt. Es gibt aber sicher noch
andere mit kleinen Sektoren.

von holger (Gast)


Lesenswert?

SST28SF040 ein EEPROM.

von holger (Gast)


Lesenswert?

Winbond W29C040 auch 256 Byte Sektoren.

von holger (Gast)


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.

von tom (Gast)


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.

von Ralph H. (guru)


Lesenswert?

Oh das klingt gut !! Danke .. und wenn DU nun noch ne Idee hast, wie die 
Routine aussehen muss..
Was meinst Du mit Sektor genau ? Wie groß muss er sein ? Die 
Programmierroutine im RAM laufen zu lassen ist kein Problem !

von Erich (Gast)


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

von Ralph H. (guru)


Lesenswert?

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

von Reinhard Kern (Gast)


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

von Ralph H. (guru)


Lesenswert?

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

von basti (Gast)


Lesenswert?


von Reinhard Kern (Gast)


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

von Erich (Gast)


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

von Erich (Gast)


Lesenswert?

Für Suchfunktion Eintrag dieses Querverweis zu Artikel
Beitrag "Flash Memory löschen was ist zu beachten"

Dort Aufzählung von noch erhältlichen und alternativen Bauteilen, Stand 
12/2010, siehe dortige Beiträge
  09.12.2010 17:30
  09.12.2010 18:45
  09.12.2010 22:52

von tom (Gast)


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)

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.