So I just tried a few thing and I managed to consistently pick up the last bit of the second byte but I'm still missing the last bit of the third byte.
Here's a screenshot of my attempt at passing 32bits with SPI.transfer32():
The NXP MC3396 doesn't seem to like the 32bit transfer and doesn't turn any of the outputs on.
Here's a screenshot of first transferring 8bits with SPI.transfer(0b00000000) and then transferring the 16bits associated with the outputs with SPI.transfer16(0b1111111111111111):
That works and I can get the last bit of the second byte but I'm still missing the last bit of the third byte.
Here's another screenshot with the same technique at 125kHz:
Looking back at the ATmega168 screenshot above, the MCU keeps MOSI high even after the clock stops until the chip select pin is pull back high. Is there anyway to do something similar with the ESP32?
I didn't seem to notice a difference between change the SPI mode from 0, 1, 2, or 3. Is that potentially the issue? The NXP MC33996 responds the same with all SPI modes and all outputs but output 0 work fine.
The decoding from my scope matches exactly with my code so everything seems fine.