реклама на сайте
подробности

 
 
> Прошивание Spartan3 с помощью AVR
StanislavF
сообщение Jan 15 2010, 15:37
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 15-01-10
Пользователь №: 54 837



Здравствуйте.

На плате использую два Spartan3, которые прошиваются с помощью AVR Atmega2561, последовательно, один за другим. Использую WinAVR 2010****. В заголовочном файле в массиве размещаю сам код для ПЛИС. При компиляции кода компилятор ругается:
./sensor_part.h:4227: error: size of array is too large
В коде:
CODE
unsigned char xsf_buf0[] PROGMEM ={0xFF.......

Этот массив -- и есть прошивка для ПЛИС, файл bin.

Можно ли как-то по другому прошивать ПЛИС с помощью AVR? Возможно, без использования массивов.

Буду очень благодарен за советы и личный опыт.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 13)
Polaris
сообщение Jan 15 2010, 16:34
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(StanislavF @ Jan 15 2010, 17:37) *
./sensor_part.h:4227: error: size of array is too large

Так видимо не влезает во флэш выбранного контроллера
Цитата(StanislavF @ Jan 15 2010, 17:37) *
unsigned char xsf_buf0[] PROGMEM ={0xFF.......

По поводу WinAVR я не сильно знаю, а вот в IAR в случае, когда флэш-массив выходил за 32 кб вроде бы вместо __flash использовалась директива __farflash. Возможно, WinAVR тоже как-то аналогичен, но врать не буду.
Цитата(StanislavF @ Jan 15 2010, 17:37) *
Можно ли как-то по другому прошивать ПЛИС с помощью AVR? Возможно, без использования массивов.

Естественно, самый очевидный способ - поставить туда какую-то микросхему внешней флэш (AT45DBxxx), стоит копейки, корпус можно взять небольшой, а объемы вполне адекватные, записать ее предварительно на каком-то программаторе, читать мегой по SPI и писать. Заодно и мегу можно взять поменьше, вряд ли там расход ног будет значительным.
Если делать универсальнее, то написать приложение на компьютер, которое будет высылать прошивку на мегу через виртуальный COM-порт, поставить FT232RL и использовать внутренний UART. Понятно, нужно будет какую-то защиту протокола обеспечить. Но тогда компьютер понадобится, не выйдет универсального решения.
Так что стоит, наверное, обратить внимание на ARM. LPC1768 имеет на борту 512 кб, судя по тому, что раньше хватало 256 кб, запас есть. И перешивать его довольно легко через встроенный загрузчик по COM-порту. Тут и универсально будет, и автономно...
Go to the top of the page
 
+Quote Post
SysRq
сообщение Jan 15 2010, 16:43
Сообщение #3


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



http://www.nongnu.org/avr-libc/user-manual...#faq_binarydata

--

Я делаю так (ПЛИС не помню, МК - ATMega128):

Файл *.cmd с командами на конвертирование исходного бинарного файла (у меня - fpga_zeroconfig.rbf, 77655 байт) в объектный (fpga_zeroconfig.o):
Код
@echo Creating relocatable object file with data for FPGA:

@avr-objcopy -v --rename-section .data=.progmem.data,contents,alloc,load,readonly,data -I binary -O elf32-avr fpga_zeroconfig.rbf fpga_zeroconfig.o
@avr-objdump -t fpga_zeroconfig.o
@avr-size fpga_zeroconfig.o

@pause

Далее я его тупо указываю линкеру в Makefile проекта:
Код
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) fpga_zeroconfig.o

И использую где надо:
Код
extern PGM_P _binary_fpga_zeroconfig_rbf_start;
extern PGM_P _binary_fpga_zeroconfig_rbf_end;

//...

uint32_t sz = GET_FAR_ADDRESS(_binary_fpga_zeroconfig_rbf_end) - GET_FAR_ADDRESS(_binary_fpga_zeroconfig_rbf_start);

//...
for(uint32_t i = 0; i < sz; i++)
    {
        // = pgm_read_byte_far(GET_FAR_ADDRESS(_binary_fpga_zeroconfig_rbf_start) + i);        
    }

Макрос GET_FAR_ADDRESS взят на avrfreaks.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 15 2010, 20:48
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(StanislavF @ Jan 15 2010, 18:37) *
Можно ли как-то по другому прошивать ПЛИС с помощью AVR? Возможно, без использования массивов.

А чем вызвано желание конфигурить FPGA именно мегой? Может внешнюю еепром поставить? Заодно и мега будет поменьше и подешевле, ведь именно Atmega2561 почти наверняка выбиралась из расчета хранения спартановских прошивок во флеши. Я угадал?
Go to the top of the page
 
