Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SoC Cyclon V. Конвертация axf в img
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
nmurzin
Работаю с Quartus 17.0 + SoC EDS.
Тренируюсь на KIT для Cyclon V.
На SD карточке зашивка ПЛИС и baremetal программка.
При включении Preloader грузит зашивку ПЛИС, я вижу что она работает.
А вот baremetal программа не работает(светодиоды не мигают).

Чувствую что ошибка где-то при переходе от файла axf к файлу img.
Я получил файл img следующим образом.

Преобразовал файл axf в bin командой
arm-altera-eabi-objcopy\
-O binary altera_gcc_hps_led.axf\
altera_gcc_hps_led.bin

Преобразовал файл bin в img командой
mkimage\
-A arm\
-O u-boot\
-T standalone\
-C none\
-a 0x100040\
-e 0x100040\
-n "baremetal image"\
-d altera_gcc_hps_led.bin\
altera_gcc_hps_led.img

Я не понимаю какой смысл несут параметры
-a адрес загрузки и -е точка входа,
чувствую что ошибка где-то здесь, а в чем не могу понять.


В свойствах проекта DS-5 линкеру указывается файл cycloneV-dk-ram.ld
На просторах интернета видел вот такой совет.
Будто бы файл для линкера cycloneV-dk-ram.ld надо поправить руками,
а конкретно на строке 24 должно быть так
MEMORY
{
boot_rom (rx) : ORIGIN = 0xfffd0000, LENGTH = 64K
oc_ram (rwx) : ORIGIN = 0xffff0000, LENGTH = 64K
/* Need to have 64bytes available before start of program, to store the mkimage header */
ram (rwx) : ORIGIN = 0x100000 + 0x40, LENGTH = 1023M - 0x40
}

Я это пока не пробовал и не понимаю зачем это.

Кто нибудь пролейте свет по этому вопросу?
Зачем руками править файл cycloneV-dk-ram.ld
И какой смысл несут параметры -a адрес загрузки и -е точка входа команды mkimage.
И как это вообще все друг с другом связано?
sonycman
Цитата(nmurzin @ Jun 8 2017, 23:00) *
Преобразовал файл bin в img командой
mkimage\
-A arm\
-O u-boot\
-T standalone\
-C none\
-a 0x100040\
-e 0x100040\
-n "baremetal image"\
-d altera_gcc_hps_led.bin\
altera_gcc_hps_led.img

Я не понимаю какой смысл несут параметры
-a адрес загрузки и -е точка входа,
чувствую что ошибка где-то здесь, а в чем не могу понять.

Приветствую.
Я использую немного другой синтаксис для mkimage :
Код
mkimage -A arm -T standalone -C none -a 0x100000 -e 0 -n "baremetal image" -d app_binary.bin app.img

Попробуйте.

Цитата
В свойствах проекта DS-5 линкеру указывается файл cycloneV-dk-ram.ld
На просторах интернета видел вот такой совет.
Будто бы файл для линкера cycloneV-dk-ram.ld надо поправить руками,
а конкретно на строке 24 должно быть так
MEMORY
{
boot_rom (rx) : ORIGIN = 0xfffd0000, LENGTH = 64K
oc_ram (rwx) : ORIGIN = 0xffff0000, LENGTH = 64K
/* Need to have 64bytes available before start of program, to store the mkimage header */
ram (rwx) : ORIGIN = 0x100000 + 0x40, LENGTH = 1023M - 0x40
}


Использую компилятор ARM, файл линкера такой:
Код
SDRAM 0x00100000 0x40000000
{
    VECTORS +0
    {
        * (VECTORS, +FIRST)
    }

    APP_CODE +0
    {
        * (+RO, +RW, +ZI)
    }

  ; Application heap and stack
    ARM_LIB_STACKHEAP  +0 ALIGN 16 EMPTY  0x4000; Application heap and stack
    {
    }
}

OCRAM 0xFFFF0000 0xFFFFF000
{
    TLB +0 ALIGN 16384 UNINIT 0x4000
    {
        *(tlb_table)
    }
    
    
}

Область OCRAM используется для расположения таблицы MMU, всё остальное - в DDR SDRAM.
Смещение в 64 байта не делаю, нафиг не нужно оказалось.

Вообще, неплохо для начала использовать дебаггер, в нём видно будет весь процесс.
А в слепую тяжеловато ковыряться.

Прелоадер какую информацию по UART выдаёт?
Лог загрузки (в случае MPL загрузчика) обычно такой:
Код
INIT: MPL build: May  7 2017 20:11:53
INIT: Initializing board.
INIT: MPU clock = 800 MHz
INIT: DDR clock = 400 MHz
INIT: Initializing successful.
MPL: SDRAM Size is 1048576KB.
MPL: Booting from FAT.
FAT: Mounting FAT.
FAT: Read image [app.img] header.
FAT: Read remaining image data.
FAT: Image loaded to memory.
FAT: Read FPGA [fpga.img] header.
FAT: Read remaining FPGA data.
FAT: FPGA loaded to memory.
MPL: FPGA configured.
MPL: Launching next stage.
nmurzin
Как, Preloder может выдавать информацию о своем ходе по UART?
Что для этого нужно сделать?
Нужно какие-то галочки поставить в bsp-editor?
Или нужно в DS-5 как-то настроиться?
sonycman
Цитата(nmurzin @ Jun 9 2017, 11:52) *
Как, Preloder может выдавать информацию о своем ходе по UART?
Что для этого нужно сделать?
Нужно какие-то галочки поставить в bsp-editor?
Или нужно в DS-5 как-то настроиться?

Да, просто поставить галочку в bsp-editor напротив опции SERIAL_SUPPORT.
Потом подключаетесь к порту UART0 со стандартными настройками 9600 8n1 и все.
sonycman
PS: по последнему посту поправочка - скорость UART должна быть 115200 бод, а не 9600.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.