Hey,
We've been chasing a weird one with the MAX14819 (non-A, RevID reads 0x0A) and could use a second pair of eyes from your side.
Quick setup: STM32F413 talking to the chip over SPI, 14.7456MHz crystal (confirmed running — ExtClkMis reads clear), CQ current limit maxed out. The device on the other end is an ifm DTI421 (real IO-Link 1.1, COM2/38.4kBaud) — and we know it's not the sensor's fault, because we plugged the exact same physical unit straight into an ifm AL1060 master and it established communication with no issues at all. So the device is good, and we're stuck on why our master won't talk to it.
What we're seeing: We trigger EstCom and scope the CQ line. The wake-up pulse itself looks textbook — we measured it with cursors and got 80.09µs, 81.02µs, and 80.98µs on three separate pulses, basically dead on the datasheet's 75-85µs spec. So the pulse shape/timing is clearly right.
The problem is what happens around it. The datasheet says a failed attempt should retry after 30ms, up to 3 times. What we actually see is three pulses fired back-to-back, only 1.5-2.6ms apart, and the whole thing (from writing EstCom to it clearing with ComRt=00, i.e. "no device") wraps up in about 20-30ms total, every single time. That's not even long enough to fit ONE 30ms gap, let alone the two you'd need for 3 real retry attempts — so whatever's happening internally, it's not doing the retry sequence the datasheet describes.
A few scope details if it's useful:
- At 200µs/div we can clearly see the 3 individual pulses, each with sharp edges, and they measure ~80µs wide each (see cursor measurements above).
- At wider timebases (1ms/div, 500µs/div) the 3 pulses show up as one tight cluster right at the start of the capture, then dead flat for the rest of a 5-10ms window.
- We also tried the internal 5mA sink (
SourceSink=0) vs. source/pull-up (SourceSink=1) config onCQCfg— with the sink config (which matches what a couple of open-source MAX14819 drivers we found use), the 3 pulses spread out a bit more (~1.6-2.6ms apart instead of tightly bunched), and each one grew a "double-dip" shape that we think is just the sink current pulling the line down during the high-Z window — but the total attempt still wraps up in the same ~20-30ms and still reports no device.
Happy to send the actual scope screenshots (PicoScope captures) if that'd help — we've got clean shots of the individual 80µs pulses with cursor measurements, the 3-pulse cluster on a 1-2ms timebase, and the wider "spread out" version after the sink-config change.
What we've already ruled out, since none of it changed the behavior at all:
DeviceDly(tried POR default and the datasheet's "IO-Link compliance" values)CyclTmr(tried default0x00and a value specifically set to target 30ms per the Table 2 formula)CQCfgsource vs. sink (both directions, values matching working reference drivers)- A couple ms of settle time inserted after
ChanStat.Rstbefore configuring the rest - Doing our own software-level retries with generous 50ms+ gaps between full attempts
- Cable/reflection weirdness — not physically possible, our wiring is centimeters long, a 2ms echo would need something like 500,000 meters of cable
- Crystal not running — nope, confirmed fine
Questions we're hoping you can help with:
- Is that ~30ms retry delay hard-coded in silicon, or is it actually tied to some register we're missing (
CyclTmr,DeviceDly, something else)? We're seeing more like 1.5-2.6ms. - Any known erratum for this RevID (
0x0A, MAX14819 non-A) aroundEstComtiming? - Is there some register write not covered in the "Establish-Communication Sequencer" section that's actually needed to get the real 3-attempt/30ms-spaced behavior?
- Does
CQCfg's source/sink setting have any documented (or undocumented) effect onEstCom's internal timing? We saw the pulse spacing shift a bit when we changed it, which seems like it shouldn't happen per the datasheet. - Any way to peek at more detailed internal
EstComstate (which COM rate it's trying, which attempt number) to help us debug further? - Since the same device works fine on a different, independent master — is there anything about a specific device's physical-layer behavior that could trip up the MAX14819's autonomous
EstComsequencer specifically, versus a master that drives wake-up manually in firmware?
Thanks for any pointers — happy to share our full register config, more scope captures, or a logic analyzer trace if that'd speed things up.


