Hi, Ich möchte gerne mit meinem Raspberry Pi CAN Daten von einem Long range term Radar auslesen. Hierfür hab ich folgendes modul mit mcp2515 gekauft: http://wiki.gnublin.org/index.php/MCP2515_CAN#RaspberryPi Die Konfiguration habe ich auch wie im link Beschrieben befolgt, jedoch habe ich nicht die erwünschten Ergebnisse. Mein CAN Bus läuft mit 500kb/s. Ist auch die richtige Baudrate. Ich bekomme zwar meine Daten jedoch sieht es ganz komisch aus. Ich erhalte an einigen Zeilen die ERRORFRAME Meldung mit rx buffer overflow. Was weiterhin mich stört sind die Null Zeilen die ich erhalte. nach eingabe folgender befehle: ip link set can0 type can bitrate 500000 ip link set can0 up -------------------------------------------------------- Erhalte ich folgendes: $ ip -details -statistics link show can0 4: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 20 link/can can state ERROR-ACTIVE restart-ms 0 bitrate 500000 sample-point 0.875 tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1 clock 8000000 re-started bus-errors arbit-lost error-warn error-pass bus-off 0 0 0 0 0 0 RX: bytes packets errors dropped overrun mcast 13086 2308 213 0 213 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0 -------------------------------------------------------- dmesg output: can: controller area network core (rev 20090105 abi 8) NET: Registered protocol family 29 CAN device driver interface can: raw protocol (rev 20090105) PM: Adding info for No Bus:can0 mcp251x spi1.0: probed mcp251x spi1.0: CNF: 0x00 0xb5 0x01 PM: Adding info for No Bus:vcs3 PM: Adding info for No Bus:vcsa3 eth0: no IPv6 routers present -------------------------------------------------------- Als beispiel ein paar daten vom Candump: candump -ta -d -e any,0:0,#FFFFFFFF (125.351573) can0 15004 [2] 00 00 (126.193767) can0 400060 [4] FF FF 00 00 (126.194163) can0 600060 [4] FF FF 00 00 (126.194469) can0 20000004 [8] 00 01 00 00 00 00 00 00 ERRORFRAME controller-problem{rx-overflow} (126.194743) can0 E00060 [4] FF FF 00 00 (126.195018) can0 1200060 [4] FF FF 00 00 (126.195323) can0 1800060 [4] FF FF 00 00 (126.195567) can0 20000004 [8] 00 01 00 00 00 00 00 00 ERRORFRAME controller-problem{rx-overflow} (126.195842) can0 5067 [6] 01 00 00 00 00 00 (126.196086) can0 1A00060 [4] FF FF 00 00 (126.196361) can0 20000004 [8] 00 01 00 00 00 00 00 00 ERRORFRAME controller-problem{rx-overflow} (126.196635) can0 200060 [4] FF FF 00 00 (126.196818) can0 D067 [6] 01 00 00 00 00 00 (126.197093) can0 F066 [6] 01 00 00 00 00 00 (126.197337) can0 20000004 [8] 00 01 00 00 00 00 00 00 ERRORFRAME controller-problem{rx-overflow} (126.197673) can0 7067 [6] 01 00 00 00 00 00 (126.197978) can0 B067 [6] 01 00 00 00 00 00 (126.198253) can0 19066 [6] 01 00 00 00 00 00 (126.198558) can0 1B066 [6] 01 00 00 00 00 00 (126.198894) can0 11066 [6] 01 00 00 00 00 00 (126.199168) can0 3067 [6] 01 00 00 00 00 00 (126.199443) can0 20000004 [8] 00 01 00 00 00 00 00 00 ERRORFRAME controller-problem{rx-overflow} (126.199718) can0 17066 [6] 01 00 00 00 00 00 (126.199931) can0 1D066 [6] 01 00 00 00 00 00 (126.200328) can0 1F066 [6] 01 00 00 00 00 00 ^C$ Leider weiss ich nicht mehr was ich ab hier machen kann. An was liegt dieser overflow? Ich bin ziemlich unerfahren in Sachen CAN. Liegts an meiner Hardware bzw. an dem GNUBLIN Modul? Würdet Ihr mir was bessere als den GNUBLIN empfehlen? Danke im Vorraus Ise_1989
Rx Overflow ist, wenn du die receive buffer des MCP nicht schnell genug leerst. Benutzt der Treiber Interrupts, oder wird gepollt? Falls letzteres, ist das schon dein Problem.
Hallo dunno, die Treiber liegen im Kernel: http://gnublin.googlecode.com/files/rpi_kernel_can.tar.gz kenn mich damit leider nicht aus :( . Um was genaues zu sagen. Vielen dank für die schnelle Rückmeldung.
Du hast Dir die falsche Hardware ausgesucht. Zum einen ist der MCP2515 nicht der leistungsfähigste Controller (selbst aktuelle PICs haben heutzutage besseres eingebaut), und dann ist da noch der Flaschenhals namens SPI dazwischen. Nimm besser einen BeagleBone Black. Der dort verwendete Prozessor hat CAN bereits eingebaut. Du musst nur noch einen CAN-Transceiver mit 3.3V Logikspannung wie zB MAX13054 an Pin 24/26 (dcan1_tx/dcan1_rx) anschließen oder Dir ein CAN Bus Cape ("Capes" sind die Erweiterungsboards, so was wie die "Shields" bei Arduino) besorgen. Da der CAN Bus Controller direkt im Prozessor drin ist, gibts da keine unnötigen Bremsen. fchk
Also bei nem 500k can sollte man selbst mit nem 2515 noch alle frames kriegen. Klar ist das mit dem SPI ein ziemlicher Flaschenhals, aber der rpi sollte das doch wohl schaffen.. Klemm mal n oszi dran und schau dir die Latenzen zwischen interrupt und Reaktion des rpis an. Danach schau was der Treiber macht. Zur not halt ein eigener Treiber. Ist eh cool wenn man weiß wie das geht. Ich denke nicht, dass man das Problem sofort mit ner Hardwareschlacht lösen muss. Als allerletzte Notlösung: vielleicht kannst du den Sender drosseln?
Vielen Dank nochmals.. Nach mehrmaligen rumspielen mit dem Kernels http://gnublin.googlecode.com/files/rpi_kernel_can.tar.gz und http://lnxpps.de/rpie/can-test.tar.bz2 habe ich es nun zum Laufen bekommen (hoffe ich). Auf beiden Seiten wird das alte libsocketcan verwendet inzwischen gibts den 10er http://www.pengutronix.de/software/libsocketcan/download/libsocketcan-0.0.10.tar.bz2 Wie gesagt das ist ein Projekt und ich Weiss nicht ob die Can Ausgaben richtig oder falsch sind. Die AUSGABE sieht wie folgt aus : pi@raspberrypi ~/gps/output/2014-12-28 $ sudo candump -tA -c -d any (2014-12-28 05:46:03.990666) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.011946) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.014815) can0 794 [8] 00 00 00 00 00 00 33 33 (2014-12-28 05:46:04.017642) can0 795 [8] AA 65 88 FF 00 76 01 00 (2014-12-28 05:46:04.020804) can0 796 [8] 56 00 00 00 33 37 79 84 (2014-12-28 05:46:04.029672) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.050797) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.071803) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.089886) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.110803) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.112308) can0 794 [8] 00 00 00 00 00 00 33 33 (2014-12-28 05:46:04.113945) can0 795 [8] AA 63 8A FF 00 77 01 00 (2014-12-28 05:46:04.116654) can0 796 [8] 56 00 00 00 33 38 79 84 (2014-12-28 05:46:04.131929) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.149860) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.170647) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.191655) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.209660) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.212617) can0 794 [8] 00 00 00 00 00 00 33 33 (2014-12-28 05:46:04.215662) can0 795 [8] AA 64 8A FF 00 77 01 00 (2014-12-28 05:46:04.218566) can0 796 [8] 56 00 00 00 33 39 79 84 (2014-12-28 05:46:04.230660) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.251728) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.269659) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.290665) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.308616) can0 794 [8] 00 00 00 00 00 00 33 33 (2014-12-28 05:46:04.311712) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.313305) can0 795 [8] AA 65 8B FF 00 78 01 00 (2014-12-28 05:46:04.315376) can0 796 [8] 56 00 00 00 33 3B 79 84 (2014-12-28 05:46:04.329674) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.350711) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.371708) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.389670) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.410676) can0 797 [8] 00 00 00 00 00 00 00 00 (2014-12-28 05:46:04.413609) can0 794 [8] 00 00 00 00 00 00 33 33 (2014-12-28 05:46:04.416643) can0 795 [8] AA 65 8B FF 00 78 01 00 (2014-12-28 05:46:04.419973) can0 796 [8] 56 00 00 00 33 3B 79 84 Hier ist zu Beobachten, dass sich die Zeilen wiederholen 00 00 00 00 00 00 00 00 00 00 00 00 00 00 33 33 AA 65 88 FF 00 76 01 00 <--- Bis auf diese es verändert sich 56 00 00 00 33 37 79 84 ----------------------------------------------------------------------- Damit wir eine Übersicht haben, habe ich Zeile mit AA nur dargestellt
1 | pi@raspberrypi ~/gps/output/2014-12-28 $ sudo candump -tA -c -d any,1:23 |
2 | (2014-12-28 05:48:49.207177) can0 795 [8] AA 62 87 FF 00 75 01 00 |
3 | (2014-12-28 05:48:49.305468) can0 795 [8] AA 64 87 FF 00 75 01 00 |
4 | (2014-12-28 05:48:49.404480) can0 795 [8] AA 63 87 FF 00 75 01 00 |
5 | (2014-12-28 05:48:49.497463) can0 795 [8] AA 63 87 FF 00 75 01 00 |
6 | (2014-12-28 05:48:49.599421) can0 795 [8] AA 64 85 FF 00 75 01 00 |
7 | (2014-12-28 05:48:49.695421) can0 795 [8] AA 62 85 FF 00 74 01 00 |
8 | (2014-12-28 05:48:49.794450) can0 795 [8] AA 64 83 FF 00 74 01 00 |
9 | (2014-12-28 05:48:49.890473) can0 795 [8] AA 63 84 FF 00 73 01 00 |
10 | (2014-12-28 05:48:49.992467) can0 795 [8] AA 65 81 FF 00 73 01 00 |
11 | (2014-12-28 05:48:50.088988) can0 795 [8] AA 64 81 FF 00 73 01 00 |
12 | (2014-12-28 05:48:50.190503) can0 795 [8] AA 64 81 FF 00 73 01 00 |
13 | (2014-12-28 05:48:50.289455) can0 795 [8] AA 64 82 FF 00 73 01 00 |
14 | (2014-12-28 05:48:50.388963) can0 795 [8] AA 62 82 FF 00 72 01 00 |
15 | (2014-12-28 05:48:50.487950) can0 795 [8] AA 64 83 FF 00 73 01 00 |
16 | (2014-12-28 05:48:50.586926) can0 795 [8] AA 62 86 FF 00 74 01 00 |
17 | (2014-12-28 05:48:50.685452) can0 795 [8] AA 64 85 FF 00 75 01 00 |
18 | (2014-12-28 05:48:50.784443) can0 795 [8] AA 62 86 FF 00 74 01 00 |
19 | (2014-12-28 05:48:50.880455) can0 795 [8] AA 62 86 FF 00 74 01 00 |
20 | (2014-12-28 05:48:50.985496) can0 795 [8] AA 62 87 FF 00 75 01 00 |
21 | (2014-12-28 05:48:51.081508) can0 795 [8] AA 62 87 FF 00 75 01 00 |
22 | (2014-12-28 05:48:51.183438) can0 795 [8] AA 63 85 FF 00 74 01 00 |
23 | (2014-12-28 05:48:51.279426) can0 795 [8] AA 63 85 FF 00 74 01 00 |
24 | (2014-12-28 05:48:51.381556) can0 795 [8] AA 64 85 FF 00 74 01 00 |
25 | (2014-12-28 05:48:51.477565) can0 795 [8] AA 62 85 FF 00 74 01 00 |
26 | (2014-12-28 05:48:51.582410) can0 795 [8] AA 64 86 FF 00 75 01 00 |
27 | (2014-12-28 05:48:51.678416) can0 795 [8] AA 62 89 FF 00 76 01 00 |
28 | (2014-12-28 05:48:51.783590) can0 795 [8] AA 61 88 FF 00 75 01 00 |
29 | (2014-12-28 05:48:51.882452) can0 795 [8] AA 61 88 FF 00 75 01 00 |
30 | -------------------------------------------------------------------- |
Es sieht etwas besser aus... Mit dem Befehl: pi@raspberrypi ~ $ sudo ip -details -statistics link show can0 2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 10 link/can can state ERROR-ACTIVE restart-ms 0 bitrate 500000 sample-point 0.875 tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1 clock 8000000 re-started bus-errors arbit-lost error-warn error-pass bus-off 0 0 0 0 0 0 RX: bytes packets errors dropped overrun mcast 620112 77514 9 0 9 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0 9 overrun/Fehlermeldungen bei 77514 Paketen ist OK denke ich. Können diese Fehler auch durch die Unterbrechungen mit STRG+C auftreten ? Denn dann müsste es etwa hinhauen, da ich candump etwa 8-9 mal aufgerufen habe. @Frank: Ja es mag sein, dass ich die falsche Hardware ausgesucht habe.. Nun ist es so, dass ich in meinem Projekt die Implementierung der CAN Daten die letzte Hürde ist. D.h. ein Umstieg würde mich sehr viel Zeit und nochmals Nerven kosten. Aber für die Zukunft bin ich nun schlauer :D @dunno: Ich bin ein stink normaler Student ^^ Einen Oszi habe ich leider nicht.. vielleicht später mal :) Falls einer von euch nähe Karlsruhe-Pforzheim wohnt und nen Oszi besitzt sehr gerne :D @ALL: Ich wüsste nur gerne ob die CAN Daten richtig sind... Mir ist klar, dass man nicht sofort erkennen kann ob es ein richtig oder falsch gibt. Ich würd e gerne von euch wissen, ob dieses Outputs "richtig" aussehen. Diese Can Daten sind von einem Radar Sensor, welches die Entfernung, Geschwindigkeit in x y Achse und die Beschleunigung angibt. Wobei die Aufgezeichneten Daten natürlich in Ruhe Zustand sind. Ein Paar Fragen habe ich noch: 1.Kann es mal vorkommen das man falsche CAN DATEN hat? 2.Wieso bekomme ich so viele Nullen? Hat das was mit dem overflow zutun? 3.Für was steht die 8 in Eckigen Klammern? [8] 4.Für was steht die Zahl 795 vor dieser Eckigen Klammer? Vielen Dank nochmals!! Ich bin sehr froh darüber dieses Forum gefunden zu haben :D Leider sind in den meisten Foren eine qualitative Antwort zu bekommen eine Seltenheit.
:
Bearbeitet durch User
Was die Interpretation der Daten angeht, da muss natürlich das Datenblatt deines radar-sensors Auskunft geben. Btw, was ist das eigentlich fürn ding? Klingt ja spannend.. Die [8] ist imho einfach die zahl der dargestellten bytes.. ;) 795..can Identifier vielleicht? Es sollte doch ein manpage zu candump geben..? Falsche can Daten: weiß nicht was du meinst, can hat jedenfalls Mechanismen um Übertragungsfehler auszuschließen Bzw zu erkennen. Du bekommst als schon das was gesendet wurde.
Hi, nochmals ich Leider bekomme ich die rx-overflow Meldung weiterhin. Das Letzte mal hab ich ein anderes Can-bus Anschluss genommen gehabt (siehe Bild). Sehr komisch das eigentlich Beide Can-Anschlüsse unterschiedliche Sachen rausgeben. Ich habe nun auch den PICAN http://skpang.co.uk/catalog/pican-canbus-board-for-raspberry-pi-p-1196.html leider erfolglos bekomme ich auch hier die selbe Fehlermeldung rx-overflow ----------------------------------------------------------------------- Ist es wirklich sinnvoll den BeagleBone Black zu nehmen? Wenn ja wie lange dauert es mich da einzuarbeiten? Ich habe gelesen, dass Ubuntu läuft.. Gibt es gute Anleitungen hierzu mit dem Can Bus?
:
Bearbeitet durch User
Hakan Demirel schrieb: > Ist es wirklich sinnvoll den BeagleBone Black zu nehmen? Wie gesagt, ich hätte den PI gleich links (oder rechts) liegen gelassen. > Wenn ja wie lange dauert es mich da einzuarbeiten? Ich habe gelesen, > dass Ubuntu läuft.. Gibt es gute Anleitungen hierzu mit dem Can Bus? Wenn Du den PI kennst, solltest Du mit dem BBB auch keine Probleme haben. Pass auf, dass Du die Rev C mit 4GB EMMC bekommst. Die wird mit Debian ausgeliefert, aber Du kannst auch Angstrøm haben. CAN funktioniert im Userspace genauso mit SocketCAN. Das ist das CAN Cape: http://elinux.org/CircuitCo:CAN_Bus_Cape_RevA Es gibt mittlerweile Rev B. Farnell hat das Zeugs. fchk
Ich habe nicht aufgegeben :D nach langer Recherche und rumbastelei habe ich einen How To erstellt. Ich hoffe das es einigen hilfreich sein wird um den MCP2515 Treiber benutzen zu können. Das Overflow Problem wird dadurch behoben, da man den langsameren MCP251x nicht benutzt. Auch mit aktuellen RPI Kernels ist es möglich den MCP2515 zu benutzen. Gruß ise1989 Vielen Dank an dunno, der mich auf die richtige Spur gebracht hat ;) und Danke Frank das nächste mal hol ich mir nen BeagleBone Black :D
:
Bearbeitet durch User
Hallo ise1989, vielen Dank für deine Mühe und dein pdf - funktioniert auf Anhieb! Gruß Martin
Hallo, wer sich mit dem CAN-Bus geschäftigen möchte, der sollte einen Bogen um die momentanen RPi-CAN-Bus Boards (basierend auf SPI-MCP2515) machen und sich stattdessen das wesentlich bessere (in Bezug auf Schnittstellen) BeagleBone Black kaufen. Ein einfacherer Tranceiver reicht und man hat einen performanten und stabilen CAN-Bus. Gruß Gerd
Hallo Zusammen, wir haben vor kurzem gute Erfahrungen mit der mcp2515 Implementierung aus dem Mailline Kernel (5.12-rc8) mit dem RPi3 gemacht. Der Kernel für das raspberry pi 3 ist dann aus dem foundation repo. Wer es mal tesen möchte: https://github.com/pyavitz/rpi-img-builder/releases/download/images/rpi-3-ubuntu-hirsute-5.12.0-rc8-v7-2021-04-23.img.xz
Kann ich bestätigen. Die Treiber Situation hat sich wesentlich gebessert. Die früheren Probleme (Paketverluste, hängender Treiber) sind behoben worden. Ursache war insbesondere das Linux damals den Interrupt (Interrupt Level Low) im Gegensatz zu heute nicht unterstützte.
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.