diff options
author | Olivier Schonken <olivier.schonken@gmail.com> | 2012-03-18 15:36:54 +0200 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2012-04-26 10:58:14 +0000 |
commit | d1cd97777b9f271698cc0efdaec16aca9ce42449 (patch) | |
tree | 5a1f7578046cfcb306dfe1f5dec3b37cf8247ab0 /tcl | |
parent | f28a5d9217fad9b5baf65eb6fa0deda4b9c89203 (diff) | |
download | riscv-openocd-d1cd97777b9f271698cc0efdaec16aca9ce42449.zip riscv-openocd-d1cd97777b9f271698cc0efdaec16aca9ce42449.tar.gz riscv-openocd-d1cd97777b9f271698cc0efdaec16aca9ce42449.tar.bz2 |
topic: Added support for the SAM4S variants
Atmel introduced 6 new Cortex-M4 processors on 2011-10-26
SAM4S16C - 1024KB flash LQFP100/BGA100
SAM4S16B - 1024KB flash LQFP64/QFN64
SAM4S16A - 1024KB flash LQFP48/QFN48
SAM4S8C - 512KB flash LQFP100/BGA100
SAM4S8B - 512KB flash LQFP64/QFN64
SAM4S8A - 512KB flash LQFP48/QFN48
The SAM4S processors still suffer from the "6 waitstates needed
to program device" errata.
Other relevant changes are:
1. Address of flash memory starts at 0x400000.
2. EWP (Erase page and write page) only works for the first two 8KB "sectors"
3. Because of the EWP not working for all the sectors, normal page writes have
to be used. The default_flash_blank_check is used to check if lockregions
should be erased.
4. The EA (Erase All) command takes 7.3s to complete. (Previous timeout was
500 ms)
5. There are 128 lockable regions of 8KB each.
Implemented default blank checking, and page erase for load_image scenarios.
This is to compensate for the EWP flash commands only working on the
first 2 8KB sectors.
Change-Id: I7c5a52b177f7849a107611fd0f635fc416cfb724
Signed-off-by: Olivier Schonken <olivier.schonken@gmail.com>
Reviewed-on: http://openocd.zylin.com/528
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'tcl')
-rw-r--r-- | tcl/board/atmel_sam4s_ek.cfg | 3 | ||||
-rw-r--r-- | tcl/target/at91sam4XXX.cfg | 45 | ||||
-rw-r--r-- | tcl/target/at91sam4sXX.cfg | 8 |
3 files changed, 56 insertions, 0 deletions
diff --git a/tcl/board/atmel_sam4s_ek.cfg b/tcl/board/atmel_sam4s_ek.cfg new file mode 100644 index 0000000..dcfa900 --- /dev/null +++ b/tcl/board/atmel_sam4s_ek.cfg @@ -0,0 +1,3 @@ +source [find target/at91sam4sXX.cfg] + +$_TARGETNAME configure -event gdb-attach { reset init } diff --git a/tcl/target/at91sam4XXX.cfg b/tcl/target/at91sam4XXX.cfg new file mode 100644 index 0000000..d9f5746 --- /dev/null +++ b/tcl/target/at91sam4XXX.cfg @@ -0,0 +1,45 @@ +# script for ATMEL sam4, a CORTEX-M4 chip +# + +if { [info exists CHIPNAME] } { + set _CHIPNAME $CHIPNAME +} else { + set _CHIPNAME sam4 +} + +if { [info exists ENDIAN] } { + set _ENDIAN $ENDIAN +} else { + set _ENDIAN little +} + +# JTAG speed should be <= F_CPU/6. F_CPU after reset is 4 MHz, so use F_JTAG = 0.5MHz +# +# Since we may be running of an RC oscilator, we crank down the speed a +# bit more to be on the safe side. Perhaps superstition, but if are +# running off a crystal, we can run closer to the limit. Note +# that there can be a pretty wide band where things are more or less stable. + +adapter_khz 500 + +adapter_nsrst_delay 100 +jtag_ntrst_delay 100 + +#jtag scan chain +if { [info exists CPUTAPID] } { + set _CPUTAPID $CPUTAPID +} else { + set _CPUTAPID 0x4ba00477 +} + +jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID + +set _TARGETNAME $_CHIPNAME.cpu +target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME + +# 16K is plenty, the smallest chip has this much +$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size 16384 -work-area-backup 0 + +$_TARGETNAME configure -event gdb-flash-erase-start { + halt +} diff --git a/tcl/target/at91sam4sXX.cfg b/tcl/target/at91sam4sXX.cfg new file mode 100644 index 0000000..0b29f5e --- /dev/null +++ b/tcl/target/at91sam4sXX.cfg @@ -0,0 +1,8 @@ +# script for ATMEL sam4, a CORTEX-M4 chip +# + + +source [find target/at91sam4XXX.cfg] + +set _FLASHNAME $_CHIPNAME.flash +flash bank $_FLASHNAME at91sam4 0x00400000 0 1 1 $_TARGETNAME |