Application Note - XMC1000 - Boot mode handling for XMC1000

AN_201511_PL30_005
Boot mode handling for XMC1000
XMC1000
About this document
Scope and purpose
This application note provides an introduction to the boot modes available in the XMC1000 Microcontroller
family. It also includes hints on its usage for users who wish to change the Boot Mode Index (BMI) value and
boot up from Alternate Boot Mode (ABM)
Intended audience
This document is intended for engineers who are familiar with the XMC1000 Microcontroller family.
References
[1]
The user’s manual can be downloaded from http://www.infineon.com/XMC
[2]
DAVE™ and its resources can be downloaded from http://www.infineon.com/DAVE
Application Note
www.infineon.com
Please read the Important Notice and Warnings at the end of this document
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Boot Mode Index (BMI) for booting up
Table of contents
About this document ............................................................................................................................................. 1
Table of contents ................................................................................................................................................... 2
1
1.1
1.2
1.3
1.4
1.5
1.5.1
1.5.2
1.5.3
1.5.4
1.6
1.6.1
1.6.2
1.6.3
1.6.4
Boot Mode Index (BMI) for booting up ............................................................................................... 3
Boot mode use cases............................................................................................................................... 5
Programming / debugging pin ................................................................................................................ 6
Boot Mode Index(BMI) ............................................................................................................................. 7
Booting up from BMI ............................................................................................................................... 9
ASC_BSL - ASC Bootstrap loader mode .................................................................................................. 9
User mode with debug enabled and HAR (UMHAR) .......................................................................... 9
User mode with debug enabled (UMD) ........................................................................................... 10
User productive mode (UPM)........................................................................................................... 10
CAN_BSL - CAN Bootstrap loader mode.......................................................................................... 11
Booting up from pins............................................................................................................................. 12
User Productive Mode (UPM) ........................................................................................................... 12
ASC_BSL - ASC Bootstrap Loader mode .......................................................................................... 12
ABM – Alternate Boot Mode ............................................................................................................. 12
CAN_BSL - CAN Bootstrap Loader mode ......................................................................................... 13
2
2.1.1
2.1.2
2.1.3
2.1.4
2.1.5
2.2
2.2.1
2.2.2
2.2.3
2.3
Programming the BMI value ............................................................................................................. 14
Programming the BMI by calling a user routine upon external interrupt ...................................... 14
Macro and variable settings ............................................................................................................. 15
XMC lib peripheral configuration structure ..................................................................................... 15
Interrupt service routine function implementation ....................................................................... 16
Main function implementation ........................................................................................................ 16
Using Memtool to change the BMI value .............................................................................................. 17
Memtool connection to XMC1000 using virtual COM port via XMC1000 CPU card ........................ 17
Memtool connection to XMC1000 using DAS via DAP miniWiggler ................................................ 20
Procedure for using Memtool to change the BMI value after connection ..................................... 22
Using DAVETM - ‘BMI get set’ feature to change BMI value.................................................................... 23
3
3.1
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.2
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
Booting up from alternate boot mode ............................................................................................. 24
Setting up the user program ................................................................................................................. 25
Linker script settings ........................................................................................................................ 25
Macro and variable settings ............................................................................................................. 25
XMC lib peripheral configuration structure ..................................................................................... 25
Interrupt service routine function implementation ....................................................................... 25
Main function implementation ........................................................................................................ 25
Setting up the Alternate Boot Mode(ABM) ........................................................................................... 26
Linker script settings ........................................................................................................................ 27
Macro and variable settings ............................................................................................................. 27
ABM header structure ...................................................................................................................... 27
XMC lib peripheral configuration structure ..................................................................................... 28
Interrupt service routine function implementation ....................................................................... 29
Main function implementation ........................................................................................................ 30
Revision history ................................................................................................................................................... 31
Application Note
2
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
1
Boot Mode Index (BMI) for booting up
Normally, in microcontrollers, the states of boot pins are read after the power-on reset sequence to determine
the device boot mode. However, if these pins are reserved for boot mode selection, this limit the usable pins
available for this application.
The XMC1000 Microcontroller supports a boot-pin-less concept known as Boot Mode Index (BMI) to determine
the boot mode after power-on reset. The entered boot mode depends on the BMI value stored in the flash
configuration sector 0 (CS0). During boot up, the start-up software for the XMC1000 device determines the
start-up mode to be entered from the BMI value. In XMC1400 series device, “Boot from BMI” and “Boot from
pins” mode are both supported.
Table 1 lists the boot modes supported in the XMC1000 series devices.
Note:
For the (XMC1100, XMC1200, XMC1300 and XMC1400) boot kits, the devices are pre-programmed to
user mode with debug enabled (SWD0). In this configuration, the application program starts to run
after power-up.
Note:
Default boot up is from “Boot from BMI”. “Boot from pins” is only supported in XMC1400 series device.
Reset
SSW read BMI
value in Flash
configuration
sector 0
Boot from BMI
*Boot from pins
Note: *) Only supported in XMC140x devices
Figure 1
Application Note
Boot ROM operating mode after power-on reset
3
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
Wait for ASC_BSL commands
1
ASC BSL
If no BSL command received before timeout period expired, run user code (Flash)
Wait for SSC_BSL commands
Boot from BMI
1
SSC BSL
If no BSL command received before timeout period expired, run user code (Flash)
Wait for SPD/SWD commands
User Mode HAR
(SWD/SPD)
User Mode Debug
(SWD/SPD)
run user code (Flash)
(DEBUG access enabled)
User Productive
run user code (Flash)
(DEBUG access disabled)
Wait for CAN_BSL commands
Legend:
ASC = Asynchronous Serial Channel
HAR = Halt After Reset
BSL = Bootstrap Loader Mode
SSC = Synchronous Serial Communication
SPD = Single Pin Debug
SWD = Serial Wire Debug
CAN = Controller Area Network
1
CAN* BSL
If no BSL command received before timeout period expired, run user code (Flash)
Note: 1) for BSL with time-out mode
*) Only supported in XMC140x devices
Figure 2
Boot options from Boot Mode Index (BMI)
run user code (Flash)
(DEBUG access disabled)
User Productive
Wait for ASC_BSL commands
*Boot from Pin
1
ASC BSL
If no BSL command received before timeout period expired, run user code (Flash)
Alternate Boot
Mode (ABM)
Wait for CAN_BSL commands
1
CAN BSL
If no BSL command received before timeout period expired, run user code (Flash)
Legend:
ASC = Asynchronous Serial Channel
BSL = Bootstrap Loader Mode
CAN = Controller Area Network
Note: 1) for BSL with time-out mode
*) Only supported in XMC140x devices
Figure 3
Application Note
Boot options from pins
4
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
1.1
Boot mode use cases
Table 1
Boot mode use cases
Mode
Use case
Boot type
ASC Bootstrap Loader
mode, ASC_BSL
 Allow Flash programmer to download Flash erasing and
