Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: nios2-flash-programmer можно пользовать?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
yes
вроде бы удобный тул, чтобы мануал на флашку не читать, но прошить не могу.

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

Код
[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 тогда не добрался, но тоже не сразу валится)
vadimuzzz
вроде в 0 сектор писать нельзя, по крайней мере sof для циклона3(надо смещение 0x20000). на всякий случай приложил пример проекта для C3-starter-kit с ниосом и флешем. загрузка идет с флеш.
yes
я пишу в CPI_FLASH программу НИОСа, а загрузка ПЛИС из EPCS - то есть без ограничений - пиши куда хочешь (ну по крайней мере я не могу придумать ограничение)
тем более 0 блок как раз стирается и записывается

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

пока отложу вопрос, но если подскажете, что не правильно - спасибо
vadimuzzz
Цитата
хотя это spansion - типа, чистый интел

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

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

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

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

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


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

ну то есть - меняю в SOPC конфигурацию процессора - наблюдаю разницу
может нарушается время bus idle между выборками, может еще что-то - буду смотреть alt_flash... и вейвформы
vadimuzzz
yes
странно, конечно. но стоит все-таки проверить CFI-таблицу, тем более, что ST-шные флешки в ug_nios2_flash_programmer отмечены как проблемные. кэши у меня в проекте стояли, добавил burst, сбой воспроизвел. завтра буду мучить )
vadimuzzz
понаблюдал пациента изнутри, результаты меня, мягко говоря озадачили. как наблюдал: взял систему с ниос, 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(и все остальное поведение), есть всего лишь следствие. м.б. стоит пободаться с саппортом альтеры, но я думаю, они скажут "снимите галочку" и пошлют. хотя и в "правильном" варианте при чтении идут паразитные транзакции, да и адресная шина зачем-то болтается как попало...
yes
большое спасибо за информацию, и с наступающим smile.gif

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

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

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

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

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

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

симметрично smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.