|
|
  |
Nios II Software, загрузка с Flash |
|
|
|
Oct 6 2009, 15:20
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580

|
После некоторого перерыва добрался до платы (Cyclone III 3c120 dev kit), чтобы попробовать запустить проект с Flash. с 1-ого раза не завелась и с 2-ого тоже. Имеется CIII dev kit на борту Flash - Spansion (S29GL512N11FFIV1), - 64 Мбх16 - CFI flash command support (поддержка CFI) Sopc Builder: cpu on-chip memory ... tristate_bridge + cfi_flash sysid не ставил или необходимо? Nios IDE пример из handbook: ставлю галочки в свойствах библиотеки - program never exits support C++ ligthweight device driver API clean exit reduce device driver small C library #include "sys/alt_flash.h" #include <stdio.h> #include <string.h> ... alt_flash_fd* fd; fd = alt_flash_open_dev("/dev/cfi_flash");fd возвращается нулевой - ничего не открылось естественно. В Quartus распиновку проверил вроде правильно, но... в Sopc Builder компонент CFI - ставлю Custom, address width - 25 bit и data width - 16 объем Flash - 64 Мб смотрим в manual распиновка address bit 24 - 0 FSM_A(24:0) Address bus (word aligned)то есть адресация 32 Мб используя 25 бит. сама Flash 64 Мб - 26 бит. (поправьте если я здесь чего-то не понимаю) В Quartus это выглядит так:
Как с этим быть? При прошивке проекта в CIII загорается Led Flash active, за который отвечает Max II (вырезка из manual к CIII - Illuminates when flash memory is being accessed with a read or write transaction. Driven by the MAX II CPLD). При запуске в Nios IDE Debug никакого моргания или признаков активности Led нет. Мои догадки, почему не работает: 1. неправильная конфигурация в sopc builder(может нужен sysid или неправильно выставлен объем Flash) 2. ошибка при распиновке в Quartus (проверю еще раз) 3. неправильное имя при обращении /dev/cfi_flash (беру из system.h после генерации) 4. мертвая flash(маловероятно) или как-то причастен Max II Кто сталкивался с проблемами Flash в Nios II Или есть какие-то соображения, отпишитесь пожалуйста.
|
|
|
|
|
Oct 7 2009, 02:14
|

МедвеД Инженер I
   
Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951

