Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - 1:1-Verbindungen und ACK: wieso kein LL-ACK?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    - √ - 1:1-Verbindungen und ACK: wieso kein LL-ACK?

    Hallo zusammen,

    vorweg: hier geht es tief in die Details des KNX-Stack. Ich grüble wie blöde, was ich falsch mache und komme nicht auf die Lösung.

    Setup: Beaglebone mit eibd, verbunden über Ethernet mit einem Weinzierl-Interface (PA 15.15.250 und 15.15.251, je nach zugreifendem Gerät). ETS auf dem Laptop, hat eine separate serielle Schnittstelle für den Busmonitor. Selbst implementiertes Gerät am Bus (PA 7.3.78) mit eigenem µC, selbstgeschriebenem Stack und TPUART2.

    Mit mwrite (aus dem eibd-Paket) lässt sich der Speicher eines Geräts beschreiben. Die Gegenseite habe ich auf dem Gerät implementiert, ich verstehe aber nicht, was auf dem Bus passiert.

    mwrite erwartet folgende Kommunikation (> = eibd an Gerät, < = Gerät an eibd):

    > T_Connect
    > MaskVersionRead
    < ACK
    < MaskVersionResponse
    > ...


    Das funktioniert im Prinzip auch, siehe ersten Screenshot. Jetzt kommt es aber:
    Der ACK-Frame (versendet von Layer 4) bekommt kein LL-ACK, d.h. der eibd quittiert den Frame gar nicht erst - und ich verstehe nicht, warum.

    Ich hatte zuerst die eibd-Funktionen im Verdacht, aber die scheinen unschuldig zu sein. Wenn ich mit der ETS einen Programmierversuch starte (die genau die gleiche Sequenz fährt), habe ich das identische Problem, siehe zweiten Screenshot.
    • Programmiere ich über die ETS ein kommerzielles Gerät, funktioniert alles.
    • Die Checksumme ist ok, habe extra noch mal nachgerechnet.
    • Ob ich die MaskVersionResponse direkt nach dem Layer 4-ACK schicke oder verzögert, macht auch keinen Unterschied.
    • Weitere potenzielle Probleme fallen mir partout nicht ein.


    Aus dem Log des eibd (unten angehängt für den ETS-Programmierversuch) werde ich nicht schlau. Das Weinzierl-IF scheint das Layer 4-ACK zu hören, schickt aber kein LL-ACK.

    Hat irgendjemand eine Ahnung, was hier schiefläuft? Ich bin am Ende meines Lateins.

    Max

    Code:
    Layer 8(000856F8,52C09887) New Connection
    Layer 8(000E91D8,52C09887) ClientConnection Init
    Layer 8(000E91D8,52C09887) RecvMessage(004): 00 50 73 4E
    Layer 4(0012B7D0,52C09887) OpenConnection 7.3.78
    Layer 3(00075338,52C09887) registerIndividual 0012B7D0 1
    Layer 3(00075338,52C09887) registerIndividual 0012B7D0 = 1
    Layer 4(0012B7D0,52C09887) Send(002): 03 00
    Layer 4(0012B7D0,52C09887) SendConnect
    Layer 3(00075338,52C09887) Send L_Data system from 0.0.0 to 7.3.78 hops: 07 T_CONNECT_REQ
    Layer 2(000546C8,52C09887) Send L_Data system from 0.0.0 to 7.3.78 hops: 07 T_CONNECT_REQ
    Layer 1(000546C8,52C09887) SendTunnel(014): 04 18 04 00 11 00 B0 70 00 00 73 4E 00 80
    Layer 1(00054B90,52C09887) Send(014): 04 18 04 00 11 00 B0 70 00 00 73 4E 00 80
    Layer 0(00054B90,52C09887) Send(020): 06 10 04 20 00 14 04 18 04 00 11 00 B0 70 00 00 73 4E 00 80
    Layer 2(000546C8,52C09887) Recv L_Data system from 0.0.0 to 7.3.78 hops: 07 T_CONNECT_REQ
    Layer 3(00075338,52C09887) Recv L_Data system from 0.0.0 to 7.3.78 hops: 07 T_CONNECT_REQ
    Layer 0(00054B90,52C09887) Recv(010): 06 10 04 21 00 0A 04 18 04 00
    Layer 4(0012B7D0,52C09887) SendData T_DATA_CONNECTED_REQ serno:00 A_DeviceDescriptor_Read Type:00
    Layer 3(00075338,52C09887) Send L_Data low from 0.0.0 to 7.3.78 hops: 07 T_DATA_CONNECTED_REQ serno:00 A_DeviceDescriptor_Read Type:00
    Layer 2(000546C8,52C09887) Send L_Data low from 0.0.0 to 7.3.78 hops: 07 T_DATA_CONNECTED_REQ serno:00 A_DeviceDescriptor_Read Type:00
    Layer 1(00054B90,52C09887) Recv(004): 04 18 04 00
    Layer 1(000546C8,52C09887) SendTunnel(015): 04 18 05 00 11 00 BC 70 00 00 73 4E 01 43 00
    Layer 1(00054B90,52C09887) Send(015): 04 18 05 00 11 00 BC 70 00 00 73 4E 01 43 00
    Layer 2(000546C8,52C09887) Recv L_Data low from 0.0.0 to 7.3.78 hops: 07 T_DATA_CONNECTED_REQ serno:00 A_DeviceDescriptor_Read Type:00
    Layer 3(00075338,52C09887) Recv L_Data low from 0.0.0 to 7.3.78 hops: 07 T_DATA_CONNECTED_REQ serno:00 A_DeviceDescriptor_Read Type:00
    Layer 0(00054B90,52C09887) Send(021): 06 10 04 20 00 15 04 18 05 00 11 00 BC 70 00 00 73 4E 01 43 00
    Layer 0(00054B90,52C09887) Recv(010): 06 10 04 21 00 0A 04 18 05 00
    Layer 1(00054B90,52C09887) Recv(004): 04 18 05 00
    Layer 0(00054B90,52C09887) Recv(020): 06 10 04 20 00 14 04 18 2E 00 2E 00 B0 70 FF FA 73 4E 00 80
    Layer 1(00054B90,52C09887) Recv(014): 04 18 2E 00 2E 00 B0 70 FF FA 73 4E 00 80
    Layer 1(00054B90,52C09887) Send(004): 04 18 2E 00
    Layer 0(00054B90,52C09887) Send(010): 06 10 04 21 00 0A 04 18 2E 00
    Layer 0(00054B90,52C09887) Recv(021): 06 10 04 20 00 15 04 18 2F 00 2E 00 BC 70 FF FA 73 4E 01 43 00
    Layer 1(00054B90,52C09887) Recv(015): 04 18 2F 00 2E 00 BC 70 FF FA 73 4E 01 43 00
    Layer 1(00054B90,52C09887) Send(004): 04 18 2F 00
    Layer 0(00054B90,52C09887) Send(010): 06 10 04 21 00 0A 04 18 2F 00
    Layer 0(00054B90,52C09887) Recv(020): 06 10 04 20 00 14 04 18 30 00 29 00 B0 60 73 4E FF FA 00 C2
    Layer 1(00054B90,52C09887) Recv(014): 04 18 30 00 29 00 B0 60 73 4E FF FA 00 C2
    Layer 1(00054B90,52C09887) Send(004): 04 18 30 00
    Layer 0(00054B90,52C09887) Send(010): 06 10 04 21 00 0A 04 18 30 00
    Layer 1(000546C8,52C09887) Recv L_Data system from 7.3.78 to 15.15.250 hops: 06 T_ACK Serno:00
    Layer 2(000546C8,52C09887) Recv L_Data system from 7.3.78 to 0.0.0 hops: 06 T_ACK Serno:00
    Layer 3(00075338,52C09887) Recv L_Data system from 7.3.78 to 0.0.0 hops: 06 T_ACK Serno:00
    Layer 8(000A5E08,52C09887) Send_Route L_Data system from 7.3.78 to 0.0.0 hops: 05 T_ACK Serno:00
    Layer 1(000A5E78,52C09887) Send(010): 29 00 B0 50 73 4E 00 00 00 C2
    Layer 0(000A5E78,52C09887) Send(016): 06 10 05 30 00 10 29 00 B0 50 73 4E 00 00 00 C2
    Layer 0(00054B90,52C09887) Recv(023): 06 10 04 20 00 17 04 18 31 00 29 00 B0 60 73 4E FF FA 03 47 40 05 01
    Layer 1(00054B90,52C09887) Recv(017): 04 18 31 00 29 00 B0 60 73 4E FF FA 03 47 40 05 01
    Layer 1(00054B90,52C09887) Send(004): 04 18 31 00
    Layer 0(00054B90,52C09887) Send(010): 06 10 04 21 00 0A 04 18 31 00
    Layer 1(000546C8,52C09887) Recv L_Data system from 7.3.78 to 15.15.250 hops: 06 T_DATA_CONNECTED_REQ serno:01 A_DeviceDescriptor_Response Type:00  Descriptor: 0501
    Layer 2(000546C8,52C09887) Recv L_Data system from 7.3.78 to 0.0.0 hops: 06 T_DATA_CONNECTED_REQ serno:01 A_DeviceDescriptor_Response Type:00  Descriptor: 0501
    Layer 3(00075338,52C09887) Recv L_Data system from 7.3.78 to 0.0.0 hops: 06 T_DATA_CONNECTED_REQ serno:01 A_DeviceDescriptor_Response Type:00  Descriptor: 0501
    Layer 8(000A5E08,52C09887) Send_Route L_Data system from 7.3.78 to 0.0.0 hops: 05 T_DATA_CONNECTED_REQ serno:01 A_DeviceDescriptor_Response Type:00  Descriptor: 0501
    Layer 1(000A5E78,52C09887) Send(013): 29 00 B0 50 73 4E 00 00 03 47 40 05 01
    Layer 0(000A5E78,52C09887) Send(019): 06 10 05 30 00 13 29 00 B0 50 73 4E 00 00 03 47 40 05 01
    Layer 4(0012B7D0,52C09887) SendDisconnect
    Layer 3(00075338,52C09887) Send L_Data system from 0.0.0 to 7.3.78 hops: 07 T_DISCONNECT_REQ
    Layer 2(000546C8,52C09887) Send L_Data system from 0.0.0 to 7.3.78 hops: 07 T_DISCONNECT_REQ
    Layer 1(000546C8,52C09887) SendTunnel(014): 04 18 06 00 11 00 B0 70 00 00 73 4E 00 81
    Layer 1(00054B90,52C09887) Send(014): 04 18 06 00 11 00 B0 70 00 00 73 4E 00 81
    Layer 0(00054B90,52C09887) Send(020): 06 10 04 20 00 14 04 18 06 00 11 00 B0 70 00 00 73 4E 00 81
    Layer 3(00075338,52C09887) deregisterIndividual 0012B7D0 = 1
    Layer 2(000546C8,52C09887) Recv L_Data system from 0.0.0 to 7.3.78 hops: 07 T_DISCONNECT_REQ
    Layer 3(00075338,52C09887) Recv L_Data system from 0.0.0 to 7.3.78 hops: 07 T_DISCONNECT_REQ
    Layer 0(00054B90,52C09887) Recv(010): 06 10 04 21 00 0A 04 18 06 00
    Layer 4(0012B7D0,52C09887) RecvConnection(000):
    Layer 8(000E91D8,52C09887) SendMessage(002): 00 00
    Layer 4(0012B7D0,52C09887) CloseConnection
    Layer 3(00075338,52C09887) deregisterIndividual 0012B7D0 = 0
    Layer 8(000E91D8,52C09887) ClientConnection closed
    Angehängte Dateien

    #2
    Zitat von l0wside Beitrag anzeigen
    Hallo zusammen,

    vorweg: hier geht es tief in die Details des KNX-Stack. Ich grüble wie blöde, was ich falsch mache und komme nicht auf die Lösung.
    Hallo,

    benutze doch mal den vbusmonitor vom eibd. Der Output ist einfacher zu lesen. Dein A_DeviceDescriptor_Response sendet den Frame mit der falschen Priorität (dürfte aber trotzdem funktionieren). Das Problem liegt eher bei der falschen Sequenznummer. Du sendest mit 1 wenn ich das Log richtig interpretiere, aber eibd erwartet eine 0. Deshalb wird dann der Disconnect gesendet.

    Hier ein Auszug vom eibd log:

    Code:
    vbusmonitor1 ip:localhost
    LPDU: B0 00 00 11 19 70 80 B7 :L_Data system from 0.0.0 to 1.1.25 hops: 07 T_CONNECT_REQ
    LPDU: BC 00 00 11 19 71 43 00 79 :L_Data low from 0.0.0 to 1.1.25 hops: 07 T_DATA_CONNECTED_REQ serno:00 A_DeviceDescriptor_Read Type:00
    LPDU: B0 11 19 00 00 70 C2 F5 :L_Data system from 1.1.25 to 0.0.0 hops: 07 T_ACK Serno:00
    LPDU: BC 11 19 00 00 73 43 40 07 01 3D :L_Data low from 1.1.25 to 0.0.0 hops: 07 T_DATA_CONNECTED_REQ serno:00 A_DeviceDescriptor_Response Type:00  Descriptor: 0701
    LPDU: BC 00 00 11 19 70 C2 F9 :L_Data low from 0.0.0 to 1.1.25 hops: 07 T_ACK Serno:00
    LPDU: B0 00 00 11 19 70 81 B6 :L_Data system from 0.0.0 to 1.1.25 hops: 07 T_DISCONNECT_REQ
    Gruß
    Dirk

    Kommentar


      #3
      Du hattest recht. Danke. Mit SeqNo = 0 passt es nun.

      Trotzdem fehlen noch ein Haufen LL-ACK, keine Ahnung, warum die nicht kommen. Mal sehen.

      Max

      Kommentar

      Lädt...
      X