Senden Sie one-shot-Nachricht mit SocketCAN

Ist es möglich, eine „one-shot“ KANN die Nachricht mit SocketCAN? Dies ist im wesentlichen eine Nachricht, die nicht erwarten, eine Bestätigung zurück aus dem Empfänger. Das Protokoll erlaubt das ACK-bit nicht gesetzt sein.

InformationsquelleAutor ilya1725 | 2017-09-19



2 Replies
  1. 2

    Ich bin mir nicht sicher, was du meinst mit „one-shot“, aber ich senden einzelner CAN-frames die ganze Zeit mit der cansend – Dienstprogramm von can-utils, wie diese:

    $ cansend can0 135#02080426A10D112A
    

    Habe ich auch geschrieben, C-Programme, die das gleiche tun mit einem AF_CAN – Buchse. (Grundsätzlich können Sie die Krippe aus cansend.c um herauszufinden, wie.)

    Bezüglich der Weiterverbreitung von Nachrichten, dies geschieht nicht mit cansend:

    $ timeout 20s tcpdump -i can0 -w out.pcap &                                                                                                                                               
    [1] 16509
    tcpdump: listening on can0, link-type CAN_SOCKETCAN (CAN-bus with SocketCAN headers), capture size 262144 bytes
    
    $ cansend can0 135#02080426A10D112A
    
    $ 1 packet captured
    0 packets received by filter
    0 packets dropped by kernel
    
    [1]  + 16509 exit 124   timeout 20s tcpdump -i can0 -w out.pcap
    

    In der Reihenfolge oben, es sind keine Verbraucher online, so dass niemand ACKs die Nachricht, aber ich noch nur capture ein einzelnes Paket auf can0. Es scheint sicher zu dem Schluss, dass der stack SocketCAN ist nicht ‚automatisch‘ versucht, erneut zu senden die Nachricht in den hintergrund, nachdem cansend beendet.

    • Wenn Sie nicht über einen Empfänger das Lesen der Nachricht und senden ACK zurück, würde der sender halten, wiederholen. Ich will nur eine Nachricht zu senden, und wenn es ist niemand da, um es zu Lesen, es wäre verloren, aber die sender bewegen würde, auf.
    • Ich aktualisiert meine Antwort zu beachten, dass cansend versucht nicht erneut die Nachrichten. Ich gearbeitet habe, ziemlich mit KANN, aber ich bin keineswegs ein Experte, also… vielleicht habe ich es falsch verstanden, dein problem. Können Sie nicht berappen zu cansend (mit, z.B., system()) zu erreichen Ihr erklärtes Ziel?
    • Nein, cansend wird nicht erneut. Das ist ganz allein erledigt der CAN-controller. Was ich vermute @ilya1725 ist nach ist die one-shot-Modus, dass die meisten CAN-Controller sind in der Lage. E. g. vom MCP2515: One-Shot mode ensures that a message will only attempt to transmit one time. Normally, if a CAN message loses arbitration, or is destroyed by an error frame, the message is retransmitted. With One-Shot mode enabled, a message will only attempt to transmit one time, regardless of arbitration loss or error frame.
    • CAN-frames, die bereits erreicht hatten, der peripheren internen Puffer sind nicht gefangen von Wireshark. Ich schlage vor, zu hören mit einem anderen Gerät auf dem bus.
  2. 0

    Des CAN-Frames erneut übertragen werden sollen, wieder und wieder, bis ein bus-Fehler (bus-off). Dies geschieht über den CAN-Peripherie (es ist Teil der spec Suche nach „Weiterverbreitung“), SocketCan nicht wissen, etwas über, die.

    SocketCan können Sie abonnieren verschiedene Fehlermeldungen auf den bus/controller. Im Allgemeinen KÖNNEN Peripheriegeräte/Treiber implementieren die Signalisierung der eine Teilmenge dieser Fehler nur. Wenn Sie Glück haben, könnten Sie in der Lage sein, um abonnieren (siehe 4.1.2) für Benachrichtigungen und reagieren entsprechend.

    • Die meisten CAN-Controller unterstützt eine one-shot-Modus überspringt die Weiterverbreitung. Ich sehe keinen Grund für SocketCan nicht in der Lage sein, dies zu unterstützen. In der Tat, die ip link set can0 type can help Listen „one-shot“ als eine mögliche option. Jedoch, zumindest auf meiner hardware das gibt mir eine Operation not supported Antwort.
    • Operation not supported wahrscheinlich menas „Ihren Fahrer und/oder hw nicht, dass die option“. Jedenfalls denke ich, dass du Recht hast und die OP war zu Fragen, „one-shot“ auf der peripheren Ebene, nur verwirrend Vergleich der OP-Frage gegen die akzeptierte Antwort. Auch mir war nicht bewusst, dass one-shot option in ip, thx!!!
    • Danke @oxuf, ich erwartet, dass dieses Verhalten, konnte aber keinen Beweis dafür finden, sonst nirgends.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.