J-Link Multiple Flashloader
J-Link features support for multiple flashloaders per flashbank. In addition to the devices already supported, the user can add support for a different flashloader if required.
Introduction
For many chips having the option to handle the same flash bank in different ways is beneficial.
Use case example 1
ST's STM32H7 QSPI controller: This controller allows each QSPI signal (CS, CLK, IO0, IO1, IO2, IO3) to be multiplexed to a range of different pins - often ~5 or more different pin options per signal. This leads to a huge number (5*5*5*5*5*5 = 15.625) of possible pin configurations. However, J-Links flash loader can only work with one of these. With the multiple loader approach it allows J-Link to have several flash loaders ready for different pin configurations and they can be selected easily. This way for STM32H7 J-Link already supports a multitude of different pin configurations.
Use case example 2
Xilinx Zynq-7000: For the default flash loader of this device J-Link assumes that an external oscillator running at 33 MHz is connected and J-Link uses this as a base clock for the PLL initialization. However, users may have a faster oscillator connected which would cause a PLL clock which is too fast and may lead to issues during flash programming. To offer such users also an easy option for flash programming, there is a second loader "NoPLLInit" available which - as the name suggest - does not initialize the PLL, but otherwise behaves identically.
Selecting a specific flashloader
There are several ways in which the user may select one of the available flashloaders.
By default, the first flashloader on the list of available loaders is selected.
Command line parameter
The device name of the used device can be extended with the flashbank address and the loader name. This command line parameter can be passed to J-Link applications like J-Link Commander and J-Link GDB Server. Additionally, the same device name formatting can be used in common IDEs and debuggers which work with J-Link, e.g. Embedded Studio, Ozone and others.
Syntax
-device "<DeviceName>?BankAddr=<FlashBankBase>&Loader=<LoaderName>"
| Parameter | Meaning |
|---|---|
| DeviceName | The device name. |
| FlashBankBase | The base address of the flashbank for which a different loader should be used. |
| LoaderName | The name of the loader which should be used. |
Example
-device "STM32H743ZI?BankAddr=0x90000000&Loader=CLK@PF10_nCS@PB6_D0@PF8_D1@PF9_D2@PF7_D3@PF6"
Some terminal applications require special characters inside command line arguments to be escaped and will behave unexpectedly without it.
Windows PowerShell, for example, requires ampersand (&) to be escaped with a leading backtick (`).
As such, the command line would need to be adjusted as follows to work with Windows PowerShell:
J-Link Script File
With the J-Link Script File function JLINK_ExecCommand() a different loader can be selected.
Syntax
JLINK_ExecCommand("DEVICE_SelectLoader BankAddr=<FlashBankBase> Loader=<LoaderName>");
| Parameter | Meaning |
|---|---|
| FlashBankBase | The base address of the flashbank for which a different loader should be used. |
| LoaderName | The name of the loader which should be used. |
Example
JLINK_ExecCommand("DEVICE_SelectLoader BankAddr=0x90000000 Loader=CLK@PF10_nCS@PB6_D0@PF8_D1@PF9_D2@PF7_D3@PF6");
J-Link web control panel
The J-Link web control panel features a GUI access to easily select a different flashloader. This method requires that a settings file has been specified for J-Link.
How to
- Start the debug session with a settings file specified
- Open J-Link web control panel
- Navigate to the "Flash" tab
- Select a different loader for the desired flashbank from the drop-down menu
- Restart the debug session
J-Flash
In J-Flash, there are two ways to select the flashloader:
- When creating a new project for a device with a multiple-loader flashbank, the loader can be selected from the drop-down menu.
- With an existing project, the loader can be selected under Options -> Project settings ... -> Flash -> Loader
Ozone
In Ozone you can select your flash loader on project creation through the New Project Wizard.
Embedded Studio
The SEGGER Embedded Studio IDE of course also supports this feature. You can use any of the methods above. One additional way is to set the loader via the Embedded Studio GUI in project options.
How to
- Open the project settings of your Embedded Studio project
- Go to: Debug > J-Link > Additional J-Link Options
- Enter the exec command DEVICE_SelectLoader as explained here
- Press OK twice in both project option windows to confirm the newly set option
Specifying multiple loaders via XML
With attributes in JLinkDevices.xml files, it is possible for the user to add their own flashloader to the list of selectable loaders. For more information, please see the JLinkDevices section of the Open Flashloader article.