Their documentation is pretty obscure, and your results agree, as I say, with the way that the SPI interface works. This is my SPI code, and it reads two bytes:
// for parity checks
const unsigned int masks [16] = {
0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80,
0x100, 0x200, 0x400, 0x800,
0x1000, 0x2000, 0x4000, 0x8000 };
unsigned int AS5048A::Transfer (const unsigned int command)
{
byte hi, lo;
SPI.setDataMode (SPI_MODE1);
digitalWrite (chipSelect_, LOW);
hi = SPI.transfer (highByte (command));
lo = SPI.transfer (lowByte (command));
digitalWrite (chipSelect_, HIGH);
unsigned int result = makeWord (hi, lo);
// calculate parity
byte parity = 0;
for (byte i = 0; i < 16; i++)
{
if (result & masks [i])
parity++;
}
// even parity, so low-order bit should be zero
if (parity & 1)
{
parityFlag_ = true;
errorFlag_ = false; // we actually don't know the error flag state
}
else
{
parityFlag_ = false;
errorFlag_ = (result & EF) != 0;
}
return result;
} // end of AS5048A::Transfer