Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Nios II Software
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2
dim99
Доброго времени суток, товарищи )

Возникла необходимость экономии памяти (on-chip) и требуется перекинуть software с on-chip на Flash, чтобы ядро грузилось с флэшки,встроенной на плате.

Имеется Cyclone III C120 и flash 64 Мб с CFI интерфейсом.
Посмотрел на официальном сайте altera.com, вроде все просто прошился через Flash Programmer и все.

Так вот сам вопрос: по мануалу ug_nios2_flash_programmer.pdf необходимо создать для CFI Avalon-MM Tristate и добавить компонент Flash Memory.
Тогда получается необходимо создать и внешний блок(саму Flash память) и организовать связь между ядром и разработанным блоком?
Чем тогда будет являться Flash память, какой элемент использовать или все дело в дальнейшей распиновке(то есть привяжу к ножкам Flash и оно поймет)?

Простите, если коряво выразился, может подобная тема и есть, но что-то не нашел.
буду благодарен за любые отзывы.
Postoroniy_V
1)после того как в системе появится CFI Avalon-MM Tristate, к нему нужно будет подключить что то типа Flash Memory CFI.
и в меню этого самого Flash Memory CFI выбрать нужный тип внешней флешки( в вашем случае скорей всего это будем кастом надстройка - ручками пропишите параметры).
2) подключить в топ левеле вашего проекта пины Flash Memory CFI к вашей флешке
вроде всё
dim99
Цитата(Postoroniy_V @ Jul 1 2009, 14:49) *
2) подключить в топ левеле вашего проекта пины Flash Memory CFI к вашей флешке


что-то не могу я полноценно разобраться с пинами.
Методом научного тыка понял, что распиновку можно провести только после анализа и синтеза(если не так поправьте).

Поставил я Tristate Bridge. Подсоединил CFI к нему и в итоге получил следующие пины на nios:
nios pins:

address_..._flash[24..0]
data_to_and_from_..._flash[15..0]
read_n_.._flash
select_n_.._flash
write_n_.._flash

Непонятно, какой сигнал присвоить read_n_.._flash и select_n_.._flash. Для них остались только chip enable, output enable, ready\busy.
Если то подскажет буду безмерно благодарен.
Postoroniy_V
Цитата(dim99 @ Jul 14 2009, 16:34) *
что-то не могу я полноценно разобраться с пинами.
Методом научного тыка понял, что распиновку можно провести только после анализа и синтеза(если не так поправьте).

Поставил я Tristate Bridge. Подсоединил CFI к нему и в итоге получил следующие пины на nios:
nios pins:

address_..._flash[24..0]
data_to_and_from_..._flash[15..0]
read_n_.._flash
select_n_.._flash
write_n_.._flash

Непонятно, какой сигнал присвоить read_n_.._flash и select_n_.._flash. Для них остались только chip enable, output enable, ready\busy.
Если то подскажет буду безмерно благодарен.

address_..._flash[24..0] - адресная шина флехи
data_to_and_from_..._flash[15..0] - шина данных to-from говорит о том что шины bidirection
read_n_.._flash это сигнал чтения, активный в 0 это видимо для output enable, думаю сообразите как подключить если активный уровень вас не устраивает smile.gif
select_n_.._flash это чип селект , их может быть много , активный в 0 это видимо для chip enable smile.gif (см выше про уровень)
write_n_.._flash и сигнал записи , активный в 0
для ready\busy не надо ничего, если конечно планируете его использовать в системе, то нужно его к какому нибуль GPIO цепануть

з.ы...не любите "книжки" читать..ой не любите biggrin.gif
dim99
Цитата(Postoroniy_V @ Jul 14 2009, 12:50) *
address_..._flash[24..0] - адресная шина флехи
data_to_and_from_..._flash[15..0] - шина данных to-from говорит о том что шины bidirection
read_n_.._flash это сигнал чтения, активный в 0 это видимо для output enable, думаю сообразите как подключить если активный уровень вас не устраивает smile.gif
select_n_.._flash это чип селект , их может быть много , активный в 0 это видимо для chip enable smile.gif (см выше про уровень)
write_n_.._flash и сигнал записи , активный в 0
для ready\busy не надо ничего, если конечно планируете его использовать в системе, то нужно его к какому нибуль GPIO цепануть

з.ы...не любите "книжки" читать..ой не любите biggrin.gif


Спасибо за ответ.
Вопросы возникли только по поводу read и select, в принципе идеи были сделать как описано, но опыта мало и флэшку гробить не дали бы )
Men
У меня DE1 от альтеры, не получается прошить в EPCS4(или получается но не стартует программа).
Все вроде делал как в ug_nios2_flash_programmer
в Flash Programmer видем вот что:
#!/bin/sh
#
# This file was automatically generated by the Nios II IDE Flash Programmer.
#
# It will be overwritten when the flash programmer options change.
#

cd D:/altera/80/qdesigns/DE1_flash/software/flash_v1/Debug

# Creating .flash file for the FPGA configuration
"$SOPC_KIT_NIOS2/bin/sof2flash" --epcs --input="D:/altera/80/qdesigns/DE1_flash/
DE1_flash.sof" --output="DE1_flash.flash"
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert --device=EPCS128 --option=DE1_f
lash.opt D:/altera/80/qdesigns/DE1_flash/DE1_flash.sof DE1_flash.pof
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
Info: Peak virtual memory: 68 megabytes
Info: Processing ended: Wed Jul 29 18:01:55 2009
Info: Elapsed time: 00:00:02
Info: Total CPU time (on all processors): 00:00:03
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert DE1_flash.pof DE1_flash.rpd
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
Info: Peak virtual memory: 65 megabytes
Info: Processing ended: Wed Jul 29 18:01:59 2009
Info: Elapsed time: 00:00:03
Info: Total CPU time (on all processors): 00:00:03

# Programming flash with the FPGA configuration
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00003800 --cable='U
SB-Blaster [USB-0]' --sidp=0x00004030 --id=441228113 --timestamp=1248875622 --in
stance=0 "DE1_flash.flash"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: OK
Reading System ID at address 0x00004030: verified

: Checksumming existing contents

00000000 : Verifying existing contents

00010000 : Verifying existing contents

00020000 : Verifying existing contents

00000000 : Reading existing contents

00010000 : Reading existing contents

00020000 : Reading existing contents

Checksummed/read 17kB in 0.4s

00000000 ( 0%): Erasing

00010000 (33%): Erasing

00020000 (66%): Erasing

Erased 192kB in 1.9s (101.0kB/s)

00000000 ( 0%): Programming

00010000 (33%): Programming

00020000 (66%): Programming

Programmed 176KB +16KB in 4.2s (45.7KB/s)
Did not attempt to verify device contents
Leaving target processor paused

# Creating .flash file for the project
"$SOPC_KIT_NIOS2/bin/elf2flash" --epcs --after="DE1_flash.flash" --input="flash_
v1.elf" --output="epcs_controller.flash"

# Programming flash with the project
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00003800 --cable='U
SB-Blaster [USB-0]' --sidp=0x00004030 --id=441228113 --timestamp=1248875622 --in
stance=0 "epcs_controller.flash"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: OK
Reading System ID at address 0x00004030: verified

: Checksumming existing contents

00020000 : Verifying existing contents

00020000 : Reading existing contents

Checksummed/read 63kB in 1.5s

00020000 ( 0%): Erasing

Erased 64kB in 0.6s (106.6kB/s)

00020000 ( 0%): Programming

Programmed 2KB +62KB in 1.5s (42.6KB/s)
Did not attempt to verify device contents
Leaving target processor paused
vadimuzzz
Цитата(Men @ Jul 29 2009, 23:14) *
У меня DE1 от альтеры, не получается прошить в EPCS4(или получается но не стартует программа).


логи чистые - прошивается нормально. sof нормальный? если прогу запустить из среды (или в отладчике) - пашет? вектор сброса на epcs указывает?
Men
Цитата(vadimuzzz @ Jul 30 2009, 04:51) *
логи чистые - прошивается нормально. sof нормальный? если прогу запустить из среды (или в отладчике) - пашет? вектор сброса на epcs указывает?

Мой проект в прикрепленном фаиле.
Сама прошивка заливается великолепно.
Исходники компилируются без ошибок.
Уже все пересобрал всеравно одна и таже Х....!!!
Please help me!!!
Stewart Little
Цитата(Men @ Jul 30 2009, 17:02) *
Мой проект в прикрепленном фаиле.
Сама прошивка заливается великолепно.
Исходники компилируются без ошибок.
Уже все пересобрал всеравно одна и таже Х....!!!
Please help me!!!

В свойствах библиотеки проекта поменяйте расположение сегмента кода (.text) на onchip_mem и перекомпилируйте проект в эклипсе.
И еще раз проштудируйте доку на FlashProgrammer smile.gif .
В epcs_controller'е имеется небольшое кол-во памяти, в которой живет программа-копировщик.
После того, как плиска сконфигурируется, процессор по вектору сброса перейдет в память epcs_controller'а, и начнет исполнять код копировщика - в Вашем случае он должен копировать исполняемый код приложения из epcs'ки во внутреннее озу плиски. После окончания копирования копировщик передает управление исполняемому коду приложения, вселенному во внутреннее озу (оnchip_mem).
Сегмент кода может располагаться не только во внутреннем озу, но и в любом внешнем (SRAM, SSRAM, SDRAM) - принцип остается тем же.
Men
Цитата(Stewart Little @ Jul 30 2009, 19:54) *
В свойствах библиотеки проекта поменяйте расположение сегмента кода (.text) на onchip_mem и перекомпилируйте проект в эклипсе.
И еще раз проштудируйте доку на FlashProgrammer smile.gif .
В epcs_controller'е имеется небольшое кол-во памяти, в которой живет программа-копировщик.
После того, как плиска сконфигурируется, процессор по вектору сброса перейдет в память epcs_controller'а, и начнет исполнять код копировщика - в Вашем случае он должен копировать исполняемый код приложения из epcs'ки во внутреннее озу плиски. После окончания копирования копировщик передает управление исполняемому коду приложения, вселенному во внутреннее озу (оnchip_mem).
Сегмент кода может располагаться не только во внутреннем озу, но и в любом внешнем (SRAM, SSRAM, SDRAM) - принцип остается тем же.

После изменения расположения кода на onchip_mem все рабатает!!!
Когда обратно возвращаю такая же петрушка:

Programmed 2KB +62KB in 1.5s (42.6KB/s)
Did not attempt to verify device contents
Leaving target processor paused

В каком состоянии находится система непонятно?!
vadimuzzz
Цитата(Men @ Jul 30 2009, 23:31) *
В каком состоянии находится система непонятно?!

ниос не может напрямую исполнять код с epcs (не в курсе, правда, насчет последних версий). сделать это можно через хитро изогнутый костыль, но это будет очень медленно. поэтому код исполняется с on-chip ram(варианты - off chip ram, cfi flash, если загрузить ядро какой-нибудь ОС, то и с , например, c SD (при наличии периферии, естественно)). чтобы программа рестартовала при выкл/вкл питания служит бутлоадер(копировщик, о котором писали выше). его код намертво вшит в epcs-контроллер (который есть on-chip memory + spi controller). при подаче питания циклон считывает sof с ниосом и всеми его потрохами, включая epcs-контроллер. вектор сброса указывает на него => начинает исполняться код загручика. загрузчик сливает код программы с флешки в on-chip ram и передает ей управление.
Men
А слона то я и незаметил!!! laughing.gif
Все заработало!!!!!!!
Спасибо огромное за содействие!!!
inco
Цитата(Men @ Jul 31 2009, 08:43) *
А слона то я и незаметил!!! laughing.gif
Все заработало!!!!!!!
Спасибо огромное за содействие!!!


А какого слона уточните?!

Меня тоже интересует этот вопрос и я уже спрашивал на форуме, но так и не понял из ответов, всё таки можно или нет исполнять код НАПРЯМУЮ из епцс, пусть очень медленно но напрямую? С загрузчиками всё понятно!
vadimuzzz
Цитата(inco @ Jul 31 2009, 16:57) *
А какого слона уточните?!

