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>
__archive__
Olivier Schonken 2012-03-18 15:36:54 +02:00 committed by Spencer Oliver
parent f28a5d9217
commit d1cd97777b
7 changed files with 2377 additions and 0 deletions

View File

@ -4538,6 +4538,7 @@ flash bank $_FLASHNAME aduc702x 0 0 0 0 $_TARGETNAME
@end example @end example
@end deffn @end deffn
@anchor{at91sam3}
@deffn {Flash Driver} at91sam3 @deffn {Flash Driver} at91sam3
@cindex at91sam3 @cindex at91sam3
All members of the AT91SAM3 microcontroller family from All members of the AT91SAM3 microcontroller family from
@ -4602,6 +4603,13 @@ This command shows/sets the slow clock frequency used in the
@end deffn @end deffn
@end deffn @end deffn
@deffn {Flash Driver} at91sam4
@cindex at91sam4
All members of the AT91SAM4 microcontroller family from
Atmel include internal flash and use ARM's Cortex-M4 core.
This driver uses the same cmd names/syntax as @xref{at91sam3}.
@end deffn
@deffn {Flash Driver} at91sam7 @deffn {Flash Driver} at91sam7
All members of the AT91SAM7 microcontroller family from Atmel include All members of the AT91SAM7 microcontroller family from Atmel include
internal flash and use ARM7TDMI cores. The driver automatically internal flash and use ARM7TDMI cores. The driver automatically

View File

@ -9,6 +9,7 @@ libocdflashnor_la_SOURCES = \
NOR_DRIVERS = \ NOR_DRIVERS = \
aduc702x.c \ aduc702x.c \
at91sam4.c \
at91sam3.c \ at91sam3.c \
at91sam7.c \ at91sam7.c \
avrf.c \ avrf.c \

2310
src/flash/nor/at91sam4.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -27,6 +27,7 @@ extern struct flash_driver lpc288x_flash;
extern struct flash_driver lpc2900_flash; extern struct flash_driver lpc2900_flash;
extern struct flash_driver cfi_flash; extern struct flash_driver cfi_flash;
extern struct flash_driver at91sam3_flash; extern struct flash_driver at91sam3_flash;
extern struct flash_driver at91sam4_flash;
extern struct flash_driver at91sam7_flash; extern struct flash_driver at91sam7_flash;
extern struct flash_driver str7x_flash; extern struct flash_driver str7x_flash;
extern struct flash_driver str9x_flash; extern struct flash_driver str9x_flash;
@ -59,6 +60,7 @@ static struct flash_driver *flash_drivers[] = {
&cfi_flash, &cfi_flash,
&at91sam7_flash, &at91sam7_flash,
&at91sam3_flash, &at91sam3_flash,
&at91sam4_flash,
&str7x_flash, &str7x_flash,
&str9x_flash, &str9x_flash,
&aduc702x_flash, &aduc702x_flash,

View File

@ -0,0 +1,3 @@
source [find target/at91sam4sXX.cfg]
$_TARGETNAME configure -event gdb-attach { reset init }

View File

@ -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
}

View File

@ -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