RS232 Daten im Mikrocontroller Puffern Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
|
RS232 Daten im Mikrocontroller Puffern |
|
|
|
|
BID = 45253
Benedikt Inventar
      Beiträge: 6241
|
|
Ich möchte ein Flash EPROM mit einem uC programmieren. Die Daten kommen über RS232 vom PC.
512kByte seriell zu übertragen dauert recht lange, weshalb ich mit 115200Baud arbeiten möchte´.
Das Problem ist nun:
Flash ERPOMs werden häufig Seitenweise beschrieben (Eine Seite hat 64 bis 512Bytes, je nach EPROM)
Das Programmieren läuft folgendermaßen ab:
- Programmierbefehl senden (3Bytes an bestimmte Adressen)
- Daten Senden (64 bis 512 Bytes)
- warten bis die Seite programmier ist (ca. 10ms)
- Programmierbefehl senden (3Bytes an bestimmte Adressen)
- usw.
Zwischen den übertragenen Bytes dürfen max. 100us liegen, sonst bricht das EPROM die Datenübertragung ab und programmiert nicht übertragene Bytes mit FF.
Man muss also erst die Daten im uC Puffern, und dann Seitenweise an das Flash übertragen.
Während der Übertragung der Daten ans Flash EPROM werden Daten vom PC empfangen und müssen zwischengespeichert werden. Diese werden im Moment im oberen RAM Bereich (128Bytes) des 80C52 abespeichert.
Diese 128 Bytes reichen aber nicht aus. Ich könnte die Daten auch im externen RAM (8kByte) ablegen, aber das Umschalten des Datenpointers (zwischen Flash Adresse und RAMPuffer), und die 16bit Adresszähler verschlingen eine Menge Rechenzeit, die bei 115200Baud = 11520Byte/s sowiso schon recht knapp ist (maximal 160 Befehle pro Byte).
Kennt jemand eine schnelle Datenpufferroutine, mit etwa 256 bis 1kByte Puffergröße ?
|
|
BID = 45315
McMorton Neu hier

Beiträge: 42 Wohnort: Lippe
|
|
So eine Datenpufferroutine kenn ich auch nicht.
Aber ich stand letztens vor einem ähnlichen Problem.
Habe das ganze dann anders gelöst:
PC sendet erste Daten. Die speichere ich irgentwo (z.B. Puffer).
Dann sende ich dem PC erst einen Befehl für die nächsten Daten.
So bekomme ich genug Zeit um die Daten zu verarbeiten.
Wird natürlich dadurch etwas langsamer. Aber die ganze Prozedur ist zeitunkritisch.
|
|
BID = 45731
MeisterEIT Gelegenheitsposter
 
Beiträge: 56 Wohnort: koblenz
|
hi,
wie wäre es denn mit einem µP mit mehr SRam?
dann einfach ein array mit 512 stellen und fertig.
aber 115200 baud sind 115200 bit/s, also 14400 byte/s oder irre ich mich da jetzt?
weil dann hab ich was verpasst.
grüsse
[ Diese Nachricht wurde geändert von: MeisterEIT am 2 Jan 2004 1:25 ]
|
BID = 45737
Benedikt Inventar
      Beiträge: 6241
|
115200Baud = 115200bit/s= 11520byte/s, da 1 Byte= 10 Bit (= 8 Datenbit + 1 Start und 1 Stop Bit)
Mehr RAM ist kein Problem, aber der 80C52 hat intern nur 256 Bytes und die reichen nicht.
Wenn ich das exteren RAM ansteuere, muss ich den Datenpointer zwischen den normalen Flash EPROM Adressen, dem Start des Puffers und dem Ende des Puffers umschalten. Das dauert zulange.
Im Moment läuft die Schaltung einwandfrei mit 19200Baud. Das Programmieren dauert leider recht lange. Bei höhren Baudraten gehen Daten verloren.
Im Moment existiert im RAM ein 1kByte Ringpuffer der ununterbrochen gefüllt wird. Zwei Zähler merken sich die Schreibadresse für neue Daten und die Adresse wo die gefufferten Daten beginnden. Die Differenz ist die Länge der gepufferten Daten. Sobald genügend Daten im Puffer sind, werden diese an das Flash EPROM übertragen.
Diese Datenübertragung dauert leider recht lange, weshalb einige Daten verloren gehen (trotz Unterbrechung durch einen Interrupt sobald serielle Daten empfangen werden).
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 17 Beiträge im Durchschnitt pro Tag heute wurden bisher 4 Beiträge verfasst © x sparkkelsputz Besucher : 188006246 Heute : 1926 Gestern : 8349 Online : 252 30.12.2025 9:43 6 Besucher in den letzten 60 Sekunden alle 10.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0250391960144
|