реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> nios2-flash-programmer можно пользовать?, на двух платах с разными флашками фигня какая-то
yes
сообщение Dec 17 2009, 16:09
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



вроде бы удобный тул, чтобы мануал на флашку не читать, но прошить не могу.

вот что-то такое происходит

Код
[NiosII EDS]$ nios2-flash-programmer --base=0 --debug --erase-all
Using cable "USB-Blaster [USB-1]", 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: 20 00 BB 88 00 00 FF FF  FF FF FF FF FF FF FF FF   ...............
  10: FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................
  20: 51 00 52 00 59 00 03 00  00 00 35 00 00 00 00 00  Q.R.Y.....5.....
  30: 00 00 00 00 00 00 27 00  36 00 B4 00 C6 00 04 00  ......'.6.......
  40: 04 00 0A 00 00 00 05 00  05 00 03 00 00 00 16 00  ................
CFI query table read from device:
  10: 51 52 59 03 00 35 00 00  00 00 00 27 36 B4 C6 04  QRY..5.....'6...
  20: 04 0A 00 05 05 03 00 16  01 00 03 00 02 07 00 20  ...............
  30: 00 3E 00 00 01                                    .>...
CFI extended table read from device:
   0: 50 52 49 31 30 66 00 00  00 01 03 00 30 C0 01 80  PRI10f......0...
  10: 00 03 03 FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................
Read autoselect code 0020-88BB (in 16 bit mode)
No CFI override data for [FLASH-0020-88BB]
Target timeout loop runs 1504100 times/s
Timeout set to 771 loops
Device size is 4MByte
Erase regions are:
  offset        0:   8 x 8K
  offset    10000:  63 x 64K
Device supports Intel style programming algorithm
Multi-byte programming with 8 byte buffer
Sector erase timeout is 8s
Word program timeout is 512us
Buffer program timeout is 512us
              : Checksumming existing contents
00000000      : Already erased
00002000      : Needs erasing
00004000      : Needs erasing
00006000      : Needs erasing
00008000      : Needs erasing
0000A000      : Needs erasing
0000C000      : Needs erasing
0000E000      : Needs erasing
00010000      : Needs erasing
00020000      : Needs erasing
00030000      : Already erased
......
Erase failed at offset 2000
Leaving target processor paused


в 0 сектор пишет правильно


ну и во втором случае валится (я до опции --debug тогда не добрался, но тоже не сразу валится)
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 18 2009, 07:56
Сообщение #2


Гуру
******

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



вроде в 0 сектор писать нельзя, по крайней мере sof для циклона3(надо смещение 0x20000). на всякий случай приложил пример проекта для C3-starter-kit с ниосом и флешем. загрузка идет с флеш.
Прикрепленные файлы
Прикрепленный файл  NIOS_FLASH.zip ( 957.95 килобайт ) Кол-во скачиваний: 51
 
Go to the top of the page
 
+Quote Post
yes
сообщение Dec 18 2009, 13:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



я пишу в CPI_FLASH программу НИОСа, а загрузка ПЛИС из EPCS - то есть без ограничений - пиши куда хочешь (ну по крайней мере я не могу придумать ограничение)
тем более 0 блок как раз стирается и записывается

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

пока отложу вопрос, но если подскажете, что не правильно - спасибо
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 18 2009, 23:55
Сообщение #4


Гуру
******

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



Цитата
хотя это spansion - типа, чистый интел

а в SOPC тайминги для нее правильно выстывлены? что за микросхема? eще есть ключ --verbose, с ним что выводит?
Go to the top of the page
 
+Quote Post
yes
сообщение Dec 21 2009, 10:08
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(vadimuzzz @ Dec 19 2009, 02:55) *
а в SOPC тайминги для нее правильно выстывлены? что за микросхема? eще есть ключ --verbose, с ним что выводит?

пока сейчас праздники, сдача горящих проектов и т.п. - плотно разбираться с железкой не могу
этим постом я хотел уточнить - все ли я понимаю во "флаш программинг флоу"

тайминги (второй экран компонента в SOPC) выставлены,
и в проекте с другим процем (LEON), да и с НИОС-ом в "ручном" режиме без использования HAL флаш работает

с микросхемой я ошибся, не спансион, а ST M28W320
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 22 2009, 07:22
Сообщение #6


Гуру
******

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



Цитата(yes @ Dec 21 2009, 16:08) *
с микросхемой я ошибся, не спансион, а ST M28W320

тогда может потребоваться flash override(см. ug_nios2_flash_programmer.pdf). и нужна доп. информация о распиновке.
Go to the top of the page
 
