|
Flash override, Поделитесь примером на spansion |
|
|
|
Jul 21 2011, 09:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(vadimuzzz @ Jul 21 2011, 04:02)  вот, например: Код [EPCS-012017] #S25FL128P0XNFI001 sector_size = 65536 sector_count = 256 А это что такое и откуда его взять для моей флешки 25fl128p0xnfi001?
|
|
|
|
|
Jul 21 2011, 10:47
|

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

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

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

|
Цитата(alexPec @ Jul 21 2011, 18:16)  спасибо, буду пробоватьпрошивать.. Кстати,в софте функция чтения из флеши со спэншн перестала работать, с епцс работает без проблем. В драйвере че томенять надо? Если да, то что и где? это зависит от того, что вы понимаете под драйвером  я использую сравнительно низкоуровневые функции (epcs_commands.h, кажись). там такой проблемы нет. а с более высокоуровневыми проблема вполне вероятна, т.к. драйвер сам читает геометрию флешки и, если флешки с прочитанными параметрами у него в списке нет, может послать. во всяком случае раньше так было.
|
|
|
|
|
Jul 21 2011, 12:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(vadimuzzz @ Jul 21 2011, 15:38)  это зависит от того, что вы понимаете под драйвером  я использую сравнительно низкоуровневые функции (epcs_commands.h, кажись). там такой проблемы нет. а с более высокоуровневыми проблема вполне вероятна, т.к. драйвер сам читает геометрию флешки и, если флешки с прочитанными параметрами у него в списке нет, может послать. во всяком случае раньше так было. Я пользую функцию что-то типа alt_read_flash. Похоже высокоувневая, там только указывается откуда, куда и количество. Так что вроде в ней дело, буду копать..
|
|
|
|
|
Jul 22 2011, 10:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(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". Вот после этого я ничего не понял  С epcs все работало... Пробовал поискать лист флешей (alt_flash_dev_list) - так и не нашел где он. Не пропал же контроллер из системы? PS: флешку прошил через оверайд, все грузится - и конфигурация и ниос, а читать из ниоса не хочет.
|
|
|
|
|
Jul 22 2011, 14:32
|

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

|
попробуйте использовать функции из 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) для диагностики. я доберусь до железа, проверю высокоуровневые функции. так трудно гадать
|
|
|
|
|
Jul 22 2011, 16:21
|
Профессионал
    
Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968

|
Цитата(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); похоже подходит, софт даже переписывать не придется.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|