Механизм Discovery опрашивает триггеры через регистр tselect i (где i - номер регистра) и определяет, какие есть триггеры и в каком количестве.
Тип триггера берётся из регистра tinfo.
Процедура опроса начинается с tselect 0 и завершается, если для данного tselect i возникает исключение при попытке чтения регистра tinfo.
В tinfo хранится тип триггера в унитарном коде. Этот же тип хранится в регистре tdata1 в бинарном виде.
На выходе из этой процедуры OpenOCD получает информацию о том, сколько триггеров есть в ядре и каких они типов.
При ошибке в этой процедуре пропадает возможность пользоваться аппаратными точками останова.
Процедура опроса триггеров запускается всегда, так как таким образом OpenOCD понимает, сколько и каких аппаратных точек останова поддерживает ядро.
В микроконтроллерах MDR1206FI и MDR1206AFI допущена ошибка в tinfo-регистре модуля отладки, из-за чего механизм Discovery работает не корректно.
В качестве обхода ошибки предлагается:
I. Использовать OpenOCD из основной ветки
https://github.com/openocd-org/openocd до версии 0.12.0 включительно.
II. 1. Использовать OpenOCD для RISCV
https://github.com/riscv/riscv-openocd до версии 2018.12.0
2. Использовать
patch для OpenOCD для RISCV версии 0.12.0+ dev-03629-g87331a82a. Patch заменяет в исходниках OpenOCD значение старших четырёх битов регистра tinfo на значение в унитарном коде старших четырёх бит регистра tdata1.