Предлагаю изучить вопрос "что такое шина SPI". Вообще SPI, не вдаваясь в детали FRAM и XMega.
Тут-то и выяснится, что операций "чтение" и "запись" по отдельности нет. На каждый байт, записанный в шину мастером, слейв записывает свой байт, и мастер его оттуда читает.
Отсюда вывод - чтобы что-то прочитать с шины, мастер должен туда что-то записать. Обычно записывают ноль или 0xFF.
Теперь пишете функцию обмена одним байтом:
Код
unsigned char ProcessSPI (unsigned char data)
{
// записать data в шину
// подождать, пока отправится (мне лень изучать документацию XMega, извините)
// return данные из шины
}
и вызываете её:
Код
// установить write enable
ChipSelect (true);
ProcessSPI (0x06);
ChipSelect (false);
// проверить статус
ChipSelect (true);
ProcessSPI (0x05);
status = ProcessSPI (0x00);
ChipSelect (false);