(I) figured since you were having a problem I'd see what the internet had to say.
I certainly appreciate the help! Its been very helpful that you were able to replicate the problem.
Something is still wrong because I don't understand this comment (what did you do to correct it?):
RSTIO is an instruction like WRITE or WRMR. This writes 0xFF to the mode register and that isn't valid.
You can think of sending
as calling WriteModeRegister(RSTIO); . Since RSTIO is a command, not a parameter, we want to call what would be RSTIO(); .
Abstraction aside, you fix it by removing the WRMR line, or:
digitalWrite(CS,LOW); //set to single SPI mode
Have you tried tying the HOLD pin to VCC?
This is how I have it configured. /HOLD to Vcc and unused pin 3 to GND.
everything works fine with even shorter wires
I'm having success now, even with longer jumpers; the fix seemed to come from sending 0xFF instead of 0x00 after READ commands. I really don't know why that should affect performance.. data sheet claims it's a don't-care.
I'm away from my board right now, but I'm going to write a conclusive test case (ie write and read 0-255 and compare for errors) before wrapping up the topic and summarizing changes. But I hope it's done!