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
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
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
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
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!! :(
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.
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?
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.)?
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.
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?
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.
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
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.
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.