Hallo zusammen,
habe mich in den letzten Tagen/Wochen etwas intensiver mit SD-Karten
beschäftigt und dort ein paar Fortschritte erzielt (von Null auf
Anfängerniveau...). Nun soll es an den CAN Bus gehen, zum Schluss soll
das ganze verheiratet werden. Nun frage ich mich jedoch, ob das ganze
überhaupt in der aktuellen Art und Weise Sinn macht...
Ziel ist es, CAN Daten auf SD-Karte zu speichern. Da ich bis jetzt immer
einen AT-Mega uC genutzt habe, denke ich nur, dass dieser der Aufgabe
nicht gewachsen ist... Überlegungen dazu:
CAN mit 100k => 12500 Byte/s müssten netto geschrieben werden
Damit das ganze auch für Menschen lesbar ist, müsste dann irgendein
nettes Format auf der SD-Karte landen, so etwas in der Art Zeitstempel,
CAN Daten in ASCII Darstellung/Hex-Werte. Alleine die Umwandlung in die
ASCII Interpretation (z.B. mache aus 0x2A ein 0x32 0x41) verdoppelt die
Anzahl geschriebener Daten; Zeitstempel + CR/LF kommt auch noch dazu =>
bei 100k CAN dann landet man dann eher im Bereich 30k Byte/s. Bei 20MHz
Takt für den SPI sieht das zwar machbar aus, aber die Daten müssen ja
auch irgendwo herkommen und durch die SPI Nutzung ergibt sich ein
beträchtlicher Overhead.
Selbst wenn ich den 4-Bit Modus nutze, komme ich da wohl an die Grenzen
des machbaren (eines AT-Megas), oder irre ich mich da gewaltig?
Zumindest in alten Threads bestätigt sich das:
<Beitrag "Re: Sd-Card endlich im 4-Bit-Mode! -> Init Read Write";,
wobei 500k Bit/s schon eine Ansage sind und ausreichend währen. Da die
4-Bit aber nicht über HW SPI abgewickelt werden können, gibt das dann
neue Probleme...
Wie auch immer: der CAN dürfte wohl nie zu 100% ausgelastet sein, dafür
gibt es aber auch 500k und 1M CAN Geschwindigkeiten (an die ich aber
erst einmal nicht möchte). Kenne mich noch nicht gut genug aus, ob ich
aus Performancegründen einen AT128CAN (o.ä.) + Treiber nehmen sollte,
oder eher einen diskreten CAN Knoten + Treiber.
Lange Rede kurzer Sinn: hat jemand von euch hier schon praktische
Erfahrungen gesammelt und kann mir evtl. ein paar Tipps geben (z.B. geht
gar nicht, nimm lieber einen AT-Mega mit CAN, SPI/4-Bit Modus...)?
Danke und Gruß, Markus
Hm, willst du den gesamten CAN-traffic aufzeichnen? I.a. interessiert
man sich nur für einige Parameter. Stellt sich die Frage, was das ganze
werden soll. Ich habe mal einen Datenlogger gebastelt, der 5 Parameter
mit 10Hz (Drehzahl, Gaspedal, Ladedruck, Motortemperatur und
Geschwindigkeit) aufgezeichnet hat. Problemlos mit Mega32+MCP2515, da
wär auch noch mehr gegangen.
Ob man es "menschenlesbar" (also Ascii) oder binär aufzeichnet, ist nur
eine Frage der Speichergrösse, Schreibgeschwindigkeit und der eigenen
Faulheit - ein kleines PC-Programm, welches aus einer Binärdatei
"ordentliche" Daten macht, ist schnell geschrieben.
Hallo,
da ich mich mit CAN noch nicht richtig auskenne und noch nichts damit
gemacht habe: erst einmal alles aufzeichnen, wegschmeißen kann man immer
noch ;=)
Was das ganze werden soll: Spielerei ;=) Möchte wissen was auf dem CAN
abgeht und später zu Hause mal draufschauen was mir das Auto so
mitzuteilen hat. Wenn dann interessante Botschaften dabei sind, kann ich
ja immer noch auf diese Filtern.
Gruß, Markus
Auf der sicheren Seite bist Du mit einem STM32F103Z. CAN ist eingebaut,
SDIO für hardwaremäßiges 4-Bit SDCARD IO ist drin, dann würde ich da
noch ein oder zwei 512k SRAMs anklemmen, in die Du beim Logging binär
reinschreibst (daher das 144 Pin Gehäuse, die kleineren haben nicht die
erforderlichen Adress- und Datenleitungen nach außen geführt), und wenn
Du fertig bist, dann kannst Du den SRAM-Inhalt ganz in Ruhe auf Deine
SD-Karte schreiben. Wenn Du auf Nummer sicher gehen willst, machst Du
das externe SRAM batteriegepuffert, dann kann unterwegs auch mal der
Strom wegfallen.
fchk
Hm, wozu denn der RAM? Bekommst du die Daten nicht in der ankommenden
Geschwindigkeit auf die Karte geschrieben, läuft der RAM über kurz oder
lang über.
Aber bei 100kBit CAN ist das alles easy:
ca. 130 bit/message, also alle 1.3ms eine mit 8Byte Daten, falls der Bus
vollgestoft ist. Kannst du als 16Byte-Satz auf die Karte speichern (ID,
Daten, Zeitstempel). Macht mickrige 12,3kB/s Nettodatenrate.
Verdoppeln wir grosszügig, um mit der Karte reden zu können -> 25kB/s
auf der SPI, kein Thema.
H.joachim Seifert schrieb:> Hm, wozu denn der RAM? Bekommst du die Daten nicht in der ankommenden> Geschwindigkeit auf die Karte geschrieben, läuft der RAM über kurz oder> lang über.> Aber bei 100kBit CAN ist das alles easy:
Klar. Aber bei 1MBit...
Man muss davon ausgehen, dass eine Speicherkarte nach Schreiben einen
Blocks gelegentlich mehrere 100ms nicht bereit ist, neue Daten
aufzunehmen. Vgl. Tabelle "MultiMediaCard and SD Card Maximum Read/Write
Time-out Values" im SD Card Product Manual 2.2 verlinkt im Artikel
MMC- und SD-Karten. Die in dieser Zeitspanne anfallenden Daten sind
zwischenzuspeichern. Eine eindeutige Regel dafür, wann diese längere
"Reorganisationspause" eintritt habe ich bei verschiedenen Karten bisher
nicht gefunden. Ein Faktor ist - nachvollziehbar - wie viele Blöcke
bisher geschrieben wurden. Bei einer SDHC-Karte (wenn richtig erinnert
mit Fuji-Label), traten die längeren Pausen relativ regelmäßig ca. alle
2000 Datenblocks auf, bei anderen Karten konnte diese Regel aber nicht
eindeutig bestätigt werden.
Hallo zusammen,
danke für eure Antworten. Lag leider ein wenig flach und habe mich um
alles mögliche gekümmert, aber nicht um den PC :=) Dafür hatte ich Zeit
zum lesen und habe mir ein paar Grundlagen zum CAN angeeignet.
Wie auch immer: ein ATMega scheint der Aufgabe nicht gewachsen zu sein,
weshalb ich das ganze erst einmal auf Eis lege und mir ggf. zu einem
späteren Zeitpunkt erneut ansehe.
Gruß,
Martin
Martin Schröder schrieb:> Hallo zusammen,>> danke für eure Antworten. Lag leider ein wenig flach und habe mich um> alles mögliche gekümmert, aber nicht um den PC :=) Dafür hatte ich Zeit> zum lesen und habe mir ein paar Grundlagen zum CAN angeeignet.> Wie auch immer: ein ATMega scheint der Aufgabe nicht gewachsen zu sein,> weshalb ich das ganze erst einmal auf Eis lege und mir ggf. zu einem> späteren Zeitpunkt erneut ansehe.
Wenn es Dir an den nötigen Löt- und/oder Hardware-Kenntnissen gebricht,
schau Dir mal das hier an. Das wäre eine nette CAN-Spielwiese für Dich.
http://www.olimex.com/dev/lpc-e2294rb.html
fchk