Уточню на всякий случай для ценителей. CH32V317. Отладка, SPI. По влиянию отладки на исполнение кода:
- Факт подключения отладки действительно влияет на тайминги запуска МК, на моменты запуска периферии.
- Влияние на мой код было радикальным из-за бага в коде - бывало, транзакция SPI завершалась чуть раньше, чем изменялось состояние конечного автомата. Перенёс изменение состояния вперёд запуска транзакции SPI+DMA, всё стало чётко.
- Увы, модули SPI не подтвердили надёжную работу на максимальной скорости 72МГц с SPI FLASH WINBOND W25Q. На каждые 268Гбит переданных из флеши данных, приходилось по 2-3 сбоя тактового сигнала, когда в режиме мастера, собственный приём MISO не досчитывался своих же импульсов тактового сигнала на примерно 1см длины дорожки (то есть, лишней ёмкости на "клоке" не было). Снизил скорость до 48МГц (режим Highspeed позволяет иметь делители 3,5, 7 и 9). Заработало чётко.
Бага прибил, а снижение скорости не сильно повлияло на время выполнения задачи - обработка данных из памяти занимает заметно большее время, чем обмен SPI. Так что всё ОК. Но моя радость в сообщении по ссылке не подтвердилась.
Если для внешней SPI-памяти, запас по удержанию даннх до переключения такта выполнялся и с передачей в память проблем не было, то с приёмом возникли проблемы - SPI по приёму (по количеству полученных тактовых импульсов, на данные MISO модулю плевать) недосчитывался принятых бит на больших объёмах. Как известно, модуль SPI, даже в режиме мастера, тактирует приёмник MISO не от своего внутреннего логического сигнала CSK, а от сигнала, полученного с аппаратного выхода, с вывода SCK. Ну и передатчик заканчивал передачу блока данных (порядка пары сотен байт), а приёмник - не заканчивал приём того же количества - так это проявлялось. Разумеется, не все данные были приняты, целостность нарушалась.
Снижение частоты до 48МГц полностью решило проблему. Гигабиты данных прошли стабильно и не раз без просчётов.