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.
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
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
Kommentar