Onchip/NOR FLASH Programming User`s Guide

Onchip/NOR FLASH Programming User`s Guide
Onchip/NOR FLASH Programming User’s Guide
TRACE32 Online Help
TRACE32 Directory
TRACE32 Index
TRACE32 Documents ......................................................................................................................

FLASH Programming ....................................................................................................................

Onchip/NOR FLASH Programming User's Guide ....................................................................
1
Introduction .............................................................................................................................
4
Standard Approach .................................................................................................................
5
On-chip FLASH
5
Integrated On-chip FLASH Programming
5
Target-controlled On-chip FLASH Programming
7
Off-chip FLASH Devices Supporting CFI
10
CPU Set-up
11
Bus Configuration
11
FLASH Declaration
12
Unlocking the FLASH Devices
14
Programming the FLASH Devices
14
Full Example
15
Target-controlled FLASH Programming
16
Full Example (Target-controlled)
19
Programming Commands ......................................................................................................
FLASH.ReProgram Command (Target-controlled)
20
20
FLASH.ReProgram Command (TRACE32 Tool-based)
26
FLASH.Erase / FLASH.Program Command
27
The FLASH.AUTO Command
30
Software Breakpoints in FLASH
31
Code Patches in FLASH
35
CENSORSHIP Option
38
Unlocking Command
39
DualPort FLASH Programming ..............................................................................................
41
Benefits
41
Preconditions
41
Usage
42
Full Example
43
Full Example (ARM/Cortex)
43
Special Features for Onchip FLASHs ....................................................................................
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 1
44
OTP Sector Programming
44
Mirrored FLASH Addresses
46
Non-Cached/Cached Addresses
46
FLASH mirrored to Boot Area
47
Hardvard Architecture with Unified Memory
47
FLASH.Create Command
48
Family Code NOP
48
INFO Option
49
KEEP Option
49
BootModeHeaDer Option
50
EraseALIAS Option
51
AutoInc Option
52
FLASH.TARGET Command
53
STACKSIZE Option
53
FirmWareRAM Option
53
FLASH.CLocK Command
54
FLASH.CHANGETYPE Command
55
FLASH.UNSECUREerase Command
56
FLASH Declaration in Detail ...................................................................................................
Further Applications for FLASH Declarations Using CFI
57
57
Identical FLASH Devices in Series
57
Heterogeneous FLASH Devices in Series
60
Determining the FLASH Size
62
Truncating the FLASH Size to the CPU Address Space
65
FLASH Declaration via FLASH.CFI Dialog Window
66
Generation of Equivalent FLASH.Create Commands
67
Declarations for not CFI-conform FLASH Devices
68
Manual FLASH Declaration (TRACE32 Tool-based)
68
FLASH Devices with Uniform Sectors
69
FLASH Devices with Sectors of Different Size
70
FLASH Devices in Series
71
FLASH Devices in Parallel
72
General Recommendations
73
TRACE32 Tool-based vs. Target-controlled FLASH Programming
74
TRACE32 Tool-based FLASH Programming
75
Target-controlled FLASH Programming
76
Converting TRACE32 Tool-based to Target-controlled FLASH Programming
84
Maintaining the Declared FLASH Devices
86
List of Supported FLASH Devices
86
FLASH Programming via Boundary Scan .............................................................................
87
Boundary scan chain configuration
87
FLASH interface definition
88
FLASH Programming
89
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 2
Full Example
90
FAQ ...........................................................................................................................................
93
Further Information .................................................................................................................
93
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 3
Onchip/NOR FLASH Programming User’s Guide
Version 29-Mar-2017
Introduction
This manual contains all important information for programming
•
On-chip FLASH memory
•
Off-chip NOR FLASH devices
The programming of off-chip NAND FLASH devices is described in “NAND FLASH Programming User’s
Guide” (nandflash.pdf).
The programming of off-chip serial FLASH devices is described in “Serial FLASH Programming User’s
Guide” (serialflash.pdf).
The programming of off-chip eMMC FLASH devices is described in “eMMC FLASH Programming User’s
Guide” (emmcflash.pdf).
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 4
Introduction
Standard Approach
Standard Approach provides a compact description of the steps required to program on-chip/NOR FLASH
memory. The description is knowingly restricted to standard cases. A detailed description of the FLASH
programming concepts is given in the subsequent chapters of this manual.
On-chip FLASH
Integrated On-chip FLASH Programming
Integrated on-chip FLASH programming means that the FLASH programming algorithm is part of the
TRACE32 software.
If the programming of the on-chip FLASH is integrated into the TRACE32 software, the on-chip FLASH is
automatically declared when the target CPU is selected. The FLASH declaration is listed in the FLASH.List
window.
If the on-chip FLASH is relocatable the address assignment for the FLASH is automatically performed
before the on-chip FLASH is accessed by TRACE32. The address assignment is based on the settings in
the corresponding configuration registers of the CPU.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 5
Standard Approach
Full example for integrated on-chip FLASH programming, here for the MCS12/S12X architecture:
; establish the communication between the debugger and the CPU
SYStem.CPU Auto
SYStem.Up
; program FLASH
FLASH.AUTO ALL
Data.LOAD.COSMIC demo.h12
FLASH.AUTO off
; verify the FLASH contents
Data.LOAD.COSMIC demo.h12 /DIFF
IF FOUND()
PRINT "Verify error after FLASH programming"
ELSE
PRINT "FLASH programming completed successfully"
...
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 6
Standard Approach
Target-controlled On-chip FLASH Programming
Target-controlled on-chip FLASH programming means that the FLASH programming algorithm is not
part of the TRACE32 software. An external programming algorithm usually provided by Lauterbach has
to be linked to the TRACE32 software. This approach is demonstrated in example scripts. They can be
found in the TRACE32 installation directory:
<TRACE32_installation_directory>/demo/<architecture>/flash/<CPU>.cmm
e.g. ~~/demo/powerpc/flash/jpc564xbc.cmm
~~/demo/arm/flash/mk20.cmm
Whereas ~~ is expanded to the <TRACE32_installation_directory>, which is c:/T32 by default.
Using target-controlled FLASH programming for the on-chip FLASH has the advantage that the FLASH
algorithm can be updated very easily. In most cases no update of the TRACE32 software is required.
If available Lauterbach uses the FLASH programming libraries provided by the chip manufacturer. Using the
provided libraries ensures that the FLASH algorithm fulfills the manufacturer´s requirements. The FLASH
algorithm provided by Lauterbach is interfacing between the TRACE32 software and the library algorithm.
The FLASH programming example scripts are written for the following major use cases:
1.
Program FLASH directly after TRACE32 PowerView was started.
Choose File menu > Run Script or use the following command to establish the debug
communication and to program the on-chip FLASH:
DO ~~/demo/powerpc/flash/jpc564xbc.cmm
The script queries all necessary information via suitable dialog boxes.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 7
Standard Approach
2.
Use FLASH programming script in your start-up script.
If you create your own start-up script for your target hardware, please call the flash programming
script from there. If you leave the flash programming script unchanged, you can always replace it with
its most current version.
The following parameters can be used, when the flash programming script is called:
CPU=<cpu>
If a FLASH programming script supports a CPU family, you
can provide your target CPU as parameter.
PREPAREONLY
Advise the FLASH programming script to prepare the
FLASH programming by declaring the FLASH sectors and
by linking the appropriate programming binary. The FLASH
programming commands are bypassed.
DUALPORT=0|1
Disable/enable DualPort FLASH programming.
For all processors/cores that allow to write to physical memory
while the CPU is running a higher FLASH programming
performance can be achieved by the use of DualPort FLASH
Programming
Not every script supports all parameters. The parameters relevant for your script are described in the
comment section of the script.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 8
Standard Approach
The following framework can be used to call the flash programming script from your start-up script.
…
DO <flash_script> [CPU=<cpu>] PREPAREONLY [DUALPORT=0|1]
; program file to on-chip FLASH
FLASH.ReProgram ALL /Erase
Data.LOAD.Elf <file>
FLASH.ReProgram off
; reset processor/chip
; it might be necessary to reset all target settings done by the
; flash programming script
SYStem.Up
; continue with start-up script
…
Before the first use of the FLASH programming scripts, it is recommended to
read the comment section of the script.
In some cases the target memory layout or the programming clock has to be
adapted. The comments in the example script describe the necessary adjustments.
The FLASH.ReProgram command used in a script can be replaced by the FLASH.AUTO command if a too
old version of the TRACE32 software is used.
For some on-chip FLASHs the command FLASH.Program might fail due to:
•
ECC protection of the on-chip FLASH
Each ECC row can only be programmed once, but the file format fragmentation does not match
the ECC row size.
•
The on-chip FLASH programming sequence requires a specific number of bytes to be written
simultaneously.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 9
Standard Approach
Off-chip FLASH Devices Supporting CFI
Here we focus on programming of CFI-conform FLASH devices, since most NOR FLASHs support this
standard.
CFI stands for Common Flash memory Interface. It is an open standard that describes how self-identifying
information is provided by a FLASH device. Most relevant are:
•
information about the FLASH programming algorithm
•
device size and block configuration
TRACE32 queries this information to perform an easy declaration for off-chip NOR FLASH devices.
The following framework can be used to program CFI-conform FLASH devices:
; set-up the CPU and configure the
; external bus interface
FLASH.RESet
; reset the FLASH declaration
FLASH.CFI …
; declare FLASH sectors via
; CFI query
FLASH.UNLOCK ALL
; unlock FLASH if required
FLASH.ReProgram ALL
; enable the FLASH for programming
Data.LOAD.auto …
; load the programming file
FLASH.ReProgram off
; program the FLASH and disable
; the FLASH programming
The following gives a description of the individual steps.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 10
Standard Approach
CPU Set-up
FLASH programming with TRACE32 requires, that the communication between the debugger and the target
CPU is established. The following commands are available to set up this communication:
SYStem.CPU <cpu>
Specify your target CPU
SYStem.Up
Establish the communication between the
debugger and the target CPU
SYStem.CPU MCF5272
; select ColdFire MCF5272 as target CPU
SYStem.Up
; establish the communication between the
; debugger and the target CPU
Bus Configuration
Programming of an off-chip FLASH devices requires a proper initialization of the external bus interface. The
following settings in the bus configuration might be necessary:
•
Write access has to be enabled for the FLASH devices
•
Definition of the base address of the FLASH devices
•
Definition of the size of the FLASH devices
•
Definition of the data bus size that is used to access the FLASH devices
•
Definition of the timing (number of wait states for the access to the FLASH devices)
Use the PER.view command to check the settings in the bus configuration registers.
PER.Set MOV:0xc0f %Long 0x10000001
PER.Set SD:0x10000044 %Long 0x28
PER.view , "Chip-Select Module"
; specify the base address for the
; special function registers
;
;
;
;
;
the FLASH is connected to Chip
Select CS0, most settings are
already correct after reset
set the number of wait states
to 10
; display the CS0 configuration
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 11
Standard Approach
FLASH Declaration
The following commands are available to set up the FLASH declaration:
FLASH.RESet
Reset the FLASH declaration
FLASH.CFI <start_address> <bus_width>
Set-up a declaration for CFI-conform
FLASH devices
FLASH.List
Display the declaration
Parameters for FLASH.CFI command
<start_address>
Defines the start address of the FLASH devices.
<bus_width>
Defines the width of the data bus between the target CPU and the
FLASH devices.
Example:
FLASH.RESet
FLASH.CFI 0x0 Word
FLASH.List
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 12
Standard Approach
If two or more identical FLASH devices are used in parallel to implement the needed data bus width, it is
sufficient for the FLASH declaration to specify this <bus_width>.
Example: Two Intel Strata FLASH devices 28F128J3 in 16-bit mode are used in parallel to implement a 32bit data bus.
FLASH.RESet
FLASH.CFI 0x0 Long
FLASH.List
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 13
Standard Approach
Unlocking the FLASH Devices
Many FLASH devices provide a sector/block protection to avoid unintended erasing or programming
operations.
Since some FLASH devices are locked after power-up the protection has to be unlocked in order to erase or
program the FLASH devices. Please refer to the data sheet of your FLASH device, to find out if your FLASH
provides sector/block protection.
FLASH.UNLOCK ALL
Unlock FLASH devices
FLASH.UNLOCK ALL
Programming the FLASH Devices
The following command are available to program the FLASH:
FLASH.ReProgram ALL
Enable all declared FLASH devices for
programming
FLASH.ReProgram off
Program the FLASH devices and disable
the FLASH programming afterwards
Data.LOAD.auto <file>
Load the programming file (in most cases
an automatic detection of the file format is
possible)
Data.LOAD.<format> <file>
Please refer to the section Compilers in
the chapter Support of your Processor
Architecture Manual for the supported file
formats
Data.LOAD.Elf <file>
Load the programming file
(ELF/DWARF format)
Data.LOAD.Binary <file> <start_address>
Load the programming file (binary file) and
specify the <start_address> of the FLASH
devices
Data.LOAD.S3record <file>
Load the programming file (S3 record file)
Example:
FLASH.ReProgram ALL
Data.LOAD.auto demo.x
FLASH.ReProgram off
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 14
Standard Approach
Full Example
; select ColdFire MCF5272 as target CPU
SYStem.CPU MCF5272
; establish the communication between the debugger and the target CPU
SYStem.Up
; specify the base address for the special function registers
PER.Set MOV:0xc0f %Long 0x10000001
; the FLASH is connected to Chip Select CS0, most settings are already
; correct after reset - set the number of wait states to 10
PER.Set SD:0x10000044 %Long 0x28
; reset the FLASH declaration
FLASH.RESet
; declare the FLASH sectors by CFI query
FLASH.CFI 0x0 Word
; unlock the FLASH device if required for a power-up locked device
; FLASH.UNLOCK ALL
; enable the programming for all declared FLASH devices
FLASH.ReProgram ALL
; specify the file that should be programmed
Data.LOAD.auto demo.x
; program the file and disable the FLASH programming
FLASH.ReProgram off
; verify the FLASH contents
Data.LOAD.auto demo.x /DIFF
IF FOUND()
PRINT "Verify error after FLASH programming"
ELSE
PRINT "FLASH programming completed successfully"
...
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 15
Standard Approach
Target-controlled FLASH Programming
The FLASH programming steps described so far are easy to carry out, but FLASH programming is slow.
The programming time can be considerably improved by using so-called target-controlled FLASH
programming.
Target-controlled FLASH programming means that the underlying FLASH programming algorithm is no
longer part of the TRACE32 software. FLASH programming works now in principle as follows:
1.
The FLASH algorithm is downloaded to the target RAM.
2.
The programming data are downloaded to the target RAM.
3.
The FLASH algorithm running in the target RAM programs the data to the FLASH devices.
This way the communication between the host and the debugger hardware is minimized.
Ready to run binary files for target-controlled FLASH programming are available for all common processor
architectures on the TRACE32 software CD under: ~~/demo/<architecture>/flash. Whereas ~~ is
expanded to the <TRACE32_installation_directory>, which is c:/T32 by default. TRACE32
loads the appropriate FLASH programming algorithm automatically from this directory when targetcontrolled FLASH programming with CFI is used.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 16
Standard Approach
In order to initialize the communication between the TRACE32 software and the external FLASH
programming algorithm the following command is used:
FLASH.CFI <start_address> <bus_width> /TARGET <code_range> <data_range>
Parameters
•
<start_address>
Defines the start address of the FLASH devices.
•
<bus_width>
Defines the width of the data bus between the target CPU and the FLASH devices.
•
<code_range>
Define an address range in the target´s RAM to which the external FLASH programming
algorithm is loaded.
FLASH algorithm
32 byte
Figure: Memory mapping for the <code_range>
Required size for the code is size_of(<flash_algorithm>) + 32 byte
•
<data_range>
Define the address range in the target´s RAM where the programming data are buffered for the
FLASH algorithm.
32 byte argument buffer
buffer for programming data
256 byte stack
Figure: Memory mapping for the <data_range>
The argument buffer used for the communication between the TRACE32 software and the
FLASH algorithm is located at the first 32 bytes of <data_range>. The 256 byte stack is located
at the end of <data_range>.
<buffer_size> =
size_of(<data_range>) - 32 byte argument buffer - 256 byte stack
<buffer_size> is the maximum number of bytes that are transferred from the TRACE32
software to the external FLASH programming algorithm in one call.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 17
Standard Approach
Example:
FLASH.RESet
FLASH.CFI 0x0 Word /TARGET 0x20000000++0xfff 0x20001000++0xfff
FLASH.List
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 18
Standard Approach
Full Example (Target-controlled)
; select ColdFire MCF5272 as target CPU
SYStem.CPU MCF5272
; establish the communication between the debugger and the target CPU
SYStem.Up
; specify the base address for the special function registers
PER.Set MOV:0xc0f %Long 0x10000001
; the FLASH is connected to Chip Select CS0, most settings are already
; correct after reset - set the number of wait states to 10
PER.Set SD:0x10000044 %Long 0x28
; reset the FLASH declaration
FLASH.RESet
; set-up the FLASH declaration for target-controlled programming
; target RAM at address 0x20000000
FLASH.CFI 0x0 Word /TARGET 0x20000000++0xfff 0x20001000++0xfff
; unlock the FLASH device if required for a power-up locked device
; FLASH.UNLOCK ALL
; enable the programming for all declared FLASH devices
; the option Erase ensures that unused sectors are erased
FLASH.ReProgram ALL /Erase
; specify the file that should be programmed
Data.LOAD.auto demo.x
; program all modified sectors and disable the FLASH programming
FLASH.ReProgram off
; verify the FLASH contents
Data.LOAD.auto demo.x /DIFF
IF FOUND()
PRINT "Verify error after FLASH programming"
ELSE
PRINT "FLASH programming completed successfully"
...
For all processors/cores that allow to write to physical memory while the CPU is running a higher FLASH
programming performance can be achieved by the use of DualPort FLASH Programming.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 19
Standard Approach
Programming Commands
FLASH.ReProgram Command (Target-controlled)
The command FLASH.ReProgram is the best choice for target-controlled FLASH programming. It provides
an optimum FLASH programming performance by reducing the erasing and programming cycles to a
minimum:
•
Only not-empty sectors are erased.
•
Only modified sectors are programmed.
TRACE32 allocates a Virtual FLASH Programming Memory to implement the FLASH.ReProgram
command:
Target FLASH
Virtual FLASH
Programming Memory
Sector 1
Virtual Sector 1
Sector 2
Virtual Sector 2
Sector 3
Virtual Sector 3
Sector 4
Virtual Sector 4
Sector n
Virtual Sector n
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 20
Programming Commands
The following command sequence is recommended when using the FLASH.ReProgram command:
FLASH.ReProgram ALL /Erase
;
;
;
;
switch target FLASH to
reprogramming state and
erase virtual FLASH programming
memory
Data.LOAD.auto …
; write the contents of the
; programming file to the virtual
; FLASH programming memory
FLASH.ReProgram off
; program only changed sectors to
; the target FLASH and erase
; obsolete code in unused sectors
Details
FLASH programming by using the FLASH.ReProgram command works in detail as follows:
FLASH.ReProgram ALL /Erase
;
;
;
;
switch target FLASH to
reprogramming state and
erase virtual FLASH programming
memory
It is recommended to initialize the Virtual FLASH Programming Memory as erased (option /Erase). This
inhibits that obsolete code is remaining in unused sectors.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 21
Programming Commands
When the command FLASH.ReProgram /Erase is entered:
1.
The Virtual FLASH Programming Memory is erased.
2.
The target-controlled FLASH algorithm is called to deliver the following information:
- The checksum for the target FLASH sector
- The information if the target FLASH sector is erased
- The information if an erased FLASH bit is 0 or 1
Afterwards all not-empty FLASH sectors are marked as pending. All empty FLASH sectors are marked as
reprog.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 22
Programming Commands
;
;
;
;
Data.LOAD.auto …
write the contents of the
programming file into the
virtual FLASH programming
memory
The following actions are taken, when TRACE32 performs a write access to a sector:
3.
The new data is copied to the corresponding sector in the Virtual FLASH Programming Memory.
4.
The checksum for the virtual sector is calculated.
5.
The state of the sector is changed from pending to reprog if the checksum of the target FLASH
sector is equal the checksum of the virtual sector.
The state of the sector is changed from reprog to pending if the checksum of the target FLASH
sector is different from the checksum of the virtual sector.
; program only changed sectors to
; the target FLASH and erase
; obsolete code in unused sectors
FLASH.ReProgram off
When the command FLASH.ReProgram off is executed, all sectors marked as pending are programmed to
the target FLASH. In this process TRACE32 only erases not-empty sectors before programming.
After all pending sectors are programmed FLASH programming is disabled. This is indicated by an empty
state column in the FLASH.List window.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 23
Programming Commands
NOTE:
Please be aware that TRACE32 PowerView displays the contents of the Virtual
FLASH Programming Memory, if the FLASH is in reprogramming state and the
current state of the FLASH sector is pending.
NOTE:
If the FLASH is in reprogramming state, the command
FLASH.ReProgram CANCEL
can be used to undo all changes and re-start from scratch.
The command syntax:
FLASH.ReProgram ALL | <address_range> | <unit_number> [/Erase]
Switch FLASH device
to reprogramming state
for optimized FLASH
programming
FLASH.ReProgram off
Program only changed
sectors
FLASH.ReProgram CANCEL
Cancel FLASH
programming without
programming pending
changes.
TRACE32 commands that perform a write access on the memory:
Data.LOAD.auto <file>
Write code from the programming file to
memory
(if an automatic detection of file format is
possible)
Data.Set [<address>|<range> %<format> <value>]
Write <value> to the specified memory
location
Data.PATTERN <range> [/<option>]
Fill memory with a predefined pattern
…
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 24
Programming Commands
Full example:
...
; reset the FLASH declaration
FLASH.RESet
; set up the FLASH declaration for target-controlled programming
; target RAM at address 0x20000000
FLASH.CFI 0x0 Word /TARGET 0x20000000++0xfff 0x20001000++0xfff
; switch all declared FLASH sectors to reprogramming state
FLASH.ReProgram ALL /Erase
; copy the code from the programming file to the corresponding sectors
; in the virtual FLASH and mark all changed sectors
Data.LOAD.auto demo.x
; program only the changed sectors
FLASH.ReProgram off
; verify the FLASH contents
Data.LOAD.auto demo.x /DIFF
IF FOUND()
PRINT "Verify error after FLASH programming"
ELSE
PRINT "FLASH programming completed successfully"
...
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 25
Programming Commands
FLASH.ReProgram Command (TRACE32 Tool-based)
If TRACE32 tool-based FLASH programming is used, the reprog state is handled differently:
The following actions are taken, when TRACE32 performs a write access on a sector:
1.
The corresponding sector in the Virtual FLASH Programming Memory is marked as pending.
Due to performance reasons no erase status is checked and no checksum is calculated for the target
FLASH sector.
2.
The corresponding sector is erased in the Virtual FLASH Programming Memory.
3.
The new data is copied to the corresponding sector in the Virtual FLASH Programming Memory.
If the recommended command sequence for the FLASH.ReProgram is used, no performance benefit is
reached compared to the usage of FLASH.Erase / FLASH.Program.
•
Since no erase status is maintained for a target FLASH sector empty sectors are erased.
•
Since no checksum is calculated for a target FLASH sector not-modified sectors are
programmed.
A reasonable performance benefit is reached, when the Virtual FLASH Programming Memory is not erased
before the contents of the programming file is copied. Such a proceeding however includes the risk, that
obsolete code remains in unused target FLASH sectors.
FLASH.ReProgram ALL
; switch target FLASH to
; reprogramming state
Data.LOAD.auto …
; write the contents of the
; programming file to the virtual
; FLASH programming memory
FLASH.ReProgram off
;
;
;
;
erase and program all those
sectors to the target FLASH to
which the contents of the
programming file was written
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 26
Programming Commands
FLASH.Erase / FLASH.Program Command
Beside the FLASH.ReProgram command there are also the commands FLASH.Erase and
FLASH.Program to program the FLASH devices. Both commands work identically for TRACE32 tool-based
and target-controlled programming.
FLASH.Erase ALL
; erase the FLASH devices
FLASH.Program ALL
; enable all FLASH devices for
; programming
Data.LOAD.auto …
; write the contents of the
; programming file to the FLASH
; devices
FLASH.Program off
; disable the programming for the
; FLASH devices
FLASH programming by using the FLASH.Erase / FLASH.Program commands works in detail as follows:
; erase the FLASH devices
FLASH.Erase ALL
All declared FLASH sectors are erased.
TRACE32 is using full chip erase/bulk erase whenever possible. If the FLASH devices are declared
manually it is strongly recommended:
•
To declare each FLASH device with all sectors. Otherwise if there are undeclared FLASH
sectors for a FLASH device, these sectors are also erased when a full chip erase/bulk erase is
used.
•
To declare each FLASH device with its own <unit_number>, if two or more FLASH devices are
used in series to implement the needed FLASH memory size. Otherwise if the same unit number
is used for 2 or more FLASH devices only the first FLASH device is erased.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 27
Programming Commands
; enable the FLASH devices for
; programming
FLASH.Program ALL
When the command FLASH.Program is entered, the state of all FLASH sectors is changed to program.
If a FLASH sector is in program state each write access by TRACE32 on this sector is directly converted to
a FLASH programming command sequences. A typical TRACE32 command that writes to FLASH sectors
is:
Data.LOAD.auto …
; write the contents of the
; programming file to the FLASH
; devices
FLASH.Program off
; disable the programming for the
; FLASH devices
With the command FLASH.Program off FLASH programming is disabled. This is indicated by an empty
state column in the FLASH.List window.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 28
Programming Commands
The command syntax:
FLASH.Erase ALL | <address_range> | <unit_number>
Erase the specified FLASH sectors
FLASH.Program ALL | <address_range> | <unit_number>
Enable the specified FLASH sectors
for programming
FLASH.Program off
Disable the programming state for
all FLASH sectors.
Full example:
...
; reset the FLASH declaration
FLASH.RESet
; set up the FLASH declaration for target-controlled programming
; target RAM at address 0x20000000
FLASH.CFI 0x0 Word /TARGET 0x20000000++0xfff 0x20001000++0xfff
; erase all FLASH sectors
FLASH.Erase ALL
; enable all FLASH sectors for programming
FLASH.Program ALL
; write the code from the programming file to the target FLASH
Data.LOAD.auto demo.x
; disable the programming state for all sectors
FLASH.Program off
; verify the FLASH contents
Data.LOAD.auto demo.x /DIFF
IF FOUND()
PRINT "Verify error after FLASH programming"
ELSE
PRINT "FLASH programming completed successfully"
...
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 29
Programming Commands
The FLASH.AUTO Command
The command FLASH.AUTO is a special command that allows:
•
to set software breakpoints to FLASH
•
to patch code located in FLASH
TRACE32 is using a Virtual FLASH Programming Memory to implement the FLASH.AUTO command:
Target FLASH
Sector 1
Virtual FLASH
Programming Memory
Virtual Sector 1
Sector 2
Sector 3
Virtual Sector 3
Sector 4
Virtual Sector 4
Sector n
Virtual Sector n
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 30
Programming Commands
Software Breakpoints in FLASH
Using the FLASH.AUTO command to set software breakpoints to FLASH works as follows:
; switch the target FLASH into auto
; state
FLASH.AUTO ALL
When the command FLASH.AUTO ALL is entered, the state of all FLASH sectors is changed to auto.
Break.Set … /Program /SOFT
; set a software breakpoint to a
; program address located in FLASH
If a software breakpoint is set to an address within the FLASH, the following actions are taken:
1.
Virtual FLASH Programming Memory is allocated for the affected sector.
2.
The code from the target FLASH sector is copied to the virtual sector.
3.
The code at the location of the software breakpoint is saved by TRACE32.
4.
The software breakpoint is patched into the virtual sector.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 31
Programming Commands
; start the program execution
Go
All virtual sectors to which software breakpoints were patched are copied to the target FLASH when the
program execution is started.
The state of the affected FLASH sectors is changed to pending to indicate that software breakpoints were
programmed into these sectors.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 32
Programming Commands
Break.Delete … /Program /SOFT
; remove the software breakpoint
When the software breakpoint is deleted, the original code at the location of the software breakpoint is
restored in the virtual sector.
All virtual sectors that contain such a restoration are programmed to the target FLASH when the program
execution is started.
The state of the restored FLASH sectors is changed back to auto.
Please execute the command FLASH.AUTO off before you exit TRACE32. This
guarantees that all software breakpoints are removed from the target FLASH
and the original code is restored.
The following command sequence is recommended when using the FLASH.AUTO command:
; switch the target FLASH to auto
; state to allow debugging with
; software breakpoints in FLASH
FLASH.AUTO ALL
…
Break.Set … /Program /SOFT
…
;
;
;
;
FLASH.AUTO off
use this command to restore the
original code at the locations of
the software breakpoints back to
the target FLASH
; exit TRACE32
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 33
Programming Commands
The command syntax:
FLASH.AUTO ALL | <address_range> | <unit_number>
Switch FLASH to auto state to allow
debugging with software
breakpoints in FLASH
FLASH.AUTO off
Restore the original code in the
FLASH for all software breakpoints
and disable the auto state
NOTE:
Please be aware that TRACE32 PowerView displays the contents of the Virtual
FLASH Programming Memory, if the FLASH is in auto state and the current
state of the FLASH sector is pending.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 34
Programming Commands
Code Patches in FLASH
Using the FLASH.AUTO command to patch code located in FLASH works as follows:
; switch the target FLASH into auto
; state
FLASH.AUTO ALL
When the command FLASH.AUTO ALL is entered, the state of all FLASH sectors is changed to auto.
Data.Assemble …
; patch code in FLASH
Data.Set …
; patch hex. value to FLASH
If code located in FLASH is patched, the following actions are taken:
1.
Virtual FLASH Programming Memory is allocated for the affected sector.
2.
The code from the target FLASH sector is copied to the virtual sector.
3.
The patch is copied into the virtual sector.
4.
The state of the virtual sector is change to pending to indicate, that a patch needs to be
programmed.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 35
Programming Commands
; start the program execution
Go
All virtual sectors which contain patches are copied to the target FLASH when the program execution is
started.
The state of the affected FLASH sectors is changed back to auto after the patch is programmed.
; disable the auto state and
; program all pending patches
FLASH.AUTO off
The following command sequence is recommended when using the FLASH.AUTO command to patch code
located in FLASH:
; switch the target FLASH to auto
; state to allow code patches in
; FLASH
FLASH.AUTO ALL
…
Data.Assemble …
…
; program all pending patches and
; disable the auto state
FLASH.AUTO off
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 36
Programming Commands
The command syntax:
FLASH.AUTO ALL | <address_range> | <unit_number>
Switch FLASH to auto state to allow
code patches is FLASH
FLASH.AUTO off
Program all pending patches and
disable the auto state
NOTE:
Please be aware that TRACE32 PowerView displays the contents of the Virtual
FLASH Programming Memory, if the FLASH is in auto state and the current
state of the FLASH sector is pending.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 37
Programming Commands
CENSORSHIP Option
A FLASH sector can contain sensitive data e.g. bytes that unsecure the chip and enable it for debugging. An
unintended or incorrect write to this data might secure the chip and lock it for debugging.
The FLASH programming algorithm provided by Lauterbach is aware of sensitive data. It discards all erase
and write operations to their addresses.
The CENSORSHIP option enables the erasing/programming of the sensitive data.
FLASH.AUTO <address_range> /CENSORCHIP
Enable erasing/programming of
sensitive data
Example for Kinetis MK30DX64VEX7, the first FLASH sector contains sensitive data.
FLASH.Create 1. 0x00000000--0x0000FFFF 0x800 TARGET Long
…
; a FLASH programming algorithm that is aware
; of sensitive data is defined
FLASH.TARGET … ~~/demo/arm/flash/long/ftfl1x.bin
…
; the FLASH sector with sensitive data is explicitly enabled for
; erasing/programming
FLASH.AUTO 0--0x7ff /CENSORSHIP
Data.Set …
Data.Set …
…
; program all changed data and disable the erasing/programming of
; sensitive data
FLASH.AUTO OFF
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 38
Programming Commands
Unlocking Command
Many FLASH devices provide a sector/block protection to avoid unintended erasing and programming
operations. Most of them are locked after power-up. They need to be unlocked in order to be erased or
programmed..
FLASH.UNLOCK ALL | <address_range> | <unit_number>
Two unlocking schemes are used by FLASH devices:
1.
Each individual sector/block has to be unlocked (individual unlocking).
2.
The execution of a single unlock command sequence on an address range unlocks the complete
FLASH device (parallel unlocking).
Please refer to the data sheet of your FLASH device, to find out which scheme is used by your FLASH
device.
Example for 1 (individual unlocking):
INTEL 28F128L18 at address 0x0, connected to the CPU via a 16-bit data bus, TRACE32 tool-based
programming
FLASH.RESet
; reset FLASH declaration
FLASH.CFI 0x0 Word
; declare FLASH sectors via
; CFI query
FLASH.UNLOCK ALL
; unlock each sector individually
…
; erasing and programming
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 39
Programming Commands
Example for 2 (parallel unlocking):
INTEL 28F128J3 at address 0x0, connected to the CPU via a 16-bit data bus, each sector 128 KByte,
target-controlled programming.
Please be aware that the flash device in this example only supports a full-device unlock. This means a single
FLASH.UNLOCK command unlocks the complete device.
; reset FLASH declaration
FLASH.RESet
; declare FLASH sectors via CFI query
FLASH.CFI 0x0 Word /TARGET 0x10000000++0xfff 0x10001000++0xfff
; execute a single unlock command by using
; an address range inside of a FLASH sector (faster)
FLASH.UNLOCK 0x0--0x1ffff
; erasing and programming
…
The FLASH devices can be re-locked after programming to avoid unintended erasing and programming
operations while debugging. Re-locking has to be executed usually sector by sector.
FLASH.LOCK ALL | <address_range> | <unit_number>
Re-locking is not recommended if you like to use:
•
Software breakpoints in FLASH
•
Code patches in FLASH
Please refer to “The FLASH.AUTO Command” in Onchip/NOR FLASH Programming User’s Guide, page
30 (norflash.pdf) for details.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 40
Programming Commands
DualPort FLASH Programming
Benefits
Dualport FLASH programming reduces the FLASH programming time for all processors/cores that allow to
write to physical memory while the CPU is running. This time reduction is achieved by the simultaneous
execution of the following: the next block of programming data is downloaded to the target RAM while the
FLASH algorithm is programming the current block of data.
The best results can be achieved if the following times are nearly the same:
•
Sector erase time
•
Download time of a block of programming data (host to target RAM)
•
Programming time of a block of data
The average time reduction is 5% to 30%. However, under favorable conditions, the programming time can
be shortened by up to 70%.
Preconditions
1.
DualPort FLASH programming is only supported for target-controlled FLASH programming.
2.
DualPort FLASH programming can only be used for processors/cores that allow to write to
physical memory while the CPU is running. For details on this feature refer to “Run-time Memory
Access” in TRACE32 Glossary, page 22 (glossary.pdf).
3.
DualPort FLASH programming requires a FLASH binary that is position independent. This is the
case for nearly all FLASH binaries provided by Lauterbach.
4.
FLASH programming in general requires that the data cache is disabled for the entire address
range of the FLASH.
5.
For DualPort FLASH programming the data cache has to be disabled also for the RAM area that
is used to buffer the programming data, because runtime memory access can only write to
physical memory.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 41
DualPort FLASH Programming
Usage
DualPort FLASH programming achieves a time reduction for the following programming commands:
•
FLASH.ReProgram
•
FLASH.Auto
DualPort FLASH programming is enabled by the use of one of the following commands:
FLASH.CFI … /TARGET <code_range> <data_range> /DualPort
FLASH.CFI … /TARGET <code_address> <data_address> [<buffer_size>] /DualPort
FLASH.TARGET <code_range> <data_range> <file> /DualPort
FLASH.TARGET <code_address> <data_address> [<buffer_size>] <file> /DualPort
If you use a processor/core that allows to write to physical memory while the CPU is running, but the option
DUALPORT is not accepted by TRACE32 PowerView, DualPort FLASH programming is not yet supported
for your processor architecture. Please contact flash-support@lauterbach.com for details.
The following framework can be used for DualPort FLASH programming:
; set up the CPU and configure the
; external bus interface
FLASH.RESet
; reset the FLASH declaration
FLASH.CFI … /TARGET … /DualPort
; declare FLASH sectors via
; CFI query
FLASH.UNLOCK ALL
; unlock FLASH if required
FLASH.ReProgram ALL /Erase
; enable the FLASH for programming
Data.LOAD.auto …
; load the programming file
FLASH.ReProgram off
; program the FLASH and disable
; the FLASH programming
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 42
DualPort FLASH Programming
Full Example
; set up the CPU and configure the external bus interface
; reset the FLASH declaration
FLASH.RESet
; set up the FLASH declaration for target-controlled programming
; target RAM at address 0x20000000
FLASH.CFI 0x0 Word /TARGET 0x20000000++0xfff 0x20001000++0xfff /DualPort
; enable the programming for all declared FLASH devices
FLASH.ReProgram ALL /Erase
; specify the file that should be programmed
Data.LOAD.auto demo.x
; program only modified sectors and erase obsolete code in unused sectors
; disable the FLASH programming
FLASH.ReProgram off
FLASH.CFI … /TARGET <code_range> <data_range> /DualPort
<data_range> is automatically extended by the access class E: if DualPort FLASH programming is used.
Full Example (ARM/Cortex)
Because ARM/Cortex perform the run-time memory access via the AHB bus, the access class AHB: has to
specified explicitly for <data_range>.
; set up debug communication for LPC4357 and configure
; the external bus interface
; reset the FLASH declaration
FLASH.RESet
; set up the FLASH declaration for target-controlled programming
; target RAM at address 0x10000000
FLASH.CFI 0x1C000000 Long /TARGET 0x10000000 EAHB:0x10001000 0x2000 /DualPort
; enable the programming for all declared FLASH devices
FLASH.ReProgram ALL /Erase
; specify the file that should be programmed
Data.LOAD.auto demo.x
; program only modified sectors and erase obsolete code in unused sectors
; disable the FLASH programming
FLASH.ReProgram off
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 43
DualPort FLASH Programming
Special Features for Onchip FLASHs
The ready-to-run scripts for onchip FLASH programming provided by Lauterbach use in addition to the
classical FLASH programming commands special commands and options to handle characteristics of
onchip FLASHs.
OTP Sector Programming
Nowadays many onchip FLASHs contain OTP sectors. OTP sectors can not be erased, that's why they are
called One Time Programmable sectors. The ready-to-run FLASH programming scripts provided by
Lauterbach use the option OTP to protect those sectors from unintentional programming.
FLASH.Create …TARGET … /OTP
Protect OTP sector from unintentional programming
FLASH.Create 6. 0x00400000--0x00401FFF TARGET Quad /OTP
Whenever FLASH programming is activated by one of the following commands: FLASH.ReProgram,
FLASH.AUTO or FLASH.Program the state of all OTP sectors changes to nop to indicate that all FLASH
erasing and programming commands are blocked for these sectors.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 44
Special Features for Onchip FLASHs
In order to program an OTP sector the following command sequence is recommended:
FLASH.Program 0x00400000--0x00401FFF /OTP
; enable FLASH
; programming for the
; specified OTP sector
Data.Set …
; program the data
; to sector
FLASH.Program off
; disable FLASH
; programming
Already programmed OTP sectors can be declared with NOP as <family_code>. TRACE32 PowerView
discards all erase and write operations to No OPeration sectors.
FLASH.Create 11.0x402000++0x1cff NOP Quad /OTP /Info "C UTEST - Reserved"
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 45
Special Features for Onchip FLASHs
Mirrored FLASH Addresses
The TRACE32 NOR FLASH programming might fail, if an on-chip FLASH or an off-chip FLASH device is
addressed in more than one way.
Non-Cached/Cached Addresses
Some processor architectures (e.g. TriCore, MIPS) provide separate address spaces for cached and noncached memory. Compilers may generate code for non-cached addresses for the boot sequence and code
for cached addresses for the application.
In order to program the FLASH successfully it is recommended to declare the FLASH for non-cached
addresses and use the command FLASH.CreateALIAS to mirror these addresses to the cached address
space.
; example for the TriCore architecture
; non-cached on-chip FLASH starts at address 0xa0000000
; cached on-chip FLASH starts at address 0x80000000
FLASH.RESet
; declare program FLASH in non-cached address space
FLASH.Create 1. 0xa0000000--0xa000ffff 0x4000 TARGET
FLASH.Create 2. 0xa0010000--0xa001ffff 0x4000 TARGET
FLASH.Create 3. 0xa0020000--0xa003ffff 0x20000 TARGET
FLASH.Create 3. 0xa0040000--0xa007ffff 0x40000 TARGET
FLASH.Create 3. 0xa0080000--0xa01fffff 0x80000 TARGET
Long
Long
Long
Long
Long
; declare data FLASH in non-cached address space
FLASH.Create 4. 0xafe00000--0xafe0ffff 0x10000 TARGET Long
FLASH.Create 5. 0xafe10000--0xafe1ffff 0x10000 TARGET Long
; declare FLASH programming algorithm
FLASH.TARGET 0xd4000000 0xd0000000 0x1000
~~/demo/tricore/flash/long/tc1796.bin
; all FLASH write cycles to the address range 0x80000000--0x8fffffff
; (cached) are redirected to the address range 0xa0000000--0xafffffff
; (non-cached)
FLASH.CreateALIAS 0x80000000--0x8fffffff 0xa0000000
…
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 46
Special Features for Onchip FLASHs
The alias is also displayed in the listing of the FLASH declarations.
FLASH mirrored to Boot Area
Some CPUs allow to mirror the FLASH to the boot code address space. In order to program the FLASH
successfully it is recommended to declare the FLASH for its primary address space and use the command
FLASH.CreateALIAS to mirror these addresses to the boot code address space.
Hardvard Architecture with Unified Memory
For CPUs with Harvard architecture and unified FLASH memory, it is recommended to declare the FLASH
for the program memory address space and use the command FLASH.CreateALIAS to mirror these
addresses to the data address space.
; generate FLASH declaration by CFI
FLASH.CFI P:0x0 Word
…
; all FLASH write cycles to the data address space are redirected
; to the program address space
FLASH.CreateALIAS D:0x0++0xfffffff P:
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 47
Special Features for Onchip FLASHs
FLASH.Create Command
Family Code NOP
TRACE32 PowerView discards all erase and write operations to No OPeration sectors. NOP sectors are
used for the following purposes:
•
Some FLASH sectors are already programmed by the processor/chip manufacturer. If you debug
without a proper FLASH declaration for these sectors an unintended erase or write operation
may result in a bus error or something similar.
Declaring such sectors as NOP sectors guarantees an error-free debugging.
•
Same FLASH sectors contain sensitive information. An unintended overwrite can harm the
system or lock the processor/chip for debugging. Examples for sensitive sectors are: shadow
raws, boot sectors, FLASH sectors that contain the debug monitor.
TRACE32 PowerView forces the user to handle such sectors with care by declaring them as
NOP sectors.
The chapter “FLASH.CHANGETYPE Command”, page 55 introduces a command sequence
that is recommended for the programming of sensitive sectors.
FLASH.Create <unit_number> <address_range> [<sector_size>] NOP <bus_width>
FLASH.Create 4. 0xFFC000--0xFFFFFF NOP Quad
Whenever FLASH programming is activated by one of the following commands: FLASH.ReProgram,
FLASH.AUTO or FLASH.Program the state of all NOP sectors changes to nop to indicate that all FLASH
erasing and programming commands are discarded for these sectors.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 48
Special Features for Onchip FLASHs
INFO Option
TRACE32 PowerView allows to add comments to FLASH sectors.
A comment can be up to 64 characters long. TRACE32 PowerView allocated 4 kBytes for all comments.
FLASH.Create … /INFO <comment>
FLASH.Create 4. 0xFFC000--0xFFFFFF NOP Quad /INFO "Reserved"
The comment is displayed in the extra column of the FLASH.List window.
KEEP Option
FLASH sectors may contain data that should not be deleted. An example are chip trimming data stored in
FLASH.
Use the option KEEP, if you want to advise TRACE32 PowerView to preserve the data in the specified
<address_range>.
FLASH.Create … /KEEP <address_range>
FLASH.Create 1. 0x00000000--0x0001FFFF … /KEEP 0x0003FC--0x0003FF
The preservation of the FLASH content is implemented differently depending on the used FLASH
programming command.
FLASH.ReProgram (for details refer to “FLASH.ReProgram Command (Target-controlled)”, page 20):
After a virtual FLASH sector is erased, the information to be preserved is written back to the virtual sector.
This approach assumes that the <address_range> to be preserved is not overwritten by data loaded from
the file to be programmed.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 49
Special Features for Onchip FLASHs
FLASH.Erase: After the FLASH sector is erased, the information is restored. This approach assumes that
the <address_range> to be preserved is not overwritten by data loaded from the file to be programmed.
FLASH.AUTO (for details refer to “The FLASH.AUTO Command”, page 30): Since the data from the
target sector are copied to the virtual FLASH sectors, the option KEEP is not required. Not overwritten
original data are programmed back to the target sectors.
BootModeHeaDer Option
For the Astep version of the TC27x debugging was locked if the onchip FLASH does not provide a valid Boot
Mode HeaDer. To avoid that the onchip FLASH contains no valid BMHD after programming, TRACE32
takes the following preventive measures:
1.
TRACE32 tries to preserve all valid BMHDs.
2.
The FLASH programming scripts warns you if your the FLASH data to be programmed do not
contain a valid BMHD. For details refer to your FLASH programming script.
More details to 1: The option BootModeHeaDer advises TRACE32 to preserve the contents of
<address_range> if <address_range> contains a valid BMHD.
FLASH.Create … /BootModeHeaDer <address_range>
FLASH.Create
1. 0xA0000000--0xA000BFFF … /BMHD 0xA0000000--0xA000001F
The preservation of the BMHDs is implemented differently depending on the used FLASH programming
command. For details refer to “KEEP Option”, page 49.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 50
Special Features for Onchip FLASHs
EraseALIAS Option
A physical FLASH sector can be split up into two or more logical address spaces, if it maintains different
types of information. FLASH programming writes usually to the logical address spaces, while FLASH
erasing applies to the physical FLASH sector.
To understand the use cases of the option EraseALIAS it is important to remember that the commands
FLASH.ReProgram or FLASH.AUTO erase/program only modified sectors. The option EraseALIAS
guarantees:
•
That content of logical address spaces is preserved, if a physical sector has to be erased, in
order to program one of its modified logical address spaces,
•
That a physical sector is only erased once while the modified FLASH content is programmed.
FLASH.Create … /EraseALIAS <address_range>
FLASH.Create 2. 0x2000000++0x7fff /EALIAS 0x2100000++0x7fff /INFO "Data Flash"
FLASH.Create 3. 0x2100000++0x7fff /EALIAS 0x2000000++0x7fff /INFO "ID Tags"
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 51
Special Features for Onchip FLASHs
AutoInc Option
Some FLASH algorithms need additional information to program the onchip FLASH. Typical information are:
•
the FLASH control register base address
•
a sector number
If additional information is required, it is the last parameter of the FLASH.Create command.
FLASH.Create <unit_number> <address_range> <sector_size> TARGET <bus_width> <add_info>
The AutoInc option allows to shorten the FLASH declaration if increasing sector numbers are needed. The
extra column in the FLASH.List window shows the sector number as a hex. number.
Example 1:
FLASH.Create 1. 0x08180000--0x081FFFFF 0x20000 TARGET Byte /AutoInc
Example 2 shows that it is possible to specify the starting sector number:
FLASH.Create 1. 0x08180000--0x081FFFFF 0x20000 TARGET Byte 0x20 /AutoInc
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 52
Special Features for Onchip FLASHs
FLASH.TARGET Command
STACKSIZE Option
Target-controlled FLASH programming (for details refer to “Target-controlled FLASH Programming”,
page 16) uses 256 bytes of stack. If the FLASH programming algorithm requires more stack, the option
STACKSIZE can be used to define the required stack size.
FLASH.TARGET … /STACKSIZE <size>
FLASH.TARGET 0x0 0x2000 0x1000 lpc4300.bin /STACKSIZE 0x200
FirmWareRAM Option
Some processors provide their FLASH programming algorithm in their firmware ROM. The option
FirmWareRAM can be used to declare the RAM <address_range> needed by the firmware FLASH
algorithm.
The option FirmWareRAM guarantees that the contents of this <address_range> is saved before and
restored after FLASH programming.
FLASH.TARGET … /FirmWareRAM <address_range>
FLASH.TARGET 0x0 0x2000 0x1000 … /FirmWareRAM 0x10089FF0--0x10089FFF
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 53
Special Features for Onchip FLASHs
FLASH.CLocK Command
Some onchip FLASHs require a FLASH programming clock within a specified frequency range. The FLASH
programming clock is derived from the system clock in most cases. The command FLASH.CLocK allows:
•
to specify the system clock.
FLASH.CLocK 10.MHz
•
to ask TRACE32 to measure the system clock.
FLASH.CLocK AUTO
TRACE32 passes the system clock to the FLASH programming algorithm, which is then responsible for
deriving the FLASH programming clock.
FLASH.CLocK <frequency> | AUTO
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 54
Special Features for Onchip FLASHs
FLASH.CHANGETYPE Command
Sensitive FLASH sectors are declared as NOP sectors to protect them from unintended overwrite.
FLASH.Create 4. 0xFFFC00--0xFFFFFF NOP Quad /INFO "Shadow row"
The following command sequence is recommended if you want to program a sensitive sector:
FLASH.CHANGETYPE 0x00FFFC00++0x3FF TARGET
;
;
;
;
;
;
;
change FLASH sector
from NOP sector to
sector programmable by
the FLASH programming
algorithm specified by
the preceding
FLASH.TARGET command
FLASH.Program 0x00FFFC00++0x3FF
; enable FLASH sector for
; programming
Data.Set …
; program the data
; to sector
FLASH.Program off
; disable sector for
; programming
FLASH.CHANGETYPE 0x00FFFC00++0x3FF NOP
; change FLASH sector
; back to NOP sector
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 55
Special Features for Onchip FLASHs
FLASH.UNSECUREerase Command
Some chips/processors are secured and require a key-code to allow debugging. Entering the keycode
(SYStem.Option KEYCODE <key_code>) command unsecures the chip and allows to establish a debug
communication. Please refer to your Processor Architecture manual for details.
The key-code is for most chips stored in the onchip FLASH.
If the keycode is unknown you can use the command FLASH.UNSECUREerase. This command erases the
onchip FLASH completely in order to remove the key-code. The chip is unsecured afterwards.
NOTE:
Please be aware that the command FLASH.UNSECUREerase is locked if it is
not implemented for the selected CPU (SYStem.CPU <cpu>).
SYSTem.CPU MK10DN32VLH5
FLASH.UNSECUREerase
SYStem.Up
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 56
Special Features for Onchip FLASHs
FLASH Declaration in Detail
Further Applications for FLASH Declarations Using CFI
Identical FLASH Devices in Series
If two identical FLASH devices are used in series to implement the needed FLASH memory size, the
FLASH.CFI command has to be performed for each FLASH device.
Example:
•
Four Intel Strata FLASH devices 28F128J3 in 16-bit mode are used to implement 64 MByte of
FLASH memory.
•
Therefrom two Intel Strata FLASH devices 28F128J3 are used in parallel to implement a 32-bit
data bus.
•
Target RAM at 0xa0000000.
Address Bus
0x05FFFFFF
CPU
28F128J3
in 16-bit mode
28F128J3
in 16-bit mode
28F128J3
in 16-bit mode
28F128J3
in 16-bit mode
0x04000000
0x01FFFFFF
0x0
D31-D16
D15-D0
Data Bus
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 57
FLASH Declaration in Detail
FLASH declaration command for TRACE32 tool-based programming:
FLASH.RESet
; FLASH.CFI <start_address> <bus_width>
FLASH.CFI 0x00000000 Long
FLASH.CFI 0x04000000 Long
FLASH declaration command for target-controlled programming:
FLASH.RESet
; FLASH.CFI <start_address> <bus_width> /TARGET <code_range> <data_range>
FLASH.CFI 0x0 Long 0x00000000 /TARGET 0xa0000000++0xfff 0xa0001000++0x1fff
FLASH.CFI 0x0 Long 0x04000000 /TARGET 0xa0000000++0xfff 0xa0001000++0x1fff
TRACE32 allocates a so-called <unit_number> for each FLASH device. The <unit_number> allows to
handle each FLASH device separately and to perform a full chip erase/bulk erase correctly.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 58
FLASH Declaration in Detail
Assigning a Fixed Unit Number
For some scripts it might be helpful to assign a fixed <unit_number> to a FLASH device. For these cases the
<unit_number> can be used as a parameter for the FLASH.CFI command.
FLASH.CFI <unit_number> <start_address> <bus_width>
<unit_number> allows to
assign a fixed unit number to
a FLASH device
FLASH.CFI <unit_number> <start_address> <bus_width> \
/TARGET <code_range> <data_range>
FLASH.CFI 40. 0x0 Long
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 59
FLASH Declaration in Detail
Heterogeneous FLASH Devices in Series
Since TRACE32 can only handle one external FLASH algorithm at a time, a special proceeding is required if
target-controlled FLASH programming is used to program two or more FLASH devices with different FLASH
algorithms.
Example 1:
•
AM29DL323DB FLASH device in 16-bit mode as boot FLASH
•
Two Intel Strata FLASH devices 28F128J3 in 16-bit mode as user FLASH
•
Target RAM at 0x00400000
•
One programming file per FLASH device
0x0DFFFFFF
28F128J3
in 16-bit mode
0x0D000000
0x0CFFFFFF
userfile.x
28F128J3
in 16-bit mode
CPU
0x0C000000
0x003FFFFF
AM29DL323DB
in 16-bit mode
bootfile.x
0x0
FLASH declaration command for target-controlled programming:
; FLASH.CFI <start_address> <bus_width> /TARGET <code_range> <data_range>
; boot FLASH
FLASH.RESet
FLASH.CFI 0x0 Word /TARGET 0x00400000++0xfff 0x00401000++0x1fff
FLASH.ReProgram ALL
Data.LOAD.auto bootfile.x
FLASH.ReProgram off
; user FLASH 1 + 2
FLASH.RESet
FLASH.CFI 0x0c000000 Word /TARGET 0x00400000++0xfff 0x00401000++0x1fff
FLASH.CFI 0x0d000000 Word /TARGET 0x00400000++0xfff 0x00401000++0x1fff
FLASH.ReProgram ALL
Data.LOAD.auto userfile.x
FLASH.ReProgram off
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 60
FLASH Declaration in Detail
No special proceeding is required if TRACE32 tool-based programming is used:
FLASH.RESet
; FLASH.CFI <start_address> <bus_width>
FLASH.CFI 0x00000000 Word
FLASH.CFI 0x0c000000 Word
FLASH.CFI 0x0d000000 Word
; boot FLASH
; user FLASH 1
; user FLASH 2
FLASH.ReProgram ALL
Data.LOAD.auto bootfile.x
Data.LOAD.auto userfile.x
FLASH.ReProgram off
Example 2:
•
On-chip FLASH of TriCore TC1796
•
Two AMD FLASH devices Am29BL162CB in parallel to implement a 32-bit data bus
•
PMI Scratch-Pad RAM at address 0xD4000000, DMI Scratch-Pad RAM at address 0xD0000000
•
One programming file for both FLASHs
FLASH declaration command for target-controlled programming:
; on-chip FLASH
FLASH.RESet
FLASH.Create 1. 0xA0000000++0x1FFFF 0x004000 TARGET
FLASH.Create 2. 0xA0020000++0x1FFFF 0x020000 TARGET
FLASH.Create 2. 0xA0040000++0x3FFFF 0x040000 TARGET
FLASH.Create 2. 0xA0080000++0x7FFFF 0x080000 TARGET
FLASH.Create 2. 0xA0100000++0x6FFFF 0x008000 TARGET
FLASH.TARGET 0xD4000000++0xFFF 0xD0000000++0x1FFF \
~~/demo/tricore/flash/long/tc1796.bin
Long
Long
Long
Long
Long
FLASH.ReProgram ALL
Data.LOAD.Elf demo.elf 0xA0000000++0x16FFFF
FLASH.ReProgram off
; off-chip FLASH
FLASH.RESet
FLASH.CFI 0xA1000000 Long /TARGET 0xD4000000++0xFFF 0xD0000000++0x1FFF
FLASH.ReProgram ALL
Data.LOAD.Elf demo.elf 0xA1000000++0x3FFFFF
FLASH.ReProgram off
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 61
FLASH Declaration in Detail
Determining the FLASH Size
FLASH.CFI.SIZE(<address>,<bus_width>)
Returns the size of single or parallel CFIconform FLASH devices as a hex.
number.
Returns 0 if TRACE32 can´t read the
CFI information.
PRINT FLASH.CFI.SIZE(P:0x0,Word)
Expert example for the MPC85xx architecture:
Preconditioned the boot configuration works correctly it is possible to set up the FLASH declaration and the
required bus configuration to program the FLASH automatically by a script.
Bus configuration after reset
1.
Configure the start address of the FLASH devices by setting BR0/BASEADDR to 0xff800000
(Boot ROM Location). This setting is preliminary and will be corrected later.
&flashbase=0xff800000
Data.Set ANC:iobase()+0x00005000 %Long \
(Data.LONG(ANC:iobase()+0x00005000)&0x00007FFF)|&flashbase
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 62
FLASH Declaration in Detail
2.
Read BR0/PS to determine the data <bus_width> between the CPU and the FLASH devices.
&port_size=(Data.LONG(ANC:iobase()+0x00005000)>>11.)&0x00000003
IF &port_size==1
&bus_width="BYTE"
ELSE IF &port_size==2
&bus_width="WORD"
ELSE IF &port_size==3
&bus_width="LONG"
ELSE
(
PRINT %ERROR "ERROR: Invalid bus width"
ENDDO
)
3.
Determine the flash size via a CFI query.
&flash_size=FLASH.CFI.SIZE(ANC:&flashbase,&bus_width)
IF (&flash_size==0)
(
PRINT %ERROR "ERROR: FLASH module could not be detected"
ENDDO
)
4.
Calculate the start address of the FLASH device.
&end_address=0xffffffff
&address==&end_address-&flash_size+0x1
5.
Correct the start address of the FLASH devices by setting BR0/BASEADDR to the calculated
&address.
Data.Set ANC:iobase()+0x00005000 %Long\
(Data.LONG(ANC:iobase()+0x00005000)&0x00007FFF)|&address
6.
Reduce the wait states for the FLASH devices to improve the programming performance by
setting OR0/SCY to 6.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 63
FLASH Declaration in Detail
&waitstates=6.
Data.Set ANC:iobase()+0x00005004 %Long \
(Data.LONG(ANC:iobase()+0x00005004)&0x00007F0F)\
|&flashbase|(&waitstates<<4.)
Correct bus configuration for the FLASH programming
7.
Program the FLASH.
; program FLASH device
FLASH.Reset
FLASH.CFI &address &bus_width
FLASH.Erase
FLASH.ReProgram ALL
Data.LOAD.auto * /WORD
FLASH.ReProgram off
The script for this example is also provided on the TRACE32 software CD under:
~~/demo/powerpc/hardware/mpc85xx/all_boards/flash_cfi.cmm
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 64
FLASH Declaration in Detail
Truncating the FLASH Size to the CPU Address Space
If the FLASH size is bigger then the address space of the CPU, it is necessary to specify the usable address
range for the FLASH.CFI command.
Example:
•
In order to have more GPIO pins an Infineon XC2xxx CPU is using only 18 of the 24 address
lines. Thus the external address space of the CPU is 256 KByte.
•
Due to any reason (better availability, smaller packages, better price) a 1 MByte FLASH is used.
•
Target RAM at 0x00e00000
FLASH declaration command for TRACE32 tool-based programming:
FLASH.RESet
; FLASH.CFI <address_range> <bus_width>
FLASH.CFI 0x0x00100000++0x3ffff Word
FLASH declaration command for target-controlled programming:
; FLASH.CFI <address_range> <bus_width> /TARGET <code_range> <data_range>
FLASH.RESet
FLASH.CFI 0x0x00100000++0x3ffff Word /TARGET 0x00e00000++0xfff 0x00e01000++0x1fff
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 65
FLASH Declaration in Detail
FLASH Declaration via FLASH.CFI Dialog Window
FLASH declaration with CFI is mostly used in scripts so the command line version is more common then the
corresponding dialog window.
The FLASH.CFI-dialog opens also if the command FLASH.CFI is used without parameters.
FLASH.CFI
; open FLASH.CFI dialog
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 66
FLASH Declaration in Detail
Generation of Equivalent FLASH.Create Commands
TRACE32 displays the equivalent commands for the manual FLASH declaration in the TRACE32 message
area, if the command FLASH.CFI is used. This is especially helpful to check which binary file is loaded as
FLASH programming algorithm.
AREA.CLEAR
; clear the message area
AREA.view
; open the message area
FLASH.CFI 0x0 Word /TARGET 0x20000000++0xfff 0x20001000++0xfff
A detailed description of the FLASH.Create command is given in the next chapter.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 67
FLASH Declaration in Detail
Declarations for not CFI-conform FLASH Devices
Not CFI-conform FLASH devices require that all characteristics are provided in the FLASH declaration.
Manual FLASH Declaration (TRACE32 Tool-based)
FLASH.Create <unit_number> <address_range> <sector_size> <family_code> <bus_width>
Parameters:
•
<unit_number>
TRACE32 maintains each FLASH device by its own <unit_number>.
•
<address_range>
Specifies the address range of the FLASH devices.
•
<sector_size>
Specifies the size of the individual sectors within the FLASH devices.
•
<family_code>
Specifies the TRACE32 tool-based programming algorithm. The FLASH device and the
corresponding <family_code> is listed under “List of Supported FLASH Devices” (flashlist.pdf).
•
<bus_width>
Defines the width of the data bus between the target CPU and the FLASH devices.
The syntax for the manual FLASH declaration for target-controlled programming is described in
“Converting TRACE32 Tool-based to Target-controlled FLASH Programming” in Onchip/NOR FLASH
Programming User’s Guide, page 84 (norflash.pdf).
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 68
FLASH Declaration in Detail
FLASH Devices with Uniform Sectors
Example:
•
Sharp LH28F016 FLASH device
•
32 sectors each with 64 KBytes
•
8-bit FLASH
FLASH.RESet
; FLASH.Create <unit_number> <address_range> <sector_size> <family_code> <bus_witdth>
FLASH.Create 1. 0x0--0x1fffff 0x10000 I28F001B Byte
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 69
FLASH Declaration in Detail
FLASH Devices with Sectors of Different Size
If a FLASH device contains sectors of different size an extra FLASH.Create command has to be used for
each address range with the same <sector_size>. TRACE32 knows that all the commands are related to a
single FLASH device if the same <unit_number> is used with all FLASH.Create commands.
Example:
•
Spansion S29AL008D bottom boot sector device
•
1 sector with 16 KByte, 2 sectors with 8 KByte, 1 sector with 32 KByte, 15 sectors with 64 KByte
•
16-bit mode
FLASH.RESet
; FLASH.Create <unit_number> <address_range> <sector_size> <family_code> <bus_witdth>
FLASH.Create
FLASH.Create
FLASH.Create
FLASH.Create
1.
1.
1.
1.
0x00000--0x03fff
0x04000--0x07fff
0x08000--0x0ffff
0x10000--0xfffff
0x04000
0x02000
0x08000
0x10000
AM29LV100
AM29LV100
AM29LV100
AM29LV100
Word
Word
Word
Word
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 70
FLASH Declaration in Detail
FLASH Devices in Series
If two or more identical FLASH devices are used in series to implement the needed FLASH memory size
each FLASH device has to be declared with a different <unit_number>.
Example:
•
Two Spansion S29AL008D bottom boot sector devices
•
Each providing 1 sector with 16 KByte, 2 sectors with 8 KByte, 1 sector with 32 KByte, 15 sectors
with 64 KByte
•
16-bit mode
0x1FFFFF
CPU
S29AL008D
in 16-bit mode
0x100000
0x0FFFFF
S29AL008D
in 16-bit mode
0x0
FLASH.RESet
; FLASH.Create <unit_number> <address_range> <sector_size> <family_code> <bus_witdth>
; declaration for the first FLASH device
FLASH.Create 1. 0x000000--0x003fff 0x04000
FLASH.Create 1. 0x004000--0x007fff 0x02000
FLASH.Create 1. 0x008000--0x00ffff 0x08000
FLASH.Create 1. 0x010000--0x0fffff 0x10000
AM29LV100
AM29LV100
AM29LV100
AM29LV100
Word
Word
Word
Word
; declaration for the second FLASH
FLASH.Create 2. 0x100000--0x103fff
FLASH.Create 2. 0x104000--0x107fff
FLASH.Create 2. 0x108000--0x10ffff
FLASH.Create 2. 0x110000--0x1fffff
AM29LV100
AM29LV100
AM29LV100
AM29LV100
Word
Word
Word
Word
device
0x04000
0x02000
0x08000
0x10000
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 71
FLASH Declaration in Detail
FLASH Devices in Parallel
If two or more identical FLASH devices are used in parallel to implement the needed data bus width, the
FLASH declaration has to be performed as follows:
n identical FLASH devices in parallel
•
<address_range> = n x <address_range_of_single_device>
•
<sector_size> = n x <sector_size_of_single_device>
•
<bus_width> = n x <bus_width_of_single_device>
Example:
•
Four 8-bit Sharp LH28F016 FLASH devices are used in parallel to implement a 32-bit data bus
•
Each providing 32 sectors with 64 KBytes
Address Bus
CPU
LH28F016
8-bit
LH28F016
8-bit
D31-D24
LH28F016
8-bit
D15-D8
D23-D16
LH28F016
8-bit
D7-D0
Data Bus
FLASH.RESet
;
;
;
;
FLASH.Create <unit_number> <address_range> <sector_size> <family_code> <bus_witdth>
<address_range> = 4 x 0x200000 = 0x800000
<sector_size> = 4 x 0x10000 = 0x40000
<bus_witdth> = 4 x 8 bit = Long
FLASH.Create 1. 0x0--0x7fffff 0x40000 I28F001B Long
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 72
FLASH Declaration in Detail
General Recommendations
•
Declare each FLASH device with all sectors.
TRACE32 is using full chip erase/bulk erase if possible. In doing so also not declared FLASH
sectors are erased.
•
Use the same unit number for all sector declarations applying to the same FLASH device.
•
If two or more identical FLASH devices are used in parallel to implement the needed data bus width
with the CPU, use the same unit number and calculate the parameters for the FLASH.Create
command as follows:
n identical FLASH devices in parallel
<address_range> = n x <address_range_of_single_device>
<sector_size> = n x <sector_size_of_single_device>
<bus_width> = n x <bus_width_of_single_device>
•
If two or more FLASH devices are used in series to implement the needed FLASH memory size,
declare each FLASH device with its own unit number.
TRACE32 is using full chip erase/bulk erase if possible. In doing so only the sectors within the
first FLASH device are erased, even if other FLASH sectors are declared with the same unit
number.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 73
FLASH Declaration in Detail
TRACE32 Tool-based vs. Target-controlled FLASH Programming
TRACE32 provides two techniques to program off-chip FLASH devices:
•
TRACE32 tool-based programming
The FLASH programming algorithm is part of the TRACE32 software and runs on the host.
•
Target-controlled programming
The FLASH programming algorithm is not part of the TRACE32 software. It is linked to TRACE32
and downloaded to the target RAM if required.
TRACE32-tool based programming
Target-controlled programming
Simple to set up because no target resources
are required
Simple setup, but the usage of more target
resources adds sources of errors
Slow
Very fast
Update of FLASH programming algorithm
requires complete TRACE32 software update
FLASH programming algorithm can be updated
independently from the TRACE32 software
Very flexible, every FLASH device can be
supported. If required refer to “How to Write
your own FLASH Algorithm”
(flash_app_own_algorithm.pdf)
Specifics in the target design (e.g. switched
data lines) can be corrected by the FLASH
algorithm.
Despite the obvious disadvantages of TRACE32 tool-based programming it is recommended to start with
this technique, because errors are less likely since no target resources are required.
If TRACE32 tool-based FLASH programming runs faultless, you can almost be sure that:
•
The bus configuration registers for the FLASH devices are set up correctly.
•
The interface between the CPU and the FLASH devices on your target hardware works faultless.
•
TRACE32 can erase and program the FLASH devices correctly.
After TRACE32 tool-based FLASH programming works correctly, you can easy migrate to the faster targetcontrolled FLASH programming. The migration procedure is described in “Converting TRACE32 Toolbased to Target-controlled FLASH Programming” in Onchip/NOR FLASH Programming User’s Guide,
page 84 (norflash.pdf).
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 74
FLASH Declaration in Detail
TRACE32 Tool-based FLASH Programming
TRACE32 Software
on Host
Target
FLASH Algorithm
CPU
USB
Data Bus
Control Lines
Power
Debug Module
Address Bus
EBI
FLASH
JTAG
Connector
EBI=External Bus Interface
The FLASH declaration requires only information on the FLASH devices since the FLASH algorithm is
integrated into the TRACE32 software.
FLASH declaration commands:
1.
FLASH declaration via CFI query
FLASH.CFI <start_address> <bus_width>
2.
FLASH declaration for not CFI-conform FLASH devices
FLASH.Create <unit_number> <address_range> <sector_size> <family_code> <bus_width>
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 75
FLASH Declaration in Detail
Target-controlled FLASH Programming
TRACE32 Software
on Host
Target
CPU
EBI
Power
Debug Module
JTAG
Connector
Control Lines
USB
Address Bus
Data Bus
FLASH
RAM
FLASH Algorithm
Program Range
FLASH Algorithm
Data Range
EBI=External Bus Interface
If target-controlled FLASH programming is used, the FLASH algorithm is not part of the TRACE32 software.
FLASH programming works now in principle as follows:
If any TRACE32 command is used that unlocks or locks, erases, programs the FLASH devices:
•
The TRACE32 software is saving the RAM contents of FLASH Algorithm Program/Data Range.
•
The TRACE32 software is saving the register context.
•
The TRACE32 software is loading the external FLASH algorithm to the FLASH Algorithm
Program Range and sets a software breakpoint at the exit of the FLASH algorithm.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 76
FLASH Declaration in Detail
To execute any action on the FLASH device (unlock or lock, block erase, chip erase, program) by the FLASH
algorithm
1.
The TRACE32 software is loading the argument buffer for the FLASH algorithm.
2.
The TRACE32 software is loading the data to FLASH Programming Data Range.
3.
The PC, stack pointer and the registers for the argument passing are set.
4.
The external FLASH algorithm is started.
5.
After the software breakpoint at the exit of the FLASH algorithm is reached, the TRACE32
software checks if there are any further actions to perform. Step 1 - 4 are repeated until all
actions are performed.
After the TRACE32 FLASH command is done:
•
The TRACE32 software is restoring the contents of the FLASH Algorithm Program/Data Range.
•
The TRACE32 software is restoring the register context.
Only one external FLASH algorithm can be used at a time.
This procedure requires additional setups in order to program off-chip NOR FLASH devices. This includes:
•
The definition of the external FLASH programming algorithm
•
The definition of the FLASH Algorithm Program Range
•
The definition of the FLASH Algorithm Data Range
•
The definition of the maximum number of bytes that are transferred from the TRACE32 software.
Before these requirements are described in detail a short command overview:
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 77
FLASH Declaration in Detail
FLASH Declaration Commands (Overview)
FLASH declaration commands for CFI-conform FLASH devices:
FLASH.CFI <start_address> <bus_width> /TARGET <code_range> <data_range>
FLASH.CFI <start_address> <bus_width> /TARGET <code_address> <data_address> [<buffer_size>]
FLASH declaration commands for not CFI-conform FLASH devices:
FLASH.Create <unit_number> <address_range> <sector_size> TARGET <bus_width>
FLASH.TARGET <code_range> <data_range> <file>
FLASH.Create <unit_number> <address_range> <sector_size> TARGET <bus_width>
FLASH.TARGET <code_address> <data_address> [<buffer_size>] <file>
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 78
FLASH Declaration in Detail
Localization of External FLASH Algorithm
A binary file is used as external FLASH algorithm.
Ready to run binary files for target-controlled FLASH programming are available for the most common
processor architectures on the TRACE32 software CD under: ~~/demo/<architecture>/flash.
Whereas ~~ is expanded to the <TRACE32_installation_directory>, which is c:\T32 by default.
CFI-conform FLASH devices
TRACE32 loads the appropriate FLASH programming algorithm automatically from
~~/demo/<architecture>/flash when target-controlled FLASH programming for CFI-conform
FLASH devices is used.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 79
FLASH Declaration in Detail
Not CFI-conform FLASH devices
The file name and the path for the FLASH programming algorithm needs to be specified explicitly for not
CFI-conform FLASH devices.
In the directory ~~/demo/<architecture>/flash the FLASH algorithms are organized by
<bus_width> and by <endianess>.
•
<bus_width>_be stands for FLASH support for big endian mode.
•
<bus_width>_le stands for FLASH support for little endian mode.
If your processor architecture has a preferred endianess, this <endianess> is left out and only the
<bus_width> is listed. The preferred endianess for the ARM architecture as an example is little endian mode.
The name of the binary file for the FLASH algorithm corresponds to the name listed in the CODE column for
the FLASH device in “List of Supported FLASH Devices” (flashlist.pdf).
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 80
FLASH Declaration in Detail
Example 1:
•
MIPS32 CPU in big endian mode
•
Intel Strata FLASH 28L256L30
•
16-bit data bus width between CPU and FLASH
Programming algorithm: ~~/demo/mips/flash/word_be/i28f200k3.bin
Example 2:
•
ARM9 CPU in little endian mode
•
AM29DL323C FLASH
•
16-bit data bus width between CPU and FLASH
Programming algorithm: ~~/demo/arm/flash/word/am29lv100.bin
If the binary file for the FLASH algorithm is not provided in ~~/demo/<architecture>/flash please
contact flash-support@lauterbach.com.
If you would like to write your own FLASH programming algorithm, please refer to the application note “How
to Write your own FLASH Algorithm” (flash_app_own_algorithm.pdf).
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 81
FLASH Declaration in Detail
FLASH Algorithm Program/Data Range
If target-controlled FLASH programming is used TRACE32:
1.
Downloads the external FLASH algorithm to the target RAM (FLASH Algorithm Program Range).
2.
Downloads the programming data to the target RAM (FLASH Algorithm Data Range).
This proceeding requires the specification of both address ranges in the FLASH declaration.
Memory mapping for the FLASH Algorithm Program Range:
FLASH algorithm
32 byte
Required size for the external FLASH algorithm is size_of(<flash_algorithm>) + 32 byte
Memory mapping for the FLASH Algorithm Data Range:
32 byte argument buffer
Buffer for programming data
256 byte stack
•
The argument buffer used for the communication between the TRACE32 software and the
FLASH algorithm is located at the first 32 bytes of the FLASH Algorithm Data Range.
•
The 256 byte stack is located at the end of the FLASH Algorithm Data Range.
•
The size of the buffer for programming data (<buffer_size>) specifies the maximum number of
bytes that are transferred from the TRACE32 software to the external FLASH programming
algorithm in one call.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 82
FLASH Declaration in Detail
TRACE32 supports two formats to provide this information.
Format 1: <code_range> <data_range>
; FLASH.CFI <start_address> <bus_width> /TARGET <code_range> <data_range>
FLASH.CFI 0x0 Word /TARGET 0x20000000++0x7ff 0x20001000++0xfff
•
<code_range>
TRACE32 downloads the external FLASH algorithm to <code_range>.
•
<data_range>
TRACE32 loads the programming data to <data_range> in the target RAM.
•
The maximum number of bytes that are transferred from the TRACE32 software to the external
FLASH programming algorithm in one call is calculated out of the <data_range> as follows:
size_of(<data_range>) - 32 byte argument buffer - 256 byte stack
Format 2: <code_address> <data_address> <buffer_size>
; FLASH.CFI <start_address> <bus_width> \
;/TARGET <code_address> <data_address> <buffer_size>
FLASH.CFI 0x0 Word /TARGET 0x20000000 0x20001000 0x4000
•
<code_address>
TRACE32 loads the external FLASH algorithm to the target RAM starting at <code_address>.
•
<data_address>
TRACE32 loads the programming data to the target RAM starting at <data_address>.
•
<buffer_size> specifies the maximum number of bytes that are transferred from the TRACE32
software to the external FLASH programming algorithm in one call.
If <buffer_size> is not specified 4 KByte is used by default.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 83
FLASH Declaration in Detail
Converting TRACE32 Tool-based to Target-controlled FLASH Programming
CFI-conform FLASH Devices
Conversion from TRACE32 tool-based FLASH declaration to target-controlled FLASH declaration:
Add the option /TARGET and the information about the FLASH Algorithm Program/Data Range to the
FLASH.CFI command.
&FLASH_PROGRAMMING_METHOD="Tool-based"
; &FLASH_PROGRAMMING_METHOD="Target-controlled"
FLASH.RESet
(
IF "&FLASH_PROGRAMMING_METHOD"=="Tool-based"
; FLASH.CFI <start_address> <bus_width>
FLASH.CFI 0x0 Word
)
IF "&FLASH_PROGRAMMING_METHOD"=="Target-controlled"
(
; FLASH.CFI <start_address> <bus_width>/TARGET <code_range> <data_range>
FLASH.CFI 0x0 Word /TARGET 0x20000000++0xfff 0x20001000++0xfff
)
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 84
FLASH Declaration in Detail
Not CFI-conform FLASH Devices
Conversion from TRACE32 tool-based FLASH declaration to target controlled FLASH declaration:
1.
Replace the <family_code> by the keyword TARGET when using the FLASH.Create command.
2.
Use the FLASH.TARGET command to specify the <code_range>, <data_range> and the
<flash_algorithm>. Please remember to use the FLASH algorithm from the directory with the
adequate <bus_width> and the correct <endianess>. The name of <flash_algorithm> matches
with the <family_code>.
&FLASH_PROGRAMMING_METHOD="Tool-based"
; &FLASH_PROGRAMMING_METHOD="Target-controlled"
FLASH.RESet
(
IF "&FLASH_PROGRAMMING_METHOD"=="Tool-based"
; FLASH.Create <unit_number> <address_range> <sector_size> <family_code> <bus_width>
FLASH.Create 1. 0x0++0x3fffff 0x20000 I28F200B Long
)
IF "&FLASH_PROGRAMMING_METHOD"=="Target-controlled"
(
; FLASH.Create <unit_number> <address_range> <sector_size> TARGET <bus_width>
FLASH.Create 1. 0x0++0x3fffff 0x20000 TARGET Long
; FLASH.Target <code_range> <data_range> <flash_algorithm>
FLASH.TARGET 0x20000000++0xfff 0x20001000++0xfff ~~\demo\arm\flash\long_be\i28f200b.bin
)
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 85
FLASH Declaration in Detail
Maintaining the Declared FLASH Devices
TRACE32 maintains all declared FLASH devices in the so-called FLASH declaration table. The following
commands are provided:
FLASH.List
List the contents of the FLASH declaration
table
FLASH.REset
Clear the FLASH declaration table and
reset all FLASH programming setups
within TRACE32 to its default value
FLASH.Delete ALL | <range> | <unit_number>
Remove entries from the FLASH
declaration table
List of Supported FLASH Devices
A list of all supported FLASH devices plus the corresponding <family_code> can be found in the online help
under:
An up-to-date list of all supported FLASH devices is always available on our
web-page under:
http://www.lauterbach.com/ylist.html.
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 86
FLASH Declaration in Detail
FLASH Programming via Boundary Scan
External NOR FLASH memories can be programmed via boundary scan, if the FLASH memory is
connected to an IC with a boundary scan chain and this boundary scan chain is accessible to the debugger.
After initializing the boundary scan FLASH mode, the tool based FLASH programming is used. All FLASH
commands like FLASH.CFI, FLASH.Program, ... can be used (target based programming is not possible!).
FLASH
TDI
TDO
TDI
IC4
TMS
TCK
TDO
TDI
TDO
IC3
TDI
IC2
TMS
TCK
TMS
TCK
TDO
IC1
TMS
TCK
To avoid disturbances of the FLASH programming due to communication between the debugger and the
target CPU, the system should be set to down state:
SYStem.Down
Boundary scan chain configuration
The first step for FLASH programming via boundary scan is the scan chain configuration. Configuration is
done by loading the BSDL files in the right order. The following commands are available for the scan chain
configuration:
BSDL.UNLOAD ALL
Removes all previous boundary scan chain configurations
BSDL.FILE <filename>
Loads a BSDL file
The BSDL file for the IC, which is closest to the board TDO connector, must be loaded first:
BSDL.UNLOAD ALL
; remove previous configuration
BSDL.FILE ispCLOCK5610Av_isc.bsm
; load the BSDL file for IC1
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 87
FLASH Programming via Boundary Scan
BSDL.FILE ispCLOCK5610Av_isc.bsm
; load the BSDL file for IC2
BSDL.FILE ispCLOCK5610Av_isc.bsm
; load the BSDL file for IC3
BSDL.FILE LCMXCO1200C_ftBGA256.bsdl
; load the BSDL file for IC4
The scan chain configuration can be viewed in the BSDL.state window:
With the commands BSDL.BYPASSall and BSDL.IDCODEall (or the functions bsdl.check.bypass() and
bsdl.check.idcode() in a PRACTICE script) the correct function of the boundary scan chain can be verified.
FLASH interface definition
The FLASH interface definition is done with the two commands:
BSDL.FLASH.IFDefine
Defines the FLASH memory interface
BSDL.FLASH.IFMap
Maps the generic FLASH ports to the driving IC ports
The definition requires the number of the IC in the boundary scan chain, to which the FLASH memory is
connected, the number of address and data ports.
BSDL.FLASH.IFDefine RESet
; remove previous configuration
BSDL.FLASH.IFDefine NOR 4. 24. 16.
;
;
;
;
defines a NOR FLASH memory with
24 address bits and 16 data
bits
the FLASH is connected to IC4
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 88
FLASH Programming via Boundary Scan
BSDL.FLASH.IFMap CE PR7C
; map the FLASH chip enable port
; to pin PR7C of IC4
BSDL.FLASH.IFMap OE PR7D
; map the FLASH output enable
; port to port PR7D of IC4
BSDL.FLASH.IFMap A0 PB7E
; map the FLASH address bit 0
; to port PB7E of IC4
If two or more FLASH memories are used in parallel, up to 4 sets of control ports are provided (e.g. CE,
CE2, CE3 and CE4).
The FLASH interface configuration can be checked with the command BSDL.FLASH.IFCheck (or
bsdl.check.flashconf() in a PRACTICE script).
FLASH Programming
To start the FLASH programming, the boundary scan chain must be initialized and the boundary scan
FLASH mode must enabled:
BSDL.FLASH.INIT SAFE
Initializes the boundary scan chain
FLASH.BSDLACCESS ON
Switch to boundary scan mode for FLASH access
BSDL.FLASH.INIT SAFE
;
;
;
;
;
Initializes the boundary scan chain: sets the
required instructions (BYPASS or EXTEST),
set all ports, which are not used for FLASH
programming to SAFE state according BSDL
file and sets the FLASH ports to idle state
FLASH.RESET
; remove previous FLASH configuration
FLASH.BSDLaccess ON
; switch to boundary scan FLASH mode
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 89
FLASH Programming via Boundary Scan
Title changes
to “BSDL address”
when FLASH BSDL
access is on
For the initialization of the boundary scan chain, the SAFE mode is recommended. Other modes are:
SAMPLE (the current state of the driving IC is sampled and these values are used during FLASH
programming), ZERO and ONE (sets all unused boundary scan register bits to ’0’ or ’1’). With the mode
NONE, the unused boundary scan register bits are not initialized and a previous configuration is used.
Caution:
Initializing the unused boundary scan register bits to all zero or one could
enable output drivers which leads to unintended behavior or could damage the
board.
After switching to boundary scan mode, the FLASH commands for tool based programming are used. The
boundary scan FLASH mode is terminated either by FLASH.BSDLaccess OFF or FLASH.RESet.
Full Example
; stop the debugger
SYStem.Down
; configure the boundary scan chain
BSDL.UNLOAD ALL
BSDL.FILE ispCLOCK5610Av_isc.bsm
BSDL.FILE ispCLOCK5610Av_isc.bsm
BSDL.FILE ispCLOCK5610Av_isc.bsm
BSDL.FILE LCMXCO1200C_ftBGA256.bsdl
;
;
;
;
;
remove previous configuration
load the BSDL file for IC1
load the BSDL file for IC2
load the BSDL file for IC3
load the BSDL file for IC4
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 90
FLASH Programming via Boundary Scan
; configure the FLASH interface
BSDL.FLASH.IFDefine RESet
BSDL.FLASH.IFDefine NOR 4. 24. 16.
BSDL.FLASH.IFMap CE
PR7C
BSDL.FLASH.IFMap OE
PR7D
BSDL.FLASH.IFMap WE
PB4C
; map the address ports
BSDL.FLASH.IFMap A0
PB7E
BSDL.FLASH.IFMap A1
PB7F
BSDL.FLASH.IFMap A2
PB8A
BSDL.FLASH.IFMap A3
PB8B
BSDL.FLASH.IFMap A4
PB8C
BSDL.FLASH.IFMap A5
PB8D
BSDL.FLASH.IFMap A6
PB8E
BSDL.FLASH.IFMap A7
PB8F
BSDL.FLASH.IFMap A8
PB9A
BSDL.FLASH.IFMap A9
PB9B
BSDL.FLASH.IFMap A10 PB9C
BSDL.FLASH.IFMap A11 PB9D
BSDL.FLASH.IFMap A12 PB9E
BSDL.FLASH.IFMap A13 PB9F
BSDL.FLASH.IFMap A14 PB10A
BSDL.FLASH.IFMap A15 PB10B
BSDL.FLASH.IFMap A16 PB10C
BSDL.FLASH.IFMap A17 PB10D
BSDL.FLASH.IFMap A18 PB10F
BSDL.FLASH.IFMap A19 PB11A
BSDL.FLASH.IFMap A20 PB11B
BSDL.FLASH.IFMap A21 PB11C
BSDL.FLASH.IFMap A22 PB11D
BSDL.FLASH.IFMap A23 PB6E
; map the data ports
BSDL.FLASH.IFMap DQ0
BSDL.FLASH.IFMap DQ1
BSDL.FLASH.IFMap DQ2
BSDL.FLASH.IFMap DQ3
BSDL.FLASH.IFMap DQ4
BSDL.FLASH.IFMap DQ5
BSDL.FLASH.IFMap DQ6
BSDL.FLASH.IFMap DQ7
BSDL.FLASH.IFMap DQ8
BSDL.FLASH.IFMap DQ9
BSDL.FLASH.IFMap DQ10
BSDL.FLASH.IFMap DQ11
BSDL.FLASH.IFMap DQ12
BSDL.FLASH.IFMap DQ13
BSDL.FLASH.IFMap DQ14
BSDL.FLASH.IFMap DQ15
;
;
;
;
;
;
remove previous configuration
defines a 16 bit NOR FLASH
with 24 address bits on IC4
map the FLASH CE to port PR7C
map the FLASH OE to port PR7D
map the FLASH WE to port PB4C
PR16B
PR16A
PR15B
PR15A
PR14D
PR14C
PR14B
PR14A
PR13D
PR13C
PR13B
PR13A
PR12D
PR12C
PR12B
PR12A
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 91
FLASH Programming via Boundary Scan
; check the boundary scan chain
if bsdl.check.bypass()
(
if bsdl.check.idcode()
(
; initialize boundary scan chain
BSDL.FLASH.INIT SAFE
; reset the FLASH declaration
FLASH.RESet
; switch to boundary scan FLASH mode
FLASH.BSDLaccess ON
; declare the FLASH sectors by CFI query
FLASH.CFI 0x0 Word
; unlock the FLASH device if required
; FLASH.UNLOCK ALL
; enable the programming for all declared FLASH devices
FLASH.ReProgram ALL
; specify the file that should be programmed
Data.LOAD.auto demo.x
; program the file and disable the FLASH programming
FLASH.ReProgram off
; verify FLASH data
FLASH.AUTO ALL
Data.LOAD.auto demo.x /ComPare
FLASH.AUTO off
; finish the boundary scan FLASH mode
FLASH.BSDLaccess OFF
)
)
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 92
FLASH Programming via Boundary Scan
FAQ
List of
supported
FLASH
Devices
Which FLASH devoces are currently supported?
Ref: 0270
Further Information
List of supported FLASH
devices
“List of Supported FLASH Devices” (flashlist.pdf) or
http://www.lauterbach.com/ylist.html
Command list
(NOR FLASH)
FLASH command list in “General Commands Reference Guide F”
(general_ref_f.pdf).
Troubleshooting
“Tips to Solve NOR FLASH Programming Problems”
(flash_diagnosis.pdf)
Write your own FLASH
programming algorithm
“How to Write your own FLASH Algorithm”
(flash_app_own_algorithm.pdf)
©1989-2017 Lauterbach GmbH
Onchip/NOR FLASH Programming User’s Guide 93
FAQ
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertising