|
Прошивание Spartan3 с помощью AVR |
|
|
|
Jan 15 2010, 15:37
|
Группа: Участник
Сообщений: 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? Возможно, без использования массивов. Буду очень благодарен за советы и личный опыт.
|
|
|
|
|
 |
Ответов
(1 - 13)
|
Jan 15 2010, 16:34
|
Местный
  
Группа: Свой
Сообщений: 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-порту. Тут и универсально будет, и автономно...
|
|
|
|
|
Jan 15 2010, 16:43
|

Чайник, 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.
|
|
|
|
|
Jan 15 2010, 20:48
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(StanislavF @ Jan 15 2010, 18:37)  Можно ли как-то по другому прошивать ПЛИС с помощью AVR? Возможно, без использования массивов. А чем вызвано желание конфигурить FPGA именно мегой? Может внешнюю еепром поставить? Заодно и мега будет поменьше и подешевле, ведь именно Atmega2561 почти наверняка выбиралась из расчета хранения спартановских прошивок во флеши. Я угадал?
|
|
|
|
|
Jan 20 2010, 09:33
|
Группа: Участник
Сообщений: 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, но тем не менее. В чём может быть проблема. Я прикрепил исходные файлы, взгляните, если будет возможность. Что касается аппаратуры, то плата уже есть, мне лишь с ней работать.
|
|
|
|
|
Jan 20 2010, 19:39
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(SysRq @ Jan 15 2010, 19:43)  Я делаю так (ПЛИС не помню, МК - ATMega128): Файл *.cmd с командами на конвертирование исходного бинарного файла А вариант написать простенькую консольную програмку, конвертирующую файл прошивки в заголовочный h-файл не рассматривали?
|
|
|
|
|
Jan 21 2010, 18:12
|

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

|
Цитата(Student Pupkin @ Jan 20 2010, 21:39)  конвертирующую файл прошивки в заголовочный h-файл не рассматривали? Вот чего не надо делать так это конвертировать бинарник в h-файл. Header файл не предназначен для того чтобы в нем хранить данные. конвертировать надо в .c файл, и использовать по месту с помощью extern. Цитата В avr-gcc ограничение в 64к на размер массива, ну так сделать два массива, простенькая консольная программа, думаю без труда сможет посчитать до 65535 и затем создать второй массив.
|
|
|
|
|
Jan 22 2010, 13:19
|
Группа: Участник
Сообщений: 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 требуется поставить специальные флаги. Читаю спецификации, но нити не нахожу.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|