На самом деле это сложный вопрос. Текущий концепт подразумевает
разделение логики работы с spi (и не только spi) и логики
микросхемы. Описать можно примерно так: 1) Есть класс/структура, описывающая логику работы с микросхемой. Содержит в себе буферы для формирования байтовой посылки и приёма ответа, настройки spi (?).
Логика может быть простой,так и сложной. Например spi-флешка с кешированием реализуется не тривиально
2) Есть драйвер порта spi, к которому нужно подключить требуемую "микросхему". Драйвер порта не содержит буферов, пожет перенастраивать spi (?) в контроллере под требуемую микросхему. Процесс "подключения" представляет собой установку указателей на буферы и выставление соответствующего сигнала CS.
Существуют устройства, требующие дергать ногой CS особым образом, этот момент ещё не продуман. Над зоопарком I2C-микросхем тоже нужно подумать.
3) Для реализации асинхорщины может потребоваться дополнительный класс Interconnect.