Looking at the datasheet page 46, to read a register /CS goes low, then an 8 bit address is sent with the MSB set to 0 then a 16 bit read takes place and /CS goes high.
Your code:
uint16_t readRegister(uint8_t regAddr) {
uint16_t command = (regAddr << 8);
digitalWrite(CS_PIN, LOW);
SPI.transfer16(command);
digitalWrite(CS_PIN, HIGH);
digitalWrite(CS_PIN, LOW);
uint16_t data = SPI.transfer16(0x0000); // Dummy write to read
digitalWrite(CS_PIN, HIGH);
return data;
}
seems to be a 16 bit write for the address /CS low then /CS high, then a 16 bit read /CS low then /CS high, not the same.