Надо смотреть, как написана эта функция. Бесконечные (без таймаутов) ожидания портятся вочдогом. Возможно, могут испортиться прерываниями. В фирменном HALe или в кубе могут обрабатывать таймер, обычному пользователю ненужный...
Ну, а тайминги - это как раз то, на что влияет оптимизация.
И непонятно, зачем всего лишь для чтения статуса интерфейс разрешается, а потом сразу запрещается. Почему сразу после разрешения он может быть чем-то занят? Тут надо читать описание интерфейса. В моем понимании SPI надо держать более-менее постоянно включенным.