Меня тоже интересует этот вопрос и я уже спрашивал на форуме, но так и не понял из ответов, всё таки можно или нет исполнять код НАПРЯМУЮ из епцс, пусть очень медленно но напрямую? С загрузчиками всё понятно!

нужно создать компонент, который будет иметь avalon-MM интерфейс как у памяти, а наружу - интерфейс SPI. собственно его уже давно сделали http://www.niosforum.com/pages/project_det...fb148c132365f74
но ссылка сейчас дохлая. обсуждалось тут http://electronix.ru/forum/index.php?showtopic=19716 - можно попробовать написать авторам.
Stewart Little
Цитата(vadimuzzz @ Jul 31 2009, 18:10) *
можно попробовать написать авторам.

Увы, боюсь это будет запрос "на деревню дедушке". Марко Гроенфельд сейчас работает в Microtronix, разрабатывает для них платы ViClaro XXX, и все для них.
vadimuzzz
Цитата(Stewart Little @ Aug 2 2009, 15:02) *
Увы, боюсь это будет запрос "на деревню дедушке". Марко Гроенфельд сейчас работает в Microtronix, разрабатывает для них платы ViClaro XXX, и все для них.

я имел в виду авторов постов smile.gif кто-то в той теме обмолвился, что исходники слил. впрочем, написать компонент не проблема, вот смысла в этом не вижу
dim99
После некоторого перерыва добрался до платы (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 Или есть какие-то соображения, отпишитесь пожалуйста.
Postoroniy_V
Цитата(dim99 @ Oct 7 2009, 00:20) *
После некоторого перерыва добрался до платы (Cyclone III 3c120 dev kit), чтобы попробовать запустить проект с Flash.
с 1-ого раза не завелась и с 2-ого тоже.

...............
Кто сталкивался с проблемами Flash в Nios II Или есть какие-то соображения, отпишитесь пожалуйста.

- можно и без sysid, но лучше использовать smile.gif
- я бы пробовал без "small C library" в ней много чего обрублено,что именно нужно даташит читать
- флеш 512 Мегабита Х 16 бит, тоесть шина будет 25 бит, все верно, если бы флеш было 8 битной ширины то шина адресса будет 26 бит
vadimuzzz
Цитата(dim99 @ Oct 6 2009, 22:20) *
Мои догадки, почему не работает:
1. неправильная конфигурация в sopc builder(может нужен sysid или неправильно выставлен объем Flash)
2. ошибка при распиновке в Quartus (проверю еще раз)
3. неправильное имя при обращении /dev/cfi_flash (беру из system.h после генерации)
4. мертвая flash(маловероятно) или как-то причастен Max II

Кто сталкивался с проблемами Flash в Nios II Или есть какие-то соображения, отпишитесь пожалуйста.

скорее всего распиновка (флеш 16 бит, младший адресный разряд подключать не надо). саму флешку, а равно и MAX II проверить легко - сгенерить pof или просто любой hex и зашить его quartus-programmerom. посмотрите пример на nioswiki.
barabek
Цитата(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-ми сделать это более красиво. Может у Вас больше терпения, желания и времени хватит раскопать smile.gif.
dim99
В общем решил одну из проблем - правильно распиновал.

теперь после прошивки проекта в плату, открываю Nios Command Shell, набираю nios2-flash-programmer --cable="usb-blaster [USB-0]" --base=0x04000000 --debug
и выдается CFI Table - получается видит flash.

но пока в Nios IDE никак не могу получить ненулевой результат от alt_flash_open_dev(CFI_FLASH_NAME);

думаю, что неправильно выставлены тайминги:
flash S29GL512N по даташиту - 110 ns время доступа.

Вопрос: как рассчитать

Setup —After asserting chipselect, the time required before asserting the read or write signals.
Wait—The time required for the read or write signals to be asserted for each transfer.
Hold—After deasserting the write signal, the time required before deasserting the chipselect signal.

Временыне характеристики 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?
vadimuzzz
Цитата(dim99 @ Oct 9 2009, 01:39) *
В общем решил одну из проблем - правильно распиновал.

теперь после прошивки проекта в плату, открываю Nios Command Shell, набираю nios2-flash-programmer --cable="usb-blaster [USB-0]" --base=0x04000000 --debug
и выдается CFI Table - получается видит flash.

но пока в Nios IDE никак не могу получить ненулевой результат от alt_flash_open_dev(CFI_FLASH_NAME);

думаю, что неправильно выставлены тайминги:

скорее в настройках System Library галочки не те стоят
barabek
Цитата(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. Но это позже. Первоначально нужно хотя бы запустить smile.gif. Если считывается таблица CFI попробуйте тем же nios2-flash-programmer записать какой-нибудь файл, а затем считать, подготовив предварительно его утилитой bin2flash (кажется). Потом можно идти дальше.
ЗЫ. Файл можно записать и из IDE с помощью FlashProgrammer, а вот считывать уже nios2-flash-programmer. В этом случае, насколько я помню, файл автоматически подготовится к записи и прошьется. Заодно сразу посмотрите лог в консоли, по идее он должен показать результат записи и верификации. Если верификация пройдет, значит можно и не считывать вручную.
dim99
Цитата(barabek @ Oct 9 2009, 05:31) *
Время Вы выбрали с запасом, можно даже уменьшить Setup и Hold. Но это позже. Первоначально нужно хотя бы запустить smile.gif. Если считывается таблица 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 и с чем его едят?
vadimuzzz
Цитата(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, чтобы влезло - не хочет.


выложите проект, если секретного нету
barabek
Цитата(vadimuzzz @ Oct 9 2009, 23:15) *
alt_flash_cfi_init (&cfi_flash) - структуру заполняет? если нет, то . . .

Поддерживаю, врядли дело в железе, если flashprogrammer работает. Дело однозначно в программе. Я ещё раз посмотрю в свой проект, может что упустил. Но это не раньше понедельника. Попробуйте пошаговую отладку . Может сами раньше найдете затык.
dim99
Цитата(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. может проблемы из-за исходного программного проекта.
barabek
Да, кстати. Я скопировал упомянутый altera_avalon_cfi_flash.c в папку своего проекта и добавил эту копию в проект, естествено, чтобы этот файл тоже билдился ( по умолчанию).

Просите, предыдущее сообщение с телефона не получилось отредактировать.
dim99
У меня вопрос появился, нет ли каких-нибудь ошибок в распиновке? (правил в paint)

Нажмите для просмотра прикрепленного файла
vadimuzzz
Цитата(dim99 @ Oct 9 2009, 22:25) *
У меня вопрос появился, нет ли каких-нибудь ошибок в распиновке? (правил в paint)

вроде нет. разве что ресет на флеш. посмотрите как сделано в примерах к киту, да и схематик глянуть не помешает. я завтра накидаю "hello world" с флешем.
dim99
А что с reset?
разве нельзя его завести на питание, чтобы он не "мешал" и не влиял ни на что?
vadimuzzz
собрал ниос с флешем на стартер-ките. все работает.
код программы
Код
#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 действительно не нужен, я его вообще не подключал.
dim99
Спасибо за проект и замечания.
До платы доберусь только в понедельник, смотрю вы на 7.2 SP3 работаете, у меня же стоит 8.0 SP1 может от версии тоже много чего зависит.
Думаю, если не пойдет перекомпилю на 8.1.
dim99
Сегодня переделал проект в 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
Покапался в 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
Цитата(dim99 @ Oct 12 2009, 16:34) *
Сегодня переделал проект в 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 biggrin.gif
Цитата
В 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*) а не читает.

Цитата(dim99 @ Oct 12 2009, 21:24) *
Покапался в 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
Цитата(vadimuzzz @ Oct 12 2009, 18:35) *
видимо из-за того, что в настройках линкера для System Library выбрана конфигурация Release и оптимизатор все порезал. поставьте Debug (если памяти хватает) и сможете покопаться поглубже.


че-то я не понял, а накой икс вам эта функция? alt_flash_open_dev - отработала => вызываем alt_flash_read или alt_flash_write. в конце не забываем alt_flash_close_dev вызвать.


Еще раз проверю, но вроде бы выставлен debug.
Спасибо за ответы, буду завтра еще мучить flash, если не выйдет тогда подключу через avalon slave как новый компонент без всяких cfi.
dim99
Заработало )

Наконец-то после "недолгих" мучений 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
Цитата(dim99 @ Oct 14 2009, 21:11) *
В общем, больше не буду так доверять примерам из handbook'a.

это не баг, это фича wink.gif
одна из фишек cyclone3 - remote upgrade, можно на флешке хранить несколько sof`ов и переключаться между ними. так что возможность переписать прошивку отнюдь не бесполезна.
dim99
Цитата(vadimuzzz @ Oct 14 2009, 18:32) *
это не баг, это фича wink.gif
одна из фишек cyclone3 - remote upgrade, можно на флешке хранить несколько sof`ов и переключаться между ними. так что возможность переписать прошивку отнюдь не бесполезна.


Да, читал что можно до 7 fpga design хранить для cIII + software + data binary.
теперь хочу хранить soft на flash, только не пойму адрес хранения в flash задается в настройках nios processor и потом генерится в nios ide?
vadimuzzz
Цитата(dim99 @ Oct 14 2009, 21:38) *
Да, читал что можно до 7 fpga design хранить для cIII + software + data binary.
теперь хочу хранить soft на flash, только не пойму адрес хранения в flash задается в настройках nios processor и потом генерится в nios ide?

да, нужно нацелить вектор сброса на флеш-память. в настройках линкера проекта для сегментов программы указать on-chip или off-chip ОЗУ. тогда при старте ниос будет считывать код программы в ОЗУ и исполнять его оттуда. можно и напрямую с флешки код исполнять, но это будет медленнее, а переменные все равно придется в ОЗУ хранить.
dim99
Сегодня удачно загрузил soft в Flash и теперь с нее загружаюсь, правда скорость оставляет желать лучшего.
KriGLer
А возможно ли cfi-flash сделать памятью программ ниоса и в ходе выполнения программы писать туда данные, в конец адресного пространства напримар. ?
vadimuzzz
Цитата(KriGLer @ Jan 13 2010, 13:52) *
А возможно ли cfi-flash сделать памятью программ ниоса и в ходе выполнения программы писать туда данные, в конец адресного пространства напримар. ?

нет, не получится. нужно с флешки загрузить код в ОЗУ, передать ему управление, тогда будет доступ на запись во флеш.
KriGLer
Цитата(vadimuzzz @ Jan 13 2010, 11:09) *
нет, не получится. нужно с флешки загрузить код в ОЗУ, передать ему управление, тогда будет доступ на запись во флеш.

Спасибо!
т.е. надо Reset Vector на флешку указать, а Exception Vector на sram и задать смещение, я правильно понимаю? ))
vadimuzzz
Цитата(KriGLer @ Jan 13 2010, 18:41) *
т.е. надо Reset Vector на флешку указать, а Exception Vector на sram и задать смещение, я правильно понимаю? ))

еще в NIOS-IDE в настройках System Library все в ОЗУ запихать
KriGLer
Цитата(vadimuzzz @ Jan 13 2010, 16:47) *
еще в NIOS-IDE в настройках System Library все в ОЗУ запихать


Запихал все в ОЗУ и .text и .rodata и .rwdata и пр ))
прога не стартует (((

в SOPC Builde'e:
Falsh base: 0x02000000
Sram base: 0x02400000

Reset Vector: Memory: cfi_flash_0 offset: 0x0
Exception Vector: Memory: sram_0 offset: 0x20

что делать? ))) как заставить прогу стартануть, где что подправить? sad.gif подскажите пожалуйста.

(с флехи все прекрасно стартует и работает.)
vadimuzzz
а как прогу шьете? через flash-programmer?
KriGLer
Да, через него
barabek
Цитата(KriGLer @ May 20 2010, 04:53) *
Да, через него


А что пишет после загрузки? И дебагерром до куда доходит? Там в настройках можно разные точки останова после ресета выставить и пошагово идти либо начиная с бутлоадера, либо с main / alt_main
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.