Решил я сначала сделать по простому. Записать прогамматором две прошивки с Nios по разным адресам: factory в 0x00000000 и application в 0x000E0000. Причём это не две прошивки, а одна и таже только с программно изменённой частотой мигания светодиода. Применил следующий скрипт для получения сдвига application прошивки: sof2flash --epcs --input="factory_image.sof" --output="factory_image.flash" elf2flash --epcs --after="factory_image.flash" --input="rsu_1.elf" --output="rsu_1.flash" cat factory_image.flash rsu_1.flash > hw_sw_image.flash nios2-elf-objcopy -I srec -O srec --change-addresses=0x000E0000 hw_sw_image.flash hw_sw_image_a.flash --srec-len=0x20 --srec-forceS3 nios2-flash-programmer --epcs --base=0x21800 "hw_sw_image_a.flash"
А factory прошивку с уменьшенной частотой мигания светодиода запрогамировал чарез Flash Programmer.
Включаю - работает прошивка factory. Через отладчик сменяю прошивку на application следующими командами: IOWR( REMOTE_UPDATE_CYCLONEIII_0_BASE, 0x3, 0 ); IOWR( REMOTE_UPDATE_CYCLONEIII_0_BASE, 0x4, address >> 2); IOWR( REMOTE_UPDATE_CYCLONEIII_0_BASE, 0x20, 0x1 );
Видно что происходит перепрошивка и вновь работает прошивка factory (по частоте мигания светодиода).
Решил вместо прошивки application с Nios, сделать обычный аппаратный счётчик чтобы моргал светодиодик. Сделал, запрограммировал скриптом как в предыдущем случае (без программы ясное дело) по адресу 0x000E0000, переключил прошивку - работает. Светодиодик моргает так как должен.
Т.е. касательно предыдущего случая выходит что прошивка ПЛИС грузится, а программа для Nios нет. Знает кто-нибудь как сделать переключение между двумя процессорами? Есть тут связь с boot_copier?
|