Цитата(charkin @ Oct 25 2017, 13:26)

Подскажите, каким образом можно гарантированно определить, что обмен по SPI (прием/передача, с использованием DMA) завершен?
Зависит от используемого МК. В разных МК периферия SPI и DMA устроена по-разному.
Но в общем случае можно считать что транзакция закончилась по завершению
приёма блока SPI-DMA.
Цитата(charkin @ Oct 25 2017, 13:26)

У меня обращение к внешней флэш-памяти по SPI может происходить из главного цикла, а также в обработчике прерывания EXTI. Если прерывание возникло в момент, когда в главном цикле что-то писалось/читалось во флэш, то данные конечно же портятся.. Пробовал смотреть биты SPI-модуля - TXE, RXNE И BUSY
Здесь никакие биты не помогут. Вам надо править
консерваторию алгоритм.
Такого просто не должно быть - чтобы из разных мест (да ещё из фона и ISR) шло асинхронное обращение к периферии.
Если подходить грамотно: пишется служба доступа к флешь, и только эта служба может работать с этим SPI-FLASH.
И эта служба должна обслуживать клиентские запросы операций с FLASH от разных клиентов.