⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vx_rw_flash.cmd

📁 移植好的Ibm405ep bsp板极支持包
💻 CMD
📖 第 1 页 / 共 2 页
字号:
  read IIC0_STS data
endwhile

read IIC0_MDBUF data              # read master buf to get the byte 5(# banks)
set temp = (temp<<8) | data

#----------------------------------------------------------------------
# Now check # rows, # cols, and # internal banks (all stored in temp)
# to determine the addressing mode. This is needed for programming
# the SDRAM controller.
#----------------------------------------------------------------------
if (temp == 0x000B0902 || temp == 0x000B0A02)
  set mode = 0
elseif (temp == 0x000C0904 || temp == 0x000C0A04)
  set mode = 1
elseif (temp == 0x000D0904 || temp == 0x000D0A04 || temp == 0x000D0B04)
  set mode = 2
elseif (temp == 0x000C0804 || temp == 0x000C0802)
  set mode = 3
elseif (temp == 0x000B0802 || temp == 0x000B0804)
  set mode = 4
elseif (temp == 0x000D0802 || temp == 0x000D0804)
  set mode = 5
elseif (temp == 0x000D0902 || temp == 0x000D0A02)
  set mode = 6
else
  post note Invalid mode read from DIMM or I2C read failed!!
endif

#----------------------------------------------------------------------
# Set up a single 8MB SDRAM bank with the correct mode. No need
# to set more than 8MB for the flash update program.
#----------------------------------------------------------------------
set temp = (0x00020001 | (mode<<13))    # mode bits are 16:18 of MB0CF
				        # 0x00020001 enables an 8MB bank
write SDRAM0_B0CR temp
delay 1
write SDRAM0_CFG 0x80800000	        # enable the memory controller


#
# Initialize SDRAM between 0x00000000 and 0x00080000 to look like a blank
# flash (all 0xff).
#
print "Initializing SDRAM."
memfill 0x00000000 0x00080000 0xff

#
# Load the new bootrom image into SDRAM on top of the memory just initialized.
#
print "Loading new VxWorks bootrom image ", input_file, " into SDRAM."
create before
set before = $ERRORS
load mot input_file
if ($ERRORS > before)
   uncreate input_file
   end                          # exit command file
endif

#
# Place a branch instruction at the end of the bootrom image that will get
# the processor from its reset vector to the entry point of the bootrom when
# it is executed from flash (0xFFFFFFFC to ROM_TEXT_ADRS).  Update this
# instruction if ROM_TEXT_ADRS is modified in the BSP.
#
assm "ba   0xfff80100"  0x0007fffc

print "Loading flash update code into SDRAM."

#
# Put assembly code in SDRAM that will program the bootrom image into an
# AMD 29F040 flash device
#

# progflash:
write r3 0xfff80000         # flash base address
write r4 0x00000000         # base address of new ROM image
write r5 0xfff80000         # flash base address for increment

# Set r3 to base flash address
assm "addi    r0, 0, 0xF0"                      0x80000
assm "stb     r0, 0x0000(r3)"                   0x80004
assm "addi    r0, 0, 0xAA"                      0x80008
assm "stb     r0, 0x5555(r3)"                   0x8000c
assm "addi    r0, 0, 0x55"                      0x80010
assm "stb     r0, 0x2AAA(r3)"                   0x80014
assm "addi    r0, 0, 0x90"                      0x80018
assm "stb     r0, 0x5555(r3)"                   0x8001c

# r10 = MFG code
# r11 = Device code
assm "lbz     r10, 0x0000(r3)"                  0x80020
assm "lbz     r11, 0x0001(r3)"                  0x80024

# Reset flash for read access
assm "addi    r0, 0, 0xf0"                      0x80028
assm "stb     r0, 0x0000(r3)"                   0x8002c

# Does MFG code = 0x01 (AMD)?
assm "cmpwi   r10, 0x01"                        0x80030
assm "bne     $+0x0c"                           0x80034  # to device_err:

# Does Device code = 0xa4 (29F040)?
assm "cmpwi   r11, 0xa4"                        0x80038
assm "beq     $+0x0c"                           0x8003c  # to device_ok:

#device_err:
assm "addi    r0, 0, -1"                        0x80040
assm "bl      $+0xd8"                           0x80044  # to done:

#device_ok:
# erase whole chip
assm "addi    r0, 0, 0xaa"                      0x80048
assm "stb     r0, 0x5555(r3)"                   0x8004c
assm "addi    r0, 0, 0x55"                      0x80050
assm "stb     r0, 0x2aaa(r3)"                   0x80054
assm "addi    r0, 0, 0x80"                      0x80058
assm "stb     r0, 0x5555(r3)"                   0x8005c
assm "addi    r0, 0, 0xaa"                      0x80060
assm "stb     r0, 0x5555(r3)"                   0x80064
assm "addi    r0, 0, 0x55"                      0x80068
assm "stb     r0, 0x2aaa(r3)"                   0x8006c
assm "addi    r0, 0, 0x10"                      0x80070
assm "stb     r0, 0x5555(r3)"                   0x80074

#erase_loop:
assm "lbz     r0, 0x0000(r3)"                   0x80078
assm "rlwinm  r0,r0,0x0,0x18,0x18"              0x8007c
assm "cmpwi   cr0, r0, 0"                       0x80080
assm "bne     $+0x28"                           0x80084  # to program_flash:
assm "lbz     r0, 0x0000(r3)"                   0x80088
assm "rlwinm  r0, r0, 0x0, 0x1a, 0x1a"          0x8008c
assm "cmpwi   cr0, r0, 0"                       0x80090
assm "beq     $-0x1c"                           0x80094  # to erase_loop:
assm "lbz     r0, 0x0000(r3)"                   0x80098
assm "rlwinm  r0, r0, 0x0, 0x18, 0x18"          0x8009c
assm "cmpwi   cr0, r0, 0"                       0x800a0
assm "bne     $+0x08"                           0x800a4  # to program_flash:
# err condition so set return code and leave
assm "bl      $-0x68"                           0x800a8  # to device_err:

#program_flash:
# Set (size) counter to 0x80000 bytes (512KB)
assm "addis   r0, 0, 0x0008"                    0x800ac
assm "ori     r0, r0, 0x0000"                   0x800b0
assm "mtctr   r0"                               0x800b4

#top_of_loop:
assm "addi    r0, 0, 0xaa"                      0x800b8
assm "stb     r0, 0x5555(r3)"                   0x800bc
assm "addi    r0, 0, 0x55"                      0x800c0
assm "stb     r0, 0x2aaa(r3)"                   0x800c4
assm "addi    r0, 0, 0xa0"                      0x800c8
assm "stb     r0, 0x5555(r3)"                   0x800cc
assm "lbz     r2, 0x0000(r4)"                   0x800d0
assm "stb     r2, 0x0(r5)"                      0x800d4

#poll:
assm "lbz     r0, 0x0000(r5)"                   0x800d8
assm "rlwinm  r0, r0, 0x0, 0x18, 0x18"          0x800dc
assm "rlwinm  r1, r2, 0x0, 0x18, 0x18"          0x800e0
assm "cmpw    cr0, r0, r1"                      0x800e4
assm "beq     $+0x28"                           0x800e8  # to increment counters

assm "lbz     r0, 0x0(r5)"                      0x800ec
assm "rlwinm  r0, r0, 0x0, 0x1a, 0x1a"          0x800f0
assm "cmpwi   cr0, r0, 0"                       0x800f4
assm "beq     $-0x20"                           0x800f8  # to poll:
assm "lbz     r0, 0x0(r5)"                      0x800fc
assm "rlwinm  r0, r0, 0x0, 0x18, 0x18"          0x80100
assm "rlwinm  r1, r2, 0x0, 0x18, 0x18"          0x80104
assm "cmpw    cr0, r0, r1"                      0x80108
assm "bne     $-0xcc"                           0x8010c  # to device_err
# increment counters
assm "addi    r4, r4, 1"                        0x80110
assm "addi    r5, r5, 1"                        0x80114
assm "bdnz    $-0x60"                           0x80118  # to top_of_loop:
#done:
assm "b       $+0"                              0x8011c

write iar 0x80000
bp set 0x8011c            # set a breakpoint at the end
stuff "iccci r0,r0"       # invalidate I-cache

print "Starting flash update."
run

if (r0 == -1)
  print "Flash update failed."
else
  print "Flash update successful."
endif

uncreate input_file
bp clear all

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -