Für ein Teilprojekt (Stepper Motoren und LED's ansteuern, Befehle über
CAN) benutze ich ein STM32F205 und eben CAN 2.0B als Protokoll mit 500
kBit.
Jetzt habe ich festgestellt, dass ich auf dem CAN "Dauerfeuer" habe,
also es werden nur Daten rausgesendet obwohl die main()-Funktion leer
ist und auch Interrupts sind noch nicht implementiert. Die Frage ist
jetzt, was wird da gefunkt und warum?
Im Prinzip sieht der Pseudo-Code dazu so aus:
1 | #include .....
|
2 |
|
3 | void main(void){
|
4 |
|
5 | CANobject oCAN1;
|
6 |
|
7 | Init_Hardware();
|
8 |
|
9 | HAL_Delay(500); // 0,5 Sek. warten bis der Rest aka die "Umwelt" auch soweit ist
|
10 |
|
11 | oCAN1.Configure.Baudrate(500000);
|
12 | oCAN1.Configure.Protocol(EXTENDED);
|
13 | oCAN1.Configure.Address(OWNADR);
|
14 | oCAN1.Configure.Filter(OWNADR, GROUPADR); // Filter aktiv
|
15 | oCAN1.Configure.Interrupts(0); // keine Interrupts aktiv
|
16 | oCAN1.Enable();
|
17 |
|
18 | oCAN1.SendMessage("Hallo Welt"); // nur zum testen
|
19 |
|
20 | while(TRUE)
|
21 | {
|
22 | // Eine_X_Funktion();
|
23 | // Eine_andere_Funktion();
|
24 | // CAN_Fkt();
|
25 | }
|
26 | }
|
Also die eigentlichen Funktionen in main() bzw. while(1) habe ich
deaktiviert, Interrupts sind noch nicht eingebaut aber der Filter steht
und muss noch getestet werden.
Das Board läuft mit der SW derzeit alleine also ohne weitere
CAN-Teilnehmer, sollte also 1x das "Hallo Welt" rausfunken und dann
sollte Ruhe sein. Am CAN-Bus ist weiter angeschlossen:
- ein USBtin (CAN-USB Interface)
- Oszilloskop
Aus dem Oszi sehe ich Datenpakete ohne Ende. Zwischen den Datenpaketen
sind nur 50 µs Pause = Buslast nahe 100%. Das Signal ist vom Verlauf her
sauber.
Was auf dem Bus gesendet wird sehe ich mit dem USBtin nicht. Das Teil
ist scheinbar überfordert oder sowas. Es steht auf Listen-Only und
500000 und es kommt nichts im PC bzw. Laptop an, auch nicht die erste
Message. Als Tool habe ich USBtinViewer_v1.3.jar installiert. Das
einzige was ich sehen kann ist irgendwelchen Datenmüll, den ich direkt
beim Einstecken des Steckers (Strom und CAN-Bus) bekomme und das ist
immer das gleich, egal auf welche Geschwindigkeit der USBtin steht. Die
Kommunikation zwischen Laptop und USBtin funktioniert, das Teil wird
erkannt.
Warum werden kontinuierlich Daten rausgefunkt? Ich bin mir zu 98%
sicher, dass die vom Board kommen und nicht vom USBtin. Ich vermute mal,
dass es ein Config-Fehler im CAN-Setup des STM32F205 ist oder das ist
iwie "normal"....
Gibt es ein preiswertes Tool, dass bei 500kBaud und 100% Buslast
zuverlässig Daten zum Rechner übertragen kann? Ich schätze nämlich, dass
der Flaschenhals die Verbindung zum Rechner ist (USB -> FTDI -> 115200
Baud?) und das die SW im USBtin quasi überrannt wird. Aber alles nur
Spekulation.
Ich dachte auch, ob es evtl. möglich ist, mit einem BananaPi den CAN
abzuhören. Wenn ich mich nicht täusche, hat das Teil ein CAN-Interface
schon drauf und könnte dann alles stumpf auf die angeschlossene
Festplatte speichern. Soweit die Theorie....
Kurze Hintergundinfo zum Umfeld: Ich arbeite bei einem Start-Up mit
insges. 5 Leuten und Investoren als Geldgeber. Von daher müssen wir mit
den preiswerten Zeug zurecht kommen.