Перейти к содержанию
    

Прошивка программы в DDR3

Есть отладка с kintex7 kc705. Написал простенькую программу на си мигания светодиода и вывода надписи через rs232. Если прошиваю эту программу в брам все работает, если в настройках линкер скрипта указываю ддр3 то после прошивки программа не работает. Версия ise 13_4. Помогите, что я не так делаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть отладка с kintex7 kc705. Написал простенькую программу на си мигания светодиода и вывода надписи через rs232. Если прошиваю эту программу в брам все работает, если в настройках линкер скрипта указываю ддр3 то после прошивки программа не работает. Версия ise 13_4. Помогите, что я не так делаю?

 

А как она туда попадет. Это надо загрузчик который вычитает программу из (загрузочной памяти, флаш и пр.) и загрузит ее в ДДР, а затем передаст управление туда.

С брам проще программа там гразиться вместе с прошивкой, т.е. она находится в прошивке.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А разве через XMD консоль программа не может быть загружена прямо в ддр?

временно - да. (проверено на edk 12.4)

Но автор задал вопрос без объяснений что ему надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, не уточнил, пробую разбираться с отладочной платой, пишу простые программы и гружу через xmd консоль прямо из SDK. Может какие-нибудь настройки забыл указать, кроме линкер скрипта. Аппаратная платформа взята готовая в EDK просто выбрал отладочную кс705.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще, после загрузки программы в DDR через XMD работать она должна. Стоит проверить, что:

- DDR доступна (пишется/читается в XMD, причем читается то, что туда записали);

- процессор (microblaze?) имеет доступ к DDR на исполнение (есть доступ через порт IC, диапазон разрешен для работы кэша программ);

- линкер компонует программу в нужные адреса.

 

Кстати, вместо простых программ мигания светодиодом можно всунуть в BRAM целый u-boot - дела пойдут значительно веселее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внешняя память, вообще, работает? Проверяли каким-нибудь мемтестом?

Сегодня проверил, в тесте память работает

 

В консоли выдается такое при загрузке и запуске из ддр3

 

XMD% connect mb mdm

 

JTAG chain configuration

--------------------------------------------------

Device ID Code IR Length Part Name

1 33651093 6 XC7K325T

 

MicroBlaze Processor Configuration :

-------------------------------------

Version............................8.20.b

Optimization.......................Performance

Interconnect.......................AXI-LE

MMU Type...........................No_MMU

No of PC Breakpoints...............1

No of Read Addr/Data Watchpoints...0

No of Write Addr/Data Watchpoints..0

Instruction Cache Support..........on

Instruction Cache Base Address.....0xc0000000

Instruction Cache High Address.....0xc7ffffff

Data Cache Support.................on

Data Cache Base Address............0xc0000000

Data Cache High Address............0xc7ffffff

Exceptions Support................off

FPU Support.......................off

Hard Divider Support...............off

Hard Multiplier Support............on - (Mul32)

Barrel Shifter Support.............on

MSR clr/set Instruction Support....on

Compare Instruction Support........on

Data Cache Write-back Support......off

Fault Tolerance Support............off

Stack Protection Support...........off

 

Connected to "mb" target. id = 0

Starting GDB server for "mb" target (id = 0) at TCP port no 1235

XMD% dow empty_cpp_0/debug/empty_cpp_0.elf

Downloading Program -- empty_cpp_0/debug/empty_cpp_0.elf

section, .vectors.reset: 0x00000000-0x00000007

section, .vectors.sw_exception: 0x00000008-0x0000000f

section, .vectors.interrupt: 0x00000010-0x00000017

section, .vectors.hw_exception: 0x00000020-0x00000027

section, .text: 0xc0000000-0xc0000ecb

section, .init: 0xc0000ecc-0xc0000f07

section, .fini: 0xc0000f08-0xc0000f23

section, .ctors: 0xc0000f24-0xc0000f2b

section, .dtors: 0xc0000f2c-0xc0000f33

section, .rodata: 0xc0000f34-0xc0001331

section, .sdata2: 0xc0001332-0xc0001337

