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
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.
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 !
Also, dieser kann das doch: http://www.datasheetcatalog.org/datasheet/AdvancedMicroDevices/mXtwzuv.pdf Einzelprogrammierung sollte auch gehen.
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 !
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.
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..
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.
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 ?
> 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
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 ?
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
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
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
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?
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.
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 ;-)
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.
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 :-)
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.
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 !!!
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.
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.
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.
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.
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 !
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
Danke Erich und Tom :-) Ich hab grad gelesen das es wohl doch nur immer eine 64K Bank sein kann... Was ist denn nun richtig ?
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
OK ich kanns ja mal probieren :-) .. und wie groß ist nun ein Sektor ?
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
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
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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.