Forum: Mikrocontroller und Digitale Elektronik EEPROM verkleinern


von Max W. (mo0oxx)


Lesenswert?

Hi Leute,

bin seit einer Woche in einer kleinen Firma als Überbrückungsarbeit bis 
mein Studium beginnt.
Hab eine HTL Ausbildung in Elektrotechnik.
Nun zu meinem Problem der Chef will, dass ich in ein µ-Prozessorsystem 
mit einem Intel 80C196KC20 (16 Bit Systembus) einen Profibus ASIC 
implementiere und diesen wir dann über den Systembus vom µP ansteuern.
Aber wir haben zu wenig freie Adressen um den ASIC zu implementieren.
Aber wir haben ein EEPROM mit einer Größe von 56 k welches wir nicht 
voll ausnutzen.

Hat einer einen Tipp für mich wie ich am einfachsten rausfinde wie viel 
vom EEPROM genutzt wird und um wie viel ich es verkleinern kann?

Mit freundlichen Grüßen
Max

von 6a66 (Gast)


Lesenswert?

Max Wildfellner schrieb:
> Aber wir haben ein EEPROM mit einer Größe von 56 k

Hmmm, EEPROM mit 56k - sehr ungewöhnlich.
a) EERPOMs haben wie auch andere Speicher immer (sehr wenige Ausnhamen) 
einen Speicherbereich von 2^n Bit - die 56k sind nicht passend. Nochmal 
prüfen
b) EEPROMs sind normalerweise serielle Speicher und über einen 
Speziellen Bus angesprochen. Auch heir nochmals prüfen.

Kann es esin dass Du ein EPROM meinst?

rgds

von Peter D. (peda)


Lesenswert?

Max Wildfellner schrieb:
> Aber wir haben zu wenig freie Adressen um den ASIC zu implementieren.

Oftmals reicht es, wenn man Datenblöcke sequentiell schreiben oder lesen 
kann. Dann reicht eine Adresse mit Autoincrement dafür völlig aus.
Und eine 2. Adresse benutzt man zum Setzen der Startadresse.

von Max W. (mo0oxx)


Lesenswert?

Danke schon mal für die schnelle Antwort.

a) Im makefile ist die Range des EEPROMs mit 0x2000 - 0xF9FF angegeben.

b) Wir sprechen das EEPROM auch mit einer seriellen Schnittstelle an.

Nein ist ein EEPROM genaue Bezeichnung M93C86WMN6.

MfG
Max

von Max W. (mo0oxx)


Lesenswert?

Hab vergessen zu erwähnen dass es um die Speicherbereichaufteilung geht.
Der ASIC wird 2 k Ram haben und die haben wir nicht mehr zur Verfügung 
weil das EEPROM so viel weg nimmt.

MfG
Max

PS. Oder hab ich einen kompletten Denkfehler und ich schreib hier nur 
Blödsinn?

von 6a66 (Gast)


Lesenswert?

Max Wildfellner schrieb:
> Nein ist ein EEPROM genaue Bezeichnung M93C86WMN6.

AAAlso.

Das ist ein 2kx8 also 16kbit EEPROM. Da dieses über den seriellen Bus 
angesprochen wird gehe ich davon aus das diese nicht in den 
Speicherbereich direkt gemapped ist. Damit sollte der Speicherbereich 
frei sein. Ist aber über die FW zu prüfen.

>Im makefile ist die Range des EEPROMs mit 0x2000 - 0xF9FF angegeben.
Huch, das solltes Du aber nochmals genauer prüfen was das sein soll.

rgds

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


Lesenswert?

Max Wildfellner schrieb:
> b) Wir sprechen das EEPROM auch mit einer seriellen Schnittstelle an.
Belegt also gar keinen Adressraum, sondern ein paar Portpins des MCS-96.
> Nein ist ein EEPROM genaue Bezeichnung M93C86WMN6.
Das M93C86 ist ein SPI EEPROM mit 16kBit Speicher.
Irgendwas ist euch da mit dem Adressschema durcheinander geraten.

von Georg (Gast)


Lesenswert?

Max Wildfellner schrieb:
> Im makefile ist die Range des EEPROMs mit 0x2000 - 0xF9FF angegeben.

