Jump to content
    

nios2-flash-programmer можно пользовать?

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

 

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

 

[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 тогда не добрался, но тоже не сразу валится)

Share this post


Link to post
Share on other sites

вроде в 0 сектор писать нельзя, по крайней мере sof для циклона3(надо смещение 0x20000). на всякий случай приложил пример проекта для C3-starter-kit с ниосом и флешем. загрузка идет с флеш.

NIOS_FLASH.zip

Share this post


Link to post
Share on other sites

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

тем более 0 блок как раз стирается и записывается

 

на другой плате (ките альтеровском с другой флашкой (AMD-шной)) все заработало,

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

либо что-то не так с железкой....

 

пока отложу вопрос, но если подскажете, что не правильно - спасибо

Share this post


Link to post
Share on other sites

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

а в SOPC тайминги для нее правильно выстывлены? что за микросхема? eще есть ключ --verbose, с ним что выводит?

Share this post


Link to post
Share on other sites

а в SOPC тайминги для нее правильно выстывлены? что за микросхема? eще есть ключ --verbose, с ним что выводит?

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

этим постом я хотел уточнить - все ли я понимаю во "флаш программинг флоу"

 

тайминги (второй экран компонента в SOPC) выставлены,

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

 

с микросхемой я ошибся, не спансион, а ST M28W320

Share this post


Link to post
Share on other sites

с микросхемой я ошибся, не спансион, а ST M28W320

тогда может потребоваться flash override(см. ug_nios2_flash_programmer.pdf). и нужна доп. информация о распиновке.

Share this post


Link to post
Share on other sites

тогда может потребоваться flash override(см. ug_nios2_flash_programmer.pdf). и нужна доп. информация о распиновке.

 

есть подозрение на data cache + burst

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

 

ну то есть - меняю в SOPC конфигурацию процессора - наблюдаю разницу

может нарушается время bus idle между выборками, может еще что-то - буду смотреть alt_flash... и вейвформы

Share this post


Link to post
Share on other sites

yes

странно, конечно. но стоит все-таки проверить CFI-таблицу, тем более, что ST-шные флешки в ug_nios2_flash_programmer отмечены как проблемные. кэши у меня в проекте стояли, добавил burst, сбой воспроизвел. завтра буду мучить )

Share this post


Link to post
Share on other sites

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

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

001corwr0x90.png

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

001incwr0x90.png

соответственно, чтение результата(он должен сказать, залочен ли сектор)

locked = IORD_8DIRECT(flash->dev.base_addr, block_offset + 4);

"правильно"

002corrd0x01.png

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

002incrd0x01.png

далее, разлочка сектора(случайно, даже "неправильный" вариант иногда показывает, что сектор заблокирован)

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 команду, вторая - аналогично:

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

003corwr0x60.png

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

003incwr0x60.png

далее читается статус, в "неправильном" варианте читается чушь, долго висит таймаут и т.д.

теперь мысли по поводу бага: я считаю, что виноват CFI. по поводу опции burst (упреждающее чтение при промахе в кэше) в манах пишется, что ее стоит включать, если используется dram, иначе - выключать. тогда, если в проекте есть dram+flash, эту опцию включать не нужно(а практика показывает, что и нельзя), странно, имхо. ведь та же P30 умеет чтение пачками разного размера, казалось бы, почему нет? проведенные выше тесты показывают, что при включении опции burst, контроллер CFI начинает писать чушь по левым адресам, хотя как я понимаю, эта опция должна влиять только на чтение. неправильное же чтение из flash(и все остальное поведение), есть всего лишь следствие. м.б. стоит пободаться с саппортом альтеры, но я думаю, они скажут "снимите галочку" и пошлют. хотя и в "правильном" варианте при чтении идут паразитные транзакции, да и адресная шина зачем-то болтается как попало...

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

------------------------

Share this post


Link to post
Share on other sites

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

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

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

он создается заново каждый раз, когда делаются изменения в SOPC.

с наступающим smile.gif

симметрично :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...