ethercat-linux/vendor/ethercrab/ethercrab-logo.svg
Tony Cao 21b2d3bf99 J1900 <-> TwinCAT 1 kHz verification over EL6695 bridge
Re-implementation of rustbootd's ecat_el6695_* examples as a single binary
with fixes found in review and on hardware:

- DC-follow PLL hardened against period-2 hunting: slew-limited anchor
  (+/-50us/cycle), bistable-trap snap re-anchor, re-prime on stale deadline
- drift-free absolute-grid ticker mode; probe mode for timestamp forensics
- bounded-memory online stats (histograms), graceful SIGINT/SIGTERM shutdown
  with full report, error-streak abort
- timestamp plausibility filter comparing against the previous raw sample
  (avoids the deadlock after a startup outlier)
- XFC scope waveform options: --el2202 (with --el2202-dual), --el2262,
  --el1252 latch timestamp readback with per-channel edge statistics
- register access unified in regs.rs: named bit constants everywhere,
  read-modify-write for enable/activation bytes
- vendored patched ethercrab 0.7.1 (sdo_write_complete, send_raw_coe)

Verified on J1900 (PREEMPT_RT 6.6.135): 600k cycles/600s exact 1 kHz,
tx/rx zero errors, phase_err p50=164us std=5us; EL2202<->EL1252 loopback
edge interval mean 2000.24us std=24.65us.
2026-07-22 08:55:41 +08:00

