Thank you @ChrisGammell and @Andy_P for the information. I did some more digging, as this problem is quite perplexing.
According to the W5500 Datasheet, when pin 32 (SCSn) is pulled low, pin 34 (MISO) starts spewing SPI data.
Simple. right? In theory, I should be able to pull that pin low using any Arduino pin set as an output and be off to the races. So, I did this (soldered W5500 SCSn to a trace, verified that my jumper was functional by using it with pin 10), tried using it with another Arduino pin set to an output and pulled low, but it still didn't work.
But why? In my original post, I had mentioned that the CS pin on the Arduino (10) looked funny on the scope. I did some further investigation, and it looks like this:
That sure doesn't look like noise.
If I put my scope on another Arduino pin set as a low output, I get a nice flat line at 0V. If I do the same but set the output high, I get a nice flat line at 5V.
To add to the mystery, this is what the SPI decode looks like using Arduino pin 10 for the SCSn (W5500 works):
And this is what the SPI decode looks like when using any other Arduino pin set as a low output (W5500 does not work):
So, to sum:
- The W5500 only works when using Arduino pin 10 as the SCSn (CS) pin.
- Any other Arduino pin pulled low causes MISO to not function properly (?)
- It looks like some library somewhere is strobing pin 10 at 58kHz. But why?
I am going to take a look at the W5500 source to see if I can find anything interesting, but until then, as @Andy_P said, there is no such thing as a SPI standard, right? Any ideas what may be going on here?