Вынужден сдаться. Что-то внутрях сломано (ядро/кэш/SDRAM). Суть проблемы: значение счётчика в некэшируемой области DDR SDRAM не соответствует исполняемому коду. Счётчик может быть как выше, так и ниже ожидаемого значения.
Отключение DATA CACHE приводит к нормальной работе. Сброс всего кэша данных в одном месте кода тоже приводит к нормальной работе.
Перепроверил в экселе по битикам и по реальности настройку MMU и факт отключения кэшей и буфера записи для некэшируемой области, всё ок.
Попробовал вместо small pages перейти на sections для настройки MMU (для сокращения второй выборки при трансляции MVA), никакого эффекта не дало.
Включение буфера записи никакого эффекта не дало.
Но (при работающем кэше данных и отсутствии сброса кэша) простая (ненужная) инструкция чтения этой ячейки памяти с игнорированием результата чтения, вставленная в определённое место, привело к нормальной работе.
Даже не знаю, как отлавливать ошибку. Кончились все рабочие гипотезы. Добился работоспособности путём тупого ненужного чтения ячейки памяти из некэшируемой области ещё в одном куске кода.
Сегодня мне принесли другой NUC (NUC907 вместо NUC972), попробую воспроизвести.