Карта памяти Zynq 7020 и доступ JTAG - PullRequest
0 голосов
/ 11 июля 2019

У меня есть плата, на которой я работаю, с чипом Zynq 7020 на плате, наряду с памятью DDR (и другими компонентами, которые не имеют большого значения для этого вопроса). Для информации, я настроил контроллер памяти для включения ECC, поэтому у меня есть 125 МБ эффективной оперативной памяти на чипах DDR.

Мне нужно иметь возможность читать всю оперативную память через JTAG, но у меня возникают трудности с пониманием того, какие адреса нужно читать и какую команду чтения использовать.

Я смотрю на карту памяти (в техническом справочнике по Zynq серии 7000) и в настоящее время использую xmd для интерфейса отладки после connect arm hw.

System Addresses Memory Map from the Technical Manual

Во-первых, есть несколько вещей с примечаниями. Насколько я понимаю, хотя это нигде не указано явно, это означает, что «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 и как точно определить, где сопоставлены различные компоненты?

...