Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: не могу залить прошивку в CFI
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
barabek
Использую "altera Cyclone III starter board" от terasic. Причем до этого работал с этой боардой в QII версии 9.0 и той же версии ниоса. Проблем не было. Появились проблемы в компе - переставил систему. Ну и заодно перешел с XP на 7-ку, накачал свежий софт QUartus 11.1 sp1. Пересобрал систему ниоса в qsys вместо SOPC-билдера. Скомпилил железо и конфигурацию залил в установленную на плате CFI-flash 128p30 от интела. Железо конфигурируется. А вот пытаюсь залить в ту же флеш прошивку для ниоса - облом. flash programmer выдает такой лог :

Код
Info: 02.02.2012 17:42:44 - (INFO) elf2flash: args = --input=C:/altera/ALTprogects/CourseRecorder_forQII_V11_1/NiosSoft/CR/CR.elf --output=C:/altera/ALTprogects/CourseRecorder_forQII_V11_1/NiosSoft/CR_bsp/flash/CR_CFI_FLASH.flash --boot=C:/altera/ALTprogects/CourseRecorder_forQII_V11_1/NiosSoft/CR/MyDummyBoot.srec --base=0x3000000 --end=0x3ffffff --reset=0x3000000 --verbose
Info: 02.02.2012 17:42:44 - (FINE) elf2flash: Starting
Info: 02.02.2012 17:42:44 - (WARNING) elf2flash: Supplied reset address: 0x3000000 differs from the elf file reset vector: 0x4003800.
Info: 02.02.2012 17:42:44 - (FINER) elf2flash: Program Record: 6616 bytes destined for 0x0
Info: 02.02.2012 17:42:44 - (FINER) elf2flash: Program Record: 416 bytes destined for 0x4000000
Info: 02.02.2012 17:42:44 - (FINER) elf2flash: Start Record: 0
Info: 02.02.2012 17:42:44 - (FINE) elf2flash: Done
Info: Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Info: Resetting and pausing target processor: OK
Info: Found CFI table in 16 bit mode
Info: Raw CFI query table read from device:
Info:    0: 89 00 1B 88 00 00 00 00  89 00 CF BF 00 00 00 00  ................
Info:   10: 89 00 1B 88 00 00 00 00  89 00 CF BF 00 00 00 00  ................
Info:   20: 51 00 52 00 59 00 01 00  00 00 0A 00 01 00 00 00  Q.R.Y...........
Info:   30: 00 00 00 00 00 00 17 00  20 00 85 00 95 00 08 00  ........ .......
Info:   40: 09 00 0A 00 00 00 01 00  01 00 02 00 00 00 18 00  ................
Info: CFI query table read from device:
Info:   10: 51 52 59 01 00 0A 01 00  00 00 00 17 20 85 95 08  QRY......... ...
Info:   20: 09 0A 00 01 01 02 00 18  01 00 06 00 02 03 00 80  ................
Info:   30: 00 7E 00 00 02 00 00 00  00 FF FF FF FF FF FF FF  .~..............
Info:   40: FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................
Info:   50: FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................
Info:   60: FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................
Info:   70: FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................
Info:   80: FE 01 68 03 D7 FF 06 FF  FF FF FF FF FF FF FF FF  ..h.............
Info:   90: FF FF 15 FF FF FF FF FF  FF FF 35 FF 04 FF FF FF  ..........5.....
Info:   A0: FF FF 17 FF FF FF 04 FF  FF FF FF FF FF FF FF FF  ................
Info:   B0: FF FF FF FF FF FF 04 FF  FF FF FF FF FF FF 14 FF  ................
Info:   C0: FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................
Info:   D0: FF FF FF FF FF FF FF FF  04 FF FF FF FF FF 12 FF  ................
Info:   E0: FF FF 3A FF FF FF FF FF  04 FF 04 FF FF FF FF FF  ..:.............
Info:   F0: FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................
Info: CFI extended table read from device:
Info:    0: 50 52 49 31 34 E6 01 00  00 01 03 00 18 90 02 80  PRI14...........
Info:   10: 00 03 03 89 00 00 00 00  00 00 10 00 04 03 04 01  ................
Info:   20: 02 03 07 01 24 00 01 00  11 00 00 02 03 00 80 00  ....$...........
Info:   30: 64 00 02 03 00 80 00 00  00 80 7E 00 00 02 64 00  d.........~...d.
Info: Read autoselect code 0089-881B (in 16 bit mode)
Info: No CFI override data for [FLASH-0089-881B]
Info: Target timeout loop runs 995510 times/s
Info: Timeout set to 510 loops
Info: Device size is 16MByte
Info: Erase regions are:
Info:   offset        0:   4 x 32K
Info:   offset    20000: 127 x 128K
Info: Device supports Intel style programming algorithm
Info: Multi-byte programming with 64 byte buffer
Info: Sector erase timeout is 4s
Info: Word program timeout is 512us
Info: Buffer program timeout is 1ms
Info:
Info:               : Checksumming existing contents          
Info: 00000000      : Checksum failed - needs erase then program
Info:
Info: 00000000      : Reading existing contents              
Info:
Info: Checksummed/read 26kB in 0.6s                                        
Info:
Info: 00000000 ( 0%): Erasing                                
Info:
Info: Erased 32kB in 0.4s (80.0kB/s)                        
Info:
Info: 00000000 ( 0%): Programming                            
Info:
Info: Program failed                                        
Info: Leaving target processor paused
Error: Error code: 4 for command: nios2eds/bin/nios2-flash-programmer "C:/altera/ALTprogects/CourseRecorder_forQII_V11_1/NiosSoft/CR_bsp/flash/CR_CFI_FLASH.flash" --base=0x3000000 --accept-bad-sysid --device=1 --instance=0 '--cable=USB-Blaster on localhost [USB-0]' --program --verbose


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

