Сегодня я добился нормального обмена данными между платой клавиатуры и центральным модулем. Всё работает на реальных платах, не на макетке.
Класс драйвера SPI-клавиатуры я писал «вслепую», т.е. без поэтапной отладки на реальном железе. Поэтому неудивительно, что взлетело не сразу, т.к. были ошибки в коде (забыл проинициализовать соответствующие пины CS, а также в одном месте неправильно определял размер сообщения).
Но сейчас — работает. Как Мастер может по своей инициативе отправить команду в модуль клавиатуры, так и клавиатура может запросить у Мастера SPI-обмен и отправить мастеру своё сообщение.
Но вся эта красота по неизвестной мне (пока) причине не даёт инициализироваться SD карте (на которой записаны MIDI-файлы для автоаккомпанемента).
Буду выяснять, что там не так с точки зрения SD-карты.
P.S. Заменил SD-карту на другую — оказалось что всё работает. Видимо та, первая — при смерти; неустойчиво работает (в нескольких запусках при одинаковых условиях — разный результат).

Круто!
А какую информацию Клавиатура будет запрашивать у Мастера?
Никакую.
Задача клавиатуры — доложить мастеру о нажатой кнопке. Или отпущенной.
С моей точки зрения более интересен другой вопрос: а что там вообще мастер собрался командовать клавиатуре? Она что, без команды не сможет докладывать о клавиатурных событиях?
🙂