Was im Makefile steht und an welchen Adressen ein Speicher tatsächlich 
hardwaremässig auftaucht, muss keineswegs was miteinander zu tun haben, 
wenn der Programmierer nicht durchblickt, von selbst ist das nicht 
richtig. Es sollte natürlich im Makefile was sinnvolles stehen, aber 
wenn ein serielles EEProm da auftaucht, ist das in jedem Fall Unsinn.

Also erste Aufgabe: Speicherbelegung erstellen und verifizieren - die 
echte, nicht Fantasien im Makefile. Wahrscheinlich findet sich da viel 
mehr als nur 2 kB freier Speicherplatz.

Georg

von Max W. (mo0oxx)


Lesenswert?

Ok macht Sinn.

Soll ich jetzt den ganzen Sourcecode analysieren?
Weil dass wäre echt viel Arbeit.

MfG
Max

von FragDochMutti (Gast)


Lesenswert?

Ich kenne den C196 nicht, aber wenn ihr ext. Komponenten angeschlossen 
habt UND diese einen parallelen Daten-/Adressbus besitzen, dann müsste 
doch irgendwo vermerkt sein, welche Komponente bei welchen Adressen die 
/CS Signale erzeugt. Oder wird das ASIC über einen seriellen Bus (SPI, 
I2C...) angesprochen?

von Max W. (mo0oxx)


Lesenswert?

Die CS Signale erzeugt ein EPLD, wird mich mal auf die Suche machen wie 
das EPLD programmiert ist.
Nein der wird über Adress und Datenbus angesprochen.

MfG
Max

von FragDochMutti (Gast)


Lesenswert?

Die EPLD (GAL/PAL oder komplexeres CPLD?) Logik zu verstehen sollte für 
Dich als E-Techniker sicher einfach sein.
Speicherbelegung des internen RAM/ROM/was-auch-immer ist vermutlich 
starr und somit im C196 Manual nachlesbar.

von Bernd K. (prof7bit)


Lesenswert?

Max Wildfellner schrieb:
> Aber wir haben zu wenig freie Adressen um den ASIC zu implementieren.

Dunklel ist Deiner Rede Sinn. Was meinst Du eigentlich mit "ASIC 
implementieren"? Einen ASIC eines Herstellers in die Schaltung einbauen 
und einen Treiber samt Profibus-Stack dafür schreiben? Oder lediglich 
einen mitgelieferten Stack da noch in die bereits existierende Firmware 
mit einbauen? Oder willst Du tatsächlich das was Du schreibst, nämlich 
ein ASIC selbst entwerfen und fertigen lassen? Letzteres wohl eher nicht 
oder wieviele 100k€ hast Du zur Verfügung?

Versuch bitte mal das Wort "implemetieren" komplett aus Deinem 
Wortschatz zu streichen so lange bis Du ein Gefühl dafür bekommst wie 
andere es korrekt verwenden und bis dahin versuche die Sachverhalte mit 
den verbliebenen Worten verständlich zu beschreiben.

von Amateur (Gast)


Lesenswert?

Einen groben Anhaltspunkt könnte Dir das Auslesen des EPROMs liefern. 
Ungenutzte Bereiche liegen üblicherweise am Ende des Adressbereiches. 
Letzteres hängt mit dem Trend normaler Compiler zusammen, die Daten am 
"Anfang" zusammenzupacken.

Selbst wenn verschiedene Bibliotheken zusammengelinkt werden, werden im 
Anschluss deren Daten an die bereits genutzten angehängt.

Übrigens, Du brauchst nicht den ganzen Code zu analysieren. Es reicht 
aus die zum EPROM gehörigen Bereiche (Adressen) zu suchen und zu 
verfolgen.

von Bernd K. (prof7bit)


Lesenswert?

Max Wildfellner schrieb:
> Soll ich jetzt den ganzen Sourcecode analysieren?

Ja natürlich. Du kannst ihn Dir narürlich auch erklären lassen falls 
noch jemand von denen lebt die das Gerät damals entworfen haben, das 
geht vielleicht etwas schneller.

Oder wie sonst denkst Du kannst Du in eine existierende Firmware noch 
"mal eben" einen Profibus Stack ranfrickeln ohne die bisher 
existierenden Teile des Gerätes und seiner Firmware bis ins Detail 
verstanden zu haben?

: Bearbeitet durch User
von FragDochMutti (Gast)


Lesenswert?

Amateur schrieb:

