Jump to content

    

Flash override

Кому не жалко, нужен для образца оверайд файл на флешку spansion (на контролллере epcs)

Спасибо

Share this post


Link to post
Share on other sites

либо создать файлы вида nios2-flash-override* в каталоге nios2eds/bin, тогда программер сам эти файлы найдет; либо явно указывать ему ключом: nios2-flash-programmer --base 0x0 -–override=my_override.txt sw.flash

Share this post


Link to post
Share on other sites
вот, например:

[EPCS-012017] #S25FL128P0XNFI001
sector_size = 65536
sector_count = 256

А это что такое и откуда его взять для моей флешки 25fl128p0xnfi001?

Share this post


Link to post
Share on other sites
А это что такое и откуда его взять для моей флешки 25fl128p0xnfi001?

это я для себя написал, после # - комментарий. просто 128-Мбитные флешки бывают 2 типов, с разными размерами секторов. параметры вашей флешки смотрите в даташите. буквы EPCS-012017 тоже в даташите, но и программер с ключом --debug их вроде выдает

Share this post


Link to post
Share on other sites
это я для себя написал, после # - комментарий. просто 128-Мбитные флешки бывают 2 типов, с разными размерами секторов. параметры вашей флешки смотрите в даташите. буквы EPCS-012017 тоже в даташите, но и программер с ключом --debug их вроде выдает

спасибо, буду пробоватьпрошивать..

Кстати,в софте функция чтения из флеши со спэншн перестала работать, с епцс работает без проблем. В драйвере че томенять надо? Если да, то что и где?

Share this post


Link to post
Share on other sites
спасибо, буду пробоватьпрошивать..

Кстати,в софте функция чтения из флеши со спэншн перестала работать, с епцс работает без проблем. В драйвере че томенять надо? Если да, то что и где?

это зависит от того, что вы понимаете под драйвером :) я использую сравнительно низкоуровневые функции (epcs_commands.h, кажись). там такой проблемы нет. а с более высокоуровневыми проблема вполне вероятна, т.к. драйвер сам читает геометрию флешки и, если флешки с прочитанными параметрами у него в списке нет, может послать. во всяком случае раньше так было.

Share this post


Link to post
Share on other sites
это зависит от того, что вы понимаете под драйвером :) я использую сравнительно низкоуровневые функции (epcs_commands.h, кажись). там такой проблемы нет. а с более высокоуровневыми проблема вполне вероятна, т.к. драйвер сам читает геометрию флешки и, если флешки с прочитанными параметрами у него в списке нет, может послать. во всяком случае раньше так было.

 

Я пользую функцию что-то типа alt_read_flash. Похоже высокоувневая, там только указывается откуда, куда и количество. Так что вроде в ней дело, буду копать..

Share this post


Link to post
Share on other sites
Так что вроде в ней дело, буду копать..

я думаю, надо подрихтовать функцию alt_epcs_flash_query в файле altera_avalon_epcs_flash_controller.c, чтобы научить ее понимать другие флешки.

Share this post


Link to post
Share on other sites
я думаю, надо подрихтовать функцию alt_epcs_flash_query в файле altera_avalon_epcs_flash_controller.c, чтобы научить ее понимать другие флешки.

 

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

 

PS: флешку прошил через оверайд, все грузится - и конфигурация и ниос, а читать из ниоса не хочет.

Share this post


Link to post
Share on other sites

а имена устройств проверяли? м.б. после очередной генерации SOPC поменялось что-то?

Share this post


Link to post
Share on other sites
а имена устройств проверяли? м.б. после очередной генерации SOPC поменялось что-то?

В том то и дело что ни сопц,ни софт не менялся. Просто новая плата(та же разводка) а там другая флешь не епцс —и все, открытие девайса не работает. Посоветуйте,куда хоть копать то?

Share this post


Link to post
Share on other sites

попробуйте использовать функции из 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) для диагностики. я доберусь до железа, проверю высокоуровневые функции. так трудно гадать

Share this post


Link to post
Share on other sites
попробуйте использовать функции из 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); похоже подходит, софт даже переписывать не придется.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this