А если не или, а и? Через SPI гонять задания для "мастеров" и через
UART данные к/от "ведомых". Ну или сделать постоянный обмен с
периодом, определяемым необходимой латентностью трансляции данных.
Если даже никаких заданий или данных нет, то все равно гнать
"пустой" пакет с командой готовности. Тогда актуальные данные от
ведомых попадут в следующий же таймслот с минимальной задержкой.