Vor einiger Zeit hatten wir ein Objekt, in dem die Leistungsbeschreibung die Anforderung enthielt: "Ethercat-Protokoll". Bei der Suche nach Informationen stieg ich in Habr ein und stellte ĂĽberrascht fest, dass es dort keine Analyse dieses Protokolls gab. Und im Allgemeinen sind die Informationen ĂĽber ihn ziemlich fragmentiert (Blick nach vorne - ich habe nur an der falschen Stelle gesucht). Wir haben ein Projekt gemacht, und dieser Artikel ist fĂĽr das "jĂĽngere Ich" gedacht, ein Versuch, Zeit fĂĽr jemanden zu sparen, der dieses Protokoll verwenden wird oder nur daran interessiert ist.
Die einzige Einschränkung ist, dass ich die eher niedrige Ebene des Protokolls (Datenschicht in der EtherCAT-Terminologie) beschreiben werde. Weil er es war, den wir brauchten und wir uns auf ihn beschränkten. Anwendungsschichtprotokolle wie CanOPEN-over-EtherCAT (CoE) bleiben (vorerst?) Unbeschrieben.

EtherCAT in einem Satz
Es ist leicht zu googeln, aber der Ordnung halber werde ich es in meinen eigenen Worten sagen. EtherCAT ist ein industrieller Kommunikationsbus mit einem hohen Durchsatz (100 Mbit / s) und einer Antwortgeschwindigkeit (einige Mikrosekunden für Dutzende von Geräten auf einer Leitung, die mehrere zehn Meter voneinander entfernt sind), der Ethernet auf niedrigem Niveau verwendet, sich jedoch gleichzeitig vom üblichen Ethernet-Konzept unterscheidet. Antworten".
Ethernet — , , . EtherCAT — , ( EtherCAT-) , .
, , . — , . — , , — UDP, EtherCAT . EtherCAT- — , — ARP . EtherCAT-.
"" , . , .
, — Infineon XMC4300\4800 Microchip LAN9252. ( - ), — EtherCAT ( ).
EtherCAT XMC4800 Relax EtherCAT Kit. ? — , ( ) .

.
:
- Beckhoff, TwinCAT, . — , . — . — , . . , .
- Open source , https://github.com/OpenEtherCATsociety/SOEM. STM32F207 FreeRTOS . , , . , .
WireShark. , , .
, . -, , , wkc2 APWRw. : EtherCAT_Communication_EN.pdf. — ethercat.org . EtherCAT association. , ( NDA, Beckhoff - ), , .
— , .
,
-, , Ethercat, Ethercat. , Vendor ID. , . https://ethercat.org/en/membership_application.html
VendorID! , VendorID . — "", .. EtherCAT . - , - — .
ethercat
, . — . . ?
4 , 2 (port 0 port 1). :

: , ( ). . 0 ethercat processing unit, , .
, ethercat , port0 , port 0, ethercat processing unit, .. port0 .

:

port0 port1, port0 , .. , (? 0) .
.

? , — Ethercat .
. ""? . — ethernet . . ? , - , : — . — ( ).
, . , , , — "" 1, 0 . — ethercat. , , .
, "4- " "" , , .
, , "". Ethernet — \ . IP ( ARP ), MAC . 4 .
, infineon, microchip 2.

ethercat — Beckhoff 4- ethercat :
https://www.beckhoff.com/ru/default.htm?ethercat/ek1100.htm
https://www.beckhoff.com/ru/default.htm?ethercat/ek1122.htm

, , - ethernet switch. , ( ).
\. Ethercat — broadcast MAC , . — ( ), , , — , .
slave — DPRAM
, slave — , . Infineon , SPI. 4 ( 0x1000) — , ethercat, .
XMC4800 8

( ) , EtherCAT . , .
( XMC), :
- 0x000 — TYPE = 0x98 ( )
- 0x010 — STATION_ADR, ( , )
- 0x040 — RESET_ECAT, .
- 0x100 — DL_CONTROL, (\)
- 0x110 — DL_STATUS, ( )
. .
master'a — ethercat .
. ethercat .
:

, ( TCP UDP, 0x88A4), UDP . UDP ( ethercat ), Ethercat — - UDP .
:

, Working counter (WKC).

Wkc — . , wkc wkc ( wkc ). , , BRD " " wkc .
- Cmd — . , .
- Idx — , . . SOEM \.
- Address — . Cmd — 16- ADP ADO ( ), 32- (Logical Addr).
- Len — .
- C, R, M, IRQ — , — . SOEM .
, Cmd. . . BRD BRD.
| APxx | . ADP " ". ? , 0x0000 . |
| FPxx | . STATION_ADR ADP |
| Bxx | . . , , OR . .. , 0 |
| Lxx | . FMMU, 32- , . . |
| xxRD | . ( ) |
| xxWR | . , |
| xxRW | . LRW - , . . |
| xxRMW | . ADP (. ) , . LRW . |
SyncManager
EtherCAT ( ) SyncManager.
SyncManager (SM) — ethercat , .
0x800. SM 8 , .. 0x800-0x807 SM1, 0x808-0x80F SM2 . XMC4800 8 SyncManager.
— mailbox . . , .
Mailbox — - ethercat. , .
Buffered — . .
- Mailbox Read. — ( WKC=0). ( ) — - ( WKC=0). ( ) — ( ), (WKC 1) .
- Mailbox Write. . , , ( ) WKC=0.
- Buffered Read. . , . , .. SyncManager 0x1000-0x1010, 0x1000-0x1030. 0x1000-0x1010, , .
- Buffered Write. , . .. , , .
FMMU
Ethercat, LRW. Fieldbus Memory Management Unit (FMMU). . SyncManager, . , . , , , , StartBit 0, EndBit — 7.
, . FMMU0 0x1000 ( ), 0x12345678+4* , 4 , READ. FMMU0 0x1000 ( ), 0x12345678+400+4* , WRITE. LRW 0x12345678, 800 , . . , , ( slave2slave communication), .
, FMMU , SyncManager .
EtherCAT Beckhoff . EEPROM . AL_STATUS, EEPROM . CanOPEN-over-EtherCAT(CoE) \. Ethernet-over-EtherCAT(EoE) Files-over-EtherCAT (FoE) . ESI- c VendorID . . , , EtherCAT , , .