> Einen groben Anhaltspunkt könnte Dir das Auslesen des EPROMs liefern.
> Ungenutzte Bereiche liegen üblicherweise am Ende des Adressbereiches.
> Letzteres hängt mit dem Trend normaler Compiler zusammen, die Daten am
> "Anfang" zusammenzupacken.

1. Dein Name ist Programm
2. Lesen ist nicht deine Stärke

von uwe (Gast)


Lesenswert?

Irgendwo im Startup Code wird eine Routine das serielle EEPROM auslesen 
und in einen bestimmten RAM Bereich kopieren. Diese Routine würde ich 
mir mal angucken, vieleicht hat man da für Erweiterungen einen Großen 
Bereich reserviert den man nutzen könnte wenn man das EPLD entsprechen 
umkonfiguriert und einen neuen CS generiert. Für diesen RAM Bereich darf 
die Adressdecoder Logik dann natürlich kein CS mehr für den RAM 
decodieren sondern für deinen ASIC.

von Max W. (mo0oxx)


Lesenswert?

Bin jetzt der Speicherbereichsaufteilung nochmal auf den Grund gegangen 
und hab gesehen auf der Doku steht bei uns das 0x0000-0x1FFF für den 
Prozessor intern gebraucht werden.

Im Manual vom Prozessor steht aber dass der Prozessor nur von
0x0000-0x01FF und 0x1FFE-0x1FFF.

Das heißt ja dass ich den Bereich von 0x01FF - 0x1FFE ohne Probleme 
benutzen kann oder?

Für den ASIC brauch ich eh nur 152 Adressen.
Da würde sich ja 0x0200 - 0x02FF gut anbieten?

MfG
Max

von uwe (Gast)


Lesenswert?

> Im Manual vom Prozessor steht aber dass der Prozessor nur von
> 0x0000-0x01FF und 0x1FFE-0x1FFF.
Gegurgelt werden kann?!

von Max W. (mo0oxx)


Lesenswert?

*Im Manual steht dass der Prozessor nur die Adressen 0x000-0x01FF und 
0x1FFE-0x1FFF für Register braucht und die Adressen dazwischen können 
für externe Speicher vergeben werden.

von uwe (Gast)


Lesenswert?

> und die Adressen dazwischen können
> für externe Speicher vergeben werden.
Da wird dann der externe RAM liegen und FLASH usw.
Diese Bereiche werden dann von der Adressdekodierlogik im PLD aus den 
Adressleitungen dem RD/WR Signal usw. in die entsprechenden CS Signale 
dekodiert.
Du mußt also nur die PLD Logik anpassen.

von Steffen (Gast)


Lesenswert?

beim 80C196KC20 sind nur externe Speicher von:

0x0200 bis 0x1FFD  und 0x2080 bis 0x5FFF möglich.
steht auf Seite 3 zu Memory-Map:

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Max Wildfellner schrieb:
> Im Manual vom Prozessor steht aber dass der Prozessor nur von
> 0x0000-0x01FF und 0x1FFE-0x1FFF.
>
> Das heißt ja dass ich den Bereich von 0x01FF - 0x1FFE ohne Probleme
> benutzen kann oder?
>
> Für den ASIC brauch ich eh nur 152 Adressen.
> Da würde sich ja 0x0200 - 0x02FF gut anbieten?

 Ich verstehe nur Bahnhof...
 Wovon redest du überhaupt ?

 M93C86WMN6 wird über SPI-Bus angesprochen, hat mit freien oder
 benutzten Prozessor-Adressen überhaupt nichts am Hut.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Laß Dir zu dem Board das Manual geben. Da muß drinstehen, wie die 
Adressen dekodiert werden.

Wenn es kein Manual gibt, das Board wegschmeißen.
Hellsehen kann keiner.

von Max W. (mo0oxx)


Lesenswert?

Ok um das ganze jetzt ein wenig aufzulösen, am Board gibt es ein EEPROM 
welches seriell angesprochen wird und ein Flash Speicher welcher am 
Adress/Datenbus hängt.

In der Speicherbereichsaufteilung stehen die Flash Speicher als EEPROM 
drinnen, drum der ganze Fehler!

Das andere Problem ist das die ganze Doku schon etwas durcheinander ist 
da das Grundgerüst des Boards schon sehr lange steht und immer wieder 
etwas neues dazu kam und somit haben zu viele Köche die Suppe versalzen.

Danke für die Hilfe

MfG
Max

von Cyblord -. (cyblord)


