www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik flash speicher xc866 in C


Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

ich habe schon vor einger zeit etws zu diesem thema gefragt.

Ich arbeite mit dem xc866 von infineon. ich möchte über den ad wandler 
erfasste daten im mikrokontroller abspeichern. habe es mal mit einem 
gewöhnlichen Array versucht was auch funktioniert. bedingt durch den 
relativ kleinen Programmspeichr ist allerding maximal ein 3*5 array 
möglich. würde dises Array deshalb gerne im internen Flash speicher 
sichern.
weiss jemand wie man in C ein Array in den flash speicher schreibt und 
wieder ausliest?
hat jemand erfahrung damit?

Gruss Raphael

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Häng an die SPI Schnittstele ein EEPROM an, dort kannst du die Daten in 
(fast) beliebiger Menge speichern.

Bei Flashspeicher hast du nur eine begrenzte Anzahl an Schreibzugriffen, 
danach kannst du dich nicht mehr auf die Daten verlassen.
Eine solche Begrenzung gibt es zwar auch bei EEPROM , jedoch liegt die 
Grenze hier um einiges höher.

Außerdem bietet ein EEPROM eine bessere Adressierbarkeit für Lösch und 
Schreibzugriffe als dies bei Progammflash in µC üblich ist.

Ralph

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ralph

Um zu präziesieren, der flash speicher des uP ist ein EEPROM. mit 16kB 
speicher das würde für einige 1000 Messwerte ausreichen, also weitaus 
genügend für meine Anwedung.
Aber wie definiere ich dass, das mein array im EEprom gespeichert wird 
und nicht im Programmspeicher???
gibt es dafür in C spezielle befehle?
Im Handbuch wird lediglich die möglichkeit in Assembler angeschnitten. 
Hilft aber nicht viel wenn man in c programmiert.

Gruss Raphael

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Raphael,
leider muss ich dich enttäuschen. Der Programmspeicher des XC866 ist ein 
Flashspeicher der in einem Bereich nur eine spezielle Struktur für die 
EEPROM-Emulation aufweist.

Wenn du die Information hast, wie du es in Assembler programmierst, dann 
dürfte es ja nicht so schwer sein das ganze in C zu übersetzen.
Eine Funktion nach dem Prinzip vWriteFlash(Adresse,Datenbyte); gibt es 
soweit ich weiß nicht bzw. ist nicht für jeden frei verfügbar.

Gruß Carsten

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja so habe ich das auch in etwa gemeint. es ist ein nicht flüchtiger 
Datenspeicher.

Die Informationen beschränken sich lediglich auf einige Adressen die mit 
MOVC angesprochen werden können?
wie das in c aussehen soll??? und dann für ein ganzes Array...

wieso muss bei infineon immer alles auf dem kompliziertesten Weg 
realisiert werden!! :(

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das ist nicht nur bei Infineon so.

Der MOVC befehl greift auf eine Routine im BootRom zu, wie auch der 
Bootloader. Aber damit alleine ist es noch nicht getan.
Wie schon Ralph sagte, der wesentlich einfachere Weg ist ein externes 
serielles EEPROM.

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein serieller Port am uP ist leider schon in verwendung bei diesem 
Programm, kann ihn deshalb nicht mehr für ein externes EEprom verwenden.
gibt es noch eine andere alternative? diese daten zu speichern?

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was steuerst du den mit dem SSC an? Kann man nicht das EEPROM als 2. 
Gerät an den SPI-Bus anschließen?
Altrernativ kannst Du SPI auch relativ einfach mit normalen Portpins 
nachbilden.

Um wieviel Daten geht es überhaupt, die du sichern willst? Und wie oft 
sollen die gesichert werden (1 mal pro µs/ms/s/min/etc.)?

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf dem up läuft ein programm ab, welches analoge daten erfasst und 
diese über den UART an ein übermittlungssystem sendet. zusätzlich sollen 
die gesendeten daten eben in einem internen Speicher abgelegt werden, 
sodass diese nachträglich ausgelesen werden könnten falls das 
übertragungssystem versagt.
die gesendeten daten sind jeweils 4 floatwerte welche periodisch alle 
ca. 10 sekunden gesendet werden.

Es reicht allerdings aus wenn die vier werte nur jede minute im flash 
oder eeprom oder wo auch immer, für eine Stunde gespeichert werden. die 
gespeicherten daten, welche älter als eine stunde sind, könnten dann 
wider überschrieben werden.

es soll so sichergestellt sein das die erfassten daten der jeweils 
vergangenen stunde erhalten bleiben, falls diese durch das 
übertragungsystem nicht übertragen werden konnten.

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und für was nutzt du die SSC?

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man lernt nie aus! ssc/spi und Uart sind also nicht die selbe 
Schnittstelle? bin eben noch uP frischling:)
dann kann ich ein externes eeprom an diese "ssc" schnittstelle 
anschliessen und meine werte einfach in den transmittbuffer der ssc 
schreiben? oder wie muss ich mir das vorstellen?


Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz so einfach ist das auch nicht, aber fast.
Du initialisierst die SSC-Schnittstelle dass sie sich als 
SPI-Schnittstelle verhält. Da musst du aufpassen, da SPI nicht so 
richtig standardisiert ist.
Man muss im Datenblatt vom EEPROM nachschauen, wie es "angesprochen" 
werden will, also MSB oder LSB zuerst, wann die Daten anliegen - 
steigende oder fallende Flanke des Clocksignals.
Wenn das geklärt ist kannst du das EEPROM ansprechen - "Steuerbefehle" 
wie Adresseingabe, Schreib/Lese-Zugriff stehen ebenfalls im Datenblatt 
des EEPROMs.

Wenn du von Infineon den DAVE nutzt ist zumindest der 1. Teil 
(Initialisierung der SSC) ziemlich schnell zusammengeklickt. Dann musst 
du nur noch die Befehle und Datenbytes rausschicken.

Autor: Kartoffel Salat (kartoffelsalat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank für deine Infos, war sehr hilfreich
werde mal ein  passendes EEprom beschaffen und dann mein Glück 
versuchen.

Ja ich arbeite mit Dave. sieht alles recht logisch aus für die 
initialisierung. einzig das clock signal auf die 10Mhz des eeproms 
anzupassen scheint mir noch etwas unklar.

Werden die entsprchenden Befehle um das eeprom anzusprechen jeweils 
einfach dem datenstrom voran gestellt?

gruss Raphael

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst nicht exakt 10Mhz anlegen , du solltest nur nicht die maximale 
Geschwindigkeit der beteiligten Bauteile überschreiten. Aber diese 
Geschwindigkeiten sind bei deiner Applikation garnicht notwendig, da 
würde auch 100kHz (ca. 10kB/s) reichen.

Zu dem Datenstrom:
wie das ganz genau abläuft steht im Datenblatt des EEPROM. Bei den 
EEPROMs von Microchip geht das ungefähr so - mit Befehl das EEPROM in 
den Lese-Modus bringen, Highbyte der Adresse senden, Lowbyte senden, 
dann Daten etc.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.