А вот насчет записи - непонятно. На всякий прикладываю настройки флеша.
Wic
Если загрузить прошивку через бластер, читать-писать из ниоса во флэшку получается?
barabek
Цитата(Wic @ Feb 6 2012, 18:56) *
Если загрузить прошивку через бластер, читать-писать из ниоса во флэшку получается?


Для ниоса тестовую прогу для доступа к памяти не писал. Я проверил с помощью System console - читает, пишет и стирает. Все отлично. Причем в качестве мастера в консоли используется процессор (его я предварительно остановил) .Т.е. у меня такой скрипт:

Код
processor_stop [ lindex [ get_service_paths processor ] 0 ]

set master [ lindex [ get_service_paths master] 0 ]
open_service master $master
#**************** procidures************************
# ----READ STATUS REGISTER--------
proc ReadSR {master} {
    master_write_8 $master 0x03000000 0x70
    set SR [master_read_16 $master 0x03000000 1]
    if {[expr $SR&0x01]} {puts "SR INFO: BEFP in progress"}
    if {[expr $SR&0x02]} {puts "SR ERROR: Block locked! operation aborted"}
    if {[expr $SR&0x04]} {puts "SR INFO: Program suspend in effect"}
    if {[expr $SR&0x08]} {puts "SR ERROR: Vpp<Vpplk during program or erase!"}
    if {[expr $SR&0x10]} {puts "SR ERROR: Program fail"}
    if {[expr $SR&0x20]} {puts "SR ERROR: Erase fail"}
    if {[expr $SR&0x40]} {puts "SR INFO: Erase suspend in effect"}
    return $SR}
# ----END READ STATUS REGISTER--------
proc ClearSR {master} {master_write_8 $master 0x03000000 0x50}
proc BlockUnlock {master addr} {
    master_write_8 $master [expr 0x03000000+$addr] 0x60
    master_write_8 $master [expr 0x03000000+$addr] 0xd0 }
proc EraseBlock {master addr} {
    master_write_8 $master [expr 0x03000000+$addr] 0x20
    master_write_8 $master [expr 0x03000000+$addr] 0xd0 }
# ---------LED blinking---------------------
puts "Start led blink"
set val 0
set j 0
for {set i 400} {$i!=0} {incr i -1} {
    master_write_8 $master 0x4004940 $val
    incr j
    if {$j==100} {
        set val [expr $val^0x01]
        set j 0
    }
  }
puts "finish led blink"
# ---------END LED blinking---------------------
# ----READ RCR( Read config reg)--------
master_write_8 $master 0x03000000 0x90
set cont [master_read_16 $master [expr 0x03000000+0x05*2] 1]
puts "RCR=$cont"
# ----END READ RCR( Read config reg)--------
puts "SR=[ReadSR $master]"
ClearSR $master
BlockUnlock $master 0
EraseBlock $master 0
while {[expr [ReadSR $master]&0x80]!=0x80} {}
# ----WORD PROGRAM--------
for {set i 0} {$i<10} {incr i} {
    master_write_8 $master 0x03000000 0x40
    master_write_16 $master [expr 0x03000000+$i*2] [expr 0x1234+$i]
    }
# ----END WORD PROGRAM--------
puts "SR=[ReadSR $master]"

master_write_8 $master 0x03000000 0xff
set cont [master_read_16 $master [expr 0x03000000+0x00*2] 10]
puts "$cont"

close_service  master $master



При запуске скрита светодиод на плате несколько раз моргает, а затем в окне вывода пишет:

Код
Start led blink
finish led blink
RCR=0xbfcf
SR=0x0080
SR=0x0080
0x1234 0x1235 0x1236 0x1237 0x1238 0x1239 0x123a 0x123b 0x123c 0x123d


Если в скрипте оставляю только чтение и выключаю/включаю плату, то содержимое флэш правильное. Т.е. запись проходит. И запись с использованием ниоса и всей qsys - системой. Интересно механизм записи с использованием команды nios2-flash-programmer другой, нежели у меня с использованием system console?

PS. У меня в скрипте адрес 0x3000000 - это адрес флэш в адресном пространстве системы.

UPD. При использовании nios2-flash-programmer 2 первых слова все-таки записываются, а дальше нет. Это я содержимое flash после программера смотрю в консоли.
barabek
В общем, благодаря помощи форумчан проблему решил biggrin.gif . Даже двумя способами. Первый - написал скрипт и через system console залил. Но шьет медленно, возможно из-за того что пишу по словам, а не буфером по 32 байта. Второй - установил на том же компе версию 9.0sp2 и из его command shell прекрасно шьется. В общем - какая-то бага в новой версии. Странно, что ни у кого нет, а у меня как всегда.




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