611 lines
14 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="128"
height="128"
viewBox="0 0 33.866665 33.866665"
version="1.1"
id="svg3280"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="ethercrab-logo.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview3282"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
units="px"
inkscape:zoom="4.7174087"
inkscape:cx="115.10557"
inkscape:cy="68.893755"
inkscape:window-width="2560"
inkscape:window-height="1368"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs3277">
<mask
id="holes-5">
<rect
x="-60"
y="-60"
width="120"
height="120"
fill="#ffffff"
id="rect941-3" />
<circle
id="hole-5"
cy="-40"
r="3"
cx="0" />
<use
xlink:href="#hole-5"
transform="rotate(72)"
id="use944-6"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5"
transform="rotate(144)"
id="use946-2"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5"
transform="rotate(-144)"
id="use948-9"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5"
transform="rotate(-72)"
id="use950-1"
x="0"
y="0"
width="100%"
height="100%" />
</mask>
<mask
id="holes-5-2">
<rect
x="-60"
y="-60"
width="120"
height="120"
fill="#ffffff"
id="rect941-3-0" />
<circle
id="hole-5-6"
cy="-40"
r="3"
cx="0" />
<use
xlink:href="#hole-5-6"
transform="rotate(72)"
id="use944-6-1"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-6"
transform="rotate(144)"
id="use946-2-5"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-6"
transform="rotate(-144)"
id="use948-9-5"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-6"
transform="rotate(-72)"
id="use950-1-4"
x="0"
y="0"
width="100%"
height="100%" />
</mask>
<mask
id="holes-5-6">
<rect
x="-60"
y="-60"
width="120"
height="120"
fill="#ffffff"
id="rect941-3-1" />
<circle
id="hole-5-5"
cy="-40"
r="3"
cx="0" />
<use
xlink:href="#hole-5-5"
transform="rotate(72)"
id="use944-6-9"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5"
transform="rotate(144)"
id="use946-2-4"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5"
transform="rotate(-144)"
id="use948-9-9"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5"
transform="rotate(-72)"
id="use950-1-0"
x="0"
y="0"
width="100%"
height="100%" />
</mask>
<mask
id="mask2083">
<rect
x="-60"
y="-60"
width="120"
height="120"
fill="#ffffff"
id="rect2071" />
<circle
id="circle2073"
cy="-40"
r="3"
cx="0" />
<use
xlink:href="#hole-5-5"
transform="rotate(72)"
id="use2075"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5"
transform="rotate(144)"
id="use2077"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5"
transform="rotate(-144)"
id="use2079"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5"
transform="rotate(-72)"
id="use2081"
x="0"
y="0"
width="100%"
height="100%" />
</mask>
<mask
id="holes-5-6-3">
<rect
x="-60"
y="-60"
width="120"
height="120"
fill="#ffffff"
id="rect941-3-1-6" />
<circle
id="hole-5-5-7"
cy="-40"
r="3"
cx="0" />
<use
xlink:href="#hole-5-5-7"
transform="rotate(72)"
id="use944-6-9-5"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5-7"
transform="rotate(144)"
id="use946-2-4-3"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5-7"
transform="rotate(-144)"
id="use948-9-9-5"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#hole-5-5-7"
transform="rotate(-72)"
id="use950-1-0-6"
x="0"
y="0"
width="100%"
height="100%" />
</mask>
</defs>
<g
inkscape:label="Layer 1"
id="layer1"
transform="translate(-146.07885,-147.74605)">
<g
id="cog-group"
mask="url(#holes-5-6)"
transform="matrix(0.32254055,0,0,0.32254055,163.01218,164.67938)"
style="opacity:0.5">
<ellipse
fill="none"
stroke="#000000"
stroke-width="9"
id="cog-ring"
cx="0"
cy="0"
rx="42.999245"
ry="43"
style="display:inline" />
<g
id="cog-teeth"
style="display:inline">
<polygon
id="cog-6"
stroke="#000000"
stroke-width="3"
stroke-linejoin="round"
points="46,3 51,0 46,-3 " />
<use
xlink:href="#cog-6"
transform="rotate(11.25)"
id="use867-0"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(22.5)"
id="use869-6"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(33.75)"
id="use871-2"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(45)"
id="use873-6"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(56.25)"
id="use875-1"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(67.5)"
id="use877-8"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(78.75)"
id="use879-7"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(90)"
id="use881-9"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(101.25)"
id="use883-2"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(112.5)"
id="use885-0"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(123.75)"
id="use887-2"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(135)"
id="use889-3"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(146.25)"
id="use891-7"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(157.5)"
id="use893-5"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(168.75)"
id="use895-9"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="scale(-1)"
id="use897-2"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-168.75)"
id="use899-2"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-157.5)"
id="use901-8"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-146.25)"
id="use903-9"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-135)"
id="use905-7"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-123.75)"
id="use907-3"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-112.5)"
id="use909-6"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-101.25)"
id="use911-1"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-90)"
id="use913-2"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-78.75)"
id="use915-9"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-67.5)"
id="use917-3"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-56.25)"
id="use919-1"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-45)"
id="use921-9"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-33.75)"
id="use923-4"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-22.5)"
id="use925-7"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#cog-6"
transform="rotate(-11.25)"
id="use927-8"
x="0"
y="0"
width="100%"
height="100%" />
</g>
<g
id="mounts"
style="display:inline">
<polygon
id="mount-5"
stroke="#000000"
stroke-width="6"
stroke-linejoin="round"
points="7,-42 -7,-42 0,-35 " />
<use
xlink:href="#mount-5"
transform="rotate(72)"
id="use931-0"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#mount-5"
transform="rotate(144)"
id="use933-3"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#mount-5"
transform="rotate(-144)"
id="use935-6"
x="0"
y="0"
width="100%"
height="100%" />
<use
xlink:href="#mount-5"
transform="rotate(-72)"
id="use937-1"
x="0"
y="0"
width="100%"
height="100%" />
</g>
</g>
<polygon
points="439.141,168.802 439.141,155.974 481.678,155.974 481.678,141.673 405.125,141.687 "
id="ethercat-black"
transform="matrix(0.14516087,0,0,0.14629179,102.88097,147.65795)"
style="opacity:0.5;stroke:none;stroke-width:10.0006;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill" />
<polygon
style="fill:#e30613;stroke:none;stroke-width:10.001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
points="345.618,136.251 481.678,136.245 447.663,109.131 447.663,121.958 345.618,121.951 "
id="ethercat-red"
transform="matrix(0.14779019,0,0,0.14634034,101.61448,147.65078)" />
</g>
</svg>