Имеется плата на основе AT91SAM9260. Пытаюсь при помощи OpenOCD записать данные в SDRAM. В качестве хвостика использую Wiggler.
Конфиг для OpenOCD был получен допиливанием имеющегося под мои нужды. В результате получилось так:
CODE
interface parport
parport_port 0
parport_cable wiggler
source [find ./at91sam9260.cfg]
flash bank cfi 0x10000000 0x0400000 2 2 $_TARGETNAME
proc start { } {
godown
load_image armtest.bin 0x20000000
verify_image armtest.bin 0x20000000
resume 0x20000000
}
proc ramstart { } {
reset
halt
load_image armtest.elf
verify_image armtest.elf
resume 0x00200000
}
proc restart { } {
halt
resume 0x20000000
}
proc godown { } {
reset
halt
mww 0xfffffd08 0xa5000501 # RSTC_MR : enable user reset
mww 0xfffffd44 0x00008000 # WDT_MR : disable watchdog
mww 0xfffffc20 0x00004001 # CKGR_MOR : enable the main oscillator
sleep 20 # wait 20 ms
mww 0xfffffc30 0x00000001 # PMC_MCKR : switch to main oscillator
sleep 10 # wait 10 ms
#mww 0xfffffc28 0x2060bf09 # CKGR_PLLAR: Set PLLA Register for 198,656MHz
mww 0xfffffc28 0x2031bf03
#mww 0xfffffc28 0x2018bf03 # 100MHz
sleep 20 # wait 20 ms
mww 0xfffffc30 0x00000101 # PMC_MCKR : Select prescaler
sleep 10 # wait 10 ms
mww 0xfffffc30 0x00000102 # PMC_MCKR : Clock from PLLA is selected
sleep 10 # wait 10 ms
#mww 0xfffffc30 0x00000002
#sleep 10
# Now run at anything fast... ie: 10mhz!
#jtag_khz 10000 # Increase JTAG Speed to 6 MHz
#arm7_9 dcc_downloads enable # Enable faster DCC downloads
#mww 0xffffec00 0x0a0a0a0a # SMC_SETUP0 : Setup SMC for Intel NOR Flash JS28F128P30T85 128MBit
#mww 0xffffec04 0x0b0b0b0b # SMC_PULSE0
#mww 0xffffec08 0x00160016 # SMC_CYCLE0
#mww 0xffffec0c 0x00161003 # SMC_MODE0
#flash probe 0 # Identify flash bank 0
mww 0xfffff870 0xffff0000 # PIO_ASR : Select peripheral function for D15..D31
mww 0xfffff804 0xffff0000 # PIO_PDR : Disable PIO function for D15..D31
mww 0xffffef1c 0x2 # EBI_CSA : Assign EBI Chip Select 1 to SDRAM
#mww 0xffffea08 0x85227259 # SDRAMC_CR : Configure SDRAM (2 x Samsung K4S561632H-UC75 : 4M x 16Bit x 4 Banks)
#mww 0xffffea08 0x85227254 # SDRAMC_CR : Configure SDRAM (2 x Samsung K4S641632H-UC75 : 1M x 16Bit x 4 Banks)
mww 0xffffea08 0x852272D9
mww 0xffffea00 0x1 # SDRAMC_MR : issue a NOP command
mww 0x20000000 0
mww 0xffffea00 0x2 # SDRAMC_MR : issue an 'All Banks Precharge' command
mww 0x20000000 0
mww 0xffffea00 0x4 # SDRAMC_MR : issue 8 x 'Auto-Refresh' Command
mww 0x20000000 0
mww 0xffffea00 0x4
mww 0x20000000 0
mww 0xffffea00 0x4
mww 0x20000000 0
mww 0xffffea00 0x4
mww 0x20000000 0
mww 0xffffea00 0x4
mww 0x20000000 0
mww 0xffffea00 0x4
mww 0x20000000 0
mww 0xffffea00 0x4
mww 0x20000000 0
mww 0xffffea00 0x4
mww 0x20000000 0
mww 0xffffea00 0x3 # SDRAMC_MR : issue a 'Load Mode Register' command
mww 0x20000000 0
mww 0xffffea00 0x0 # SDRAMC_MR : normal mode
mww 0x20000000 0
mww 0xffffea04 0x5d2 # SDRAMC_TR : Set refresh timer count to 15us
}
После инициализации (
godown) SDRAM становится доступна для операций
mdw/mww, но попытки записать образ (
start) оканчиваются неудачей при его проверке. В тоже время, все операции по чтению/записи SRAM проходят безо всяких проблем.
Следующей интуитивной попыткой было записать в SRAM небольшой код, инициализирующий SDRAM и тестирующий ее: здесь все работает. Ожидая, что теперь то SDRAM проинициализирована должным образом, пытаюсь сделать это (sample.bin - небольшой файл, взятый из /dev/random):
Код
halt
load_image sample.bin 0x20000000
verify_image sample.bin 0x20000000
но опять не прохожу проверку.
С чем это может быть связано?