SPI between 2 Arduinos one as master and one as slave

For my new WavePro shield that I am working on I came up with a simple, but flexible, multi-byte bi-directional SPI protocol:

Basically, the SS line is used to "frame" the whole transaction - when the SS line goes low, the slave starts watching the SPI bus. When it goes high, the transaction is over.

The first byte of the transaction is the "command" byte, telling the slave what you want to do.
Next comes a payload length byte - this is the number of extra "parameter" bytes that accompany the command. The slave prepares to read this number of bytes.
The payload bytes are then sent, followed by a simple checksum byte.

The data transfer at this point gets reversed.

The master starts sending regular NULL bytes to the slave, and recording the results. It throws away NULL results until it gets the first non-null result. This is a "processing" period to allow the slave to process whatever needs processing and return the results. (I have at per-command configurable timeout on this bit.)

The first byte to be returned by the slave is a simple "status" byte - OK or ERROR.
Then, just like the command packet, a payload length follows, followed by that number of payload bytes and a checksum.

Once that has all finished, the transaction is over, and the SS line is raised.

Simple, flexible, and easy enough to implement.