Update: Sadly this has made no difference to me so it wasn’t the source of my problem.
I moved the 0R resistor from position R1 to R2, but I have the same issue as I did before - the encoder works fine on boot, I can query the position, turn the motor by hand and the encoder reads as it should, and spi_error_rate is zero. But as soon as I enable the motor (even in torque mode with zero current setpoint) - it immediately drops to ERROR_ABS_SPI_COM_FAIL and spi_error_rate is 0.9997616410255432 (which is as close to 1 as it goes). This error will not go away with odrv.reboot() - I have to power cycle the encoder itself. It seems as if the encoder has a latched fault, and it is waiting for the drive to send the clear faults command.
Looking on the scope, there is a ringing oscillation seen on MOSI, at about 26MHz, about 2V pk-pk with a 3dB time of of about 500ns, when the motor is turned on. So It’s pretty clear that motor switching noise is causing spurious commands to be sent to the encoder, which drop it into the error state.
Zooming out on the scope, I can see there is one of these transients every 20.8us i.e. 48kHz, which sounds suspiciously like once every edge of the 24kHz switching cycle of the motor.
So my problem is just motor noise. But what perplexes me is that there has been no changes to this hardware since it was working perfectly. My motor wires have always been well twisted, and my encoder wiring has always been CAT5, with each of MOSI and MISO twisted with GND.
Also, there are no errors communicating with the DRV8301 chip, which shares the same MOSI/MISO lines.