вот интересно, в примере в мануале при чтении толкаются 0xFF - это потому что по факту пофигу или глупость какая в кремнии? а ещё заинтересовала банальность - memcpy в spi_write_then_read. я бы её для пробы заменил на копирование в цикле, а то бывают мудрые реализации для перекрытых адресов и т.п.