SSC Bootstrap Loader
mode, SSC_BSL
 Allow code download from a SPI-compatible serial EEPROM
User mode with debug
enabled and HAR (SWD)
or
User mode HAR (SWD)
 Serial Wire Debug is ARM propriety debug protocol for ARM
User mode with debug
enabled and HAR (SPD)
or User mode HAR (SPD)
 Single Pin DAP is Infineon propriety debug protocol.
programming routine using UART protocol to the XMC1000
device.
into SRAM using SSC protocol to the XMC1000 device.
TM
Cortex processor.
 User code will not run after power-up.
 Allows debugging at the beginning of user code.
BMI
Pins
✓
✓
✓
-
✓
-
✓
-
✓
-
✓
-
✓
✓
✓
✓
-
✓
 Allows single pin debugging.
 Pin-saving for XMC1000’s 16 pin package.
 User code will not run after power-up.
 Allows debugging at the beginning of user code.
User mode with debug
enabled (SWD)
or User mode debug
(SWD)
 User code will run after power-up.
User mode with debug
enabled (SPD)
or User Mode debug
(SPD)
 User code will run after power-up and supports debugging
User productive mode
 Flash protection scheme.
 Supports debugging using serial wire debug protocol.
using single pin debug protocol.
 Debugging is not supported.
CAN Bootstrap Loader
mode, CAN_BSL
 Allow SRAM download of user application using CAN
Alternate Boot Mode
(ABM)
 Allow startup from a user defined flash address