|
Цитата(dim99 @ Oct 7 2009, 00:20)  После некоторого перерыва добрался до платы (Cyclone III 3c120 dev kit), чтобы попробовать запустить проект с Flash. с 1-ого раза не завелась и с 2-ого тоже.
............... Кто сталкивался с проблемами Flash в Nios II Или есть какие-то соображения, отпишитесь пожалуйста. - можно и без sysid, но лучше использовать  - я бы пробовал без "small C library" в ней много чего обрублено,что именно нужно даташит читать - флеш 512 Мегабита Х 16 бит, тоесть шина будет 25 бит, все верно, если бы флеш было 8 битной ширины то шина адресса будет 26 бит
Причина редактирования: Удаление черезмерного цитирования
--------------------
Cogito ergo sum
|
|
|
|
|
Oct 8 2009, 13:17
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(dim99 @ Oct 7 2009, 02:20)  Nios IDE пример из handbook: ставлю галочки в свойствах библиотеки - program never exits support C++ ligthweight device driver API clean exit reduce device driver small C library Я ставил галочки program never exits ligthweight device driver API reduce device driver small C library Но в таком случае, как Вам уже выше описали, многие библиотеки сильно кастрируются. Можете выставить или полные библиотеки или, если не хотите сильно раздувать код (а раздуться он может значительно) то : Код #include<sys/alt_flash.h> #ifndef ALT_USE_CFI_FLASH #define ALT_USE_CFI_FLASH #endif #include <altera_avalon_cfi_flash.h> добавить глобальную структуру:
static alt_flash_cfi_dev cfi_flash = \ { \ { \ ALT_LLIST_ENTRY, \ CFI_FLASH_NAME, \ NULL, \ NULL, \ ALT_CFI_DEV_IN_USE(CFI_FLASH_BASE) ? NULL : alt_flash_cfi_write, \ ALT_CFI_DEV_IN_USE(CFI_FLASH_BASE) ? NULL : alt_flash_cfi_read, \ ALT_CFI_DEV_IN_USE(CFI_FLASH_BASE) ? NULL : alt_flash_cfi_get_info, \ NULL, \ NULL, \ ((void*)( CFI_FLASH_BASE)), \ CFI_FLASH_SIZE \ } \ }; в main () { ... alt_flash_cfi_init (&cfi_flash); ...
в проект явно добавил файл altera_avalon_cfi_flash.с После этого можно писать-читать-стирать стандартными функциями, а также считать конфигурацию CFI c помощью alt_get_flash_info(...). Почему-то пришлось добавлять структуру явно и явно добавлять файл. Нужно было сделать быстро. Искал по их библиотекам, рылся-рылся, но так и не понял какими define-ми сделать это более красиво. Может у Вас больше терпения, желания и времени хватит раскопать  .
|
|
|
|
|
Oct 9 2009, 01:31
|
Знающий
   
Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831

|
Цитата(dim99 @ Oct 9 2009, 04:39)  В общем решил одну из проблем - правильно распиновал.
теперь после прошивки проекта в плату, открываю Nios Command Shell, набираю nios2-flash-programmer --cable="usb-blaster [USB-0]" --base=0x04000000 --debug и выдается CFI Table - получается видит flash.
Временыне характеристики Flash: Max. Access Time (ns) 100 110 110 Max. CE# Access Time (ns) 100 110 110 Max. Page access time (ns) 25 25 30 Max. OE# Access Time (ns) 25 35 35
пока все выставил на 110 ns.
Кто сталкивался с расчетом параметров для CFI? Время Вы выбрали с запасом, можно даже уменьшить Setup и Hold. Но это позже. Первоначально нужно хотя бы запустить  . Если считывается таблица CFI попробуйте тем же nios2-flash-programmer записать какой-нибудь файл, а затем считать, подготовив предварительно его утилитой bin2flash (кажется). Потом можно идти дальше. ЗЫ. Файл можно записать и из IDE с помощью FlashProgrammer, а вот считывать уже nios2-flash-programmer. В этом случае, насколько я помню, файл автоматически подготовится к записи и прошьется. Заодно сразу посмотрите лог в консоли, по идее он должен показать результат записи и верификации. Если верификация пройдет, значит можно и не считывать вручную.
|
|
|
|
|
Oct 9 2009, 12:43
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580

|
Цитата(barabek @ Oct 9 2009, 05:31)  Время Вы выбрали с запасом, можно даже уменьшить Setup и Hold. Но это позже. Первоначально нужно хотя бы запустить  . Если считывается таблица CFI попробуйте тем же nios2-flash-programmer записать какой-нибудь файл, а затем считать, подготовив предварительно его утилитой bin2flash (кажется). Потом можно идти дальше. ЗЫ. Файл можно записать и из IDE с помощью FlashProgrammer, а вот считывать уже nios2-flash-programmer. В этом случае, насколько я помню, файл автоматически подготовится к записи и прошьется. Заодно сразу посмотрите лог в консоли, по идее он должен показать результат записи и верификации. Если верификация пройдет, значит можно и не считывать вручную. Попробовал сегодня записать файл и считать его. делал через nios2-flash-programmer - все получилось. CFI table исправно показывает. bin2flash сделал flash файл, который записал в пользовательское адресное пространство, затем считал, вроде бы совпадает. Как только пытаюсь обратиться через Nios IDE ничего не выходит: alt_flash_open_dev(CFI_FLASH_NAME); опять возвращает нулевое значение. вставил static alt_flash_cfi_dev cfi_flash как писал barabek, но там опять же не считывает ничего из Flash. перепробовал все варианты с system library, убрал уже все галочки и увеличил размер on-chip, чтобы влезло - не хочет. Уже не знаю, куда смотреть и что делать... Хотелось бы узнать как можно посмотреть, какие сигналы генерит Nios процессор и выдает ли он вообще какие-нибудь Oen или Cen на входы Flash? и еще что такое signal tap и с чем его едят?
|
|
|
|
|
Oct 9 2009, 13:15
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(dim99 @ Oct 9 2009, 19:43)  alt_flash_open_dev(CFI_FLASH_NAME); опять возвращает нулевое значение. вставил static alt_flash_cfi_dev cfi_flash как писал barabek, но там опять же не считывает ничего из Flash. alt_flash_cfi_init (&cfi_flash) - структуру заполняет? если нет, то alt_flash_open_dev точно не сработает, ошибка где-то раньше. Цитата Хотелось бы узнать как можно посмотреть, какие сигналы генерит Nios процессор и выдает ли он вообще какие-нибудь Oen или Cen на входы Flash? и еще что такое signal tap и с чем его едят? signaltap - логический анализатор, им как раз можно и посмотреть OEn/CEn, если осциллографа нет под рукой Цитата перепробовал все варианты с system library, убрал уже все галочки и увеличил размер on-chip, чтобы влезло - не хочет. выложите проект, если секретного нету
|
|
|
|
|
Oct 9 2009, 14:34
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580

|
Цитата(vadimuzzz @ Oct 9 2009, 17:15)  alt_flash_cfi_init (&cfi_flash) - структуру заполняет? если нет, то alt_flash_open_dev точно не сработает, ошибка где-то раньше.
signaltap - логический анализатор, им как раз можно и посмотреть OEn/CEn, если осциллографа нет под рукой
выложите проект, если секретного нету Как я понял из кода, alt_flash_cfi_init (&cfi_flash) определяет параметры Flash то есть как настроена - на 8 битную или 16-битную адресацию и прочее. К сожалению, не заполняет, он пытается записать значение и сравнить с прочитанным результатом - естественно читает абы что. боюсь, весь проект выложить не могу, там моя небольшая часть. Хочу завтра создать чистый Hello_world в nios ide и в нем попробовать обратиться к Flash. может проблемы из-за исходного программного проекта.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|