section, .data: 0xc0001338-0xc0001473

section, .eh_frame: 0xc0001474-0xc0001477

section, .jcr: 0xc0001478-0xc000147b

section, .bss: 0xc0001480-0xc00014a3

section, .heap: 0xc00014a4-0xc00018a7

section, .stack: 0xc00018a8-0xc0001ca7

Setting PC with Program Start Address 0x00000000

System Reset .... DONE

 

XMD% run

 

RUNNING> 0

XMD% state

--------------------------------------------------------

System(1) - Hardware System on FPGA(Device 1) Targets:

--------------------------------------------------------

Blocked on Mem Instr Target(0) - MicroBlaze(1) Debug Target*

 

 

XMD%

XMD% rst

System reset successfully

 

0

XMD% run

ERROR: Debug Operation Not Supported on the Target

MicroBlaze Pipeline Stalled on a Blocking Instruction or Invalid Bus Access

Stalled PC: 0x00000008

Try Resetting the Processor to Continue..

 

 

Изменено пользователем electronik1979

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

electronik1979, исходя из того что Вы представили:

 

section, .vectors.reset: 0x00000000-0x00000007

section, .vectors.sw_exception: 0x00000008-0x0000000f

section, .vectors.interrupt: 0x00000010-0x00000017

section, .vectors.hw_exception: 0x00000020-0x00000027

и

section, .text: 0xc0000000-0xc0000ecb

 

Вам следует указать в lscript.ld адреса векторов сброса, прерывания

и обработчиков исключений, так что-бы они располагались не в BRAM (0x00000000),

а начиная с 0xС0000000 (там где адресуется ваша DDR3).

 

SECTIONS

{

.vectors.reset 0xС0000000 : {

*(.vectors.reset)

}

 

.vectors.sw_exception 0xС0000008 : {

*(.vectors.sw_exception)

}

 

.vectors.interrupt 0xС0000010 : {

*(.vectors.interrupt)

}

 

.vectors.hw_exception 0xС0000020 : {

*(.vectors.hw_exception)

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

electronik1979, исходя из того что Вы представили:

 

 

и

 

Вам следует указать в lscript.ld адреса векторов сброса, прерывания

и обработчиков исключений, так что-бы они располагались не в BRAM (0x00000000),

а начиная с 0xС0000000 (там где адресуется ваша DDR3).

 

А не подскажете, где можно поменять эти параметры, в линкер скрипте что-то не получается

 

electronik1979, исходя из того что Вы представили:

 

 

и

 

Вам следует указать в lscript.ld адреса векторов сброса, прерывания

и обработчиков исключений, так что-бы они располагались не в BRAM (0x00000000),

а начиная с 0xС0000000 (там где адресуется ваша DDR3).

 

А не подскажете, где можно поменять эти параметры, в линкер скрипте что-то не получается.

Вы уверены что эти адреса надо менять, у меняесть пример xapp472 так там программа храниться в ддр3 а адреса этих секций такие же

Изменено пользователем electronik1979

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

electronik1979, исходя из того что Вы представили:

 

 

и

 

Вам следует указать в lscript.ld адреса векторов сброса, прерывания

и обработчиков исключений, так что-бы они располагались не в BRAM (0x00000000),

а начиная с 0xС0000000 (там где адресуется ваша DDR3).

Этого совершенно не надо делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил в проект файлы platform.c и platform.h и программа стала запускаться, при выполнении по шагам в консоли почему-то указывается одна и та же команда add r0 , r0 , r0 . Что это может значить?

 

XMD% stp

C0000074: 00000070 add r0 , r0 , r0

 

XMD% stp

C0000078: 00000078 add r0 , r0 , r0

 

XMD% stp

C000007C: 00000078 add r0 , r0 , r0

 

XMD% stp 2

C0000084: 00000080 add r0 , r0 , r0

 

XMD% stp

C0000088: 00000088 add r0 , r0 , r0

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем за ответы, я толком не разобрался в чем была проблема, но взяв новую аппаратную платформу от примера kc705_bist программа стала запускаться из ДДР.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...