iPAQ flash Write-protect

From: Rob <rob.a.t.bobby.demon.co.uk>
Date: Wed Jun 13 2001 - 14:15:05 EDT

Hi,

I've got as far as writing bootldr 2.14.8 to the flash of an iPAQ 3630, and
everything went smoothly until I checked the write-protect for the bootldr
flash area using "qflash 2". It returns all zero instead of 00010001. I tried
to set it manually (several times) using "pflash 0 0xffff 1", but to no
avail. The entire session text is included below. I'm a little nervous
about hard-resetting the iPAQ without write-protect on the bootldr flash
area, so thus far I've only rebooted using the "boot" command, which works,
and I assume means that
the bootldr image HAS been successfully burned into flash. Do you have any
idea
why the write-protect appears not to set? If not, could you tell me a
little more about what qflash does? (I'm a little puzzled by the "2"
argument -is that the address offset of the flash status register, or the
flash sector number...?) Hope you can advise.

Rob Duffy

CLIENTCLIENTMap Flash virtual section to DRAM at: C1E00000
flashword=50000000
btflash_init: mfrid=00890089
  devid=00170017
walking flash descriptors
btflash_init: found flash 28F640J3A
  flashDescriptor=C002FA74
  flashSectors=C002F870
  nsectors=00000080
  flash_size=02000000
  flash_address_mask=01FFFFFF
dram_size: 02000000

>> Compaq OHH BootLoader, Rev 02.09.00
>> 00-08-15_23:13
>> ARM Processor Rev=6901B116
>> CPSR=6000001F
>> (c) 2000 Compaq Cambridge Research Laboratory
Press Return to start the OS now, any other key for monitor menu
eval param blk
booting flash...
boot_magic=EA0003FE
kernel_image_first_word=00000000
Corrupt kernel image
boot> help
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> peek flash 0x0
  addr = 00000000
  value = EA0003FE
boot> load bootldr
loading flash region bootldr
using xmodem
ready for xmodem download..

boot> peek flash 0x0
  addr = 00000000
  value = EA0003FE
boot> help
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> load bootldr
loading flash region bootldr
using xmodem
ready for xmodem download..
Download Successful
00018A80 bytes loaded to C0000400
BSD sum value is: 00000000

programming flash...erasing ...
Erasing sector 00000000
  len=00018A80
writing flash..
addr: 00000000 data: EA00008E
addr: 00010000 data: E5DE2004
verifying ... done.
boot> peek flash 0x0
  addr = 00000000
  value = EA00008E
boot> peek flash 0x020
  addr = 00000020
  value = 646C7462
boot> help
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> help
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> help
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> ?
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> boot
booting flash...
boot_magic=EA0003FE
kernel_image_first_word=00000000
Corrupt kernel image
boot> qflash 2
value = 00000000
boot> pflash 0 0xffff 1
  addr=00000000
  len=0000FFFF
  protect=00000001
Protecting sector 00000000
boot> qflash 2
value = 00000000
boot> ?
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> qflash 0
value = 00890089
boot> qflash 1
value = 00170017
boot> qflash 0x0
value = 00890089
boot> help
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> display

SA1100 Registers:
   SA1100_UART3: 80050000
      UTCR0 0x00 *0x80050000 == 00000008
      UTCR1 0x04 *0x80050004 == 00000000
      UTCR2 0x08 *0x80050008 == 00000001
      UTCR3 0x0c *0x8005000C == 00000003
      UTDR 0x10 *0x80050014 == 0000000D
      UTSR0 0x14 *0x8005001C == 00000004
      UTSR0+4 0x18 *0x8005002C == 00000000
      UTSR0+8 0x1c *0x8005003C == 00000000
      UTSR1 0x20 *0x80050020 == 00000001
boot> pflash 0 0xffff 1
  addr=00000000
  len=0000FFFF
  protect=00000001
Protecting sector 00000000
boot> qflash 2
value = 00000000
boot> qflash 0
value = 00890089
boot> qflash 0x2
value = 00000000
boot> qflash 0x0
value = 00890089
boot> qflash 000
value = 00890089
boot> qflash 3
value = 00000000
boot> qflash 2
value = 00000000
boot> qflash 1
value = 00170017
boot> boot
booting flash...
boot_magic=EA0003FE
kernel_image_first_word=00000000
Corrupt kernel image
boot> ?
Available Commands:
?
help <command>
<command> help
boot [flash|nfsroot|altkernel]
display
load [kernel | ramdisk | bootldr | params | usercode | ram]
save [all | bootldr | debugger | flash | kernel | ramdisk | params |
usercode |
world | altkernel]
peek ram|flash|int|short|byte <addr>
poke ram|flash|int|short|byte <addr>
breakpoint
qflash [cfi|id] <waddr> -- query flash
eflash <sectoraddr>|chip -- erase sector or chip
pflash <sectoraddr>|chip -- protect sector or chip
physaddr <vaddr> -- returns <paddr>
call <addr> args
jump <addr>
set <param> <value>
show [<param>]
evalparams
params [eval|show|save|reset]
flash_type <flashtype>
boot> show
  baudrate=57600;ŸÁ˜;ŸÁ€;ŸÁÀ;ŸÁdðÀ
  os=autoselect
  boot_type=flash
  download_kernel=0x00000000
  kernel_in_ram=0x00000000
  force_unzip=0x00000000
  noerase=0x00000000
  override=0x00000000
  entry=0xC0000000
  copy_ramdisk=0x00000000
  dram_size=0x02000000
  dcache_enabled=0x00000001
  icache_enabled=0x00000001
  memc_ctrl_reg=0x0000110C
  serial_number=0x000000FF
  system_rev=0x00000001
  linuxargs= root=/dev/ram initrd ramdisk_size=8192
  hostname=
  ipaddr=
  gateway=
  netmask=
  nfs_server_address=
  nfsroot=
  xmodem=0x00000001
  verbose=0x00000000
boot> qflash 2
value = 00000000
boot> boot
booting flash...
boot_magic=EA0003FE
kernel_image_first_word=00000000
Corrupt kernel image
boot> pflash 0 0xffff 1
  addr=00000000
  len=0000FFFF
  protect=00000001
Protecting sector 00000000
boot> qflash 2
value = 00000000
boot> peek flash 0x20
  addr = 00000020
  value = 646C7462
boot> peek flash 2
  addr = 00000002
  value = EA00008E
boot>
Received on Wed Jun 13 11:07:00 2001

This archive was generated by hypermail 2.1.8 : Tue May 04 2004 - 09:38:26 EDT