Lesenswert?

Also mit "Profibus ASIC Implementieren" ist doch zu 99,9% gemeint, einen 
ASIC einfach zu NUTZEN. Wahrscheinlich ein VPC richtig?

von uwe (Gast)


Lesenswert?

ist doch alles kein Ding!
Hast du mal nen Schaltplan?
Wenn nich dann mach mal einen!
Ansonsten kann dir keiner Helfen!

von Max W. (mo0oxx)


Lesenswert?

@Cyblord jop aufs Board kommt ein VPC3+C ASIC von Profichip.
Hast du Erfahrungen mit dem Chip?

@Uwe klar gibt's einen Schaltplan.

von Cyblord -. (cyblord)


Lesenswert?

Max Wildfellner schrieb:
> @Cyblord jop aufs Board kommt ein VPC3+C ASIC von Profichip.
> Hast du Erfahrungen mit dem Chip?

Ja, aber wir steuern den "klassisch" einfach direkt per SPI an. Deine 
Problemstellung mit der Ansteuerung über Adressen macht für mich wenig 
Sinn.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Im Besonderen macht für mich das Mapping eines SPI-EPROMS für den 
Compiler keinen (absolut keinen) Sinn. Denn ich kenne keinen Compiler, 
der einen Speicherzugriff automatisch in mehrere SPI-Zugriffe auflöst. 
Ein SPI-EEPROM muss per Handschlag abgehandelt werden.

Und was hat denn das EEPROM mit der eigentlichen Aufgabe zu tun? Stehen 
da irgendwelche Konfig-Daten drin?

Max Wildfellner schrieb:
> ... um den ASIC zu implementieren.
Du solltest deine Terminologie nicht allzu weitschweifig ausfassen: 
"einen ASIC implementieren" bedeutet landläufig, ein HDL Projekt 
(Verilog, VHDL, SystemC oder was auch immer) über einen Synthesizer und 
die restliche Toolchain laufen zu lassen, dass am Ende der ASIC dabei 
herauskommt.

von Falk B. (falk)


Lesenswert?

@ Lothar Miller (lkmiller) (Moderator) Benutzerseite

>Im Besonderen macht für mich das Mapping eines SPI-EPROMS für den
>Compiler keinen (absolut keinen) Sinn. Denn ich kenne keinen Compiler,
>der einen Speicherzugriff automatisch in mehrere SPI-Zugriffe auflöst.

Ich schon. Die LON-uCs von Echelon machen das, FT5000 heißt das Ding.

http://www.echelon.com/products/ft-5000-smart-transceiver

>Ein SPI-EEPROM muss per Handschlag abgehandelt werden.

Nicht zwingend.


>> ... um den ASIC zu implementieren.
>Du solltest deine Terminologie nicht allzu weitschweifig ausfassen:

Bullshit Bingo!

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Lothar Miller schrieb:
> Im Besonderen macht für mich das Mapping eines SPI-EPROMS für den
> Compiler keinen (absolut keinen) Sinn. Denn ich kenne keinen Compiler,
> der einen Speicherzugriff automatisch in mehrere SPI-Zugriffe auflöst.
> Ein SPI-EEPROM muss per Handschlag abgehandelt werden.
>
> Und was hat denn das EEPROM mit der eigentlichen Aufgabe zu tun? Stehen
> da irgendwelche Konfig-Daten drin?

 Eben.
 Und egal was da auch drin steht, EEPROM hat mit benutzten oder freien
 Adressen nichts zu tun, das hat mit Memorymapping nichts zu tun.

von Max W. (mo0oxx)


Lesenswert?

@Cyblord Ja wär mir auch lieber gewesen ihr über SPI anzusteuern, aber 
wir bauen keine Chips mit einer Betriebsspannung von 3,3 V ein und der 
ASIC mit 5V unterstützt nur den Adress/Datenbus.

Für die die nicht alles lesen, dass das EEPROM Adressen verwendet war 
ein Missverständnis!

von uwe (Gast)


Lesenswert?

Und nochmal:
ist doch alles kein Ding!
Hast du mal nen Schaltplan?
Wenn nich dann mach mal einen!
Ansonsten kann dir keiner Helfen!

von Max W. (mo0oxx)


Lesenswert?

Mir wurde schon geholfen, den Rest schaff ich alleine, und sonst melde 
ich mich nochmal.

MfG
Max

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.