+Quote Post
yes
сообщение Dec 23 2009, 10:25
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(vadimuzzz @ Dec 22 2009, 10:22) *
тогда может потребоваться flash override(см. ug_nios2_flash_programmer.pdf). и нужна доп. информация о распиновке.


есть подозрение на data cache + burst
то есть абсолютно одинаковые дизайны, с "простым ниосом" флаш шьется, с data cache + burst не шьется

ну то есть - меняю в SOPC конфигурацию процессора - наблюдаю разницу
может нарушается время bus idle между выборками, может еще что-то - буду смотреть alt_flash... и вейвформы
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 23 2009, 11:02
Сообщение #8


Гуру
******

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



yes
странно, конечно. но стоит все-таки проверить CFI-таблицу, тем более, что ST-шные флешки в ug_nios2_flash_programmer отмечены как проблемные. кэши у меня в проекте стояли, добавил burst, сбой воспроизвел. завтра буду мучить )
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 25 2009, 03:49
Сообщение #9


Гуру
******

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



понаблюдал пациента изнутри, результаты меня, мягко говоря озадачили. как наблюдал: взял систему с ниос, on-chip, cfi, добавил сигнал-тап со всеми сигналами флешки. в отладчике запускал программу, которая пытается стереть 0 сектор. как было выше отмечено, при добавлении к instruction cache опции burst, flash-programmer перестает работать, долго тупит(ждет таймаута, как выяснилось).
вот так выполняется команда Read Device Identifier(flash Intel P30)
Код
flash->write_native((alt_u8*)flash->dev.base_addr + block_offset, 0x90);

правильная запись

неправильная запись

соответственно, чтение результата(он должен сказать, залочен ли сектор)
Код
locked = IORD_8DIRECT(flash->dev.base_addr, block_offset + 4);

"правильно"

"неправильно"

далее, разлочка сектора(случайно, даже "неправильный" вариант иногда показывает, что сектор заблокирован)
Код
flash->write_native((alt_u8*)flash->dev.base_addr + block_offset, 0x60);
flash->write_native((alt_u8*)flash->dev.base_addr + block_offset, 0xD0);

привожу только 1 команду, вторая - аналогично:
правильная запись

неправильная запись

далее читается статус, в "неправильном" варианте читается чушь, долго висит таймаут и т.д.
теперь мысли по поводу бага: я считаю, что виноват CFI. по поводу опции burst (упреждающее чтение при промахе в кэше) в манах пишется, что ее стоит включать, если используется dram, иначе - выключать. тогда, если в проекте есть dram+flash, эту опцию включать не нужно(а практика показывает, что и нельзя), странно, имхо. ведь та же P30 умеет чтение пачками разного размера, казалось бы, почему нет? проведенные выше тесты показывают, что при включении опции burst, контроллер CFI начинает писать чушь по левым адресам, хотя как я понимаю, эта опция должна влиять только на чтение. неправильное же чтение из flash(и все остальное поведение), есть всего лишь следствие. м.б. стоит пободаться с саппортом альтеры, но я думаю, они скажут "снимите галочку" и пошлют. хотя и в "правильном" варианте при чтении идут паразитные транзакции, да и адресная шина зачем-то болтается как попало...
Go to the top of the page
 
+Quote Post
yes
сообщение Dec 25 2009, 14:55
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



большое спасибо за информацию, и с наступающим smile.gif

я буду разбираться позже (ну никак нет времени) - сейчас использую два проекта - один с бёрстом (естественно основная память SDRAM) боевой, другой SOF с "простым" процем для заливки флаши (через строку)

я бы попробовал подправить адрес CFI_FLASH_BASE на +0x80000000 в system.h - чтобы гарантированный некешируемый доступ был - может удастся обмануть

пока недостаточно разбираюсь с механизмом сборки и когда system.h переписывается

------------------------
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Dec 25 2009, 15:31
Сообщение #11


Гуру
******

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



Цитата(yes @ Dec 25 2009, 20:55) *
я бы попробовал подправить адрес CFI_FLASH_BASE на +0x80000000 в system.h - чтобы гарантированный некешируемый доступ был - может удастся обмануть

в коде драйвера везде IORD_8DIRECT/IOWR_8DIRECT, т.е. по-любому мимо кэша. надо бы корку ковырнуть, но там код объемный и не особо читабельный. если у вас есть связь с альтеровским саппортом, попробуйте достучаться.
Цитата
пока недостаточно разбираюсь с механизмом сборки и когда system.h переписывается

он создается заново каждый раз, когда делаются изменения в SOPC.
Цитата
с наступающим smile.gif

симметрично smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016