dim99 0 9 октября, 2009 Опубликовано 9 октября, 2009 · Жалоба А что с reset? разве нельзя его завести на питание, чтобы он не "мешал" и не влиял ни на что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 10 октября, 2009 Опубликовано 10 октября, 2009 · Жалоба собрал ниос с флешем на стартер-ките. все работает. код программы #include "sys/alt_flash.h" #include "system.h" int main() { alt_flash_fd *fd; fd=alt_flash_open_dev(CFI_FLASH_NAME); /* Event loop never exits. */ while (1); return 0; } fd=0, когда стоит галочка "Reduced device drivers". об этом в мануале на HAL говорится. если галочку снять, то размер бинарника вырастет с ~800 байт до ~8кбайт и alt_flash_open_dev будет заполнять структуру fd. если переделывать проект под другую плату, надо изменить размер флеш (у меня 32 Мб) и перекинуть пины. проект в аттаче. да, чуть не забыл. flash_reset действительно не нужен, я его вообще не подключал. NIOS_FLASH.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 10 октября, 2009 Опубликовано 10 октября, 2009 · Жалоба Спасибо за проект и замечания. До платы доберусь только в понедельник, смотрю вы на 7.2 SP3 работаете, у меня же стоит 8.0 SP1 может от версии тоже много чего зависит. Думаю, если не пойдет перекомпилю на 8.1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 12 октября, 2009 Опубликовано 12 октября, 2009 · Жалоба Сегодня переделал проект в nios ide как в примере прикрепленном: результаты из-под nios ide command shell: CFI Table: [NiosII EDS]$ nios2-flash-programmer --base=0x04000000 --cable="Usb-blaster [uS B-0]" --debug Using cable "USB-Blaster [uSB-0]", device 1, instance 0x00 Resetting and pausing target processor: OK Found CFI table in 16 bit mode Raw CFI query table read from device: 0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 20: 51 00 52 00 59 00 02 00 00 00 40 00 00 00 00 00 Q.R.Y.....@..... 30: 00 00 00 00 00 00 27 00 36 00 00 00 00 00 07 00 ......'.6....... 40: 07 00 0A 00 00 00 03 00 05 00 04 00 00 00 1A 00 ................ CFI query table read from device: 10: 51 52 59 02 00 40 00 00 00 00 00 27 36 00 00 07 QRY..@.....'6... 20: 07 0A 00 03 05 04 00 1A 02 00 05 00 01 FF 01 00 ................ 30: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ CFI extended table read from device: 0: 50 52 49 31 33 10 02 01 00 08 00 00 02 B5 C5 05 PRI13........... 10: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ Read autoselect code 0001-227E (in 16 bit mode) No CFI override data for [FLASH-0001-227E] Device size is 64MByte Erase regions are: offset 0: 512 x 128K Device supports AMD style programming algorithm Multi-byte programming with 32 byte buffer Sector erase timeout is 16s Word program timeout is 1ms Buffer program timeout is 4ms Leaving target processor paused Интересно, что означает No CFI override data for? Конвертим в Flash, чтобы записать: [NiosII EDS]$ bin2flash --location=0x02100000 --input=ex.bin --output=data.flash входной файл ex.bin=555555 выходной файл: data.flash=S00D0000646174612E666C6173681C S30B02100000353535353535A4 записываем во Flash: [NiosII EDS]$ nios2-flash-programmer --base=0x04000000 --cable="Usb-blaster [uS B-0]" --program data.flash Using cable "USB-Blaster [uSB-0]", device 1, instance 0x00 Resetting and pausing target processor: OK Checksums took 0.0s Erase not required Programmed 1KB in 0.0s Device contents checksummed OK Leaving target processor paused считываем: [NiosII EDS]$ nios2-flash-programmer --base=0x04000000 --cable="Usb-blaster [uS B-0]" --read=current.srec --read-bytes=0x02100000,0x5 Using cable "USB-Blaster [uSB-0]", device 1, instance 0x00 Resetting and pausing target processor: OK Writing FLASH contents to current.srec Leaving target processor paused current.srec=S30A021000003535353535DA S5030001FB Вроде бы что-то совпадает: исходные данные в flash формате: S30B02100000353535353535A4 считанные из Flash формат srec: S30A021000003535353535DA затем пытаюсь проверить: [NiosII EDS]$ nios2-flash-programmer --base=0x04000000 --cable="Usb-blaster [uS B-0]" --verify data.flash Using cable "USB-Blaster [uSB-0]", device 1, instance 0x00 Resetting and pausing target processor: OK Verifying 02100000 ( 0%)assertion "(size & 3) == 0" failed: file "nios2flash.cpp ", line 266 1 [sig] nios2-flash-programmer 4048 c:\altera\80\nios2eds\bin\nios2-flash- programmer.exe: *** fatal error - called with threadlist_ix -1 Hangup В итоге верификация не удалась. В nios ide пытаюсь что-нибудь ссделать: после выполнения fd=alt_flash_open_dev(CFI_FLASH_NAME); возвращается ненулевой указатель, раньше был строго 0 но после завершения вызова выпадает меню: Source not found дальше ничего не хочет идти. Ф-ция int alt_set_flash_width_func( alt_flash_cfi_dev* flash) пошаговая отладка показала что flash не определяется никак по параметрам ширины данных и адреса и в итоге возращает ret_code -13. вот такие дела =( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 12 октября, 2009 Опубликовано 12 октября, 2009 · Жалоба Покапался в datasheet к своей Flash и выяснил интересные вещи: Addresses are AMax:A0 in word mode; AMax:A-1 in byte mode то есть для 16-битной адресации нужен младший бит. Может тогда надо заводить на распиновку не [25..1] как у меня, а [24..0]? И еще для включения механизма 16-битной адресации BYTE#=1, у меня же он вообще не распинован а в мануале к dev kit ссылка на распиновку MAX II. MAX II Device Pin-Out L15 1.8 V Output FLASH_BYTEn просто если его не трогать непонятно, какой тип адресации выставлен 16-бит или 8. Могу ли я его явно распиновать на 1 в квартусе, чтобы точно знать, что у меня адресация 16-битная или ножки к MAX II лучше не трогать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 12 октября, 2009 Опубликовано 12 октября, 2009 · Жалоба Сегодня переделал проект в nios ide как в примере прикрепленном: результаты из-под nios ide command shell: ... Интересно, что означает No CFI override data for? это значит, что все нормально, используются дефолтные настройки. Конвертим в Flash, чтобы записать: [NiosII EDS]$ bin2flash --location=0x02100000 --input=ex.bin --output=data.flash входной файл ex.bin=555555 выходной файл: data.flash=S00D0000646174612E666C6173681C S30B02100000353535353535A4 записываем во Flash: [NiosII EDS]$ nios2-flash-programmer --base=0x04000000 --cable="Usb-blaster [uS B-0]" --program data.flash Using cable "USB-Blaster [uSB-0]", device 1, instance 0x00 Resetting and pausing target processor: OK Checksums took 0.0s Erase not required Programmed 1KB in 0.0s Device contents checksummed OK Leaving target processor paused считываем: [NiosII EDS]$ nios2-flash-programmer --base=0x04000000 --cable="Usb-blaster [uS B-0]" --read=current.srec --read-bytes=0x02100000,0x5 Using cable "USB-Blaster [uSB-0]", device 1, instance 0x00 Resetting and pausing target processor: OK Writing FLASH contents to current.srec Leaving target processor paused current.srec=S30A021000003535353535DA S5030001FB Вроде бы что-то совпадает: исходные данные в flash формате: S30B02100000353535353535A4 считанные из Flash формат srec: S30A021000003535353535DA совпадает все. просто вы записали 6 байт, а считали 5 В nios ide пытаюсь что-нибудь ссделать: после выполнения fd=alt_flash_open_dev(CFI_FLASH_NAME); возвращается ненулевой указатель, раньше был строго 0 но после завершения вызова выпадает меню: Source not found дальше ничего не хочет идти. видимо из-за того, что в настройках линкера для System Library выбрана конфигурация Release и оптимизатор все порезал. поставьте Debug (если памяти хватает) и сможете покопаться поглубже. Ф-ция int alt_set_flash_width_func( alt_flash_cfi_dev* flash) пошаговая отладка показала что flash не определяется никак по параметрам ширины данных и адреса и в итоге возращает ret_code -13. вот такие дела =( че-то я не понял, а накой икс вам эта функция? alt_flash_open_dev - отработала => вызываем alt_flash_read или alt_flash_write. в конце не забываем alt_flash_close_dev вызвать. а использование alt_set_flash_width_func - это грязный хак. к тому же я подозреваю, что буквы set в названии означают, что она пишет что-то в (alt_flash_cfi_dev*) а не читает. Покапался в datasheet к своей Flash и выяснил интересные вещи: Addresses are AMax:A0 in word mode; AMax:A-1 in byte mode то есть для 16-битной адресации нужен младший бит. Может тогда надо заводить на распиновку не [25..1] как у меня, а [24..0]? И еще для включения механизма 16-битной адресации BYTE#=1, у меня же он вообще не распинован а в мануале к dev kit ссылка на распиновку MAX II. MAX II Device Pin-Out L15 1.8 V Output FLASH_BYTEn просто если его не трогать непонятно, какой тип адресации выставлен 16-бит или 8. Могу ли я его явно распиновать на 1 в квартусе, чтобы точно знать, что у меня адресация 16-битная или ножки к MAX II лучше не трогать? все у вас нормально и flash_programmer это подтверждает. посмотрите внимательно логи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 12 октября, 2009 Опубликовано 12 октября, 2009 · Жалоба видимо из-за того, что в настройках линкера для System Library выбрана конфигурация Release и оптимизатор все порезал. поставьте Debug (если памяти хватает) и сможете покопаться поглубже. че-то я не понял, а накой икс вам эта функция? alt_flash_open_dev - отработала => вызываем alt_flash_read или alt_flash_write. в конце не забываем alt_flash_close_dev вызвать. Еще раз проверю, но вроде бы выставлен debug. Спасибо за ответы, буду завтра еще мучить flash, если не выйдет тогда подключу через avalon slave как новый компонент без всяких cfi. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба Заработало ) Наконец-то после "недолгих" мучений CFI Flash работает. Собрав маленький проект Hello world small смог протестить flash. Хотя без приключений не обошлось. Взял пример из nios software handbook, а именно вот эта строка корень зла: ret_code = alt_write_flash(fd, 0, source, BUF_SIZE); нулевое смещение flash (по крайней мере для cyclone III думаю и для других плат) содержит factory design. то есть когда включается плата загружается конфигурация с этого адреса. Перезаписав эту область памяти из примера, включаю плату занова и загорается error led - нет factory design. Пришлось заливать во flash этот design, чтобы плата корректно запускалась. В общем, больше не буду так доверять примерам из handbook'a. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба В общем, больше не буду так доверять примерам из handbook'a. это не баг, это фича ;) одна из фишек cyclone3 - remote upgrade, можно на флешке хранить несколько sof`ов и переключаться между ними. так что возможность переписать прошивку отнюдь не бесполезна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба это не баг, это фича ;) одна из фишек cyclone3 - remote upgrade, можно на флешке хранить несколько sof`ов и переключаться между ними. так что возможность переписать прошивку отнюдь не бесполезна. Да, читал что можно до 7 fpga design хранить для cIII + software + data binary. теперь хочу хранить soft на flash, только не пойму адрес хранения в flash задается в настройках nios processor и потом генерится в nios ide? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 14 октября, 2009 Опубликовано 14 октября, 2009 · Жалоба Да, читал что можно до 7 fpga design хранить для cIII + software + data binary. теперь хочу хранить soft на flash, только не пойму адрес хранения в flash задается в настройках nios processor и потом генерится в nios ide? да, нужно нацелить вектор сброса на флеш-память. в настройках линкера проекта для сегментов программы указать on-chip или off-chip ОЗУ. тогда при старте ниос будет считывать код программы в ОЗУ и исполнять его оттуда. можно и напрямую с флешки код исполнять, но это будет медленнее, а переменные все равно придется в ОЗУ хранить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 15 октября, 2009 Опубликовано 15 октября, 2009 · Жалоба Сегодня удачно загрузил soft в Flash и теперь с нее загружаюсь, правда скорость оставляет желать лучшего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KriGLer 0 13 января, 2010 Опубликовано 13 января, 2010 · Жалоба А возможно ли cfi-flash сделать памятью программ ниоса и в ходе выполнения программы писать туда данные, в конец адресного пространства напримар. ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 13 января, 2010 Опубликовано 13 января, 2010 · Жалоба А возможно ли cfi-flash сделать памятью программ ниоса и в ходе выполнения программы писать туда данные, в конец адресного пространства напримар. ? нет, не получится. нужно с флешки загрузить код в ОЗУ, передать ему управление, тогда будет доступ на запись во флеш. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KriGLer 0 13 января, 2010 Опубликовано 13 января, 2010 · Жалоба нет, не получится. нужно с флешки загрузить код в ОЗУ, передать ему управление, тогда будет доступ на запись во флеш. Спасибо! т.е. надо Reset Vector на флешку указать, а Exception Vector на sram и задать смещение, я правильно понимаю? )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться