yes 23 December 17, 2009 Posted December 17, 2009 · Report post вроде бы удобный тул, чтобы мануал на флашку не читать, но прошить не могу. вот что-то такое происходит [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 тогда не добрался, но тоже не сразу валится) Quote Share this post Link to post Share on other sites More sharing options...
vadimuzzz 0 December 18, 2009 Posted December 18, 2009 · Report post вроде в 0 сектор писать нельзя, по крайней мере sof для циклона3(надо смещение 0x20000). на всякий случай приложил пример проекта для C3-starter-kit с ниосом и флешем. загрузка идет с флеш. NIOS_FLASH.zip Quote Share this post Link to post Share on other sites More sharing options...
yes 23 December 18, 2009 Posted December 18, 2009 · Report post я пишу в CPI_FLASH программу НИОСа, а загрузка ПЛИС из EPCS - то есть без ограничений - пиши куда хочешь (ну по крайней мере я не могу придумать ограничение) тем более 0 блок как раз стирается и записывается на другой плате (ките альтеровском с другой флашкой (AMD-шной)) все заработало, либо не поддерживается флашка (хотя это spansion - типа, чистый интел), либо что-то не так с железкой.... пока отложу вопрос, но если подскажете, что не правильно - спасибо Quote Share this post Link to post Share on other sites More sharing options...
vadimuzzz 0 December 18, 2009 Posted December 18, 2009 · Report post хотя это spansion - типа, чистый интел а в SOPC тайминги для нее правильно выстывлены? что за микросхема? eще есть ключ --verbose, с ним что выводит? Quote Share this post Link to post Share on other sites More sharing options...
yes 23 December 21, 2009 Posted December 21, 2009 · Report post а в SOPC тайминги для нее правильно выстывлены? что за микросхема? eще есть ключ --verbose, с ним что выводит? пока сейчас праздники, сдача горящих проектов и т.п. - плотно разбираться с железкой не могу этим постом я хотел уточнить - все ли я понимаю во "флаш программинг флоу" тайминги (второй экран компонента в SOPC) выставлены, и в проекте с другим процем (LEON), да и с НИОС-ом в "ручном" режиме без использования HAL флаш работает с микросхемой я ошибся, не спансион, а ST M28W320 Quote Share this post Link to post Share on other sites More sharing options...
vadimuzzz 0 December 22, 2009 Posted December 22, 2009 · Report post с микросхемой я ошибся, не спансион, а ST M28W320 тогда может потребоваться flash override(см. ug_nios2_flash_programmer.pdf). и нужна доп. информация о распиновке. Quote Share this post Link to post Share on other sites More sharing options...
yes 23 December 23, 2009 Posted December 23, 2009 · Report post тогда может потребоваться flash override(см. ug_nios2_flash_programmer.pdf). и нужна доп. информация о распиновке. есть подозрение на data cache + burst то есть абсолютно одинаковые дизайны, с "простым ниосом" флаш шьется, с data cache + burst не шьется ну то есть - меняю в SOPC конфигурацию процессора - наблюдаю разницу может нарушается время bus idle между выборками, может еще что-то - буду смотреть alt_flash... и вейвформы Quote Share this post Link to post Share on other sites More sharing options...
vadimuzzz 0 December 23, 2009 Posted December 23, 2009 · Report post yes странно, конечно. но стоит все-таки проверить CFI-таблицу, тем более, что ST-шные флешки в ug_nios2_flash_programmer отмечены как проблемные. кэши у меня в проекте стояли, добавил burst, сбой воспроизвел. завтра буду мучить ) Quote Share this post Link to post Share on other sites More sharing options...
vadimuzzz 0 December 25, 2009 Posted December 25, 2009 · Report post понаблюдал пациента изнутри, результаты меня, мягко говоря озадачили. как наблюдал: взял систему с ниос, 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(и все остальное поведение), есть всего лишь следствие. м.б. стоит пободаться с саппортом альтеры, но я думаю, они скажут "снимите галочку" и пошлют. хотя и в "правильном" варианте при чтении идут паразитные транзакции, да и адресная шина зачем-то болтается как попало... Quote Share this post Link to post Share on other sites More sharing options...
yes 23 December 25, 2009 Posted December 25, 2009 · Report post большое спасибо за информацию, и с наступающим :) я буду разбираться позже (ну никак нет времени) - сейчас использую два проекта - один с бёрстом (естественно основная память SDRAM) боевой, другой SOF с "простым" процем для заливки флаши (через строку) я бы попробовал подправить адрес CFI_FLASH_BASE на +0x80000000 в system.h - чтобы гарантированный некешируемый доступ был - может удастся обмануть пока недостаточно разбираюсь с механизмом сборки и когда system.h переписывается ------------------------ Quote Share this post Link to post Share on other sites More sharing options...
vadimuzzz 0 December 25, 2009 Posted December 25, 2009 · Report post я бы попробовал подправить адрес CFI_FLASH_BASE на +0x80000000 в system.h - чтобы гарантированный некешируемый доступ был - может удастся обмануть в коде драйвера везде IORD_8DIRECT/IOWR_8DIRECT, т.е. по-любому мимо кэша. надо бы корку ковырнуть, но там код объемный и не особо читабельный. если у вас есть связь с альтеровским саппортом, попробуйте достучаться. пока недостаточно разбираюсь с механизмом сборки и когда system.h переписывается он создается заново каждый раз, когда делаются изменения в SOPC. с наступающим smile.gif симметрично :) Quote Share this post Link to post Share on other sites More sharing options...