+Quote Post
StanislavF
сообщение Jan 20 2010, 09:33
Сообщение #5





Группа: Участник
Сообщений: 9
Регистрация: 15-01-10
Пользователь №: 54 837



Цитата(SysRq @ Jan 15 2010, 19:43) *

Спасибо. Я модифицировал код. Компиляция проходит успешно. Но avrdude ругается на адрес:
Код
avrdude -p atmega2561 -P lpt1     -c stk200    -U flash:w:main.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9802
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: ERROR: address 0x100010 out of range at line 4098 of main.hex
avrdude: write to file 'main.hex' failed

Чтобы скомпилировать я закомментировал ifdef перед PCMSK2 в файле iomxx0_1.h, но тем не менее. В чём может быть проблема. Я прикрепил исходные файлы, взгляните, если будет возможность.

Что касается аппаратуры, то плата уже есть, мне лишь с ней работать.
Прикрепленные файлы
Прикрепленный файл  project.zip ( 107.32 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
SysRq
сообщение Jan 20 2010, 15:06
Сообщение #6


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Ответ об avrdude автору темы дали тут: http://www.avrfreaks.net/index.php?name=PN...ic&p=659695

PS: в вашем проекте sensor_part.bin уже является объектным. Так и должно быть, или ошиблись в процессе?..
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Jan 20 2010, 19:39
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760



Цитата(SysRq @ Jan 15 2010, 19:43) *
Я делаю так (ПЛИС не помню, МК - ATMega128):
Файл *.cmd с командами на конвертирование исходного бинарного файла

А вариант написать простенькую консольную програмку, конвертирующую файл прошивки в заголовочный h-файл не рассматривали?
Go to the top of the page
 
+Quote Post
SysRq
сообщение Jan 20 2010, 20:43
Сообщение #8


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Student Pupkin @ Jan 20 2010, 22:39) *
А вариант написать простенькую консольную програмку, конвертирующую файл прошивки в заголовочный h-файл не рассматривали?
В avr-gcc ограничение в 64к на размер массива, так что не всегда получится (собстно, с этого эта тема и началась).
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 21 2010, 18:12
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Student Pupkin @ Jan 20 2010, 21:39) *
конвертирующую файл прошивки в заголовочный h-файл не рассматривали?

Вот чего не надо делать так это конвертировать бинарник в h-файл. Header файл не предназначен для того чтобы в нем хранить данные.
конвертировать надо в .c файл, и использовать по месту с помощью extern.

Цитата
В avr-gcc ограничение в 64к на размер массива,

ну так сделать два массива, простенькая консольная программа, думаю без труда сможет посчитать до 65535 и затем создать второй массив.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 21 2010, 18:22
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А еще лучше данные той же консольной программой упаковать, благо FPGA-битстримы достаточно хорошо "утаптываются".
Go to the top of the page
 
+Quote Post
StanislavF
сообщение Jan 22 2010, 13:19
Сообщение #11





Группа: Участник
Сообщений: 9
Регистрация: 15-01-10
Пользователь №: 54 837



Цитата(SysRq @ Jan 20 2010, 18:06) *
PS: в вашем проекте sensor_part.bin уже является объектным. Так и должно быть, или ошиблись в процессе?..

После Xilinx ISE я получаю bit и bin файлы. Использую второй, чтобы конвертировать в elf32-avr и компоновать потом с прошивкой для AVR. Проблема с аресом решиласт обновлением дудки (avrdude) до 5.10.

У меня прошивка процессора проходит, но ПЛИС никаких сигналов не подаёт и XSP_DONE не приходит. Их там ещё и две, но сейчас только первую программирую. Какие средства и способы вы можете подсказать, чтобы понять что идёт не так? Возможно, в Xilinx требуется поставить специальные флаги. Читаю спецификации, но нити не нахожу.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 22 2010, 13:40
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Попробуйте порядок следования битов поменять.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Jan 22 2010, 14:13
Сообщение #13


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



И еще:
Цитата
DriveDone, DONE
If set to Yes, this option allows the FPGA’s DONE pin to drive High when configuration completes. By default, the DONE is an open-drain output and can only drive Low.

В МК подтяжка не включена. А есть ли в железе, и каково состояние DriveDone, вам виднее rolleyes.gif
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 25 2010, 09:54
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Startup Clock в iMPACT'е правильно назначен?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 11:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01485 секунд с 7
ELECTRONIX ©2004-2016