The usual trap for the unwary is the "write enable" command. This has to be sent before EVERY write instruction.
CS low - send 0x06 - CS high.
Then send the write command:
CS low - send 0x02, send the address, send the data - CS high.
Also, there is generally a limit on how much data you can send it one go.
And on SOME devices, pin 3 (Write protect) has a pull up, so you can leave it floating, and on OTHER devices it doesn't, so it won't write unless it is connected to V+.
Read isn't usually a problem, it will read 0xFF if it is new.