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

 
 
> 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
 
Start new topic
Ответов
vadimuzzz
сообщение Dec 25 2009, 03:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:19
Рейтинг@Mail.ru


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