У меня есть плата, на которой я работаю, с чипом Zynq 7020 на плате, наряду с памятью DDR (и другими компонентами, которые не имеют большого значения для этого вопроса). Для информации, я настроил контроллер памяти для включения ECC, поэтому у меня есть 125 МБ эффективной оперативной памяти на чипах DDR.
Мне нужно иметь возможность читать всю оперативную память через JTAG, но у меня возникают трудности с пониманием того, какие адреса нужно читать и какую команду чтения использовать.
Я смотрю на карту памяти (в техническом справочнике по Zynq серии 7000) и в настоящее время использую xmd
для интерфейса отладки после connect arm hw
.
Во-первых, есть несколько вещей с примечаниями. Насколько я понимаю, хотя это нигде не указано явно, это означает, что «0x0
отображается на OCM, если он не фильтруется SCU, а OCM отображается на низком уровне, но он переходит к DDR, если он фильтруется OCM».
Если ваш адрес фильтруется SCU, то означает ли это, что 0x0
- 0x0 + DDREffectiveSize
сопоставляется с DDR, но только адреса, начинающиеся с 0x8_0000
ОЗУ, доступны для устройств без CPU / ACP? Или ОЗУ фактически начинается с 0x8_0000
, и все, что ниже, ничего не отображает?
xmd
имеет несколько команд для чтения памяти: mrd
и mrd_phys
. В документации к последнему написано «Cortex A9 Memory Read через AHB AP» и, если вы используете -force
, «Read из OCM в 0x0 (если DDR не переопределяется в 0x0)». Тем не менее, неясно (для меня), отображается ли какой-либо из них SCU или нет, или они превращаются в прямые транзакции AXI. В идеале (для других вещей, которые я тоже хочу читать) я хотел бы, чтобы мои операции чтения превратились в транзакции AXI, но это может быть неоправданно.
Как я могу определить, проходит ли какая-либо из этих команд через SCU и как точно определить, где сопоставлены различные компоненты?