I think that should be spidev0.0. In general spidevX.Y means bus=X, chip_select=Y.
One question is - when a client application fails/terminates, the service also terminates.
Is this by design?
If A depends on B and A fails, B should not terminate. If B fails and terminates, then A will also terminate because it is bound to B and B disappeared.
You’ve already done what I had to do as far as scripting configuration at startup.
One thing to look at is that just because the modprobe call returns with no error, that doesn’t mean that the module has finished establishing the device.
I would open up a couple of log windows into the WP, run logread -f in one and then manually do the setup steps in the other. Watch the kernel log messages in logread to see how long it takes from sending the configuration command until the kernel indicates that the device is ready. Worst case is that you may need to sleep() for a second or two between starting the configuration and then trying to use the device.