Note:
protocol to the XMC1000 device.
CAN BSL and Alternate Boot Mode (ABM) modes are only supported in XMC1400 series device.
Application Note
5
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
1.2
Programming / debugging pin
Two sets of pins are available for you to choose from to use for programming or debugging the XMC1000 device.
The selection of a port pin depends on the BMI value. In the subsequent sections, the mode selection processes
are described.
Note:
For ASC_BSL mode, both channel 0 and 1 are ready for UART communication after power-up, so the
user does not need to choose which channel to use for ASC_BSL communication.
Note:
For CAN_BSL, both node 0 and 1 are ready for MultiCAN communication after power-up, the selection
of the nodes and the detection of the Txd and Rxd pins are done automatically. If the start-up
software detects the initialization frame on P0.14, it would configure P0.15 for Txd functionality on
Node 0.
XMC1000
ASC_BSL
(Half Duplex)
User Mode
SWD
SSC_BSL
Channel / Node 0
P0.13
P0.14
P0.15
Channel / Node 1
P1.3
P1.2
-
/
-
/
-
/
-
/
RXD / RxD-TxD (Half Duplex) / SWDIO / SPD /
TXD /
-
/ SWCLK /
-
/CS
/
-
/
-
SCLK
/ RXD / TXD
/ MRST - MTSR / TXD / RXD
RXD / RxD-TxD (Half Duplex) / SWDIO / SPD /
-
/ RXD / TXD
TXD /
-
/ TXD / RXD
-
/ SWCLK /
ASC_BSL
(Full Duplex)
-
/
User Mode
SPD
CAN_BSL*
Note: *) Only supported in XMC140x devices
* For CAN_BSL, if SSW detects initialization frame
on the pin (e.g P0.14), it would configure P0.15
for TX functionality on Node 0.
Figure 4
Application Note
Pins used to communicate with the XMC1000 device in each boot mode
6
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
1.3
Boot Mode Index(BMI)
The XMC1000 device BMI value is read from memory location 0x10000E00. The factory default BMI value at
delivery is 0xFFC0, meaning that the device is in ASC Bootstrap Loader mode.
Figure 5
Application Note
Boot Mode Index (BMI) bit field description for XMC1100, XMC1200 and XMC1300 device series
7
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
Figure 6
Application Note
Boot Mode Index (BMI) bit field description for XMC1400 device series
8
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
1.4
Booting up from BMI
The default boot configuration is “Boot from BMI” for XMC1000 devices. Each of the Boot modes are described
in this section.
Note:
In the XMC1400 series device, the option to “Boot from BMI” is selected if the BMI value is programmed
with BMI.PINDIS = 1.
1.5
ASC_BSL - ASC Bootstrap loader mode
After power-up/master reset, the device waits for a falling edge transition at its RXD pin after exit from the
startup software. This falling edge transition indicates the ASC_BSL handshaking has started.
In ASC_BSL mode, the user can download the code into SRAM starting at address 0x20000200. After the code is
received and stored, the Start-up software will run the user’s code at SRAM address 0x20000200.
The ASC_BSL can communicate with the host PC in full duplex or half duplex mode. This depends on the
header byte that the host PC sends to the XMC1000 device during the ASC_BSL handshaking.
ASC_BSL supports a time-out option. If the XMC1000 device does not receive the start and header bytes from
the host within the duration defined in BMI.BLSTO, it will jump to the flash location whose address is stored at
0x10001004, and execute from there.
Table 2
BMI values and Port settings for ASC_BSL mode
Header byte
BMI value
UART communication
RXD Pin
TXD Pin
0x12
0xFFC0
Half duplex
P0.14
P0.14
P1.3
P1.3
P0.14
P0.15
P1.3
P1.2
P0.14
P0.14
P1.3
P1.3
P0.14
P0.15
P1.3
P1.2
0x6C
0x12
0x6C
1.5.1
0xFFC0
Full duplex
0xFFD0 (time-out = 4995
ms @ MCLK = 8 MHz)
Half duplex
0xFFD0 (time-out = 4995
ms @ MCLK = 8 MHz)
Full duplex
User mode with debug enabled and HAR (UMHAR)
After power-up/master reset, the device will wait for SWD/SPD connection after exit from the startup software.
If it encounters a system reset, the device will behave in a user mode (debug) manner. The user can access the
full debug functionality using SWD/SPD to establish a connection to the XMC1000 device.
This mode is recommended when the user wants to develop and debug their code, especially in motor
applications. After power-up, the user’s application code will not run and the user is in full control on where the
code execution should stop (e.g at which part of the application code), via the debugger.
Table 3
BMI value and port settings for user mode with debug enabled and HAR (UMHAR)
BMI value
SWD / SPI Signal
Pin used
0xF8C7
SWDIO_0
P0.14
SWDCLK_0
P0.15
SPD_0
P0.14
0xF9C7
Application Note
9
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
0xFAC7
0xFBC7
1.5.2
SWDIO_1
P1.3
SWDCLK_1
P1.2
SPD_1
P1.3
User mode with debug enabled (UMD)
After power-up, the device will start to run from the flash location address stored at 0x10001004. The specified
SPD/SWD pins are automatically configured to allow for debugger access.
This mode is recommended when you want to test the code in a real application environment. You can update
your working code using the debugger for future upgrades. This ‘hot-attached’ mode is the default connection
mode for the ARM® CortexTM processor.
Table 4
BMI value and port settings for user mode with debug enabled (UMD)
BMI value
SWD / SPD Signal
Pin used
0xF8C3
SWDIO_0
P0.14
SWDCLK_0
P0.15
0xF9C3
SPD_0
P0.14
0xFAC3
SWDIO_1
P1.3
SWDCLK_1
P1.2
SPD_1
P1.3
0xFBC3
1.5.3
Attention:
User productive mode (UPM)
This mode should only be used once the user has confirmed that their code is FULLY TESTED.
After power-up, the device will start to run from the flash location address stored at 0x10001004.
This mode provides MEMORY PROTECTION by not allowing external tools such as the debugger, read/write
access to the flash memory.
Table 5
BMI value and port settings for user productive mode (UPM)
BMI value
SWD / SPD signal
Pin used
0xF8C1
-
-
It is possible to change the BMI value in this mode. This is done by embedding the provided “Request BMI
installation routine (new BMI)” in the user code. The “Request BMI installation” routine is provided inside the
XMC1000 ROM at location 0x00000108. The application software can run this routine to change the BMI value
under user-defined conditions. For example, the change of BMI value can be triggered from an external
interrupt or from GPIO pin latch values.
For code protection purposes, if the current BMI value is User Productive Mode (UPM) and the newly requested
BMI value is NOT User Productive Mode (UPM), the Start-up software will erase the full flash of the device, and
re-install the default BMI (ASC_BSL). The user needs to call the ‘Request BMI installation (new BMI)’ routine
again via ASC_BSL mode if that is not the desired BMI value.
Application Note
10
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
An example using an external interrupt to trigger the “Request BMI installation” routine is provided in chapter
2.1.1.
1.5.4
CAN_BSL - CAN Bootstrap loader mode
After power-up/master reset, based on the settings of the BMI.CANCLK, either the internal or external oscillator
is selected for the synchronous CAN clock source. There are three protocol phases (namely initialization,
acknoweldgement and data transmission) for the user application to be downloaded. The size of the useravailable SRAM determines the maximum size of the downloadable application code.
In the initialization phase, if the startup software detects an initialization frame on P0.14, it would configure
P0.15 for TX functionality on Node 0, and vice versa. On the other hand, if the initialization frame is detected on
P1.3, then P1.2 would be configured for TX functionality for Node 1.
In CAN_BSL mode the user can download their program into SRAM, starting at address 0x20000200. After the
program is received and stored, the start-up software will run the user’s program at SRAM address 0x20000200.
CAN_BSL supports a time-out option. If the device does not receive the initialization frame from the host within
the duration defined in BMI.BLSTO, it will jump to the flash location whose address is stored at 0x10001004, and
execute from there.
Note:
CAN BSL is only supported in XMC1400 series devices. When the external oscillator is selected, a stable
external clock (OSC_HP) is mandatory. For transfer rates of 1 Mbps, the user has to ensure that the
external clock is at least 10 MHz.
Table 6
BMI values and port settings for CAN_BSL mode
BMI value
Clock
RXD Pin
TXD Pin
0xFF80
External
oscillator
P0.14
P0.15
P0.15
P0.14
P1.3
P1.2
P1.2
P1.3
P0.14
P0.15
P0.15
P0.14
P1.3
P1.2
P1.2
P1.3
P0.14
P0.15
P0.15
P0.14
P1.3
P1.2
P1.2
P1.3
P0.14
P0.15
P0.15
P0.14
P1.3
P1.2
P1.2
P1.3
0xFF90 (time-out = 4995 ms @ MCLK = 8 MHz)
0xF780
0xF790 (time-out = 4995 ms @ MCLK = 8 MHz)
Application Note
External
oscillator
Internal
oscillator
Internal
oscillator
11
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
1.6
Booting up from pins
The option to boot up from pins is selected if the BMI value is programmed with BMI.PINDIS = 0. Upon master
reset, the values at boot pins P4.6 and P4.7 are latched. These values shall be evaluated and used to enter the
selected boot modes.
Note:
“Boot from pins” mode is only supported in the XMC1400 series controller. In order to boot up
correctly, a valid BMI.HWCFG must be programmed in the BMI value.
Upon master reset, the values at the boot pins P4.6 (STSTAT.HWCON[0]) and
P4.7(STSTAT.HWCON[1]) are latched in.
Figure 7
Boot Pin Mode for XMC1400 series device
1.6.1
User Productive Mode (UPM)
Refer to Chapter 1.5.3.
1.6.2
ASC_BSL - ASC Bootstrap Loader mode
Refer to Chapter 1.5.
1.6.3
ABM – Alternate Boot Mode
After power-up/master reset, the values at boot pins P4.6 and P4.7 are latched to STSTAT.HWCON. If the
latched value to HWCON = 10, it enters to ABM mode. On entry to this bootmode, the startup software branches
to the start address of the ABM user code, only if a matching magic key and code length value greater than 0 is
fulfilled. The ABM header is placed in the last 32 bytes of the user flash area.
Note:
In this mode, a user defined application should first be downloaded to the user-defined flash address
via the standard bootstrap loader or SWD. This must be followed by a change in the BMI to boot via
pins along with the selection of ABM boot mode and followed by a master reset for the new boot
mode to take effect.
Application Note
12
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
Table 7
Alternate Boot Mode Header (ABMHD) structure
Offset Address
Size (Byte) Field Name
Description
0x00
4
MAGICKEY
Magic key = 0xA5C3E10F
0x04
4
STADDABM
Start address of the ABM user code
0x08
4
CODELENGTH
Length of the user code of ABM (This value should be
greater than 0)
Table 8
Start address of the ABMHD structure for different flash options
Flash options (KBytes)
Start address of the ABMHD structure
200
0x10032FE0
128
0x10020FE0
64
0x10010FE0
32
0x10008FE0
1.6.4
CAN_BSL - CAN Bootstrap Loader mode
Refer to chapter 1.5.4.
Application Note
13
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
2
Programming the BMI value
When the XMC1000 device is delivered from the factory, the default boot mode is ASC_BSL. If you want to
connect the device to the debugger, you need to change the BMI value to ‘User mode with debug enabled’, or
to ‘User mode with debug enabled and HAR’. The change is made via the “Request BMI installation routine (new
BMI)”, available in ROM address 0x00000108. Use this routine to change the current BMI value to the required
value.
In the following sections, example code is used to illustrate how to change the BMI value using software on an
external interrupt. An introduction to Memtool (v4.5 and later) for changing the BMI value is also provided in
the following sections.
Note:
A “Master reset” is to be executed in order for the BMI value to be updated. However, if the power
supply is switched off before the “Master reset” occurs, the BMI value will revert to the default value
(ASC_BSL), instead of the desired BMI value. It is therefore very important to keep the VDDP of the
XMC1000 device operating voltage stable when programming the BMI value. If user is changing BMI
from User Productive mode to ASC_BSL mode, please keep the power supply of the XMC1000 stable
for at least 7 seconds for a 200kB flash size (MCLK@8MHz) after “Request BMI installation” routine is
called. If the user is changing BMI to any other mode, then please keep the power supply of the
XMC1000 stable for at least 10 milliseconds (MCLK@8MHz) after “Request BMI installation” routine is
called.
2.1.1
Programming the BMI by calling a user routine upon external interrupt
In this example, an external interrupt is triggered based on a rising edge event detected on P2.0. In the
interrupt handler, the routine to install a new BMI to ASC_BSL mode is called. The rising event is set up using
the Event Request Unit (ERU) that triggered an interrupt on ERU0.SR0.
XMC1000_BmiInstallationReq(0xFFC0);
ERU0
ETL
P2.0
B
Trigger
OGU
IOUT0
SR0
NVIC
(ERU0.SR0)
1. Initially, P2.0 is connected to GND.
2. To trigger a change in BMI to ASC_BSL, P2.0 is connected to VCC.
3. This creates a rising edge on P2.0 and triggers an external interrupt event.
4. In the ISR, the routine for changing the BMI is called.
Figure 8
Application Note
Changing the BMI from an external interrupt
14
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
2.1.2
Macro and variable settings
/* XMC lib project includes: */
#include <xmc_eru.h>
#include <xmc_gpio.h>
#include <xmc_scu.h>
/* Project definitions */
#define ROM_FUNCTION_TABLE_START
(0x00000100)
#define _BmiInstallationReq
(ROM_FUNCTION_TABLE_START + 0x08)
/* Pointer to Request BMI installation routine */
#define XMC1000_BmiInstallationReq
\
(*((unsigned long (**) (unsigned short)) _BmiInstallationReq))
2.1.3
XMC lib peripheral configuration structure
/* XMC GPIO configuration */
XMC_GPIO_CONFIG_t input_config =
{
.mode = XMC_GPIO_MODE_INPUT_TRISTATE,
.input_hysteresis = XMC_GPIO_INPUT_HYSTERESIS_STANDARD
};
/* Event Trigger Logic Configuration - ERU0.0B0 (P2_0) selected */
XMC_ERU_ETL_CONFIG_t ERU0_ETL_Config =
{
.input_a = (uint32_t)XMC_ERU_ETL_INPUT_A0, /* Event input selection for A(0-3) */
.input_b = (uint32_t)XMC_ERU_ETL_INPUT_B0, /* Event input selection for B(0-3) */
.enable_output_trigger = (uint32_t)1,
.status_flag_mode = (XMC_ERU_ETL_STATUS_FLAG_MODE_t)XMC_ERU_ETL_STATUS_FLAG_MODE_HWCTRL,
/* Select the edge/s to convert as event */
.edge_detection = XMC_ERU_ETL_EDGE_DETECTION_RISING,
/* Select the source for event */
.output_trigger_channel = XMC_ERU_ETL_OUTPUT_TRIGGER_CHANNEL0,
.source = XMC_ERU_ETL_SOURCE_B
};
/* Output Gating Unit Configuration - Gated Trigger Output */
XMC_ERU_OGU_CONFIG_t ERU0_OGU_Config =
{
.peripheral_trigger
= 0U, /* OGU input peripheral trigger */
.enable_pattern_detection
= false, /* Enables generation of pattern match event */
Application Note
15
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
/* Interrupt gating signal */
.service_request
= XMC_ERU_OGU_SERVICE_REQUEST_ON_TRIGGER,
.pattern_detection_input
= 0U
};
2.1.4
Interrupt service routine function implementation
/* Interrupt Handler for External Trigger Interrupt */
void ERU0_0_IRQHandler(void)
{
// BMI_installation routine to set BMI = ASC_BSL
XMC1000_BmiInstallationReq(0xFFC0);
}
Note:
For an XMC1400 series device, due to the interrupt handler “void ERU0_0_IRQHandler(void)” should
be replaced with “void IRQ3_Handler (void)”
2.1.5
Main function implementation
int main(void)
{
/* Sets up the ERU- ETL and OGU for the external trigger event */
XMC_ERU_ETL_Init(XMC_ERU0, 0, &ERU0_ETL_Config);
XMC_ERU_OGU_Init(XMC_ERU0, 0, &ERU0_OGU_Config);
/* Initializes the gpio input and output */
XMC_GPIO_Init(P2_0, &input_config);
/* Enable the interrupt – ERU0_SR0 */
// XMC_SCU_SetInterruptControl(3, XMC_SCU_IRQCTRL_ERU0_SR0_IRQ3); //Only for XMC140x
NVIC_EnableIRQ(3U);
/* Placeholder for user application code. */
while(1U)
{
}
}
Note:
For an XMC1400 series device, uncomment the code line “XMC_SCU_SetInterruptControl(3,
XMC_SCU_IRQCTRL_ERU0_SR0_IRQ3);”
Application Note
16
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
2.2
Using Memtool to change the BMI value
Memtool is a free tool from Infineon Technologies that can be used to support the programming of XMC1000
devices.
Note:
Other professional tools can also support changing the BMI value, such as Universal Access Device 2
from PLS for example, but those tools are not described in this document.
Table 9
Memtool (v4.5 and higher) connection configuration
Hardware
Driver
Connection methods
XMC1000 Boot Kit
Virtual COM port
ASC_BSL
XMC Link
Virtual COM port
ASC_BSL
DAP miniwiggler v3.x
DAS
ASC_BSL, SWD, SPD
TM
2.2.1
Memtool connection to XMC1000 using virtual COM port via XMC1000
CPU card
This mode of connection can only be used when the XMC1000 device BMI value is ASC_BSL mode.
There are 2 cases where the connection to the device can be done through the virtual COM port. The first is
using the XMC1000 boot kit, where the CPU card has an on-board COM and SEGGER J-Link debugger. The other
case is using an XMCTM Link, an isolated debug probe for all XMC™ Microcontrollers, on a standalone MCU board.
The debug probe is based on SEGGER J-Link debug firmware, which enables use with DAVE™ and all major
third-party compiler/IDEs known from the wide ARM® ecosystem.
Once the appropriate connection is made, Memtool uses the COM port for ASC_BSL communication with the
XMC1000 device. If you have any virtual COM port equipment, Memtool can be used to perform ASC_BSL
communication with the XMC1000 device and change the BMI value.
For the pin connection please refer to Figure 4.
Note:
The XMC1000 boot kit can be ordered online from: www.infineon.com/xmc1000 -> XMC1000 kits.
Note:
XMCTM Link can be ordered online from: www.infineon.com/xmclink.
Application Note
17
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
[1]
XMC1200 CPU board is built with:
[1]On-board COM and Segger J-Link Debugger,
[2] XMC1200 device
[2]
For memtool connection to the device through Virtual
COM port, the device will need to be in ASC_BSL mode.
There are 2 ways that this can be done.
Method 1: If the board has an on-board COM and
Segger J-Link Debugger similar to the XMC1200 CPU
board. You can connect it to the USB connection built on
the board [1].
Method 2: If the board is a standalone board with only [2]
MCU and a header debug connector, it can be connected
to the XMCTM Link.
XMC1200 CPU Board
Method 1: Memtool connection using on-board COM
USB 2.0
Port
Method 2: Memtool connection using XMCTM Link
USB 2.0
Port
XMCTM Link
XMC1200 CPU Board
Memtool
Figure 9
Application Note
Method to connect via the virtual COM port using Memtool
18
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
[1]
[6]
[3]
[2]
[4]
[5]
Figure 10
Setup Memtool to connect to XMC1000 using virtual COM port
Procedure
1. Open Memtool (v4.5 and higher) and select [1] “Target  Change …”.
2. New dialog box “Select target configuration” opens. Select [2] “Default” button.
3. New dialog box “Create or use default” opens. Select from the default target configuration available where a
list of XMC1000 boards is available for selection.
− If the BMI of the XMC1200 boot kit is in ASC_BSL mode, select [3]“Infineon XMC1200 boot kit with
XMC1201-T038F0200 with on-board debugger (Minimon/ASC)” and click [4] “Finish”
4. Click [5] “OK”. Connect the USB cable to the XMC1200 boot kit board and click [6]”Connect” button.
Application Note
19
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
2.2.2
Memtool connection to XMC1000 using DAS via DAP miniWiggler
This mode of connection can be used when the XMC1000 device BMI value is ASC_BSL, user mode debug
(SWD/SPD) or user mode HAR (SWD/SPD).
The DAP miniWiggler can be ordered online from: www.infineon.com/das -> DAP miniWiggler.
[1]
[6]
[3]
[2]
[4]
[5]
DAPminiwiggler v2.0
Figure 11
Application Note
Setup Memtool to connect to the XMC1200 target board using DAS
20
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
Procedure
1. Open Memtool (v4.5 and higher) and select [1] “Target  Change …”.
2. New dialog box “Select target configuration” opens. Select [2] “Default” button.
3. New dialog box “Create or use default” opens. Select from the default target configuration available where a
list of XMC1000 boards is available for selection.
− If using the XMC1200 target board, select [3]“Infineon XMC1200 boot kit with XMC1201-T038F0200 (DAS)”
and click [4] “Finish”
4. Click [5] “OK”. Plug the DAP miniWiggler to the USB port of the Host PC and connect the 10-pin connector of
the DAP miniWiggler to the XMC1200 target board as show in Figure 12.
5. Connect the USB cable to the XMC1200 boot kit board and click [6]”Connect” button. Now, Memtool should
be able to connect to the XMC1200 device.
10 pins DAP connector of DAP MiniWiggler
Pin 1
Pin 2
Pin 1 to VDDP of XMC1200
Pin 2 to P0.14 of XMC1200
Pin 4 to P0.15 of XMC1200
Pin 3 to GND of XMC1200
VDDP
USB 2.0
Port
miniWiggler
Jtag/DAP/SPD
V2.0
P0.14
P0.15
XMC1200
device
GND
User XC1200 Target board
Memtool,
DAS
“Samtec FTSH FTSH-105-01-L-DV-K”
connector on target board to match
the 10 pins ribbon cable connector
from miniWiggler
Note: User has to supply 3.3V/5V to VDDP
of XMC1200 device. The DAP miniWiggler
does not supply power at pin1 of its
connector.
Note: This connector is not part of
the XMC1000 bootkit.
Figure 12
Application Note
Connection diagram between DAP miniWiggler v2.0 and XMC1200 target board
21
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
2.2.3
Procedure for using Memtool to change the BMI value after connection
[1]
[5]
[2]
[3]
[4]
Figure 13
Using Memtool to change the BMI value
With the DAS driver, Memtool can connect to the XMC1000 device via ASC_BSL, SWD and SPD protocols. When
using the virtual COM port, Memtool can only connect to the XMC1000 device via ASC_BSL. After connection to
the XMC1000 device, to change the BMI value of the XMC1000 device:
1. Select [1] “HW protect…” button.
2. New dialog box “Enable chip/sector protection” opens. Select [2] “Setup…” button.
3. New dialog box “Setup flash/OTP device” opens. Select the new BMI with [3] Install BMI configuration. Once
selected, click [4] “OK”.
4. In the dialog box “Enable chip/sector protection”, select [5] “Start” to change the BMI value of the XMC1000
device.
Application Note
22
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
Using DAVETM - ‘BMI get set’ feature to change BMI value
2.3
There is a BMI handling feature in DAVETM (v3.1.10 and higher) release. This feature works with J-Link XMC4200
OBD (part of the XMC1000 boot kit), J-Link, J-Link EDU or XMCTM Link.
[1]
[2]
[4]
Figure 14
[3]
Illustration of ‘BMI get set’ feature in DAVETM v3.1.10 and above
First, the J-Link debugger needs to connect to the XMC1000 device. Using the following steps in the DAVE™ IDE,
the BMI can be updated:
TM
1. Launch DAVE
(v3.1.10 and higher) IDE and select [1] “BMI get set” button.
2. New dialog box “BMI get set” opens. Select [2] “BMI selection:”, the desired NMI value to set to the XMC1000
device.
3. Select “Set BMI” [3] to install the new BMI value. The chosen BMI value will be updated after a system reset
to the XMC1000 device.
4. To read the BMI value, click [4] “Get BMI”. The BMI value will be read out from XMC1000 device and output at
the ‘Detected BMI value’ field.
Application Note
23
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
3
Booting up from alternate boot mode
In order for boot up from Alternate Boot Mode (ABM), there are two steps that need to be performed. In the first
step, the user program for Alternate Boot Mode needs to be set up to be loaded into the designated code area
as required by the application.
In the second step, the set up of the ABM header information and the changing of the Boot Mode Index (BMI)
into “Boot from pins” is required. With the BMI value programmed with BMI.PINDIS = 0, the boot configuration
type is selected to “Boot from pins”. On a master reset, based on the latched value into the STSTAT.HWCON,
the selected bootmode is entered. If ABM is selected, the startup software will read the ABM header structure
and will branch to the start address of the ABM user code, if a matching magic key is available.
Code Flash
Application code including the
stack pointer and reset vector
APPLICATION CODE
ABM User code including the
stack pointer and reset vector
ABM User Code
MAGICKEY
STADDADDR
CODELENGTH
Figure 15
Alternate Boot Mode
Header Structure
(Last 32 bytes of flash)
ABM concept for XMC1400 series device
In order to successfully boot into ABM, the ABM user code, as described in the first step, needs to be
downloaded to the defined location prior to the change of the BMI value to ABM. The next step is to have the
ABM header structure located at the last 32 bytes of the user flash area. Once all this is available, the final step
is to change the BMI value to “Boot from pin”.
In the next sections, we will go through an example how to set up the user code into a defined address of the
ABM user code, the setup of the ABM header as well as to change the BMI value to “Boot from pins”.
Note:
“Boot from pins” is only supported in XMC1400 series devices.
Application Note
24
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
3.1
Setting up the user program
In this example, a project is created on DAVE™ IDE for toggling a port pin at P4.1 at an interval of 10 Hz.
3.1.1
Linker script settings
The linker script is updated to locate the code at 0x10020000.
Change the start address of the code to 0x10020000
Figure 16
Modify linker script to locate the user
3.1.2
Macro and variable settings
/* XMC lib Project includes */
#include <xmc_gpio.h>
3.1.3
XMC lib peripheral configuration structure
/* XMC GPIO Configuration */
XMC_GPIO_CONFIG_t output_config =
{
.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
.output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
};
3.1.4
Interrupt service routine function implementation
void SysTick_Handler(void)
{
XMC_GPIO_ToggleOutput(P4_1);
}
3.1.5
Main function implementation
int main(void)
{
SysTick_Config(SystemCoreClock/10); /* Set up the systick timer at 10 Hz */
XMC_GPIO_Init(P4_1, &output_config);
/* Placeholder for user application code.
while(1U)
{
}
}
Application Note
25
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
3.2
Setting up the Alternate Boot Mode(ABM)
In this example, two sets of external interrupt events are set up on P2.0 and P3.1. On detection of a rising edge
on the pins, an external interrupt is triggered.
 If the event is triggered by P2.0, the BMI value changes to “Boot from BMI: ASC_BSL”
 If the event is triggered by P3.1, the BMI value changes to “Boot from pins”
 Otherwise, P4.0 toggles at an interval of 10 Hz
XMC1000_BmiInstallationReq(0xFFC0);
Install BMI to ASC_BSL
ERU0
ETL
P2.0
B
Trigger
OGU
IOUT0
SR0
NVIC
(ERU0.SR0)
XMC1000_BmiInstallationReq(0xFF40);
Install BMI to “Boot from pin”
ERU1
ETL
P3.1
A
Trigger
OGU
IOUT1
SR1
NVIC
(ERU1.SR1)
1. Initially, P2.0 and P3.1 are connected to GND and Systick timer toggles P4.0 at 10Hz.
2. To trigger a change in BMI, an external interrupt is generated when the respective pins are
connected to VCC. In the respective ISR, the BMI installation routine is called.
- P2.0: Changed BMI mode to “Boot from BMI: ASC_BSL”
- P3.1: Changed BMI mode to “Boot from pin”
3. If “Boot from pin” is selected, to enter to ABM, connect P4.7(VCC) and P4.6 (GND) before a
PORST. After power-up/master reset, the ABM mode is entered and runs the ABM user defined.
4. If “Boot from pin” is selected, to enter to User Productive Mode, connect P4.7(GND) and P4.6
(GND) before a PORST. After power-up/master reset, code starts to run from Flash location
address stored at 0x10001004.
Figure 17
Application Note
Changing the BMI to ABM from an external interrupt event
26
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
3.2.1
Linker script settings
Define the ABM Header location at the last 32 bytes of the user flash area.
Locate the ABM Header at the last 32 bytes of the user flash area.
Figure 18
Modify linker script to locate the ABM header
3.2.2
Macro and variable settings
/* XMC lib Project includes: */
#include <xmc_eru.h>
#include <xmc_gpio.h>
#include <xmc_scu.h>
/* Project definitions */
#define ROM_FUNCTION_TABLE_START
(0x00000100)
#define _BmiInstallationReq
(ROM_FUNCTION_TABLE_START + 0x08)
/* Pointer to Request BMI installation routine */
#define XMC1000_BmiInstallationReq
\
(*((unsigned long (**) (unsigned short)) _BmiInstallationReq))
3.2.3
ABM header structure
typedef struct ABM_Header
{
uint32_t MagicKey;
/**< Magic key. Always 0xA5C3E10F */
uint32_t StartAddress;
/**< Start address of the program to load */
uint32_t Length;
/**< Length of the program to load. */
} ABM_Header_t;
Application Note
27
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
ABM_Header_t __attribute__((section(".abm_header")))
ABM_Header =
{
.MagicKey
= 0xA5C3E10F,
/**< Magic key. Always 0xA5C3E10F */
.StartAddress = 0x10020001,
/**< Start address of the program to load */
.Length
/**< Length of the program to load. */
= 0x55U,
};
Note:
The BX and BLX instructions result in a HardFault exception if bit[0] of Rm is 0.Therefore, the bit[0] of
the StartAddress entered to the ABM header structure should always set to 1.
Note:
Although the exact program length is not required, the length of program entered to the ABM header
should be always be a non-zero value
3.2.4
XMC lib peripheral configuration structure
/* XMC GPIO configuration */
XMC_GPIO_CONFIG_t input_config =
{
.mode = XMC_GPIO_MODE_INPUT_TRISTATE,
.input_hysteresis = XMC_GPIO_INPUT_HYSTERESIS_STANDARD
};
XMC_GPIO_CONFIG_t output_config =
{
.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL,
.output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,
};
/* Event trigger logic configuration - ERU0.0B0 (P2_0) selected */
XMC_ERU_ETL_CONFIG_t ERU0_ETL_Config =
{
.input_a = (uint32_t)XMC_ERU_ETL_INPUT_A0, /* Event input selection for A(0-3) */
.input_b = (uint32_t)XMC_ERU_ETL_INPUT_B0, /* Event input selection for B(0-3) */
.enable_output_trigger = (uint32_t)1,
.status_flag_mode = (XMC_ERU_ETL_STATUS_FLAG_MODE_t)XMC_ERU_ETL_STATUS_FLAG_MODE_HWCTRL,
/* Select the edge/s to convert as event */
.edge_detection = XMC_ERU_ETL_EDGE_DETECTION_RISING,
/* Select the source for event */
.output_trigger_channel = XMC_ERU_ETL_OUTPUT_TRIGGER_CHANNEL0,
.source = XMC_ERU_ETL_SOURCE_B
};
/* Event Trigger Logic Configuration - ERU1.1A1 (P3_1) selected */
Application Note
28
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
XMC_ERU_ETL_CONFIG_t ERU1_ETL_Config =
{
.input_a = (uint32_t)XMC_ERU_ETL_INPUT_A1, /* Event input selection for A(0-3) */
.input_b = (uint32_t)XMC_ERU_ETL_INPUT_B0, /* Event input selection for B(0-3) */
.enable_output_trigger = (uint32_t)1,
.status_flag_mode = (XMC_ERU_ETL_STATUS_FLAG_MODE_t)XMC_ERU_ETL_STATUS_FLAG_MODE_HWCTRL,
/* Select the edge/s to convert as event */
.edge_detection = XMC_ERU_ETL_EDGE_DETECTION_RISING,
/* Select the source for event */
.output_trigger_channel = XMC_ERU_ETL_OUTPUT_TRIGGER_CHANNEL1,
.source = XMC_ERU_ETL_SOURCE_A
};
/* Output Gating Unit Configuration - Gated Trigger Output */
XMC_ERU_OGU_CONFIG_t ERU0_OGU_Config =
{
.peripheral_trigger
= 0U, /* OGU input peripheral trigger */
.enable_pattern_detection
= false, /* Enables generation of pattern match event */
/* Interrupt gating signal */
.service_request
= XMC_ERU_OGU_SERVICE_REQUEST_ON_TRIGGER,
.pattern_detection_input
= 0U
};
3.2.5
Interrupt service routine function implementation
/* Interrupt handler for external trigger interrupt at P2.0 */
void IRQ_Hdlr_3(void)
{
// BMI_installation routine to set BMI = ASC_BSL; Boot from BMI
XMC1000_BmiInstallationReq(0xFFC0);
}
/* Interrupt handler for external trigger interrupt at P3.1 */
void IRQ_Hdlr_4(void)
{
// BMI_installation routine to set BMI = Boot from pin
XMC1000_BmiInstallationReq(0xFF40);
}
Application Note
29
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Table of contents
/* Systick timer to toggle LED on P4_0 at 10Hz interval */
void SysTick_Handler(void)
{
XMC_GPIO_ToggleOutput(P4_0);
}
3.2.6
Main function implementation
int main(void)
{
/* Set up the systick timer at 10Hz */
SysTick_Config(SystemCoreClock/10);
/* Sets up the ERU- ETL and OGU for the external trigger event */
XMC_ERU_ETL_Init(XMC_ERU0, 0, &ERU0_ETL_Config);
XMC_ERU_OGU_Init(XMC_ERU0, 0, &ERU0_OGU_Config);
XMC_ERU_ETL_Init(XMC_ERU1, 1, &ERU1_ETL_Config);
XMC_ERU_OGU_Init(XMC_ERU1, 1, &ERU0_OGU_Config);
/* Initializes the gpio input and output */
XMC_GPIO_Init(P2_0, &input_config);
XMC_GPIO_Init(P3_1, &input_config);
XMC_GPIO_Init(P4_0, &output_config);
/* Enable the interrupt */
XMC_SCU_SetInterruptControl(3, XMC_SCU_IRQCTRL_ERU0_SR0_IRQ3); //Only for XMC140x
XMC_SCU_SetInterruptControl(4, XMC_SCU_IRQCTRL_ERU1_SR1_IRQ4); //Only for XMC140x
NVIC_EnableIRQ(3U);
NVIC_EnableIRQ(4U);
/* Placeholder for user application code. */
while(1U)
{
}
}
Application Note
30
1.0
2015-11-30
Boot mode handling for XMC1000
XMC1000
Revision history
Revision history
Major changes since the last revision
Page or reference
Description of change
-
First release
Application Note
31
1.0
2015-11-30
Trademarks of Infineon Technologies AG
AURIX™, C166™, CanPAK™, CIPOS™, CoolGaN™, CoolMOS™, CoolSET™, CoolSiC™, CORECONTROL™, CROSSAVE™, DAVE™, DI-POL™, DrBlade™, EasyPIM™,
EconoBRIDGE™, EconoDUAL™, EconoPACK™, EconoPIM™, EiceDRIVER™, eupec™, FCOS™, HITFET™, HybridPACK™, Infineon™, ISOFACE™, IsoPACK™,
i-Wafer™, MIPAQ™, ModSTACK™, my-d™, NovalithIC™, OmniTune™, OPTIGA™, OptiMOS™, ORIGA™, POWERCODE™, PRIMARION™, PrimePACK™,
PrimeSTACK™, PROFET™, PRO-SIL™, RASIC™, REAL3™, ReverSave™, SatRIC™, SIEGET™, SIPMOS™, SmartLEWIS™, SOLID FLASH™, SPOC™, TEMPFET™,
thinQ!™, TRENCHSTOP™, TriCore™.
Trademarks updated August 2015
Other Trademarks
All referenced product or service names and trademarks are the property of their respective owners.
Edition 2015-11-30
Published by
Infineon Technologies AG
81726 Munich, Germany
©ifx1owners.
2016 Infineon Technologies AG.
All Rights Reserved.
Do you have a question about this
document?
Email: [email protected]
Document reference
AN_201511_PL30_005
IMPORTANT NOTICE
The information contained in this application note
is given as a hint for the implementation of the
product only and shall in no event be regarded as a
description or warranty of a certain functionality,
condition or quality of the product. Before
implementation of the product, the recipient of this
application note must verify any function and other
technical information given herein in the real
application.
Infineon
Technologies
hereby
disclaims any and all warranties and liabilities of
any kind (including without limitation warranties of
non-infringement of intellectual property rights of
any third party) with respect to any and all
information given in this application note.
The data contained in this document is exclusively
intended for technically trained staff. It is the
responsibility of customer’s technical departments
to evaluate the suitability of the product for the
intended application and the completeness of the
product information given in this document with
respect to such application.
For further information on the product, technology,
delivery terms and conditions and prices please
contact your nearest Infineon Technologies office
(www.infineon.com).
WARNINGS
Due to technical requirements products may
contain dangerous substances. For information on
the types in question please contact your nearest
Infineon Technologies office.
Except as otherwise explicitly approved by Infineon
Technologies in a written document signed by
authorized
representatives
of
Infineon
Technologies, Infineon Technologies’ products may
not be used in any applications where a failure of
the product or any consequences of the use thereof
can reasonably be expected to result in personal
injury.