Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Flash override
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
alexPec
Кому не жалко, нужен для образца оверайд файл на флешку spansion (на контролллере epcs)
Спасибо
vadimuzzz
вот, например:
Код
[EPCS-012017] #S25FL128P0XNFI001
sector_size = 65536
sector_count = 256

gosu-art
А это нужно новый файл создавать или править где то?
vadimuzzz
либо создать файлы вида nios2-flash-override* в каталоге nios2eds/bin, тогда программер сам эти файлы найдет; либо явно указывать ему ключом: nios2-flash-programmer --base 0x0 -–override=my_override.txt sw.flash
alexPec
Цитата(vadimuzzz @ Jul 21 2011, 04:02) *
вот, например:
Код
[EPCS-012017] #S25FL128P0XNFI001
sector_size = 65536
sector_count = 256

А это что такое и откуда его взять для моей флешки 25fl128p0xnfi001?
vadimuzzz
Цитата(alexPec @ Jul 21 2011, 16:47) *
А это что такое и откуда его взять для моей флешки 25fl128p0xnfi001?

это я для себя написал, после # - комментарий. просто 128-Мбитные флешки бывают 2 типов, с разными размерами секторов. параметры вашей флешки смотрите в даташите. буквы EPCS-012017 тоже в даташите, но и программер с ключом --debug их вроде выдает
alexPec
Цитата(vadimuzzz @ Jul 21 2011, 14:47) *
это я для себя написал, после # - комментарий. просто 128-Мбитные флешки бывают 2 типов, с разными размерами секторов. параметры вашей флешки смотрите в даташите. буквы EPCS-012017 тоже в даташите, но и программер с ключом --debug их вроде выдает

спасибо, буду пробоватьпрошивать..
Кстати,в софте функция чтения из флеши со спэншн перестала работать, с епцс работает без проблем. В драйвере че томенять надо? Если да, то что и где?
vadimuzzz
Цитата(alexPec @ Jul 21 2011, 18:16) *
спасибо, буду пробоватьпрошивать..
Кстати,в софте функция чтения из флеши со спэншн перестала работать, с епцс работает без проблем. В драйвере че томенять надо? Если да, то что и где?

это зависит от того, что вы понимаете под драйвером sm.gif я использую сравнительно низкоуровневые функции (epcs_commands.h, кажись). там такой проблемы нет. а с более высокоуровневыми проблема вполне вероятна, т.к. драйвер сам читает геометрию флешки и, если флешки с прочитанными параметрами у него в списке нет, может послать. во всяком случае раньше так было.
alexPec
Цитата(vadimuzzz @ Jul 21 2011, 15:38) *
это зависит от того, что вы понимаете под драйвером sm.gif я использую сравнительно низкоуровневые функции (epcs_commands.h, кажись). там такой проблемы нет. а с более высокоуровневыми проблема вполне вероятна, т.к. драйвер сам читает геометрию флешки и, если флешки с прочитанными параметрами у него в списке нет, может послать. во всяком случае раньше так было.


Я пользую функцию что-то типа alt_read_flash. Похоже высокоувневая, там только указывается откуда, куда и количество. Так что вроде в ней дело, буду копать..
vadimuzzz
Цитата(alexPec @ Jul 21 2011, 19:48) *
Так что вроде в ней дело, буду копать..

я думаю, надо подрихтовать функцию alt_epcs_flash_query в файле altera_avalon_epcs_flash_controller.c, чтобы научить ее понимать другие флешки.
alexPec
Цитата(vadimuzzz @ Jul 21 2011, 18:08) *
я думаю, надо подрихтовать функцию alt_epcs_flash_query в файле altera_avalon_epcs_flash_controller.c, чтобы научить ее понимать другие флешки.


Я тоже так думал, сегодня проверил. Ситуация такая. alt_flash_open_dev возвращает 0. Пошел дальше, сделал bsp без оптимизации, в режиме дебага посмотрел. alt_find_dev возвращает 0, не находит "/dev/epcs". Вот после этого я ничего не понял wacko.gif С epcs все работало... Пробовал поискать лист флешей (alt_flash_dev_list) - так и не нашел где он. Не пропал же контроллер из системы?

PS: флешку прошил через оверайд, все грузится - и конфигурация и ниос, а читать из ниоса не хочет.
vadimuzzz
а имена устройств проверяли? м.б. после очередной генерации SOPC поменялось что-то?
alexPec
Цитата(vadimuzzz @ Jul 22 2011, 16:29) *
а имена устройств проверяли? м.б. после очередной генерации SOPC поменялось что-то?

В том то и дело что ни сопц,ни софт не менялся. Просто новая плата(та же разводка) а там другая флешь не епцс —и все, открытие девайса не работает. Посоветуйте,куда хоть копать то?
vadimuzzz
попробуйте использовать функции из epcs_commands.h
понадобятся только эти, если тип памяти менять не будете:
void epcs_sector_erase(alt_u32 base, alt_u32 offset);
alt_32 epcs_read_buffer(alt_u32 base, int offset, alt_u8 *dest_addr, int length);
void epcs_write_enable(alt_u32 base);
alt_32 epcs_write_buffer(alt_u32 base, int offset, const alt_u8 *src_addr, int length);

ну м.б. alt_u8 epcs_read_device_id(alt_u32 base) для диагностики. я доберусь до железа, проверю высокоуровневые функции. так трудно гадать
alexPec
Цитата(vadimuzzz @ Jul 22 2011, 18:32) *
попробуйте использовать функции из epcs_commands.h
понадобятся только эти, если тип памяти менять не будете:
void epcs_sector_erase(alt_u32 base, alt_u32 offset);
alt_32 epcs_read_buffer(alt_u32 base, int offset, alt_u8 *dest_addr, int length);
void epcs_write_enable(alt_u32 base);
alt_32 epcs_write_buffer(alt_u32 base, int offset, const alt_u8 *src_addr, int length);

ну м.б. alt_u8 epcs_read_device_id(alt_u32 base) для диагностики. я доберусь до железа, проверю высокоуровневые функции. так трудно гадать


Пробую epcs_read_device_id, в качестве base даю константу EPCS_BASE из system.h. Виснет в функции alt_avalon_spi_command вот здесь:

Код

IORD_ALTERA_AVALON_SPI_RXDATA(base);
    
  /* Keep clocking until all the data has been processed. */
  for (;; )
  {
    
    do
    {
      status = IORD_ALTERA_AVALON_SPI_STATUS(base);
    }
    while (((status & ALTERA_AVALON_SPI_STATUS_TRDY_MSK) == 0 || credits == 0) &&
            (status & ALTERA_AVALON_SPI_STATUS_RRDY_MSK) == 0);


Постоянно крутится do..while. Глубоко пока не копал, может у кого было подобное при переходе с epcs на Numonix (в первом посте ошибся, написал Spansion)?

А функция alt_32 epcs_read_buffer(alt_u32 base, int offset, alt_u8 *dest_addr, int length); похоже подходит, софт даже переписывать не придется.
vadimuzzz
Цитата(alexPec @ Jul 22 2011, 23:21) *
Глубоко пока не копал, может у кого было подобное при переходе с epcs на Numonix (в первом посте ошибся, написал Spansion)?

ну вы даете! чип хоть скажите какой, может у него регистры по-другому расположены. тогда надо будет в override добавить

upd: извиняюсь, я забыл про маленький нюанс sm.gif
чтобы пользоваться командой epcs_read_device_id и другими, адрес надо брать со смещением. например (кусок system.h):
Код
#define ALT_MODULE_CLASS_epcs_flash_controller_0 altera_avalon_epcs_flash_controller
#define EPCS_FLASH_CONTROLLER_0_BASE 0x1001800
#define EPCS_FLASH_CONTROLLER_0_IRQ 3
#define EPCS_FLASH_CONTROLLER_0_IRQ_INTERRUPT_CONTROLLER_ID 0
#define EPCS_FLASH_CONTROLLER_0_NAME "/dev/epcs_flash_controller_0"
#define EPCS_FLASH_CONTROLLER_0_REGISTER_OFFSET 1024
#define EPCS_FLASH_CONTROLLER_0_SPAN 2048
#define EPCS_FLASH_CONTROLLER_0_TYPE "altera_avalon_epcs_flash_controller"

тогда функцию вызываем так:
Код
alt_printf("EPCS ID:0x%x",epcs_read_device_id(EPCS_FLASH_CONTROLLER_0_BASE+EPCS_FLASH_CONTROLLER_0_REGISTER_OFFSET));


upd2:
alt_find_dev и alt_find_dev будут работать только если не включена опция Small device drivers

у меня на Spansion они работают
alexPec
Цитата(vadimuzzz @ Jul 23 2011, 04:02) *
Код
alt_printf("EPCS ID:0x%x",epcs_read_device_id(EPCS_FLASH_CONTROLLER_0_BASE+EPCS_FLASH_CONTROLLER_0_REGISTER_OFFSET));



Спасибо! Вот так все работает.

Цитата(vadimuzzz @ Jul 23 2011, 04:02) *
alt_find_dev и alt_find_dev будут работать только если не включена опция Small device drivers

у меня на Spansion они работают


Чип M25P32, но дело то не в чипе похоже, почему то лист флешей пустой. Указатель next и prev указывают оба на начало листа.

Эта опция выключена, да и с epcs все ведь работало...
Вобщем то и все равно. Посмотрел драйверы "высокоуровневые" - используется таже epcs_read_flash, а она у меня уже работает. Так что задвину все это "высокоуровневое", заменю на epcs_read_flash, благо только читать из флешки и надо.

Еще раз СПАСИБО!!!
vadimuzzz
Цитата(alexPec @ Jul 24 2011, 05:19) *
Чип M25P32, но дело то не в чипе похоже, почему то лист флешей пустой. Указатель next и prev указывают оба на начало листа.

список заполняется в функции alt_sys_init. первым делом процедура вызывает alt_epcs_flash_query, информацию дает она. запустите в режиме отладки, поставив breakpoint на начало alt_sys_init. посмотрите, заходит ли он в процедуру инициализации и чего он там делает. просто интересно sm.gif
alexPec
Цитата(vadimuzzz @ Jul 24 2011, 06:20) *
список заполняется в функции alt_sys_init. первым делом процедура вызывает alt_epcs_flash_query, информацию дает она. запустите в режиме отладки, поставив breakpoint на начало alt_sys_init. посмотрите, заходит ли он в процедуру инициализации и чего он там делает. просто интересно sm.gif

Все ясно,он читает в качестве ид третий байт, а это размер флешки.я то думал qury вызывается после регистрации в листе, а получается до. В общем,все работает сейчас как раньше, спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.