https://wiki.segger.com/api.php?action=feedcontributions&user=Leon&feedformat=atomSEGGER Wiki - User contributions [en]2024-03-28T11:27:00ZUser contributionsMediaWiki 1.31.16https://wiki.segger.com/index.php?title=File:FlasherHub12.svg&diff=18420File:FlasherHub12.svg2024-03-22T15:44:26Z<p>Leon: Leon uploaded a new version of File:FlasherHub12.svg</p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_Config_Modules_Forget.png&diff=18367File:FH12 WebIF Config Modules Forget.png2024-03-20T14:37:16Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12_-_Module_Configuration&diff=18366Flasher Hub-12 - Module Configuration2024-03-20T14:19:56Z<p>Leon: </p>
<hr />
<div>[[File: FH12_WebIF_Config_Modules.png | 400px | thumb | Module configuration in Flasher Hub-12's web interface]]<br />
<br />
Flasher Hub-12 allows to configure some options that affect the connected modules. The configuration can be applied using the web interface.<br />
<br />
__TOC__<br />
<br />
<br clear="all"><br />
<br />
== Position ==<br />
<br />
[[File: FH12_WebIF_Config_Modules_Reserved.png | 400px | thumb | Flex mode: Positions #1, #2, and #3 are reserved, even when no module is connected]]<br />
<br />
A module position is the numerical value assigned to a module. It is used to identify the module in commands and responses of the terminal.<br><br />
The method used to determine the position of a module depends on the mode in use.<br />
<br />
=== Direct mode ===<br />
<br />
By default, Flasher Hub-12 operates in ''direct mode''. In direct mode, the position of a module is determined by the USB-C connector number that the module is connected to.<br><br />
A module that is connected to USB-C connector #1 will be assigned module position #1.<br><br />
A module that is connected to USB-C connector #2 will be assigned module position #2 and so on.<br />
<br />
=== Flex mode ===<br />
<br />
In ''flex mode'', the module positions are not bound to the USB-C connectors in use.<br><br />
A newly connected module is assigned the first module position that is free. The user can freely choose the positions of modules.<br />
<br />
Once a module position is assigned (either by Flasher Hub-12 or by the user), that position is reserved for the respective module.<br />
A reserved position will not be assigned to any module other than the one it is reserved for.<br><br />
<br />
The user can instruct Flasher Hub-12 to "forget" a reserved module position. This frees up the module positions again.<br />
<br />
== Nickname ==<br />
<br />
A nickname can be assigned to a module. The nickname serves as a display name for a module and does not fulfill any other functional purpose.<br><br />
More information on Flashers' nickname feature can be found here: [[J-Link_Nickname | Flasher Nickname]] .<br />
<br />
<br />
[[Category:Flasher Hub-12]]</div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_Config_Modules_Reserved.png&diff=18365File:FH12 WebIF Config Modules Reserved.png2024-03-20T14:17:49Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_Config_Modules.png&diff=18364File:FH12 WebIF Config Modules.png2024-03-20T14:09:45Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12_-_Module_Configuration&diff=18363Flasher Hub-12 - Module Configuration2024-03-20T13:33:21Z<p>Leon: Created page with "Flasher Hub-12 allows to configure some options that affect the connected modules.<br> The configuration can be applied using the integrated web interface. __TOC__ == Positi..."</p>
<hr />
<div>Flasher Hub-12 allows to configure some options that affect the connected modules.<br><br />
The configuration can be applied using the integrated web interface.<br />
<br />
__TOC__<br />
<br />
== Position ==<br />
<br />
A module position is the numerical value assigned to a module. It is used to identify the module in commands and responses of the terminal.<br><br />
The method used to determine the position of a module depends on the mode in use.<br />
<br />
=== Direct mode ===<br />
<br />
By default, Flasher Hub-12 operates in ''direct mode''. In direct mode, the position of a module is determined by the USB-C connector number that the module is connected to.<br><br />
A module that is connected to USB-C connector #1 will be assigned module position #1.<br><br />
A module that is connected to USB-C connector #2 will be assigned module position #2 and so on.<br />
<br />
=== Flex mode ===<br />
<br />
In ''flex mode'', the module positions are not bound to the USB-C connectors in use.<br><br />
A newly connected module is assigned the first module position that is free. The user can freely choose the positions of modules.<br />
<br />
Once a module position is assigned (either by Flasher Hub-12 or by the user), that position is reserved for the respective module.<br />
A reserved position will not be assigned to any module other than the one it is reserved for.<br><br />
<br />
The user can instruct Flasher Hub-12 to "forget" a reserved module position. This frees up the module positions again.<br />
<br />
== Nickname ==<br />
<br />
A nickname can be assigned to a module. The nickname serves as a display name for a module and does not fulfill any other functional purpose.<br><br />
More information on Flashers' nickname feature can be found here: [[J-Link_Nickname Flasher Nickname]] .<br />
<br />
<br />
[[Category:Flasher Hub-12]]</div>Leonhttps://wiki.segger.com/index.php?title=UM08043_Flasher_Hub-12&diff=18158UM08043 Flasher Hub-122024-03-05T15:30:39Z<p>Leon: /* Setting up the IP interface */</p>
<hr />
<div><br />
[[File:FlasherHub12.svg|thumb|SEGGER Flasher Hub-12]]<br />
<br />
<div class="toclimit-2"><br />
__TOC__<br />
</div><br />
<br />
= Introduction =<br />
== Overview ==<br />
SEGGER's Flasher Hub-12 is a Control Module for parallel programming.<br />
<br />
The Flasher Hub-12 is able to control up to 12 Flasher Compact modules serving as individual channels for parallel, high-speed gang-programming.<br />
If required, each channel can be configured to program a different device with a different firmware image.<br />
<br />
The Flasher Compact modules connected to the Flasher Hub-12 are set up just once per channel configuration using SEGGER's Flasher software package.<br />
The software to be used depends on the type of flash chip being programmed.<br />
The Flasher Hub-12 can receive commands and send results via the ASCII terminal interface "stand-alone", without the need of a desktop PC.<br />
The combination of a single Flasher Hub-12 and multiple Flasher Compact modules is the perfect solution for high-volume mass production.<br />
<br />
The Flasher Hub-12 supports all flash devices and programming interfaces supported by the Flasher Compact.<br />
By using Flasher Compacts as the programming modules, the Flasher Hub-12 takes advantage of the extensive list of supported devices and target interfaces, plus the ultra-fast programming speed and reliability of these 'Almost-Anything'-Programmers.<br />
<br />
=== Features of the Flasher Hub-12 ===<br />
* Stand-alone In-System Programming (ISP) hub<br />
* Scalable solution with up to 12 supported individual parallel programming channels, each with their own programming circuit memory<br />
* Built-in web & FTP servers for easy setup<br />
<br />
=== Working environment ===<br />
'''General'''<br><br />
The Flasher Hub-12 has been designed to be used in conjunction with automated test equipment (ATE).<br />
It is modular and scalable from 1 to 12 individual programming modules, represented by SEGGER Flasher Compacts.<br />
The Flasher Compacts are connected directly to and powered via the Flasher Hub-12.<br />
<br />
[[File:UM08042_FlasherHub12Setup.png]]<br />
<br />
'''Flasher PC-software (J-Flash/J-Flash SPI/U-Flash)'''<br><br />
In order to prepare the firmware/data to be programmed to the targets and download it to the Flasher Compacts, the latest version of the J-Flash (JFlash.exe), J-Flash SPI (JFlashSPI.exe) or U-Flash (UniversalFlasher.exe) software is required.<br />
J-Flash, J-Flash SPI and U-Flash are available for Windows, Linux, and macOS, and are part of the Flasher software and documentation package, which can be downloaded from our website:<br />
<br />
<tt>https://www.segger.com/downloads/flasher/#FlasherSoftwareAndDocumentationPack</tt><br />
<br />
For more information about using J-Flash, please refer to the [[UM08003_JFlash|J-Flash User Manual (UM08003)]].<br />
<br />
J-Flash SPI is described in the [[UM08001_J-Link_/_J-Trace_User_Guide|J-Link / J-Trace User Guide (UM08001)]].<br />
<br />
And for information about U-Flash, please refer to the [https://www.segger.com/downloads/flasher/UM08037.pdf U-Flash User Manual (UM08037)].<br />
<br />
'''FTP Client'''<br><br />
The firmware to be programmed to the targets can also be uploaded to the Flasher Compacts via an FTP connection to the Flasher Hub-12.<br />
For this, an FTP client is required.<br />
<br />
'''Web Browser'''<br><br />
The Flasher Hub-12's web interface offers useful status information about the system.<br />
It also allows firmware updates to the Flasher Hub-12 and the connected Flasher Compacts, uploading the firmware to be programmed to the targets, configuring the index of the connected Flasher Compact modules, and more.<br />
In order to access the Flasher Hub-12 web interface, a web browser is required.<br />
<br />
'''Terminal program'''<br><br />
For communication with the Flasher Hub-12 via the ASCII terminal interface, a terminal program like TeraTerm or PuTTY is helpful.<br />
<br />
== Specifications ==<br />
{| class="seggertable"<br />
!colspan="100%"| '''Specifications'''<br />
|-<br />
| Power supply || 8-30VDC, reverse polarity protected, max. 60W<ref>Depends on current consumption of connected downstream devices. For maximum load the input supply must provide 12 VDC or more.</ref><br />
|-<br />
| Power consumption || Max. 15W<br />
|-<br />
| USB Flasher interface || USB-C 2.0<br />
|-<br />
| Host interfaces || USB Type-B (Upstream), USB Type-A (Downstream), Ethernet, RS232 9-pin<br />
|-<br />
| Operating Temperature || +5°C ... +60°C<br />
|-<br />
| Storage Temperature || -20°C ... +65°C<br />
|-<br />
| Relative Humidity (non-condensing) || < 90% rH<br />
|-<br />
| Size (without cables) || 170mm x 172mm x 35mm<br />
|-<br />
| Weight (without cables) || 660g<br />
|}<br />
<references /><br />
<br />
=== Supported CPU cores ===<br />
The Flasher Hub-12 itself is CPU-core agnostic.<br />
The supported CPU cores are determined by the connected Flasher Compacts.<br />
Please see the Flasher Compact User Guide for details.<br />
<br />
=== Supported Target interfaces ===<br />
The Flasher Hub-12 itself is target-interface agnostic.<br />
The supported target interfaces are determined by the connected Flasher Compacts.<br />
Please see the Flasher Compact User Guide for details.<br />
<br />
= Getting Started =<br />
The Flasher Hub-12 makes ultra-fast, high-speed parallel programming ("gang programming") possible.<br />
Up to 12 Flasher Compact modules can be connected to the Flasher Hub-12.<br />
Each Flasher Compact module is connected to a target device.<br />
<br />
[[File:UM08042_Flasher_Hub_Parallel_Programming.png]]<br />
<br />
Via an ASCII terminal interface or handshake interface connection between the ATE (Automated Test Equipment) and the Flasher Hub-12, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
The firmware to be programmed into the target devices can be prepared via a computer running Windows, Linux, or macOS and SEGGER's J-Flash, J-Flash SPI or U-Flash software.<br />
The Flasher Compact modules connected to the Flasher Hub-12 can be provisioned with the firmware to be programmed either directly via J-Flash or U-Flash, via an FTP connection to the Flasher Hub-12, or via the Flasher Hub-12's web interface.<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply ([[#Power_supply |see below for more information]])<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is running the most recent firmware, [[#Updating_Flasher_Hub-12_firmware | as described below]]<br />
# Open Flasher Hub-12's web interface by visiting <code><nowiki>http://flasherhub-<SerialNo>/</nowiki></code> (Make sure to replace <code><SerialNo></code> with the serial number of your Flasher Hub-12)<br />
# Flasher Hub-12 is now up and running<br />
<br />
== Power supply ==<br />
=== Flasher Hub-12 and Flasher Compact power supply ===<br />
The Flasher Hub-12 is powered via the POWER connector (pluggable terminal block) on the back panel.<br />
The power supply must be able to supply 8 - 30VDC, max. 60W to the Flasher Hub-12.<br />
For maximum load the power supply must provide at least 12VDC.<br />
The Flasher Compacts are powered via the USB-C connection of the Flasher Hub-12.<br />
<br />
[[File:UM08042_FlasherHub12_Power.png]]<br />
<br />
The Flasher Compacts are powered directly through the Flasher Hub-12 they are connected to.<br />
<br />
'''Current consumption (typical)'''<br><br />
{| class="seggertable"<br />
!colspan="100%"| '''Flasher Hub-12'''<br />
|-<br />
| External DC power supply || Max. 15W<br />
|-<br />
!colspan="100%"| '''Flasher Compact'''<br />
|-<br />
| 5V via Flasher Hub-12 || 130 mA (no target power supply)<br />
|-<br />
| 5V via Flasher Hub-12 || 230 mA (target power supply with 100mA)<br />
|}<br />
<br />
<br> <!-- else, there's no space between the table and the notes --><br />
<br />
{{Note|1=Undefined behavior may occur if the Flasher Hub-12 and/or the Flasher Compacts are not powered sufficiently.}}<br />
<br />
=== Target power supply ===<br />
The target boards to be programmed can either be powered via their own power supplies, or they can be powered via a 5V / 100mA supply from the Flasher Compacts.<br />
Please refer to the Flasher Compact User Guide for details on how to do this.<br />
<br />
== Setting up the IP interface ==<br />
The Flasher Hub-12 is equipped with an Ethernet interface to communicate with the host system via your network.<br />
<br />
[[File:UM08042_FlasherHub12_Ethernet.png]]<br />
<br />
The Flasher Hub-12 also has a built-in web server that provides system status and allows system configuration.<br />
<br />
=== Connecting for the first time ===<br />
<br />
When connecting the Flasher Hub-12 to your network and powering it up for the first time, it attempts to acquire an IP address via DHCP.<br />
After the Flasher Hub-12 has finished booting (i.e. after the green LED has stopped flashing), you can connect to the Flasher Hub-12's web interface by pointing your web browser to<br />
<br />
<code><nowiki>http://flasherhub-<serial_number>/</nowiki></code><br />
<br />
Make sure to replace <code><serial_number></code> with the serial number of your Flasher Hub-12, which can be found on the housing.<br />
<br />
The "Status" page served by the Flasher Hub-12's web server contains the IP address that has been assigned to the Flasher Hub-12 by your network.<br />
<br />
[[File:UM08042_Status.png]]<br />
<br />
=== Direct Ethernet connection ===<br />
<br />
Instead of connecting Flasher Hub-12 to a network, it can be set up for a direct Ethernet connection to a computer without a network between.<br><br />
For this, it is necessary to configure Flasher Hub-12's IP interface to use a manual IP address with the same subnet mask as the Ethernet adapter of the computer.<br><br />
<br />
For a Windows 10 system, the IP address and subnet mask of an Ethernet adapter can be determined as follows:<br />
# Connect Flasher Hub-12 to the PC using a direct Ethernet connection<br />
# Open the Control Panel and navigate to ''Network and Internet'' &rarr; ''Network and Sharing Center''<br />
# In the list of active networks, determine that of the Ethernet adapter that Flasher Hub-12 is connected to.<br />
#* In this case, it's '''Ethernet 4'''<br />
#; [[File: Win10_CtrlPanel_ETH_Adapter.png]]<br />
# Open a command prompt<br />
#* Windows key + R &rarr; "''cmd''"<br />
# Enter <code>netsh interface ip show addresses "[Name of Ethernet adapter]"</code><br />
#* Make sure to replace ''[Name of Ethernet adapter]'' accordingly<br />
#; [[File: Win10_Cmd_ETHAdapterAddr.png]]<br />
<br><br />
Now, Flasher Hub-12's IP interface can be configured accordingly:<br />
# Connect Flasher Hub-12 to the PC via USB<br />
#* This can be in parallel to the Ethernet connection<br />
# Make sure the most recent version of the [[Flasher software https://www.segger.com/downloads/flasher/]] is installed<br />
# Start the Flasher Configurator<br />
# Make sure the [firmware of Flasher Hub-12 is up to date #Firmware_update]<br />
# In the list of programmers connected via USB, double-click Flasher Hub-12 to configure it<br />
# Set the ''IP configuration'' to ''Manual''<br />
# Set a manual IP address that is in the same subnet as that of the Ethernet adapter of the PC<br />
# Set the same subnet mask as that of the Ethernet adapter of the PC<br />
#; [[File: FH12_IPConfig_DirectETHConn.png]]<br />
# Click OK<br />
<br />
After that, Flasher Hub-12 is set up for a direct Ethernet connection to the PC.<br />
<br />
== Operating modes ==<br />
The Flasher Hub currently can be operated via web interface or via remote-controlled mode.<br />
<br />
=== Web interface ===<br />
The Flasher Hub-12 web interface is the recommended way of operating the Flasher Hub-12 for '''manual''' operation.<br />
It provides a way to use the Flasher Hub-12 in a production environment and control it manually, i.e. not using automation via scripts or similar.<br />
Using the extensive but intuitive graphical user interface of Flasher Hub-12's web server, programming operations and more can be configured, monitored and controlled with ease.<br />
<br />
The web interface is described in more detail in [[#Web server]].<br />
<br />
=== Remote-controlled mode ===<br />
The remote-controlled mode provides two ways to integrate the Flasher Hub-12 into a production environment.<br />
Via the ASCII terminal interface, the Flasher Hub-12 provides detailed status information that can be used to verify the success of the programming sequence, optimize the production setup, and identify errors.<br />
Via the handshake interface, programming can be started and the <tt>OK</tt> and <tt>Busy</tt> statuses can be checked.<br />
These two methods of operation were mainly designed for '''automation''' purposes.<br />
<br />
In order to use a Flasher Hub-12 based system in remote-controlled mode, the files required for programming the target need to be stored on the connected Flasher Compact modules first.<br />
This is described in [[#Setting up a project for the Flasher Hub-12]].<br />
<br />
The remote-controlled mode is described in more detail in [[#Remote control]].<br />
<br />
== LED status indicators ==<br />
The Flasher Hub-12 uses different LEDs as indicated in the following table.<br />
<br />
=== LED indicators ===<br />
{| class="seggertable"<br />
|-<br />
!| LED || Status || Meaning<br />
|- <br />
| POWER || green || Flasher Hub-12 is powered.<br />
|- <br />
|rowspan="2"| STATUS || green || Status is O.K.<br />
|- <br />
| orange/red || Status is not O.K. (Firmware error or at least one module failed programming)<br />
|-<br />
| Module LEDs 1-12 || green || Module is connected and powered.<br />
|}<br />
<br />
=== Flasher Compact LED indicators ===<br />
{| class="seggertable"<br />
|-<br />
!| LED || Status || Meaning<br />
|-<br />
| Ready / O.K. || GREEN<br>short flicker || Module is ready.<br />
|-<br />
| Ready / O.K. || GREEN<br>slow blinking || Flashing operation in progress:<br><br />
* Erasing (blinking at 6.25 Hz)<br />
* Programming (blinking at 1.67 Hz)<br />
* Verifying (blinking at 5 Hz)<br />
|-<br />
| Not ready / Fail || RED<br>constant || a) The module is in bootloader mode.<br><br />
b) The most recent operation has failed.<br />
|}<br />
<br />
== Storing configuration and programming data files ==<br />
The configuration and programming data required to program the target devices is stored on the connected Flasher Compact modules.<br />
Each Flasher Compact module has approximately 128MB of storage available for data and configuration files.<br />
<br />
The Flasher Compact modules can be accessed in the following ways:<br />
<br />
* via TXP/IP or USB by using J-Flash or U-Flash software<br />
* via an FTP client connected to the Flasher Hub-12's integrated FTP-server<br />
* via the File browser in the Flasher Hub-12's web interface<br />
<br />
When using J-Flash, the connected Flasher Compact modules (Module 1, Module 2, ..., Module n) can be selected via tick boxes on the "Options > Project settings > General" screen.<br />
Make sure to select the correct connection type.<br />
For TCP/IP enter the Flasher Hub-12's IP address (or use flasherhub-<serial_number>).<br />
<br />
[[File:UM08039_JFlash_ModuleSelection.png]]<br />
<br />
When selecting "File > Download config & data file to Flasher" from the J-Flash menu, the configuration and data file of the current J-Flash project will be downloaded to the selected Flasher Compact modules.<br />
<br />
[[File:UM08039_JFlash_MenuDownloadCfgData.png]]<br />
<br />
When using U-Flash, the connected Flasher Compact modules can be selected via tick boxes in the Flasher selection.<br />
<br />
When using an FTP client or the file browser in the Flasher Hub-12's web interface, the Flasher Compact modules are accessible via subfolders named "MODULE.xxx", with xxx being the index of the associated Flasher Compact, e.g. "MODULE.001" for the Flasher Compact module with index 1.<br />
<br />
[[File:UM08039_Files.png]]<br />
<br />
== UART to TCP transceiver ==<br />
{{Note|1=The UART Transceiver is not yet supported by the latest firmware version.}}<br />
<br />
The Flasher Hub-12 features an UART to TCP transceiver: Each module is accessible via a connection to a module-specific TCP port.<br />
{| class="seggertable"<br />
|-<br />
!| Module || TCP port<br />
|-<br />
| #1 || 41<br />
|-<br />
| #2 || 42<br />
|-<br />
| #3 || 43<br />
|-<br />
| #4 || 44<br />
|-<br />
| #5 || 45<br />
|-<br />
| #6 || 46<br />
|-<br />
| #7 || 47<br />
|-<br />
| #8 || 48<br />
|-<br />
| #9 || 49<br />
|-<br />
| #10 || 50<br />
|-<br />
| #11 || 51<br />
|-<br />
| #12 || 52<br />
|}<br />
<br />
If the transceiver is enabled, incoming data on pin 17 on the debug interface is sent to the TCP connection, and incoming data on the TCP connection is sent to pin 5 on the debug interface.<br />
<br />
The transceiver can be enabled for one or more modules either via the ASCII Terminal command #TERMINAL or via the web interface "UART" page.<br />
For more information, please refer to the [[#Command #TERMINAL|#TERMINAL command]] and the [[#UART page|web interface "UART" page]].<br />
<br />
{{Note|1=The transceiver cannot be enabled while the module is programming. Also programming, erasing etc. can not be started if the transceiver mode is active.}}<br />
<br />
== Log files ==<br />
The Flasher Hub-12 keeps a log file if logging is enabled via the web interface on the "Configuration > Flasher Hub" page.<br />
The log itself can be accessed on the "Log" page.<br />
<br />
[[File:UM08042_FlasherHub12_WebLog.png]]<br />
<br />
In addition, each Flasher Compact keeps its own log file.<br />
These log files are stored in the module folder of the corresponding Flasher Compact and can be downloaded via FTP or the file browser in the Flasher Hub-12's web interface.<br />
For more information on the Flasher Compact log file, please refer to the [[UM08022_Flasher|Flasher User Manual (UM08022)]].<br />
<br />
[[File:UM08039_FlasherHub_WebFlasherLog.png]]<br />
<br />
== Firmware update ==<br />
Firmware update files for both, Flasher Hub-12 as well as Flasher Compact modules are shipped with each new release of the Flasher software package.<br />
<br />
{{Note|1=It is recommended to use the most recent version of the Flasher Hub-12 firmware as newer versions may contain various improvements as well as bug fixes.}}<br />
<br />
=== Updating Flasher Hub-12 firmware ===<br />
The Flasher Hub-12 firmware can up updated by using the Flasher software or by using Flasher Hub-12's web interface.<br />
<br />
==== Using Flasher software ====<br />
<br />
[[File: FlasherConfig_FH12FWUpdate.png | thumb | Flasher Hub-12 firmware update in Flasher Configurator]]<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to a PC via USB or IP<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Flasher Configurator will now update the firmware of Flasher Hub-12<br />
<br />
<br clear="all"><br />
<br />
==== Using Flasher Hub-12 web interface ====<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting <code><nowiki>http://flasherhub-<SerialNo>/</nowiki></code> (Make sure to replace <code><SerialNo></code> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher Hub-12 firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''FlasherHub-12_V1.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Reboot Flasher Hub to apply the firmware update<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_FWUpdate.png | Web interface firmware update file upload<br />
File: FH12_WebIF_SelectFW.png | Selection of Flasher Hub-12 firmware file<br />
File: FH12_WebIF_ProcessingFW.png | Flasher Hub-12 processing a firmware update file<br />
File: FH12_WebIF_FWUpdateReboot.png | Web interface following a successful firmware update file upload<br />
</gallery><br />
<br />
=== Updating module firmware ===<br />
<br />
The firmware of modules connected to the Flasher Hub-12 can be updated as follows.<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting <code><nowiki>http://flasherhub-<SerialNo>/</nowiki></code> (Make sure to replace <code><SerialNo></code> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''Flasher_Compact_V*.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Navigate to ''Status''<br />
# In the table below ''Module Status'', select the modules to apply the firmware update to<br />
# Click ''Update firmwares''<br />
<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_ModFWUpdate.png | Web interface module firmware update file upload<br />
File: FH12_WebIF_SelectModFW.png | Selection of Flasher Hub-12 module firmware file<br />
File: FH12_WebIF_ProcessingModFW.png | Flasher Hub-12 processing a module firmware update file<br />
File: FH12_WebIF_UpdateMod.png | Web interface ''Status''<br />
File: FH12_WebIF_ApplyingModFWUpdate.png | Web interface while module firmware update is applied<br />
</gallery><br />
<br />
== Newline encoding ==<br />
In general, for all patch files, init files etc., the Flasher Compact modules support both newline encodings:<br />
<br />
* Windows: \r\n<br />
* Unix/Mac: \n<br />
<br />
All parser functionality etc. are written to be independent from the host operating system.<br />
<br />
= Setting up a project for the Flasher Hub-12 =<br />
In order to set up the Flasher Hub-12 for parallel programming, the connected Flasher Compact modules need to be configured once using either J-Flash or U-Flash.<br />
Both programs are part of SEGGER's Flasher software and documentation package, available for download free of cost at:<br />
<br />
<tt>https://www.segger.com/downloads/flasher/#FlasherSoftwareAndDocumentationPack</tt>.<br />
<br />
== Using J-Flash ==<br />
J-Flash is SEGGER's desktop software for production programming and it is available for Windows, macOS and Linux.<br />
It can be used to create Flasher configuration and data files for ARM-based target devices.<br />
For more information about J-Flash, please refer to the [[UM08003_JFlash|J-Flash User Manual]].<br />
<br />
In order to set up the Flasher Hub for parallel programming, the connected Flasher Compact modules need to be configured once using J-Flash.<br />
<br />
After starting J-Flash, open the appropriate J-Flash project for the target device the Flasher Compacts shall be configured for, by selecting '''File''' -> '''Open Project'''.<br />
If J-Flash does not come with an appropriate sample project for the desired hardware, a new project needs to be created by selecting '''File''' -> '''New Project'''.<br />
<br />
After the appropriate project has been opened / created, the data file which shall be programmed needs to be loaded, by selecting '''File''' -> '''Open data file...'''.<br />
Next, click on '''Options''' -> '''Project settings''' -> '''General''' and select '''Connection type''' to be '''TCP/IP'''.<br />
As the TCP/IP address, enter '''flasherhub-<serial_number>'''.<br />
You can find the serial number of your Flasher Hub on the product housing.<br />
<br />
Click '''Flasher Hub module selection''' and select the Flasher Compact module numbers you would like to configure.<br />
Then click '''OK'''.<br />
<br />
After this, J-Flash should look similar to the screenshot below.<br />
<br />
[[File:UM08039_JFlash_PrjFileDataFile.png]]<br />
<br />
Next, you can transfer the necessary files to the Flasher Compacts using '''File''' -> '''Download config & data file to Flasher'''.<br />
Check the J-Flash Log window to make sure the file transfer was successful.<br />
For further details please check the J-Flash manual.<br />
<br />
{{Note|1=If J-Flash has trouble connecting to '''flasherhub-<serial_number>''', use the actual IP address of your Flasher Hub. You can find the Flasher Hub-12's IP address by using the Flasher Configurator:<br />
[[File:FlasherControl_IPs.png|757px]]}}<br />
<br />
From now on, the Flasher Hub and the attached Flasher Compacts can be used in stand-alone mode (without host PC interaction) for stand-alone programming.<br />
<br />
As an alternative to the process described above, you may also save the files to disk and upload them to the Flasher Compacts '''via the web interface'''.<br />
To do this, follow the instructions below:<br />
# Save the configuration (project) file to disk by selecting '''File''' -> '''Save Flasher Config File'''<br />
# Save the data (program data) file by selecting '''File''' -> '''Save Flasher Data File'''<br />
# Connect to the Flasher Hub Web interface via a browser.<br />
# Navigate to the file browser in the "Files" tab<br />
# Now the configuration file and the data file can be uploaded to the Flasher Hub module folder(s) (MODULE.xxx), i.e. to the connected Flasher Compacts.<br>Choosing the '''All modules''' folder will upload the files to all Flasher Compacts connected to the Flasher Hub.<br>Note: The file(s) can be uploaded by dragging and dropping inside the browser window.<br />
<br />
[[File:UM08039_JFlash_MenuSaveCfgData.png]]<br />
<br />
[[File:UM08039_Files.png]]<br />
<br />
A third option is to upload the configuration and data files to the Flasher Compact modules via FTP as described here: [[#FTP server]].<br />
<br />
If J-Flash also generates a .pex file (which is a device-specific flash programming algorithm that is required for certain target devices), this also needs to be uploaded to the module folder(s) for programming to be successful.<br />
Please note that it must be located in a subfolder with the same name as your project, e.g. if your project is named '''MyProject''' with the project files '''MyProject.cfg''' and '''MyProject.dat''', then the subfolder must be named '''MyProject'''.<br />
<br />
[[File:UM08039_FlasherHub_WebPrjDir.png]]<br />
<br />
[[File:UM08039_FlasherHub_WebPrjPex.png]]<br />
<br />
== Using U-Flash ==<br />
The Universal Flash Loader mode can be used to program non ARM-based targets.<br />
While configurations generated with J-Flash rely on using the debug interface of the device, configurations using U-Flash make use of device or vendor specific programming interfaces and protocols and therefore it is independent of the CPU core.<br />
<br />
A Universal Flash Loader configuration can be created using SEGGER's U-Flash, available for Windows, macOS and Linux.<br />
<br />
For details, please see the [https://www.segger.com/downloads/flasher/UM08037.pdf U-Flash User Manual (UM08037)] as well as the [[UM08022_Flasher|Flasher User Manual (UM08022)]].<br />
<br />
[[File:UM08039_UniversalFlashLoader.png]]<br />
<br />
= Serial number handling =<br />
== Serial number programming ==<br />
A Flasher Hub-12 based system supports programming of serial numbers.<br />
In order to use the serial number programming feature, the J-Flash project to be used as well as some files on the Flasher Compacts connected to the Flasher Hub-12 (depending on the configuration) need to be configured first.<br />
<br />
In general, a Flasher Hub-12 based system supports two ways of programming a serial number into the target:<br />
<br />
#<br />
#* Programming continuous serial numbers.<br />
#* The serial number is 1-4 bytes in size.<br />
#* The start serial number, increment, serial number size, and address are configured in the J-Flash project.<br />
#<br />
#* Programming custom serial numbers from a serial number list file.<br />
#* The start line within the serial number list file to get the next serial number bytes, line increment, serial number size, and address is configured in the J-Flash project.<br />
#* The serial number list file needs to be specified and created by the user.<br />
<br />
=== Serial number settings ===<br />
In order to enable the programming of serial numbers in stand-alone mode, the J-Flash project has to be configured to enable programming a serial number at a specific address.<br />
This is done by enabling the '''Program serial number''' option as shown in the screenshot and table below:<br />
<br />
[[File:UM08039_SN_Sample_JFlashSettings.png]]<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Setting || Meaning<br />
|-<br />
| <tt>Address</tt> || The address the serial number should be programmed at.<br />
|-<br />
| <tt>Length</tt> ||<br />
The length of the serial number (in bytes) that should be programmed.<br />
* If no serial number list file is given, J-Flash allows to use a 1-4 byte serial number. In case 8 is selected as length, the serial number and its complement are programmed at the given address.<br />
* In case a serial number list file is given, the Flasher Hub-12 will take the serial number bytes from the list file. If a serial number in the list file does not define all bytes of '''Length''', the remaining bytes are filled with 0s. No complements etc. are added to the serial number.<br />
|-<br />
| <tt>Next SN</tt> ||<br />
* In case no serial number list file is given, '''Next SN''' is the next serial number which should be programmed. The serial number is always stored in flash memory in little-endian format.<br />
* In case a serial number list file is given, '''Next SN''' describes the line of the serial number list file where to read the next serial number bytes from. The Flasher Hub-12 starts counting at line 0, so in order to start serial number programming with the first line of the <tt>SNList.txt</tt>, '''Next SN''' needs to be set to 0.<br />
|-<br />
| <tt>Increment</tt> || Specifies by how much '''Next SN''' is incremented.<br />
|}<br />
<br />
=== Serial number file ===<br />
When selecting '''File -> Download serial number file to Flasher''', J-Flash will create a serial number file named as <tt><JFlashProjectName>_Serial.txt</tt>.<br />
This file is downloaded as <tt>Serial.txt</tt> on the selected Flasher Compacts connected to the Flasher Hub-12.<br />
The file is generated based on the serial number settings in the J-Flash project and will contain the value defined by the '''Next SN''' option.<br />
The serial number file can also be manually edited by the user since the serial number is written ASCII encoded in the <tt>Serial.txt</tt> file.<br />
<br />
=== Continuous Serial numbers ===<br />
Projects for the Flasher Hub-12 can be configured to use the serial number feature (see [[#Serial number settings]]).<br />
The serial number is stored in the Serial.txt file on each Flasher Compact module.<br />
Therefore, the serial number is also power-cycle safe.<br />
If the file is missing at start up time, a Serial.txt with serial number 0 will be created.<br />
The connected Flasher Compacts will use the current serial number found in Serial.txt for the programmed device.<br />
Then the increment is added to the serial number and the result is stored in the Serial.txt which is used for the next programming sequence.<br />
<br />
To avoid duplication of serial numbers with the Flasher Hub-12 using more than one Flasher Compact module, there are two options:<br />
* Use an increment of the number of connected Flasher Compact modules; e.g. if you have 5 Flasher Compacts connected, use an increment of 5 as well as 5 different Serial.txt files at the beginning of production.<br />
* Use different serial number areas; e.g. if you have 5 Flasher Compacts connected, use an increment of 1 as well as 5 different Serial.txt files at the beginning of production. For the first module, use the range from 1 to 1000, for the second 1001 to 2000, and so on.<br />
<br />
The Serial.txt file contains the value '''Next SN''' in ASCII notation, e.g. <code>1234</code> if the next serial number is 1234.<br />
<br />
{{Note|1=The serial number in Serial.txt will also be incremented if serial number programming is disabled, to make sure that for the Flasher Hub-12 log file there is a reference for which programming cycle passed and which did not. As long as serial number programming has not been enabled in the J-Flash project, the Flasher Hub-12 does not merge any serial number data into the image data to be programmed.}}<br />
<br />
=== Serial number list file ===<br />
In order to program custom serial numbers which cannot be covered by the standard serial number scheme provided by J-Flash (e.g. when programming non-continuous serial numbers or having gaps between the serial numbers), a so called serial number list file needs to be created by the user.<br />
<br />
When selecting '''File -> Download serial number file to Flasher''', J-Flash will look for a serial number list file named as <tt><JFlashProjectName>_SNList.txt</tt> in the directory where the J-Flash project is located.<br />
This file is downloaded as <tt>SNList.txt</tt> on the selected Flasher Compacts connected to the Flasher Hub-12. The serial number list file needs to be created manually by the user and has the following syntax:<br />
* One serial number per line<br />
* Each byte of the serial number is described by two hexadecimal digits.<br />
<br />
'''Example'''<br><br />
An 8-byte serial number should be programmed at address <tt>0x08000000</tt>.<br />
<br />
It should be programmed as follows in the memory:<br />
<br />
0x08000000: 0x01 0x02 0x03 0x04 0x55 0x66 0x77 0x88<br />
<br />
The associated serial number list in the file should look as follows:<br />
<br />
[[File:UM08039_SN_SNList.png]]<br />
<br />
The number of bytes to read per line is configured via the <tt>Len</tt> option in J-Flash.<br />
For more information, please refer to [[#Serial number settings]].<br />
<br />
Which line Flasher will read at the next programming cycle is configured via the <tt>Next SN</tt> option in J-Flash.<br />
For more information, please refer to [[#Serial number settings]].<br />
In this case, <tt>Next SN</tt> needs to be set to 0, since programming should start with the serial number bytes defined in the first line of the file.<br />
<br />
{{Note|1=If the number of bytes specified in a line of the serial number list file is '''less''' than the serial number length defined in the J-Flash project, the remaining bytes are '''filled with 0s''' by the Flasher Hub-12.}}<br />
{{Note|1=If the number of bytes specified in a line of the serial number list file is '''greater''' than the serial number length defined in the J-Flash project, the remaining bytes will be '''ignored''' by the Flasher Hub-12.}}<br />
<br />
=== Programming process ===<br />
The Flasher Compact modules connected to the Flasher Hub-12 will increment the serial number in Serial.txt by the value defined in <tt>Increment</tt> after each successful programming cycle.<br />
<br />
For each programming cycle, the Flasher.log file on the connected Flasher Compact modules is updated and contains the value from Serial.txt that has been used for the programming cycle.<br />
<br />
{{Note|1=The serial number in Serial.txt will also be incremented if serial number programming is disabled, to make sure that for the Flasher Compact logfile there is a reference for which programming cycle passed and which did not. As long as serial number programming has not been enabled in the J-Flash project, the Flasher Compacts do not merge any serial number data into the image data to be programmed.}}<br />
<br />
=== Example setup ===<br />
Below, a small example is given on how to set up the Flasher Compacts for serial number programming.<br />
In the following example, 4-byte serial numbers starting at 1234567 (<tt>0x12D687</tt>) shall be programmed at address <tt>0x08001000</tt>.<br />
<br />
'''Defining serial number address, length and start value'''<br><br />
In the J-Flash project, the following needs to be defined:<br />
<br />
* <tt>Address</tt> is <tt>0x08001000</tt><br />
* <tt>Next SN</tt> is 1234567<br />
* <tt>Increment</tt> is 1<br />
* <tt>Len</tt> is 4 (bytes)<br />
<br />
[[File:UM08039_SN_Sample_JFlashSettings.png]]<br />
<br />
'''Downloading configuration, data, and serial number to the Flasher Compacts'''<br><br />
After setting up the rest of the configuration (Target interface etc.) and selecting an appropriate data file, the configuration,<br />
data, and serial number file needs to be transferred to the associated Flasher Compact via the Flasher Hub-12, either using J-Flash, or using an FTP client, or using the file browser in the Flasher Hub-12's web interface.<br />
<br />
== Limiting the number of programming cycles ==<br />
The Flasher Hub-12 provides a mechanism to limit the number of programming cycles that can be performed in stand-alone mode with the configuration that is stored on the Flasher Compacts.<br />
To make use of this feature, a file called <tt>Cntdown.txt</tt> needs to be placed onto the Flasher Compacts module folder.<br />
This file simply contains a decimal number (32-bit unsigned integer) that describes how many programming cycles can be performed with the current setup.<br />
<br />
[[File:CntdownTxtContent.PNG]]<br />
<br />
This feature especially makes sense when used in combination with authorized flashing. For more information about authorized flashing, please refer to the [[UM08022_Flasher|Flasher User Manual]].<br />
<br />
{{Note|1=The number in <tt>Cntdown.txt</tt> is only updated on a successful programming cycle. Programming cycles that failed do not affect <tt>Cntdown.txt</tt>.}}<br />
<br />
=== Modified fail/error LED indicator behavior ===<br />
In case a <tt>Cntdown.txt</tt> is found at boot time, the fail/error LED of the Flasher Compact behaves differently.<br />
If the number of programming cycles left is 10 or below, the following will happen:<br />
<br />
* The red error/fail LED will be lit for 1 second<br />
* After this, it will blink/toggle x times @ 5 Hz, indicating the number of programming cycles left (blinking 5 times for 5 cycles left, etc.)<br />
<br />
= Patch data file =<br />
== Patch file support ==<br />
The Flasher Compact modules connected to the Flasher Hub-12 support patch files, which allows to patch the content of the data to be programmed.<br />
Before starting the programming process in stand-alone mode, the Flasher Compact module will look for a file named <tt>Patches.txt</tt> being present.<br />
This file includes the patches.<br />
If this file is present, the number in <tt>Serial.txt</tt> describes the line number of the <tt>Patches.txt</tt> file that will be used for the current cycle (line counting starts at 0).<br />
<br />
Each line in <tt>Patches.txt</tt> can hold up to 4 patches, where each patch can be up to 32 bytes in length.<br />
<br />
'''Syntax'''<br><br />
Each line begins with <code><NumPatches></code> followed by each patch <code><Addr>,<NumBytes>:<nowiki><Data></nowiki></code> in sequence and separated by commas.<br />
So the syntax for <tt><NumPatches></tt> = 4 would be as follows:<br />
<br />
<NumPatches>,<Addr>,<NumBytes>:<nowiki><Data></nowiki>,<Addr>,<NumBytes>:<nowiki><Data></nowiki>,<Addr>,<NumBytes>:<nowiki><Data></nowiki>,<Addr>,<NumBytes>:<nowiki><Data></nowiki><br />
<br />
Find below a table which describes each parameter.<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Parameter || Description<br />
|-<br />
| <tt><NumPatches></tt> || Describes the number of patches in this patch line. Max. value is 4.<br />
|-<br />
| <tt><Addr></tt> || Describes the address to be patched. Value is expected in hex.<br />
|-<br />
| <tt><NumBytes></tt> || Number of bytes for the current patch. Max. value is 20h (32 in decimal). Value is expected in hex.<br />
|-<br />
| <tt><nowiki><Data></nowiki></tt> || Describes the data to be patched. <tt><nowiki><Data></nowiki></tt> is always expected as 2 hexadecimal characters per byte.<br />
|}<br />
<br />
<br> <!-- else, there's no space between the table and the notes --><br />
<br />
{{Note|1=All values are expected in hexadecimal format (hex).<br>The <tt><nowiki><Data></nowiki></tt> section is always preceded by ":", not ",".}}<br />
<br />
'''Example'''<br><br />
Please find below an example sequence which clarifies the usage of patch files.<br />
<br />
<tt>Patches.txt</tt>, which is located on the Flasher Compact(s), contains the following line:<br />
<br />
3,100025,3:AABBCC,100063,2:DDEE,100078,1:FF<br />
<br />
<tt>Serial.txt</tt> contains a "0", which forces the Flasher Compact to use line 0 from <tt>Patches.txt</tt>.<br />
<br />
After starting the programming cycle, the following data will be patched:<br />
<br />
Addr 0x100025: 3 byte 0xAA 0xBB 0xCC<br />
Addr 0x100063: 2 byte 0xDD 0xEE<br />
Addr 0x100078: 1 byte 0xFF<br />
<br />
'''Single patch via ASCII terminal'''<br><br />
Alternatively, you can start a programming cycle with patch data that is only valid for this one cycle (no need for a <tt>Patches.txt</tt> file):<br />
<br />
Send the<br />
<br />
#AUTO PATCH <module> <NumPatches>,<Addr>,<NumBytes>:<nowiki><Data></nowiki><br />
<br />
command via the Flasher Hub-12 ASCII terminal interface. The parameters have the same function as described in the table above.<br />
<br />
= FTP server =<br />
== FTP server connection ==<br />
The FTP server on the Flasher Hub-12 provides easy access to the files on the connected Flasher Compact modules.<br />
The server supports a maximum of 2 simultaneous connections and works with all common FTP clients.<br />
<br />
The FTP server root directory is a virtual directory and cannot be written to.<br />
It contains a subdirectory for each module, as well as an "All Modules" and a "Logs" directory.<br />
<br />
[[File:FTPServer.png]]<br />
<br />
The FTP server allows you to upload or download the target configuration and data files.<br />
<br />
Files and folders uploaded to the "All Modules" directory automatically get copied to all connected Flasher Compacts.<br />
Note that the "All Modules" directory itself does not retain any files or folders and will always appear empty.<br />
<br />
Please also note that you may have to perform a "Refresh" operation on the Module folders before the FTP client will display the 'true' content of these folders.<br />
This is because many FTP clients tend to cache the folder contents and don't necessarily refresh the display automatically, even if the folder contents has changed.<br />
<br />
The Flasher Compacts create log files for executed operations.<br />
These files can be found in the module folders and downloaded from there.<br />
<br />
The IP setup is described here: [[#Setting up the IP interface]].<br />
<br />
=== Access data ===<br />
Anonymous access to the FTP server is limited to read-only access to the file system.<br />
<br />
For write access, special login credentials have to be used:<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Setting || Value<br />
|-<br />
| Host name || <nowiki>ftp://flasherhub-<serial_number></nowiki><br />
|-<br />
| Username || <tt>admin</tt><br />
|-<br />
| Password || <tt>1234</tt><br />
|-<br />
| Port || 21 (Default FTP port)<br />
|}<br />
<br />
<br> <!-- else, there's no space between the table and the notes --><br />
<br />
{{Note|1=The access data for read/write access cannot be modified and is intended to be used only as a convenience feature to avoid unintended modification of the Flasher's file system. It is not meant as a security feature.}}<br />
<br />
= Web server =<br />
== Web server features ==<br />
The Flasher Hub-12 comes with a built-in web server, which provides a web interface for information and network configuration.<br />
<br />
The web interface provides information about the Flasher Hub-12 server version, serial number, and configuration.<br />
The Flasher Hub-12's web interface furthermore allows monitoring and configuration of the individual modules as well as the files stored on them.<br />
<br />
The IP setup is described here: [[#Setting up the IP interface]].<br />
<br />
=== Status page ===<br />
The "Status" page is the landing page and shows some parameters and other information of the Flasher Hub-12.<br />
It also provides an overview of the connected modules.<br />
<br />
{{Note|1=In order to update the firmware of modules in this tab, the current web session needs to be in Administrator mode. For more information please refer to [[#Flasher Hub-12 web interface configuration page]].}}<br />
<br />
[[File:UM08042_Status.png]]<br />
<br />
=== Flasher Hub-12 configuration page ===<br />
The "Configuration > Flasher Hub-12" page allows uploading updates for the Flasher Hub-12 and Flasher Compacts.<br />
It also comes with options for enabling Flasher Hub-12's logging and the handshake interface.<br />
<br />
{{Note|1=In order to upload firmware updates or toggle the settings in this tab, the current web session needs to be in Administrator mode. For more information please refer to [[#Flasher Hub-12 web interface configuration page]].}}<br />
<br />
[[File:UM08043_ConfigHub.png]]<br />
<br />
=== Flasher modules configuration page ===<br />
The "Configuration > Flasher modules" page shows the serial numbers of the Flasher Compacts that are currently connected to the Flasher Hub-12, as well as each modules' assigned nickname.<br />
<br />
[[File:UM08043_ConfigModules.png]]<br />
<br />
=== Flasher Hub-12 web interface configuration page ===<br />
The "Configuration > Web interface" page allows switching between "Administrator mode" and "Operator mode" for the current web session.<br />
A web session that is in "Operator mode" cannot apply changes to the Flasher Hub-12, e.g. module nicknames cannot be changed, Flasher Hub-12 and module firmware cannot be updated, etc.<br />
<br />
In order to change the Flasher Hub-12 setup, "Administrator mode" needs to be enabled for the web session first.<br />
<br />
Furthermore, the default mode for new web sessions can be changed in this tab.<br />
<br />
For production environments where there are multiple users accessing the Flasher Hub-12, it is recommended to disable "Administrator mode" for new sessions by default so accidental setup changes are prevented.<br />
<br />
[[File:UM08043_ConfigWebIF.png]]<br />
<br />
=== Files page (File browser) ===<br />
The file browser on the "Files" page is an alternative to using an FTP client to manage the files on the connected Flasher Compacts.<br />
Users can view the contents of each module, upload files (also via drag-and-drop), delete files and folders, create new folders, and more.<br />
<br />
Just like when connecting via FTP, files uploaded to / new folders created in the "All modules" directory automatically get copied to all connected Flasher Compacts.<br />
Note that the "All modules" directory itself does not retain any files or folders and will always appear empty.<br />
<br />
The FTP server root directory is a virtual directory and cannot be written to.<br />
Enter a specific module directory or the "All modules" directory to upload files.<br />
<br />
{{Note|1=In order to upload or remove files and folders in this tab, the current web session needs to be in Administrator mode. For more information please refer to [[#Flasher Hub-12 web interface configuration page]].}}<br />
<br />
[[File:UM08043_Files.png]]<br />
<br />
=== Programming page ===<br />
The "Programming" page allows users to start and monitor ongoing programming operations using the web interface.<br />
Users can select which modules should start programming as well as the project file to use.<br />
<br />
[[File:UM08039_Programming.png]]<br />
<br />
=== UART page ===<br />
{{Note|1=The UART Transceiver is not yet supported by the latest firmware version.}}<br />
<br />
The "UART" page allows users to enable / disable and monitor the UART to TCP transceiver for each module.<br />
<br />
[[File:UM08039_UART.png]]<br />
<br />
=== Log page ===<br />
The "Log" page shows the log kept by the Flasher Hub-12.<br />
<br />
[[File:UM08042_FlasherHub12_WebLog.png]]<br />
<br />
= Module terminal server=<br />
<br />
== Introduction ==<br />
<br />
[[File: FH12_WebIF_ModTermSrv.png | 600px | thumb | Module terminal server in the web interface]]<br />
<br />
Flasher modules may output informative messages on their terminal during operations like erasing, programming or verifying.<br><br />
Such messages are output for U-Flash projects that are configured for "verbose output".<br><br />
In order to receive terminal messages from a Flasher module that is connected to Flasher Hub, the module terminal server can be used.<br />
<br />
When enabled, the module terminal server reads terminal messages from all connected modules.<br><br />
The output can be inspected in the web interface "Terminal" page.<br><br />
Additionally, the terminal output for a module can be received by a TCP/IP connection.<br />
<br />
<br clear="all"><br />
== Setting up the module terminal server ==<br />
[[File: FH12_WebIF_Config_FH_ModTermSrv.png | 600px | thumb | Module terminal server configuration]]<br />
<br />
The module terminal server can be configured as follows using the web server page "Configuration > Flasher Hub".<br><br />
The feature can be enabled or disabled. Furthermore, the base port for accepting TCP/IP connections can be set.<br />
<br />
<br clear="all"><br />
== Connecting to a module terminal ==<br />
For each module, a TCP/IP connection can be opened to receive the modules' terminal messages.<br />
The port number for each module is calculated using the module position and the configured module terminal server base port:<br />
BasePort + ModulePosition = ModuleTerminalPort<br />
<br />
For a base port of 1000, the following module terminal ports result:<br />
{| class="wikitable"<br />
|-<br />
! Module position !! Port<br />
|-<br />
| 1 || 1001<br />
|-<br />
| 2 || 1002<br />
|-<br />
| 3 || 1003<br />
|-<br />
| 4 || 1004<br />
|-<br />
| 5 || 1005<br />
|-<br />
| [...]<br />
|}<br />
<br />
A TCP/IP client receives a modules' terminal messages by connecting to Flasher Hub's IP address and the desired port number.<br><br />
The connection details are shown on the web server "Terminal" page:<br><br />
[[File: FH12_WebIF_ModTermSrv_ConnInfo.png]]<br />
<br />
An example configuration to connect to the terminal of module #1 using PuTTY looks as follows:<br><br />
[[File: FH12_ModTermSrv_PuTTY_Config.png]]<br />
<br />
{{Note|1=The terminal messages are sent as raw TCP/IP data.<br>A client utility may need to be configured accordingly.}}<br />
<br />
<br />
After opening the connection and triggering an operation on the module, the connection receives terminal messages:<br><br />
[[File: FH12_ModTermSrv_PuTTY_Conn.png]]<br />
<br />
= Remote control =<br />
The integrated ASCII terminal interface is the primary way to remotely control the Flasher Hub-12 operation.<br />
Alternatively, the Flasher Hub-12 can be controlled via the handshake interface.<br />
<br />
== ASCII terminal interface ==<br />
=== Introduction ===<br />
The Flasher Hub-12 can be driven by any application or just a simple terminal using ASCII commands.<br />
<br />
Every known command is acknowledged by the Flasher Hub-12 and then executed.<br />
After command execution, the Flasher Hub-12 sends an ASCII reply message.<br />
<br />
{{Note|1=There are situations where the execution of a known command is rejected with #NACK:ERRxxx if the Flasher Hub-12 is currently busy and the received command is not allowed to be sent while the Flasher Hub-12 is busy.}}<br />
<br />
=== Setting up an ASCII terminal connection ===<br />
The Flasher Hub-12 supports multiple interfaces to connect to the Flasher Hub-12 and access its ASCII terminal.<br />
The following table lists all supported interfaces and also links to a description explaining how to use the interface.<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Interface || Usage<br />
|-<br />
| Telnet || [[UM08022_Flasher#Settings_for_ASCII_interface_via_Telnet]]<br />
|-<br />
| UART (RS-232) || [[UM08022_Flasher#Settings_for_ASCII_interface_via_RS232]]<br />
|-<br />
| USB (FlasherControl.exe) || [[FlasherControl]]<br />
|}<br />
<br />
=== General command and reply message format ===<br />
* Each ASCII command has to start with the start delimiter ''#''.<br />
* Each ASCII command has to end with simple carriage return ('\r', ASCII code 13).<br />
* Commands can be sent upper or lower case.<br />
<br />
=== General usage ===<br />
Reply messages must be considered in each case.<br />
In general, a new command must not be sent before a reply for the last one has been received.<br />
At least the "#ACK" message needs to be received by the controlling application before sending a new command for a flash module not yet executing a command.<br />
<br />
For the Flasher Hub-12, all commands triggering a flash programming function (<tt>#AUTO, #CANCEL, #ERASE, #PROGRAM, #VERIFY</tt>) may be used for other modules, before the current operation has been finished.<br />
Please note that in this case the overall finish indicator "#DONE" will be sent when all commands have been executed.<br />
<br />
When a flash programming function has finished, the debug logic of the MCU is disabled (powered down) and the target interface of the module is switched off (tri-stated).<br />
<br />
Some commands, e.g. <code>#AUTO</code> require the modules to be specified.<br />
<br />
#AUTO all|*|(<module>[,<module>]...)<br />
<br />
* <tt>all</tt> will execute the command using all modules which can be detected.<br />
* <tt>*</tt> will execute the command using all modules selected by the latest executed <tt>selmodule</tt> command.<br />
* Alternatively, the modules can be specified in a comma separated list.<br />
<br />
=== Commands ===<br />
The table below provides an overview about the commands which are supported by the current version of the Flasher Hub-12 firmware.<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Commands to the Flasher Hub-12<br />
|-<br />
| <tt><nowiki>#AUTO all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#AUTO NOPATCH all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#AUTO PATCH all|*|(<module>[,<module>]...) <number of patches>,<address>,<number of patched bytes>:<data bytes></nowiki></tt><br />
|-<br />
| <tt><nowiki>#BAUDRATE <baudrate></nowiki></tt><br />
|-<br />
| <tt><nowiki>#CANCEL all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#ERASE all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#FFORMAT all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#FWVERSION</nowiki></tt><br />
|-<br />
| <tt><nowiki>#FWVERSIONMOD all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#IPCONFIG</nowiki></tt><br />
|-<br />
| <tt><nowiki>#POWERON all|*|(<module>[,<module>]...), <power source>,<discharge mode></nowiki></tt><br />
|-<br />
| <tt><nowiki>#POWEROFF all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#PROGRAM all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#PROJECT all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#PROTVER</nowiki></tt><br />
|-<br />
| <tt><nowiki>#RESETIPCONFIG</nowiki></tt><br />
|-<br />
| <tt><nowiki>#RESULT all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#RTTOFF all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#RTTON all|*|(<module>[,<module>]...) <RTT channel>,<RTT control block addr>,<number down buffers>,<number up buffers></nowiki></tt><br />
|-<br />
| <tt><nowiki>#SELECT all|*|(<module>[,<module>]...) <project></nowiki></tt><br />
|-<br />
| <tt><nowiki>#SELMODULE all|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#SERIAL</nowiki></tt><br />
|-<br />
| <tt><nowiki>#SERIALMOD all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#SETVTREF all|*|(<module>[,<module>]...) <voltage></nowiki></tt><br />
|-<br />
| <tt><nowiki>#START all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#STATUS</nowiki></tt><br />
|-<br />
| <tt><nowiki>#TERMINAL all|*|(<module>[,<module>]...) off|(<baudrate>,<data bits>,<parity>,<stop bits>)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#VERIFY all|*|(<module>[,<module>]...)</nowiki></tt><br />
|}<br />
<br />
{| class="seggertable"<br />
!| Replies from the Flasher Hub-12<br />
|-<br />
| <tt>#ACK</tt><br />
|-<br />
| <tt>#NACK</tt><br />
|-<br />
| <tt>#OK</tt><br />
|-<br />
| <tt>#OK:<num bytes>:<nowiki><data></nowiki></tt><br />
|-<br />
| <tt>#OK:<nowiki><data></nowiki></tt><br />
|-<br />
| <tt>#OK:<module>:<nowiki><data></nowiki></tt><br />
|-<br />
| <tt>#RESULT:<module>:</tt><br />
|-<br />
| <tt>#DONE</tt><br />
|-<br />
| <tt>#ERRxxx</tt><br />
|}<br />
<br />
==== Command #AUTO ====<br />
----<br />
The <tt>#AUTO</tt> command behaves exactly like pushing the programming button on a connected Flasher Compact.<br />
<br />
Usually, the following command sequence will be performed when receiving the <tt>#AUTO</tt> command:<br />
<br />
The selected modules...<br />
* erase the targets (if not blank)<br />
* program the targets<br />
* verify the targets<br />
<br />
Depending on the tasks chosen in J-Flash or U-Flash, this sequence can differ from the one shown above.<br />
<br />
===== Syntax =====<br />
#AUTO all|*|(<module>[,<module>]...)<br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || Programming done successfully.<br />
|-<br />
| <tt>#ERRxxx</tt> || Error occurred during operation. <tt>xxx</tt> represents the error code, which may be followed by an additional error text.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#AUTO 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)</tt><br />
|}<br />
<br />
==== Command #AUTO NOPATCH ====<br />
----<br />
The <tt>#AUTO NOPATCH</tt> command allows to ignore an existing patch file for the programming.<br />
<br />
This command exists because the default behavior of the <tt>#auto</tt> command is such that an existing patch file (<tt>patch.txt</tt> in the module folder) is applied to a data if the <tt>#auto</tt> command is executed.<br />
<br />
For further information about the usage of the <tt>#AUTO PATCH</tt> command, please refer to [[#Patch file support]].<br />
<br />
===== Syntax =====<br />
#AUTO NOPATCH all|*|(<module>[,<module>]...)<br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || No error occurred.<br />
|-<br />
| <tt>#ERRxxx</tt> || Error occurred during operation. <tt>xxx</tt> represents the error code, which may be followed by an additional error text.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#AUTO NOPATCH 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)</tt><br />
|}<br />
<br />
==== Command #AUTO PATCH ====<br />
----<br />
The <tt>#AUTO PATCH</tt> command allows patching of the content of the data to be programmed.<br />
<br />
For further information about the usage of the <tt>#AUTO PATCH</tt> command please refer to [[#Patch file support]].<br />
<br />
===== Syntax =====<br />
#AUTO PATCH all|*|(<module>[,<module>]...) <number of patches>,<address>,<number of patched bytes>:<data bytes><br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || No error occurred.<br />
|-<br />
| <tt>#ERRxxx</tt> || Error occurred during operation. <tt>xxx</tt> represents the error code, which may be followed by an additional error text.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#AUTO PATCH 1 1,0,8:0011223344556677</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)</tt><br />
|}<br />
<br />
==== Command #BAUDRATE ====<br />
----<br />
This command can be sent in order to change the baud rate of the RS-232 interface used by the ASCII terminal.<br />
<br />
===== Syntax =====<br />
#BAUDRATE <baudrate><br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || No error occurred.<br />
|-<br />
| <tt>#ERR255: Invalid parameters</tt> || The baud rate parameter is invalid, e.g. contains characters that cannot be parsed.<br />
|-<br />
| <tt>#ERR255: Invalid parameters</tt> || The selected baud rate is not supported.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#BAUDRATE 115200</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#OK</tt><br />
|}<br />
<br />
==== Command #CANCEL ====<br />
----<br />
This command can be sent to abort a running operation.<br />
It may take a while until the current operation is actually canceled.<br />
<br />
===== Syntax =====<br />
#CANCEL all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#AUTO 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| <tt>#CANCEL 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:ERR255:Error while flashing</tt><br />
|}<br />
<br />
==== Command #ERASE ====<br />
----<br />
This command can be sent to erase all selected target flash sectors.<br />
<br />
===== Syntax =====<br />
#ERASE all|*|(<module>[,<module>]...)<br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || Erase done successfully.<br />
|-<br />
| <tt>#ERRxxx: TEXT</tt> || Error message with text.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#ERASE 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 0.362s, Erase 0.252s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #FFORMAT ====<br />
----<br />
This command formats the file system on the specified module(s).<br />
<br />
===== Syntax =====<br />
#FFORMAT all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#FFORMAT 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #FWVERSION ====<br />
----<br />
This command returns the firmware version of the Flasher Hub-12.<br />
<br />
===== Syntax =====<br />
#FWVERSION<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#FWVERSION</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#OK:Flasher Hub-12 V1 compiled Sep 20 2023 15:55:39</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #FWVERSIONMOD ====<br />
----<br />
This command returns the firmware version of one or more modules connected to the Flasher Hub-12.<br />
<br />
===== Syntax =====<br />
#FWVERSIONMOD all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#FWVERSIONMOD 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#OK:1:J-Link / Flasher Compact V5 compiled Mar 17 2021 11:50:31</tt><br />
|-<br />
| || <tt>#OK:2:J-Link / Flasher Compact V5 compiled Mar 17 2021 11:50:31</tt><br />
|-<br />
| || <tt>#OK:3:J-Link / Flasher Compact V5 compiled Mar 17 2021 11:50:31</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #IPCONFIG ====<br />
----<br />
This command returns the current IP configuration.<br />
<br />
===== Syntax =====<br />
#IPCONFIG<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#IPCONFIG</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:IP address:192.168.1.111</tt><br />
|-<br />
| || <tt>#RESULT:subnet mask:255.255.0.0</tt><br />
|-<br />
| || <tt>#RESULT:Gateway:192.168.1.1</tt><br />
|-<br />
| || <tt>#RESULT:IP mode:Automatically assigned (DHCP)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
IP mode can be "<tt>Automatically assigned (DHCP)</tt>" or "<tt>User assigned</tt>".<br />
<br />
==== Command #POWERON ====<br />
----<br />
This command can be used to turn ON the target power (5V on pin 19 of the attached Flasher Compacts) without any erase, program or verify action.<br />
<br />
===== Syntax =====<br />
#POWERON all|*|(<module>[,<module>]...), <power source>,<discharge mode><br />
<br />
===== Parameters =====<br />
{| class="seggertable"<br />
|-<br />
!| Parameter || Meaning<br />
|-<br />
| power source || 0 = internal power<br />
|-<br />
| discharge mode || 0 = no discharge<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#POWERON 1,2,3 0,0</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|}<br />
<br />
==== Command #POWEROFF ====<br />
----<br />
This command can be used to turn OFF the target power (5V on pin 19 of the attached Flasher Compacts) without any erase, program or verify action.<br />
<br />
===== Syntax =====<br />
#POWEROFF all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#POWEROFF 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|}<br />
<br />
==== Command #PROGRAM ====<br />
----<br />
This command can be used instead of <tt>#AUTO</tt> to program a target without erasing the target before programming and without performing a final verification.<br />
<br />
===== Syntax =====<br />
#PROGRAM all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#PROGRAM 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 9.963s, Prog 9.183s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #PROJECT ====<br />
----<br />
Returns the selected projects from the specified module numbers.<br />
<br />
===== Syntax =====<br />
#PROJECT all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#PROJECT 1,2</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK:FLASHER.UNI</tt><br />
|-<br />
| || <tt>#RESULT:2:OK:PROJECT.CFG</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #PROTVER ====<br />
----<br />
This command can be used to check the version of the ASCII command protocol in use.<br />
<br />
===== Syntax =====<br />
#PROTVER<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#PROTVER</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#OK:2.02b</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #RESETIPCONFIG ====<br />
----<br />
Reset the IP configuration to DHCP.<br />
<br />
===== Syntax =====<br />
#RESETIPCONFIG<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#RESETIPCONFIG</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:IP configuration was reset successfully.</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #RESULT ====<br />
----<br />
This command can be sent any time, even during other command execution.<br />
The Flasher Hub-12 responds with the result of the previously executed command.<br />
<br />
===== Syntax =====<br />
#RESULT all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#RESULT 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK ((Total 2.216s, Erase 0.126s, Prog 1.231s, Verify 0.144s)</tt><br />
|-<br />
| || <tt>#RESULT:2:OK ((Total 2.216s, Erase 0.126s, Prog 1.231s, Verify 0.144s)</tt><br />
|-<br />
| || <tt>#RESULT:3:OK ((Total 2.216s, Erase 0.126s, Prog 1.231s, Verify 0.144s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #RTTOFF ====<br />
----<br />
This command turns off the RTT connection for the given module(s).<br />
<br />
===== Syntax =====<br />
#RTTOFF all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#RTTOFF 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #RTTON ====<br />
----<br />
This command turns on the RTT connection for the given module(s).<br />
<br />
===== Syntax =====<br />
#RTTON all|*|(<module>[,<module>]...) <RTT channel>,<RTT control block addr>,<number down buffers>,<number up buffers><br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#RTTON 1,2,3 0,0x20001000,3,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #SELECT ====<br />
----<br />
The <tt>#SELECT</tt> command is used to select a specific configuration and data file pair to be used by the connected Flasher Compact modules to program the target.<br />
<br />
===== Syntax =====<br />
#SELECT all|*|(<module>[,<module>]...) <project><br />
<br />
===== Parameters =====<br />
{| class="seggertable"<br />
|-<br />
!| Parameter || Meaning<br />
|-<br />
| project || The <tt>[Project Name]</tt> specifies the name of file pair without extensions (.CFG and .DAT) on the Flasher Compact modules to be selected. The Flasher Compacts save the selected configuration and data file in the FLASHER.INI file. Therefore, this selection is remembered even after power-cycling the Flasher Compacts.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#SELECT 1,2,3 emPower</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK</tt><br />
|-<br />
| || <tt>#RESULT:2:OK</tt><br />
|-<br />
| || <tt>#RESULT:3:OK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #SELMODULE ====<br />
----<br />
This command is used to select one or more modules in a Flasher Hub-12 system.<br />
Following commands using an asterisk to specify the modules will use the modules selected by this command.<br />
<br />
===== Syntax =====<br />
#SELMODULE all|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#SELMODULE 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#SELECTED:1,2,3</tt><br />
|}<br />
<br />
==== Command #SERIAL ====<br />
----<br />
The <tt>#SERIAL</tt> command is used to query the serial number of the Flasher Hub-12.<br />
<br />
===== Syntax =====<br />
#SERIAL<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#serial</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1021000001</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #SERIALMOD ====<br />
----<br />
The <tt>#SERIALMOD</tt> command is used query the serial numbers of the connected Flasher Compact modules.<br />
<br />
===== Syntax =====<br />
#SERIALMOD all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#serialmod 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:1015000015</tt><br />
|-<br />
| || <tt>#RESULT:2:1015000016</tt><br />
|-<br />
| || <tt>#RESULT:3:1015000017</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #SETVTREF ====<br />
----<br />
This command can be used to set a fixed voltage for I/O pins of the target interface.<br />
<br />
===== Syntax =====<br />
#SETVTREF all|*|(<module>[,<module>]...) <voltage><br />
<br />
===== Parameters =====<br />
{| class="seggertable"<br />
|-<br />
!| Parameter || Meaning<br />
|-<br />
| voltage || The IO voltage level for the target interface in mV.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#SETVTREF 1,2,3 3300</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #START ====<br />
----<br />
This command can be sent to start the application using the method configured in the J-Flash project.<br />
<br />
===== Syntax =====<br />
#START all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#START 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 0.083s)</tt><br />
|-<br />
| || <tt>#RESULT:2:OK (Total 0.082s)</tt><br />
|-<br />
| || <tt>#RESULT:3:OK (Total 0.084s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #STATUS ====<br />
----<br />
This command can be sent any time, even during other command execution.<br />
The Flasher Hub-12 responds with its current state.<br />
All defined state messages are described under [[#Replies from the Flasher Hub-12]].<br />
<br />
===== Syntax =====<br />
#STATUS<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#STATUS</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#STATUS:READY</tt><br />
|}<br />
<br />
==== Command #TERMINAL ====<br />
----<br />
This command enables/disables the UART transceiver for the given module(s).<br />
For more information, please refer to the [[#UART to TCP transceiver]].<br />
<br />
===== Syntax =====<br />
#TERMINAL all|*|(<module>[,<module>]...) off|(<baudrate>,<data bits>,<parity>,<stop bits>)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#TERMINAL 1,2,3 9600,8,N,1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#TERMINAL 1,2,3 off</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #VERIFY ====<br />
----<br />
This command can be used to verify the target flash content against the data stored in the Flasher Compact module.<br />
<br />
===== Syntax =====<br />
#VERIFY all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#VERIFY 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 0.206s, Verify 0.129s)</tt><br />
|-<br />
| || <tt>#RESULT:2:OK (Total 0.210s, Verify 0.131s)</tt><br />
|-<br />
| || <tt>#RESULT:3:OK (Total 0.207s, Verify 0.128s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
=== Replies from the Flasher Hub-12 ===<br />
The reply messages from the Flasher Hub-12 follow the same data format as commands.<br />
Any reply message starts with ASCII start delimiter #, ends with simple carriage return (ASCII code 13), and is sent in uppercase.<br />
In contrast to commands, replies can be followed by a descriptive message, which provides more detailed information about the reply.<br />
This description is sent in mixed case.<br />
The <tt>#OK</tt> reply, for example, is such a reply.<br />
It is followed by a string containing information about the performance time needed for the operations:<br />
<br />
#OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)<br />
<br />
The following reply messages from the Flasher Hub-12 are defined:<br />
<br />
==== #ACK ====<br />
The Flasher Hub-12 replies with the <tt>#ACK</tt> message on reception of any defined command before the command itself is executed.<br />
<br />
==== #NACK ====<br />
The Flasher Hub-12 replies with <tt>#NACK</tt>, if an undefined command was received.<br />
<br />
==== #OK:<module>:<nowiki><data></nowiki> ====<br />
The Flasher Hub-12 replies with <tt>#OK</tt>, if a command other than <tt>#STATUS</tt> or <tt>#RESULT</tt> was executed and ended without any error.<br />
<tt>#OK</tt> may be followed by a module number and/or data.<br />
<br />
==== #STATUS:<status> ====<br />
The Flasher Hub-12 replies with its current state.<br />
<br />
The following status messages are currently defined:<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Message || Description<br />
|-<br />
| <tt>#STATUS:READY</tt> || Flasher Hub-12 is ready to receive a new command.<br />
|-<br />
| <tt>#STATUS:BUSY</tt> || Flasher Hub-12 is currently executing a previously received command.<br />
|}<br />
<br />
==== #RESULT:<module>:<nowiki><data></nowiki> ====<br />
The Flasher Hub-12 reports the result of an operation on a specific module.<br />
If the operation has been completed successfully, it will report the outcome with a single message of this type followed by the last result of the operation.<br />
<br />
==== #DONE ====<br />
This message is being sent once all operations are finished and all connected Flasher Compact modules are back in idle state.<br />
<br />
A typical sequence for using the Flasher Hub-12 is shown below:<br />
<br />
Flasher Hub-12 telnet-shell telnet-shell.<br />
Flasher Hub-12 V1.01a compiled May 17 2021 10:19:45<br />
#SELMODULE 1,2<br />
#ACK<br />
#SELECTED:1,2<br />
#AUTO *<br />
#ACK<br />
#RESULT:1:#ERR255:Error while flashing<br />
#RESULT:2:#OK (Total 2.653s, Erase 0.327s, Prog 1.960s, Verify 0.234s)<br />
#DONE<br />
<br />
==== #ERRxxx <nowiki><data></nowiki> ====<br />
If any command other than <tt>#STATUS</tt> or <tt>#RESULT</tt> was terminated with an error, the Flasher Hub-12 cancels the command and replies with an error message instead of the <tt>#OK</tt> message.<br />
<br />
Some error codes may be followed by a colon and an additional error text.<br />
<br />
For example:<br />
<br />
#ERR007:CANCELED.<br />
<br />
The error code numbers are described in the following table:<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Message || Description<br />
|-<br />
| <tt>#ERR007</tt> || Flasher Hub-12 received a <tt>#CANCEL</tt> command and has canceled the current operation.<br />
|-<br />
| <tt>#ERR008</tt> || Flasher Hub-12 is already busy with execution of previous command.<br />
|-<br />
| <tt>#ERR009</tt> || Failed to allocate memory.<br />
|-<br />
| <tt>#ERR010</tt> || Failed to open file.<br />
|-<br />
| <tt>#ERR011</tt> || Failed to read file.<br />
|-<br />
| <tt>#ERR012</tt> || Failed to write file.<br />
|-<br />
| <tt>#ERR013</tt> || Failed to delete file.<br />
|-<br />
| <tt>#ERR098</tt> || Failed to delete file.<br />
|-<br />
| <tt>#ERR098</tt> || Could not allocate memory for device specific algorithm.<br />
|-<br />
| <tt>#ERR099</tt> || Device specific algorithm is not yet supported by this firmware version. Please check for a firmware update.<br />
|-<br />
| <tt>#ERR101</tt> || Could not find device programming algorithm.<br />
|-<br />
| <tt>#ERR102</tt> || Could not open the data file.<br />
|-<br />
| <tt>#ERR255</tt> || Undefined error occurred. This reply is followed by an error string.<br />
|}<br />
<br />
== Handshake interface ==<br />
For a detailed description of the handshake interface, please refer to the [[UM08022_Flasher#Handshake_control| Flasher Manual (UM08022) chapter 'Handshake control']].<br />
<br />
= Support and FAQs =<br />
This chapter contains troubleshooting tips together with solutions for common problems which might occur when using the Flasher Hub-12.<br />
There are several steps you can take before contacting support.<br />
Performing these steps can solve many problems and often eliminates the need for assistance.<br />
This chapter also contains a collection of frequently asked questions (FAQs) with answers.<br />
<br />
== Contacting support ==<br />
Before contacting support, make sure you tried to solve your problem by trying your Flasher Hub-12 with a different PC and (if possible) with a different target system to see if it works there.<br />
If the device functions correctly, the USB setup on the original machine or your target hardware is the source of the problem, not the Flasher Hub-12.<br />
<br />
If you need to contact support, send the following information to<br><br />
''ticket_flasher@segger.com''<br />
<br />
* A detailed description of the problem<br />
* Flasher Hub-12 serial number<br />
* Information about your target hardware (processor, board, etc.).<br />
* <tt>FLASHER.JFLASH</tt>, <tt>FLASHER.CFG</tt>, <tt>FLASHER.DAT</tt> (if possible), <tt>FLASHER.LOG</tt>, <tt>Serial.txt</tt> file from the connected Flasher Compact. To get these files, please download them via FTP or via the Flasher Hub-12 web interface.<br />
<br />
The Flasher Hub-12 is sold directly by SEGGER.<br />
<br />
== Frequently Asked Questions ==<br />
'''Maximum target interface speed'''<br><br />
{|<br />
|-<br />
| '''Q:''' || What is the maximum target interface speed supported by Flasher Compact?<br />
|-<br />
| '''A:''' || The Flasher Compact's maximum supported target interface speed is 50MHz.<br />
|}<br />
<br />
'''Maximum download speed'''<br><br />
{|<br />
|-<br />
| '''Q:''' || What is the maximum download speed supported by Flasher Compact?<br />
|-<br />
| '''A:''' || The maximum download speed is currently about 3 Mbytes/second when downloading into RAM. The actual speed depends on various factors, such as target interface speed, clock speed, host CPU core etc.<br />
|}<br />
<br />
'''Flasher Hub-12 web interface access'''<br><br />
{|<br />
|-<br />
| '''Q:''' || How do I connect to the Flasher Hub's web interface?<br />
|-<br />
| '''A:''' || Locate the serial number of your Flasher Hub-12 on the product housing. Then point your browser to <nowiki>http://flasherhub-<serial_number>/index.htm</nowiki>.<br />
|}<br />
<br />
'''Flasher Hub-12 IP address'''<br><br />
{|<br />
|-<br />
| '''Q:''' || Where can I find the IP address assigned to my Flasher Hub-12?<br />
|-<br />
| '''A:''' || Connect to the Flasher Hub-12 web interface as described above. The Flasher Hub-12 IP address is located on the "Status" page.<br />
|}<br />
<br />
= Mechanics =<br />
If you need to mount the Flasher Hub-12 into the production environment, a drawing with the dimensions of the Flasher Hub-12 can be downloaded here:<br><br />
''https://www.segger.com/downloads/flasher#Mechanics''.<br />
<br />
= Literature and references =<br />
This chapter lists documents, which we think may be useful to gain a deeper understanding of technical details.<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Reference || Title || Comments<br />
|-<br />
| [Flasher] || Flasher User Manual || [[UM08022_Flasher|Flasher User Manual (UM08022)]]<br />
|-<br />
| [J-Link] || J-Link / J-Trace User Guide || [[UM08001_J-Link_/_J-Trace_User_Guide|J-Link / J-Trace User Guide (UM08001)]]<br />
|-<br />
| [J-Flash] || J-Flash User Manual || [[UM08003_JFlash|J-Flash User Manual (UM08003)]]<br />
|}</div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_IPConfig_DirectETHConn.png&diff=18157File:FH12 IPConfig DirectETHConn.png2024-03-05T15:30:04Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:Win10_Cmd_ETHAdapterAddr.png&diff=18156File:Win10 Cmd ETHAdapterAddr.png2024-03-05T15:27:17Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:Win10_CtrlPanel_ETH_Adapter.png&diff=18155File:Win10 CtrlPanel ETH Adapter.png2024-03-05T15:24:53Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=J-Link_application_not_starting&diff=18031J-Link application not starting2024-02-27T13:05:20Z<p>Leon: </p>
<hr />
<div>__TOC__<br />
<br />
This article lists all known issues that could fail starting applications from the [https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack J-Link software package].<br />
<br />
= Missing Microsoft DLL =<br />
<br />
== Symptoms ==<br />
<br />
When attempting to start a J-Link application, an error message box appears:<br />
<br />
[[File: Win7_ErrMissingDLL.png]]<br />
<br />
"''The program can't start because VCRUNTIME140_1.dll is missing from your computer. Try reinstalling the program to fix this problem.''"<br />
<br />
{{Note|1=The dll file in question may have a different file name but the underlying problem and fix remains the same.}}<br />
<br />
== Background ==<br />
<br />
From version V7.94l onwards, the J-Link software package for Windows is shipped without the redistributable DLLs by Microsoft (e.g. ''msvcp*.dll'', ''vcruntime*.dll'', etc.).<br><br />
For most modern Windows systems (i.e. Windows 10 and onwards), the required DLLs come pre-installed with the operating system and are updated using [https://support.microsoft.com/en-us/windows/update-windows-3c5ae7fc-9fb6-9af1-1984-b5e0412c556a Windows Update].<br />
<br />
== Fix ==<br />
<br />
{{Note|1=The .dll's in question as well as the executable for updating it are from a third party. We recommend to apply this fix with caution.<br />
SEGGER is not responsible for any effects caused by files provided by a third party.}}<br />
<br />
Systems that are missing the required DLLs need to install them separately by using the corresponding installer provided by Microsoft:<br><br />
<br />
{| class="wikitable"<br />
|-<br />
! Windows Architecture !! Microsoft Visual C++ Redistributable Installer<br />
|-<br />
| X64 || https://aka.ms/vs/17/release/vc_redist.x64.exe<br />
|-<br />
| ARM64 || https://aka.ms/vs/17/release/vc_redist.arm64.exe<br />
|-<br />
| X86 || https://aka.ms/vs/17/release/vc_redist.x86.exe<br />
|}<br />
<br />
= Missing ISD_Tablet DLL =<br />
<br />
== Symptoms ==<br />
On Windows, GUI applications from the J-Link software package do not start correctly and no window appears.<br />
<br />
This issue has been observed for Windows 10 running on an HP notebook, only. <br><br />
When trying to open a GUI application of the J-Link software application (e.g. J-Flash), no window appears. <br><br />
The Windows Task Manager shows no process of the application that the user attempted to start. <br><br />
On Windows 10, the Windows Event Viewer shows an error caused by the following dll: <br><br />
<br />
'''C:\WINDOWS\SYSTEM32\ISD_Tablet.dll'''<br />
<br />
== Fix ==<br />
<br />
{{Note|1=The .dll in question as well as the executable for updating it are from a third party. We recommend to apply this fix with caution.<br />
SEGGER is not responsible for any effects caused by files provided by a third party.}}<br />
<br />
Updating the ISD_Tablet.dll by Wacom fixes the problem.<br />
<br />
* Download an update of the Wacom Components Driver: http://us.wacom.com/en/feeldriver/<br />
* Install the update of the Wacom Components Driver<br />
<br />
After updating the Wacom Components Driver, the GUI applications should be fully functional again.</div>Leonhttps://wiki.segger.com/index.php?title=File:Win7_ErrMissingDLL.png&diff=18030File:Win7 ErrMissingDLL.png2024-02-27T13:04:45Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=J-Link_application_not_starting&diff=18026J-Link application not starting2024-02-27T12:47:23Z<p>Leon: </p>
<hr />
<div>__TOC__<br />
<br />
This article lists all known issues that could fail starting applications from the [https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack J-Link software package].<br />
<br />
= Missing ISD_Tablet.dll =<br />
<br />
== Symptoms ==<br />
On Windows, GUI applications from the J-Link software package do not start correctly and no window appears.<br />
<br />
This issue has been observed for Windows 10 running on an HP notebook, only. <br><br />
When trying to open a GUI application of the J-Link software application (e.g. J-Flash), no window appears. <br><br />
The Windows Task Manager shows no process of the application that the user attempted to start. <br><br />
On Windows 10, the Windows Event Viewer shows an error caused by the following dll: <br><br />
<br />
'''C:\WINDOWS\SYSTEM32\ISD_Tablet.dll'''<br />
<br />
== Fix ==<br />
<br />
{{Note|1=The .dll in question as well as the executable for updating it are from a third party. We recommend to apply this fix with caution.<br />
SEGGER is not responsible for any effects caused by files provided by a third party.}}<br />
<br />
Updating the ISD_Tablet.dll by Wacom fixes the problem.<br />
<br />
* Download an update of the Wacom Components Driver: http://us.wacom.com/en/feeldriver/<br />
* Install the update of the Wacom Components Driver<br />
<br />
After updating the Wacom Components Driver, the GUI applications should be fully functional again.</div>Leonhttps://wiki.segger.com/index.php?title=J-Link_application_not_starting&diff=18024J-Link application not starting2024-02-27T12:46:36Z<p>Leon: </p>
<hr />
<div>__TOC__<br />
<br />
This article lists all known issues that could fail starting applications from the [https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack J-Link software package].<br />
<br />
= Missing ISD_Tablet.dll =<br />
<br />
== Symptoms ==<br />
GUI applications from the J-Link software package do not start.<br />
<br />
This issue has been observed for Windows 10 running on an HP notebook, only. <br><br />
When trying to open a GUI application of the J-Link software application (e.g. J-Flash), no window appears. <br><br />
The Windows Task Manager shows no process of the application that the user attempted to start. <br><br />
On Windows 10, the Windows Event Viewer shows an error caused by the following dll: <br><br />
<br />
'''C:\WINDOWS\SYSTEM32\ISD_Tablet.dll'''<br />
<br />
== Fix ==<br />
<br />
{{Note|1=The .dll in question as well as the executable for updating it are from a third party. We recommend to apply this fix with caution.<br />
SEGGER is not responsible for any effects caused by files provided by a third party.}}<br />
<br />
Updating the ISD_Tablet.dll by Wacom fixes the problem.<br />
<br />
* Download an update of the Wacom Components Driver: http://us.wacom.com/en/feeldriver/<br />
* Install the update of the Wacom Components Driver<br />
<br />
After updating the Wacom Components Driver, the GUI applications should be fully functional again.</div>Leonhttps://wiki.segger.com/index.php?title=UM08043_Flasher_Hub-12&diff=17708UM08043 Flasher Hub-122024-02-08T13:34:46Z<p>Leon: /* Remote control */</p>
<hr />
<div><br />
[[File:FlasherHub12.svg|thumb|SEGGER Flasher Hub-12]]<br />
<br />
<div class="toclimit-2"><br />
__TOC__<br />
</div><br />
<br />
= Introduction =<br />
== Overview ==<br />
SEGGER's Flasher Hub-12 is a Control Module for parallel programming.<br />
<br />
The Flasher Hub-12 is able to control up to 12 Flasher Compact modules serving as individual channels for parallel, high-speed gang-programming.<br />
If required, each channel can be configured to program a different device with a different firmware image.<br />
<br />
The Flasher Compact modules connected to the Flasher Hub-12 are set up just once per channel configuration using SEGGER's Flasher software package.<br />
The software to be used depends on the type of flash chip being programmed.<br />
The Flasher Hub-12 can receive commands and send results via the ASCII terminal interface "stand-alone", without the need of a desktop PC.<br />
The combination of a single Flasher Hub-12 and multiple Flasher Compact modules is the perfect solution for high-volume mass production.<br />
<br />
The Flasher Hub-12 supports all flash devices and programming interfaces supported by the Flasher Compact.<br />
By using Flasher Compacts as the programming modules, the Flasher Hub-12 takes advantage of the extensive list of supported devices and target interfaces, plus the ultra-fast programming speed and reliability of these 'Almost-Anything'-Programmers.<br />
<br />
=== Features of the Flasher Hub-12 ===<br />
* Stand-alone In-System Programming (ISP) hub<br />
* Scalable solution with up to 12 supported individual parallel programming channels, each with their own programming circuit memory<br />
* Built-in web & FTP servers for easy setup<br />
<br />
=== Working environment ===<br />
'''General'''<br><br />
The Flasher Hub-12 has been designed to be used in conjunction with automated test equipment (ATE).<br />
It is modular and scalable from 1 to 12 individual programming modules, represented by SEGGER Flasher Compacts.<br />
The Flasher Compacts are connected directly to and powered via the Flasher Hub-12.<br />
<br />
[[File:UM08042_FlasherHub12Setup.png]]<br />
<br />
'''Flasher PC-software (J-Flash/J-Flash SPI/U-Flash)'''<br><br />
In order to prepare the firmware/data to be programmed to the targets and download it to the Flasher Compacts, the latest version of the J-Flash (JFlash.exe), J-Flash SPI (JFlashSPI.exe) or U-Flash (UniversalFlasher.exe) software is required.<br />
J-Flash, J-Flash SPI and U-Flash are available for Windows, Linux, and macOS, and are part of the Flasher software and documentation package, which can be downloaded from our website:<br />
<br />
<tt>https://www.segger.com/downloads/flasher/#FlasherSoftwareAndDocumentationPack</tt><br />
<br />
For more information about using J-Flash, please refer to the [[UM08003_JFlash|J-Flash User Manual (UM08003)]].<br />
<br />
J-Flash SPI is described in the [[UM08001_J-Link_/_J-Trace_User_Guide|J-Link / J-Trace User Guide (UM08001)]].<br />
<br />
And for information about U-Flash, please refer to the [https://www.segger.com/downloads/flasher/UM08037.pdf U-Flash User Manual (UM08037)].<br />
<br />
'''FTP Client'''<br><br />
The firmware to be programmed to the targets can also be uploaded to the Flasher Compacts via an FTP connection to the Flasher Hub-12.<br />
For this, an FTP client is required.<br />
<br />
'''Web Browser'''<br><br />
The Flasher Hub-12's web interface offers useful status information about the system.<br />
It also allows firmware updates to the Flasher Hub-12 and the connected Flasher Compacts, uploading the firmware to be programmed to the targets, configuring the index of the connected Flasher Compact modules, and more.<br />
In order to access the Flasher Hub-12 web interface, a web browser is required.<br />
<br />
'''Terminal program'''<br><br />
For communication with the Flasher Hub-12 via the ASCII terminal interface, a terminal program like TeraTerm or PuTTY is helpful.<br />
<br />
== Specifications ==<br />
{| class="seggertable"<br />
!colspan="100%"| '''Specifications'''<br />
|-<br />
| Power supply || 8-30VDC, reverse polarity protected, max. 60W<ref>Depends on current consumption of connected downstream devices. For maximum load the input supply must provide 12 VDC or more.</ref><br />
|-<br />
| Power consumption || Max. 15W<br />
|-<br />
| USB Flasher interface || USB-C 2.0<br />
|-<br />
| Host interfaces || USB Type-B (Upstream), USB Type-A (Downstream), Ethernet, RS232 9-pin<br />
|-<br />
| Operating Temperature || +5°C ... +60°C<br />
|-<br />
| Storage Temperature || -20°C ... +65°C<br />
|-<br />
| Relative Humidity (non-condensing) || < 90% rH<br />
|-<br />
| Size (without cables) || 170mm x 172mm x 35mm<br />
|-<br />
| Weight (without cables) || 660g<br />
|}<br />
<references /><br />
<br />
=== Supported CPU cores ===<br />
The Flasher Hub-12 itself is CPU-core agnostic.<br />
The supported CPU cores are determined by the connected Flasher Compacts.<br />
Please see the Flasher Compact User Guide for details.<br />
<br />
=== Supported Target interfaces ===<br />
The Flasher Hub-12 itself is target-interface agnostic.<br />
The supported target interfaces are determined by the connected Flasher Compacts.<br />
Please see the Flasher Compact User Guide for details.<br />
<br />
= Getting Started =<br />
The Flasher Hub-12 makes ultra-fast, high-speed parallel programming ("gang programming") possible.<br />
Up to 12 Flasher Compact modules can be connected to the Flasher Hub-12.<br />
Each Flasher Compact module is connected to a target device.<br />
<br />
[[File:UM08042_Flasher_Hub_Parallel_Programming.png]]<br />
<br />
Via an ASCII terminal interface or handshake interface connection between the ATE (Automated Test Equipment) and the Flasher Hub-12, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
The firmware to be programmed into the target devices can be prepared via a computer running Windows, Linux, or macOS and SEGGER's J-Flash, J-Flash SPI or U-Flash software.<br />
The Flasher Compact modules connected to the Flasher Hub-12 can be provisioned with the firmware to be programmed either directly via J-Flash or U-Flash, via an FTP connection to the Flasher Hub-12, or via the Flasher Hub-12's web interface.<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply ([[#Power_supply |see below for more information]])<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is running the most recent firmware, [[#Updating_Flasher_Hub-12_firmware | as described below]]<br />
# Open Flasher Hub-12's web interface by visiting <code><nowiki>http://flasherhub-<SerialNo>/</nowiki></code> (Make sure to replace <code><SerialNo></code> with the serial number of your Flasher Hub-12)<br />
# Flasher Hub-12 is now up and running<br />
<br />
== Power supply ==<br />
=== Flasher Hub-12 and Flasher Compact power supply ===<br />
The Flasher Hub-12 is powered via the POWER connector (pluggable terminal block) on the back panel.<br />
The power supply must be able to supply 8 - 30VDC, max. 60W to the Flasher Hub-12.<br />
For maximum load the power supply must provide at least 12VDC.<br />
The Flasher Compacts are powered via the USB-C connection of the Flasher Hub-12.<br />
<br />
[[File:UM08042_FlasherHub12_Power.png]]<br />
<br />
The Flasher Compacts are powered directly through the Flasher Hub-12 they are connected to.<br />
<br />
'''Current consumption (typical)'''<br><br />
{| class="seggertable"<br />
!colspan="100%"| '''Flasher Hub-12'''<br />
|-<br />
| External DC power supply || Max. 15W<br />
|-<br />
!colspan="100%"| '''Flasher Compact'''<br />
|-<br />
| 5V via Flasher Hub-12 || 130 mA (no target power supply)<br />
|-<br />
| 5V via Flasher Hub-12 || 230 mA (target power supply with 100mA)<br />
|}<br />
<br />
<br> <!-- else, there's no space between the table and the notes --><br />
<br />
{{Note|1=Undefined behavior may occur if the Flasher Hub-12 and/or the Flasher Compacts are not powered sufficiently.}}<br />
<br />
=== Target power supply ===<br />
The target boards to be programmed can either be powered via their own power supplies, or they can be powered via a 5V / 100mA supply from the Flasher Compacts.<br />
Please refer to the Flasher Compact User Guide for details on how to do this.<br />
<br />
== Setting up the IP interface ==<br />
The Flasher Hub-12 is equipped with an Ethernet interface to communicate with the host system via your network.<br />
<br />
[[File:UM08042_FlasherHub12_Ethernet.png]]<br />
<br />
The Flasher Hub-12 also has a built-in web server that provides system status and allows system configuration.<br />
<br />
=== Connecting for the first time ===<br />
When connecting the Flasher Hub-12 to your network and powering it up for the first time, it attempts to acquire an IP address via DHCP.<br />
After the Flasher Hub-12 has finished booting (i.e. after the green LED has stopped flashing), you can connect to the Flasher Hub-12's web interface by pointing your web browser to<br />
<br />
<code><nowiki>http://flasherhub-<serial_number>/</nowiki></code><br />
<br />
Make sure to replace <code><serial_number></code> with the serial number of your Flasher Hub-12, which can be found on the housing.<br />
<br />
The "Status" page served by the Flasher Hub-12's web server contains the IP address that has been assigned to the Flasher Hub-12 by your network.<br />
<br />
[[File:UM08042_Status.png]]<br />
<br />
{{Note|1=Don't connect the Flasher Hub-12 directly to the Ethernet interface of an ATE or host computer. Only connect the Flasher Hub-12 to your network via a router, switch, etc.}}<br />
<br />
== Operating modes ==<br />
The Flasher Hub currently can be operated via web interface or via remote-controlled mode.<br />
<br />
=== Web interface ===<br />
The Flasher Hub-12 web interface is the recommended way of operating the Flasher Hub-12 for '''manual''' operation.<br />
It provides a way to use the Flasher Hub-12 in a production environment and control it manually, i.e. not using automation via scripts or similar.<br />
Using the extensive but intuitive graphical user interface of Flasher Hub-12's web server, programming operations and more can be configured, monitored and controlled with ease.<br />
<br />
The web interface is described in more detail in [[#Web server]].<br />
<br />
=== Remote-controlled mode ===<br />
The remote-controlled mode provides two ways to integrate the Flasher Hub-12 into a production environment.<br />
Via the ASCII terminal interface, the Flasher Hub-12 provides detailed status information that can be used to verify the success of the programming sequence, optimize the production setup, and identify errors.<br />
Via the handshake interface, programming can be started and the <tt>OK</tt> and <tt>Busy</tt> statuses can be checked.<br />
These two methods of operation were mainly designed for '''automation''' purposes.<br />
<br />
In order to use a Flasher Hub-12 based system in remote-controlled mode, the files required for programming the target need to be stored on the connected Flasher Compact modules first.<br />
This is described in [[#Setting up a project for the Flasher Hub-12]].<br />
<br />
The remote-controlled mode is described in more detail in [[#Remote control]].<br />
<br />
== LED status indicators ==<br />
The Flasher Hub-12 uses different LEDs as indicated in the following table.<br />
<br />
=== LED indicators ===<br />
{| class="seggertable"<br />
|-<br />
!| LED || Status || Meaning<br />
|- <br />
| POWER || green || Flasher Hub-12 is powered.<br />
|- <br />
|rowspan="2"| STATUS || green || Status is O.K.<br />
|- <br />
| orange/red || Status is not O.K. (Firmware error or at least one module failed programming)<br />
|-<br />
| Module LEDs 1-12 || green || Module is connected and powered.<br />
|}<br />
<br />
=== Flasher Compact LED indicators ===<br />
{| class="seggertable"<br />
|-<br />
!| LED || Status || Meaning<br />
|-<br />
| Ready / O.K. || GREEN<br>short flicker || Module is ready.<br />
|-<br />
| Ready / O.K. || GREEN<br>slow blinking || Flashing operation in progress:<br><br />
* Erasing (blinking at 6.25 Hz)<br />
* Programming (blinking at 1.67 Hz)<br />
* Verifying (blinking at 5 Hz)<br />
|-<br />
| Not ready / Fail || RED<br>constant || a) The module is in bootloader mode.<br><br />
b) The most recent operation has failed.<br />
|}<br />
<br />
== Storing configuration and programming data files ==<br />
The configuration and programming data required to program the target devices is stored on the connected Flasher Compact modules.<br />
Each Flasher Compact module has approximately 128MB of storage available for data and configuration files.<br />
<br />
The Flasher Compact modules can be accessed in the following ways:<br />
<br />
* via TXP/IP or USB by using J-Flash or U-Flash software<br />
* via an FTP client connected to the Flasher Hub-12's integrated FTP-server<br />
* via the File browser in the Flasher Hub-12's web interface<br />
<br />
When using J-Flash, the connected Flasher Compact modules (Module 1, Module 2, ..., Module n) can be selected via tick boxes on the "Options > Project settings > General" screen.<br />
Make sure to select the correct connection type.<br />
For TCP/IP enter the Flasher Hub-12's IP address (or use flasherhub-<serial_number>).<br />
<br />
[[File:UM08039_JFlash_ModuleSelection.png]]<br />
<br />
When selecting "File > Download config & data file to Flasher" from the J-Flash menu, the configuration and data file of the current J-Flash project will be downloaded to the selected Flasher Compact modules.<br />
<br />
[[File:UM08039_JFlash_MenuDownloadCfgData.png]]<br />
<br />
When using U-Flash, the connected Flasher Compact modules can be selected via tick boxes in the Flasher selection.<br />
<br />
When using an FTP client or the file browser in the Flasher Hub-12's web interface, the Flasher Compact modules are accessible via subfolders named "MODULE.xxx", with xxx being the index of the associated Flasher Compact, e.g. "MODULE.001" for the Flasher Compact module with index 1.<br />
<br />
[[File:UM08039_Files.png]]<br />
<br />
== UART to TCP transceiver ==<br />
{{Note|1=The UART Transceiver is not yet supported by the latest firmware version.}}<br />
<br />
The Flasher Hub-12 features an UART to TCP transceiver: Each module is accessible via a connection to a module-specific TCP port.<br />
{| class="seggertable"<br />
|-<br />
!| Module || TCP port<br />
|-<br />
| #1 || 41<br />
|-<br />
| #2 || 42<br />
|-<br />
| #3 || 43<br />
|-<br />
| #4 || 44<br />
|-<br />
| #5 || 45<br />
|-<br />
| #6 || 46<br />
|-<br />
| #7 || 47<br />
|-<br />
| #8 || 48<br />
|-<br />
| #9 || 49<br />
|-<br />
| #10 || 50<br />
|-<br />
| #11 || 51<br />
|-<br />
| #12 || 52<br />
|}<br />
<br />
If the transceiver is enabled, incoming data on pin 17 on the debug interface is sent to the TCP connection, and incoming data on the TCP connection is sent to pin 5 on the debug interface.<br />
<br />
The transceiver can be enabled for one or more modules either via the ASCII Terminal command #TERMINAL or via the web interface "UART" page.<br />
For more information, please refer to the [[#Command #TERMINAL|#TERMINAL command]] and the [[#UART page|web interface "UART" page]].<br />
<br />
{{Note|1=The transceiver cannot be enabled while the module is programming. Also programming, erasing etc. can not be started if the transceiver mode is active.}}<br />
<br />
== Log files ==<br />
The Flasher Hub-12 keeps a log file if logging is enabled via the web interface on the "Configuration > Flasher Hub" page.<br />
The log itself can be accessed on the "Log" page.<br />
<br />
[[File:UM08042_FlasherHub12_WebLog.png]]<br />
<br />
In addition, each Flasher Compact keeps its own log file.<br />
These log files are stored in the module folder of the corresponding Flasher Compact and can be downloaded via FTP or the file browser in the Flasher Hub-12's web interface.<br />
For more information on the Flasher Compact log file, please refer to the [[UM08022_Flasher|Flasher User Manual (UM08022)]].<br />
<br />
[[File:UM08039_FlasherHub_WebFlasherLog.png]]<br />
<br />
== Firmware update ==<br />
Firmware update files for both, Flasher Hub-12 as well as Flasher Compact modules are shipped with each new release of the Flasher software package.<br />
<br />
{{Note|1=It is recommended to use the most recent version of the Flasher Hub-12 firmware as newer versions may contain various improvements as well as bug fixes.}}<br />
<br />
=== Updating Flasher Hub-12 firmware ===<br />
The Flasher Hub-12 firmware can up updated by using the Flasher software or by using Flasher Hub-12's web interface.<br />
<br />
==== Using Flasher software ====<br />
<br />
[[File: FlasherConfig_FH12FWUpdate.png | thumb | Flasher Hub-12 firmware update in Flasher Configurator]]<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to a PC via USB or IP<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Flasher Configurator will now update the firmware of Flasher Hub-12<br />
<br />
<br clear="all"><br />
<br />
==== Using Flasher Hub-12 web interface ====<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting <code><nowiki>http://flasherhub-<SerialNo>/</nowiki></code> (Make sure to replace <code><SerialNo></code> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher Hub-12 firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''FlasherHub-12_V1.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Reboot Flasher Hub to apply the firmware update<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_FWUpdate.png | Web interface firmware update file upload<br />
File: FH12_WebIF_SelectFW.png | Selection of Flasher Hub-12 firmware file<br />
File: FH12_WebIF_ProcessingFW.png | Flasher Hub-12 processing a firmware update file<br />
File: FH12_WebIF_FWUpdateReboot.png | Web interface following a successful firmware update file upload<br />
</gallery><br />
<br />
=== Updating module firmware ===<br />
<br />
The firmware of modules connected to the Flasher Hub-12 can be updated as follows.<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting <code><nowiki>http://flasherhub-<SerialNo>/</nowiki></code> (Make sure to replace <code><SerialNo></code> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''Flasher_Compact_V*.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Navigate to ''Status''<br />
# In the table below ''Module Status'', select the modules to apply the firmware update to<br />
# Click ''Update firmwares''<br />
<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_ModFWUpdate.png | Web interface module firmware update file upload<br />
File: FH12_WebIF_SelectModFW.png | Selection of Flasher Hub-12 module firmware file<br />
File: FH12_WebIF_ProcessingModFW.png | Flasher Hub-12 processing a module firmware update file<br />
File: FH12_WebIF_UpdateMod.png | Web interface ''Status''<br />
File: FH12_WebIF_ApplyingModFWUpdate.png | Web interface while module firmware update is applied<br />
</gallery><br />
<br />
== Newline encoding ==<br />
In general, for all patch files, init files etc., the Flasher Compact modules support both newline encodings:<br />
<br />
* Windows: \r\n<br />
* Unix/Mac: \n<br />
<br />
All parser functionality etc. are written to be independent from the host operating system.<br />
<br />
= Setting up a project for the Flasher Hub-12 =<br />
In order to set up the Flasher Hub-12 for parallel programming, the connected Flasher Compact modules need to be configured once using either J-Flash or U-Flash.<br />
Both programs are part of SEGGER's Flasher software and documentation package, available for download free of cost at:<br />
<br />
<tt>https://www.segger.com/downloads/flasher/#FlasherSoftwareAndDocumentationPack</tt>.<br />
<br />
== Using J-Flash ==<br />
J-Flash is SEGGER's desktop software for production programming and it is available for Windows, macOS and Linux.<br />
It can be used to create Flasher configuration and data files for ARM-based target devices.<br />
For more information about J-Flash, please refer to the [[UM08003_JFlash|J-Flash User Manual]].<br />
<br />
In order to set up the Flasher Hub for parallel programming, the connected Flasher Compact modules need to be configured once using J-Flash.<br />
<br />
After starting J-Flash, open the appropriate J-Flash project for the target device the Flasher Compacts shall be configured for, by selecting '''File''' -> '''Open Project'''.<br />
If J-Flash does not come with an appropriate sample project for the desired hardware, a new project needs to be created by selecting '''File''' -> '''New Project'''.<br />
<br />
After the appropriate project has been opened / created, the data file which shall be programmed needs to be loaded, by selecting '''File''' -> '''Open data file...'''.<br />
Next, click on '''Options''' -> '''Project settings''' -> '''General''' and select '''Connection type''' to be '''TCP/IP'''.<br />
As the TCP/IP address, enter '''flasherhub-<serial_number>'''.<br />
You can find the serial number of your Flasher Hub on the product housing.<br />
<br />
Click '''Flasher Hub module selection''' and select the Flasher Compact module numbers you would like to configure.<br />
Then click '''OK'''.<br />
<br />
After this, J-Flash should look similar to the screenshot below.<br />
<br />
[[File:UM08039_JFlash_PrjFileDataFile.png]]<br />
<br />
Next, you can transfer the necessary files to the Flasher Compacts using '''File''' -> '''Download config & data file to Flasher'''.<br />
Check the J-Flash Log window to make sure the file transfer was successful.<br />
For further details please check the J-Flash manual.<br />
<br />
{{Note|1=If J-Flash has trouble connecting to '''flasherhub-<serial_number>''', use the actual IP address of your Flasher Hub. You can find the Flasher Hub-12's IP address by using the Flasher Configurator:<br />
[[File:FlasherControl_IPs.png|757px]]}}<br />
<br />
From now on, the Flasher Hub and the attached Flasher Compacts can be used in stand-alone mode (without host PC interaction) for stand-alone programming.<br />
<br />
As an alternative to the process described above, you may also save the files to disk and upload them to the Flasher Compacts '''via the web interface'''.<br />
To do this, follow the instructions below:<br />
# Save the configuration (project) file to disk by selecting '''File''' -> '''Save Flasher Config File'''<br />
# Save the data (program data) file by selecting '''File''' -> '''Save Flasher Data File'''<br />
# Connect to the Flasher Hub Web interface via a browser.<br />
# Navigate to the file browser in the "Files" tab<br />
# Now the configuration file and the data file can be uploaded to the Flasher Hub module folder(s) (MODULE.xxx), i.e. to the connected Flasher Compacts.<br>Choosing the '''All modules''' folder will upload the files to all Flasher Compacts connected to the Flasher Hub.<br>Note: The file(s) can be uploaded by dragging and dropping inside the browser window.<br />
<br />
[[File:UM08039_JFlash_MenuSaveCfgData.png]]<br />
<br />
[[File:UM08039_Files.png]]<br />
<br />
A third option is to upload the configuration and data files to the Flasher Compact modules via FTP as described here: [[#FTP server]].<br />
<br />
If J-Flash also generates a .pex file (which is a device-specific flash programming algorithm that is required for certain target devices), this also needs to be uploaded to the module folder(s) for programming to be successful.<br />
Please note that it must be located in a subfolder with the same name as your project, e.g. if your project is named '''MyProject''' with the project files '''MyProject.cfg''' and '''MyProject.dat''', then the subfolder must be named '''MyProject'''.<br />
<br />
[[File:UM08039_FlasherHub_WebPrjDir.png]]<br />
<br />
[[File:UM08039_FlasherHub_WebPrjPex.png]]<br />
<br />
== Using U-Flash ==<br />
The Universal Flash Loader mode can be used to program non ARM-based targets.<br />
While configurations generated with J-Flash rely on using the debug interface of the device, configurations using U-Flash make use of device or vendor specific programming interfaces and protocols and therefore it is independent of the CPU core.<br />
<br />
A Universal Flash Loader configuration can be created using SEGGER's U-Flash, available for Windows, macOS and Linux.<br />
<br />
For details, please see the [https://www.segger.com/downloads/flasher/UM08037.pdf U-Flash User Manual (UM08037)] as well as the [[UM08022_Flasher|Flasher User Manual (UM08022)]].<br />
<br />
[[File:UM08039_UniversalFlashLoader.png]]<br />
<br />
= Serial number handling =<br />
== Serial number programming ==<br />
A Flasher Hub-12 based system supports programming of serial numbers.<br />
In order to use the serial number programming feature, the J-Flash project to be used as well as some files on the Flasher Compacts connected to the Flasher Hub-12 (depending on the configuration) need to be configured first.<br />
<br />
In general, a Flasher Hub-12 based system supports two ways of programming a serial number into the target:<br />
<br />
#<br />
#* Programming continuous serial numbers.<br />
#* The serial number is 1-4 bytes in size.<br />
#* The start serial number, increment, serial number size, and address are configured in the J-Flash project.<br />
#<br />
#* Programming custom serial numbers from a serial number list file.<br />
#* The start line within the serial number list file to get the next serial number bytes, line increment, serial number size, and address is configured in the J-Flash project.<br />
#* The serial number list file needs to be specified and created by the user.<br />
<br />
=== Serial number settings ===<br />
In order to enable the programming of serial numbers in stand-alone mode, the J-Flash project has to be configured to enable programming a serial number at a specific address.<br />
This is done by enabling the '''Program serial number''' option as shown in the screenshot and table below:<br />
<br />
[[File:UM08039_SN_Sample_JFlashSettings.png]]<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Setting || Meaning<br />
|-<br />
| <tt>Address</tt> || The address the serial number should be programmed at.<br />
|-<br />
| <tt>Length</tt> ||<br />
The length of the serial number (in bytes) that should be programmed.<br />
* If no serial number list file is given, J-Flash allows to use a 1-4 byte serial number. In case 8 is selected as length, the serial number and its complement are programmed at the given address.<br />
* In case a serial number list file is given, the Flasher Hub-12 will take the serial number bytes from the list file. If a serial number in the list file does not define all bytes of '''Length''', the remaining bytes are filled with 0s. No complements etc. are added to the serial number.<br />
|-<br />
| <tt>Next SN</tt> ||<br />
* In case no serial number list file is given, '''Next SN''' is the next serial number which should be programmed. The serial number is always stored in flash memory in little-endian format.<br />
* In case a serial number list file is given, '''Next SN''' describes the line of the serial number list file where to read the next serial number bytes from. The Flasher Hub-12 starts counting at line 0, so in order to start serial number programming with the first line of the <tt>SNList.txt</tt>, '''Next SN''' needs to be set to 0.<br />
|-<br />
| <tt>Increment</tt> || Specifies by how much '''Next SN''' is incremented.<br />
|}<br />
<br />
=== Serial number file ===<br />
When selecting '''File -> Download serial number file to Flasher''', J-Flash will create a serial number file named as <tt><JFlashProjectName>_Serial.txt</tt>.<br />
This file is downloaded as <tt>Serial.txt</tt> on the selected Flasher Compacts connected to the Flasher Hub-12.<br />
The file is generated based on the serial number settings in the J-Flash project and will contain the value defined by the '''Next SN''' option.<br />
The serial number file can also be manually edited by the user since the serial number is written ASCII encoded in the <tt>Serial.txt</tt> file.<br />
<br />
=== Continuous Serial numbers ===<br />
Projects for the Flasher Hub-12 can be configured to use the serial number feature (see [[#Serial number settings]]).<br />
The serial number is stored in the Serial.txt file on each Flasher Compact module.<br />
Therefore, the serial number is also power-cycle safe.<br />
If the file is missing at start up time, a Serial.txt with serial number 0 will be created.<br />
The connected Flasher Compacts will use the current serial number found in Serial.txt for the programmed device.<br />
Then the increment is added to the serial number and the result is stored in the Serial.txt which is used for the next programming sequence.<br />
<br />
To avoid duplication of serial numbers with the Flasher Hub-12 using more than one Flasher Compact module, there are two options:<br />
* Use an increment of the number of connected Flasher Compact modules; e.g. if you have 5 Flasher Compacts connected, use an increment of 5 as well as 5 different Serial.txt files at the beginning of production.<br />
* Use different serial number areas; e.g. if you have 5 Flasher Compacts connected, use an increment of 1 as well as 5 different Serial.txt files at the beginning of production. For the first module, use the range from 1 to 1000, for the second 1001 to 2000, and so on.<br />
<br />
The Serial.txt file contains the value '''Next SN''' in ASCII notation, e.g. <code>1234</code> if the next serial number is 1234.<br />
<br />
{{Note|1=The serial number in Serial.txt will also be incremented if serial number programming is disabled, to make sure that for the Flasher Hub-12 log file there is a reference for which programming cycle passed and which did not. As long as serial number programming has not been enabled in the J-Flash project, the Flasher Hub-12 does not merge any serial number data into the image data to be programmed.}}<br />
<br />
=== Serial number list file ===<br />
In order to program custom serial numbers which cannot be covered by the standard serial number scheme provided by J-Flash (e.g. when programming non-continuous serial numbers or having gaps between the serial numbers), a so called serial number list file needs to be created by the user.<br />
<br />
When selecting '''File -> Download serial number file to Flasher''', J-Flash will look for a serial number list file named as <tt><JFlashProjectName>_SNList.txt</tt> in the directory where the J-Flash project is located.<br />
This file is downloaded as <tt>SNList.txt</tt> on the selected Flasher Compacts connected to the Flasher Hub-12. The serial number list file needs to be created manually by the user and has the following syntax:<br />
* One serial number per line<br />
* Each byte of the serial number is described by two hexadecimal digits.<br />
<br />
'''Example'''<br><br />
An 8-byte serial number should be programmed at address <tt>0x08000000</tt>.<br />
<br />
It should be programmed as follows in the memory:<br />
<br />
0x08000000: 0x01 0x02 0x03 0x04 0x55 0x66 0x77 0x88<br />
<br />
The associated serial number list in the file should look as follows:<br />
<br />
[[File:UM08039_SN_SNList.png]]<br />
<br />
The number of bytes to read per line is configured via the <tt>Len</tt> option in J-Flash.<br />
For more information, please refer to [[#Serial number settings]].<br />
<br />
Which line Flasher will read at the next programming cycle is configured via the <tt>Next SN</tt> option in J-Flash.<br />
For more information, please refer to [[#Serial number settings]].<br />
In this case, <tt>Next SN</tt> needs to be set to 0, since programming should start with the serial number bytes defined in the first line of the file.<br />
<br />
{{Note|1=If the number of bytes specified in a line of the serial number list file is '''less''' than the serial number length defined in the J-Flash project, the remaining bytes are '''filled with 0s''' by the Flasher Hub-12.}}<br />
{{Note|1=If the number of bytes specified in a line of the serial number list file is '''greater''' than the serial number length defined in the J-Flash project, the remaining bytes will be '''ignored''' by the Flasher Hub-12.}}<br />
<br />
=== Programming process ===<br />
The Flasher Compact modules connected to the Flasher Hub-12 will increment the serial number in Serial.txt by the value defined in <tt>Increment</tt> after each successful programming cycle.<br />
<br />
For each programming cycle, the Flasher.log file on the connected Flasher Compact modules is updated and contains the value from Serial.txt that has been used for the programming cycle.<br />
<br />
{{Note|1=The serial number in Serial.txt will also be incremented if serial number programming is disabled, to make sure that for the Flasher Compact logfile there is a reference for which programming cycle passed and which did not. As long as serial number programming has not been enabled in the J-Flash project, the Flasher Compacts do not merge any serial number data into the image data to be programmed.}}<br />
<br />
=== Example setup ===<br />
Below, a small example is given on how to set up the Flasher Compacts for serial number programming.<br />
In the following example, 4-byte serial numbers starting at 1234567 (<tt>0x12D687</tt>) shall be programmed at address <tt>0x08001000</tt>.<br />
<br />
'''Defining serial number address, length and start value'''<br><br />
In the J-Flash project, the following needs to be defined:<br />
<br />
* <tt>Address</tt> is <tt>0x08001000</tt><br />
* <tt>Next SN</tt> is 1234567<br />
* <tt>Increment</tt> is 1<br />
* <tt>Len</tt> is 4 (bytes)<br />
<br />
[[File:UM08039_SN_Sample_JFlashSettings.png]]<br />
<br />
'''Downloading configuration, data, and serial number to the Flasher Compacts'''<br><br />
After setting up the rest of the configuration (Target interface etc.) and selecting an appropriate data file, the configuration,<br />
data, and serial number file needs to be transferred to the associated Flasher Compact via the Flasher Hub-12, either using J-Flash, or using an FTP client, or using the file browser in the Flasher Hub-12's web interface.<br />
<br />
== Limiting the number of programming cycles ==<br />
The Flasher Hub-12 provides a mechanism to limit the number of programming cycles that can be performed in stand-alone mode with the configuration that is stored on the Flasher Compacts.<br />
To make use of this feature, a file called <tt>Cntdown.txt</tt> needs to be placed onto the Flasher Compacts module folder.<br />
This file simply contains a decimal number (32-bit unsigned integer) that describes how many programming cycles can be performed with the current setup.<br />
<br />
[[File:CntdownTxtContent.PNG]]<br />
<br />
This feature especially makes sense when used in combination with authorized flashing. For more information about authorized flashing, please refer to the [[UM08022_Flasher|Flasher User Manual]].<br />
<br />
{{Note|1=The number in <tt>Cntdown.txt</tt> is only updated on a successful programming cycle. Programming cycles that failed do not affect <tt>Cntdown.txt</tt>.}}<br />
<br />
=== Modified fail/error LED indicator behavior ===<br />
In case a <tt>Cntdown.txt</tt> is found at boot time, the fail/error LED of the Flasher Compact behaves differently.<br />
If the number of programming cycles left is 10 or below, the following will happen:<br />
<br />
* The red error/fail LED will be lit for 1 second<br />
* After this, it will blink/toggle x times @ 5 Hz, indicating the number of programming cycles left (blinking 5 times for 5 cycles left, etc.)<br />
<br />
= Patch data file =<br />
== Patch file support ==<br />
The Flasher Compact modules connected to the Flasher Hub-12 support patch files, which allows to patch the content of the data to be programmed.<br />
Before starting the programming process in stand-alone mode, the Flasher Compact module will look for a file named <tt>Patches.txt</tt> being present.<br />
This file includes the patches.<br />
If this file is present, the number in <tt>Serial.txt</tt> describes the line number of the <tt>Patches.txt</tt> file that will be used for the current cycle (line counting starts at 0).<br />
<br />
Each line in <tt>Patches.txt</tt> can hold up to 4 patches, where each patch can be up to 32 bytes in length.<br />
<br />
'''Syntax'''<br><br />
Each line begins with <code><NumPatches></code> followed by each patch <code><Addr>,<NumBytes>:<nowiki><Data></nowiki></code> in sequence and separated by commas.<br />
So the syntax for <tt><NumPatches></tt> = 4 would be as follows:<br />
<br />
<NumPatches>,<Addr>,<NumBytes>:<nowiki><Data></nowiki>,<Addr>,<NumBytes>:<nowiki><Data></nowiki>,<Addr>,<NumBytes>:<nowiki><Data></nowiki>,<Addr>,<NumBytes>:<nowiki><Data></nowiki><br />
<br />
Find below a table which describes each parameter.<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Parameter || Description<br />
|-<br />
| <tt><NumPatches></tt> || Describes the number of patches in this patch line. Max. value is 4.<br />
|-<br />
| <tt><Addr></tt> || Describes the address to be patched. Value is expected in hex.<br />
|-<br />
| <tt><NumBytes></tt> || Number of bytes for the current patch. Max. value is 20h (32 in decimal). Value is expected in hex.<br />
|-<br />
| <tt><nowiki><Data></nowiki></tt> || Describes the data to be patched. <tt><nowiki><Data></nowiki></tt> is always expected as 2 hexadecimal characters per byte.<br />
|}<br />
<br />
<br> <!-- else, there's no space between the table and the notes --><br />
<br />
{{Note|1=All values are expected in hexadecimal format (hex).<br>The <tt><nowiki><Data></nowiki></tt> section is always preceded by ":", not ",".}}<br />
<br />
'''Example'''<br><br />
Please find below an example sequence which clarifies the usage of patch files.<br />
<br />
<tt>Patches.txt</tt>, which is located on the Flasher Compact(s), contains the following line:<br />
<br />
3,100025,3:AABBCC,100063,2:DDEE,100078,1:FF<br />
<br />
<tt>Serial.txt</tt> contains a "0", which forces the Flasher Compact to use line 0 from <tt>Patches.txt</tt>.<br />
<br />
After starting the programming cycle, the following data will be patched:<br />
<br />
Addr 0x100025: 3 byte 0xAA 0xBB 0xCC<br />
Addr 0x100063: 2 byte 0xDD 0xEE<br />
Addr 0x100078: 1 byte 0xFF<br />
<br />
'''Single patch via ASCII terminal'''<br><br />
Alternatively, you can start a programming cycle with patch data that is only valid for this one cycle (no need for a <tt>Patches.txt</tt> file):<br />
<br />
Send the<br />
<br />
#AUTO PATCH <module> <NumPatches>,<Addr>,<NumBytes>:<nowiki><Data></nowiki><br />
<br />
command via the Flasher Hub-12 ASCII terminal interface. The parameters have the same function as described in the table above.<br />
<br />
= FTP server =<br />
== FTP server connection ==<br />
The FTP server on the Flasher Hub-12 provides easy access to the files on the connected Flasher Compact modules.<br />
The server supports a maximum of 2 simultaneous connections and works with all common FTP clients.<br />
<br />
The FTP server root directory is a virtual directory and cannot be written to.<br />
It contains a subdirectory for each module, as well as an "All Modules" and a "Logs" directory.<br />
<br />
[[File:FTPServer.png]]<br />
<br />
The FTP server allows you to upload or download the target configuration and data files.<br />
<br />
Files and folders uploaded to the "All Modules" directory automatically get copied to all connected Flasher Compacts.<br />
Note that the "All Modules" directory itself does not retain any files or folders and will always appear empty.<br />
<br />
Please also note that you may have to perform a "Refresh" operation on the Module folders before the FTP client will display the 'true' content of these folders.<br />
This is because many FTP clients tend to cache the folder contents and don't necessarily refresh the display automatically, even if the folder contents has changed.<br />
<br />
The Flasher Compacts create log files for executed operations.<br />
These files can be found in the module folders and downloaded from there.<br />
<br />
The IP setup is described here: [[#Setting up the IP interface]].<br />
<br />
=== Access data ===<br />
Anonymous access to the FTP server is limited to read-only access to the file system.<br />
<br />
For write access, special login credentials have to be used:<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Setting || Value<br />
|-<br />
| Host name || <nowiki>ftp://flasherhub-<serial_number></nowiki><br />
|-<br />
| Username || <tt>admin</tt><br />
|-<br />
| Password || <tt>1234</tt><br />
|-<br />
| Port || 21 (Default FTP port)<br />
|}<br />
<br />
<br> <!-- else, there's no space between the table and the notes --><br />
<br />
{{Note|1=The access data for read/write access cannot be modified and is intended to be used only as a convenience feature to avoid unintended modification of the Flasher's file system. It is not meant as a security feature.}}<br />
<br />
= Web server =<br />
== Web server features ==<br />
The Flasher Hub-12 comes with a built-in web server, which provides a web interface for information and network configuration.<br />
<br />
The web interface provides information about the Flasher Hub-12 server version, serial number, and configuration.<br />
The Flasher Hub-12's web interface furthermore allows monitoring and configuration of the individual modules as well as the files stored on them.<br />
<br />
The IP setup is described here: [[#Setting up the IP interface]].<br />
<br />
=== Status page ===<br />
The "Status" page is the landing page and shows some parameters and other information of the Flasher Hub-12.<br />
It also provides an overview of the connected modules.<br />
<br />
{{Note|1=In order to update the firmware of modules in this tab, the current web session needs to be in Administrator mode. For more information please refer to [[#Flasher Hub-12 web interface configuration page]].}}<br />
<br />
[[File:UM08042_Status.png]]<br />
<br />
=== Flasher Hub-12 configuration page ===<br />
The "Configuration > Flasher Hub-12" page allows uploading updates for the Flasher Hub-12 and Flasher Compacts.<br />
It also comes with options for enabling Flasher Hub-12's logging and the handshake interface.<br />
<br />
{{Note|1=In order to upload firmware updates or toggle the settings in this tab, the current web session needs to be in Administrator mode. For more information please refer to [[#Flasher Hub-12 web interface configuration page]].}}<br />
<br />
[[File:UM08043_ConfigHub.png]]<br />
<br />
=== Flasher modules configuration page ===<br />
The "Configuration > Flasher modules" page shows the serial numbers of the Flasher Compacts that are currently connected to the Flasher Hub-12, as well as each modules' assigned nickname.<br />
<br />
[[File:UM08043_ConfigModules.png]]<br />
<br />
=== Flasher Hub-12 web interface configuration page ===<br />
The "Configuration > Web interface" page allows switching between "Administrator mode" and "Operator mode" for the current web session.<br />
A web session that is in "Operator mode" cannot apply changes to the Flasher Hub-12, e.g. module nicknames cannot be changed, Flasher Hub-12 and module firmware cannot be updated, etc.<br />
<br />
In order to change the Flasher Hub-12 setup, "Administrator mode" needs to be enabled for the web session first.<br />
<br />
Furthermore, the default mode for new web sessions can be changed in this tab.<br />
<br />
For production environments where there are multiple users accessing the Flasher Hub-12, it is recommended to disable "Administrator mode" for new sessions by default so accidental setup changes are prevented.<br />
<br />
[[File:UM08043_ConfigWebIF.png]]<br />
<br />
=== Files page (File browser) ===<br />
The file browser on the "Files" page is an alternative to using an FTP client to manage the files on the connected Flasher Compacts.<br />
Users can view the contents of each module, upload files (also via drag-and-drop), delete files and folders, create new folders, and more.<br />
<br />
Just like when connecting via FTP, files uploaded to / new folders created in the "All modules" directory automatically get copied to all connected Flasher Compacts.<br />
Note that the "All modules" directory itself does not retain any files or folders and will always appear empty.<br />
<br />
The FTP server root directory is a virtual directory and cannot be written to.<br />
Enter a specific module directory or the "All modules" directory to upload files.<br />
<br />
{{Note|1=In order to upload or remove files and folders in this tab, the current web session needs to be in Administrator mode. For more information please refer to [[#Flasher Hub-12 web interface configuration page]].}}<br />
<br />
[[File:UM08043_Files.png]]<br />
<br />
=== Programming page ===<br />
The "Programming" page allows users to start and monitor ongoing programming operations using the web interface.<br />
Users can select which modules should start programming as well as the project file to use.<br />
<br />
[[File:UM08039_Programming.png]]<br />
<br />
=== UART page ===<br />
{{Note|1=The UART Transceiver is not yet supported by the latest firmware version.}}<br />
<br />
The "UART" page allows users to enable / disable and monitor the UART to TCP transceiver for each module.<br />
<br />
[[File:UM08039_UART.png]]<br />
<br />
=== Log page ===<br />
The "Log" page shows the log kept by the Flasher Hub-12.<br />
<br />
[[File:UM08042_FlasherHub12_WebLog.png]]<br />
<br />
= Module terminal server=<br />
<br />
== Introduction ==<br />
<br />
[[File: FH12_WebIF_ModTermSrv.png | 600px | thumb | Module terminal server in the web interface]]<br />
<br />
Flasher modules may output informative messages on their terminal during operations like erasing, programming or verifying.<br><br />
Such messages are output for U-Flash projects that are configured for "verbose output".<br><br />
In order to receive terminal messages from a Flasher module that is connected to Flasher Hub, the module terminal server can be used.<br />
<br />
When enabled, the module terminal server reads terminal messages from all connected modules.<br><br />
The output can be inspected in the web interface "Terminal" page.<br><br />
Additionally, the terminal output for a module can be received by a TCP/IP connection.<br />
<br />
<br clear="all"><br />
== Setting up the module terminal server ==<br />
[[File: FH12_WebIF_Config_FH_ModTermSrv.png | 600px | thumb | Module terminal server configuration]]<br />
<br />
The module terminal server can be configured as follows using the web server page "Configuration > Flasher Hub".<br><br />
The feature can be enabled or disabled. Furthermore, the base port for accepting TCP/IP connections can be set.<br />
<br />
<br clear="all"><br />
== Connecting to a module terminal ==<br />
For each module, a TCP/IP connection can be opened to receive the modules' terminal messages.<br />
The port number for each module is calculated using the module position and the configured module terminal server base port:<br />
BasePort + ModulePosition = ModuleTerminalPort<br />
<br />
For a base port of 1000, the following module terminal ports result:<br />
{| class="wikitable"<br />
|-<br />
! Module position !! Port<br />
|-<br />
| 1 || 1001<br />
|-<br />
| 2 || 1002<br />
|-<br />
| 3 || 1003<br />
|-<br />
| 4 || 1004<br />
|-<br />
| 5 || 1005<br />
|-<br />
| [...]<br />
|}<br />
<br />
A TCP/IP client receives a modules' terminal messages by connecting to Flasher Hub's IP address and the desired port number.<br><br />
The connection details are shown on the web server "Terminal" page:<br><br />
[[File: FH12_WebIF_ModTermSrv_ConnInfo.png]]<br />
<br />
An example configuration to connect to the terminal of module #1 using PuTTY looks as follows:<br><br />
[[File: FH12_ModTermSrv_PuTTY_Config.png]]<br />
<br />
{{Note|1=The terminal messages are sent as raw TCP/IP data.<br>A client utility may need to be configured accordingly.}}<br />
<br />
<br />
After opening the connection and triggering an operation on the module, the connection receives terminal messages:<br><br />
[[File: FH12_ModTermSrv_PuTTY_Conn.png]]<br />
<br />
= Remote control =<br />
The integrated ASCII terminal interface is the primary way to remotely control the Flasher Hub-12 operation.<br />
Alternatively, the Flasher Hub-12 can be controlled via the handshake interface.<br />
<br />
== ASCII terminal interface ==<br />
=== Introduction ===<br />
The Flasher Hub-12 can be driven by any application or just a simple terminal using ASCII commands.<br />
<br />
Every known command is acknowledged by the Flasher Hub-12 and then executed.<br />
After command execution, the Flasher Hub-12 sends an ASCII reply message.<br />
<br />
{{Note|1=There are situations where the execution of a known command is rejected with #NACK:ERRxxx if the Flasher Hub-12 is currently busy and the received command is not allowed to be sent while the Flasher Hub-12 is busy.}}<br />
<br />
=== Setting up an ASCII terminal connection ===<br />
The Flasher Hub-12 supports multiple interfaces to connect to the Flasher Hub-12 and access its ASCII terminal.<br />
The following table lists all supported interfaces and also links to a description explaining how to use the interface.<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Interface || Usage<br />
|-<br />
| Telnet || [[UM08022_Flasher#Settings_for_ASCII_interface_via_Telnet]]<br />
|-<br />
| UART (RS-232) || [[UM08022_Flasher#Settings_for_ASCII_interface_via_RS232]]<br />
|-<br />
| USB (FlasherControl.exe) || [[FlasherControl]]<br />
|}<br />
<br />
=== General command and reply message format ===<br />
* Each ASCII command has to start with the start delimiter ''#''.<br />
* Each ASCII command has to end with simple carriage return ('\r', ASCII code 13).<br />
* Commands can be sent upper or lower case.<br />
<br />
=== General usage ===<br />
Reply messages must be considered in each case.<br />
In general, a new command must not be sent before a reply for the last one has been received.<br />
At least the "#ACK" message needs to be received by the controlling application before sending a new command for a flash module not yet executing a command.<br />
<br />
For the Flasher Hub-12, all commands triggering a flash programming function (<tt>#AUTO, #CANCEL, #ERASE, #PROGRAM, #VERIFY</tt>) may be used for other modules, before the current operation has been finished.<br />
Please note that in this case the overall finish indicator "#DONE" will be sent when all commands have been executed.<br />
<br />
When a flash programming function has finished, the debug logic of the MCU is disabled (powered down) and the target interface of the module is switched off (tri-stated).<br />
<br />
Some commands, e.g. <code>#AUTO</code> require the modules to be specified.<br />
<br />
#AUTO all|*|(<module>[,<module>]...)<br />
<br />
* <tt>all</tt> will execute the command using all modules which can be detected.<br />
* <tt>*</tt> will execute the command using all modules selected by the latest executed <tt>selmodule</tt> command.<br />
* Alternatively, the modules can be specified in a comma separated list.<br />
<br />
=== Commands ===<br />
The table below provides an overview about the commands which are supported by the current version of the Flasher Hub-12 firmware.<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Commands to the Flasher Hub-12<br />
|-<br />
| <tt><nowiki>#AUTO all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#AUTO NOPATCH all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#AUTO PATCH all|*|(<module>[,<module>]...) <number of patches>,<address>,<number of patched bytes>:<data bytes></nowiki></tt><br />
|-<br />
| <tt><nowiki>#BAUDRATE <baudrate></nowiki></tt><br />
|-<br />
| <tt><nowiki>#CANCEL all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#ERASE all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#FFORMAT all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#FWVERSION</nowiki></tt><br />
|-<br />
| <tt><nowiki>#FWVERSIONMOD all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#IPCONFIG</nowiki></tt><br />
|-<br />
| <tt><nowiki>#POWERON all|*|(<module>[,<module>]...), <power source>,<discharge mode></nowiki></tt><br />
|-<br />
| <tt><nowiki>#POWEROFF all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#PROGRAM all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#PROJECT all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#PROTVER</nowiki></tt><br />
|-<br />
| <tt><nowiki>#RESETIPCONFIG</nowiki></tt><br />
|-<br />
| <tt><nowiki>#RESULT all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#RTTOFF all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#RTTON all|*|(<module>[,<module>]...) <RTT channel>,<RTT control block addr>,<number down buffers>,<number up buffers></nowiki></tt><br />
|-<br />
| <tt><nowiki>#SELECT all|*|(<module>[,<module>]...) <project></nowiki></tt><br />
|-<br />
| <tt><nowiki>#SELMODULE all|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#SERIAL</nowiki></tt><br />
|-<br />
| <tt><nowiki>#SERIALMOD all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#SETVTREF all|*|(<module>[,<module>]...) <voltage></nowiki></tt><br />
|-<br />
| <tt><nowiki>#START all|*|(<module>[,<module>]...)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#STATUS</nowiki></tt><br />
|-<br />
| <tt><nowiki>#TERMINAL all|*|(<module>[,<module>]...) off|(<baudrate>,<data bits>,<parity>,<stop bits>)</nowiki></tt><br />
|-<br />
| <tt><nowiki>#VERIFY all|*|(<module>[,<module>]...)</nowiki></tt><br />
|}<br />
<br />
{| class="seggertable"<br />
!| Replies from the Flasher Hub-12<br />
|-<br />
| <tt>#ACK</tt><br />
|-<br />
| <tt>#NACK</tt><br />
|-<br />
| <tt>#OK</tt><br />
|-<br />
| <tt>#OK:<num bytes>:<nowiki><data></nowiki></tt><br />
|-<br />
| <tt>#OK:<nowiki><data></nowiki></tt><br />
|-<br />
| <tt>#OK:<module>:<nowiki><data></nowiki></tt><br />
|-<br />
| <tt>#RESULT:<module>:</tt><br />
|-<br />
| <tt>#DONE</tt><br />
|-<br />
| <tt>#ERRxxx</tt><br />
|}<br />
<br />
==== Command #AUTO ====<br />
----<br />
The <tt>#AUTO</tt> command behaves exactly like pushing the programming button on a connected Flasher Compact.<br />
<br />
Usually, the following command sequence will be performed when receiving the <tt>#AUTO</tt> command:<br />
<br />
The selected modules...<br />
* erase the targets (if not blank)<br />
* program the targets<br />
* verify the targets<br />
<br />
Depending on the tasks chosen in J-Flash or U-Flash, this sequence can differ from the one shown above.<br />
<br />
===== Syntax =====<br />
#AUTO all|*|(<module>[,<module>]...)<br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || Programming done successfully.<br />
|-<br />
| <tt>#ERRxxx</tt> || Error occurred during operation. <tt>xxx</tt> represents the error code, which may be followed by an additional error text.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#AUTO 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)</tt><br />
|}<br />
<br />
==== Command #AUTO NOPATCH ====<br />
----<br />
The <tt>#AUTO NOPATCH</tt> command allows to ignore an existing patch file for the programming.<br />
<br />
This command exists because the default behavior of the <tt>#auto</tt> command is such that an existing patch file (<tt>patch.txt</tt> in the module folder) is applied to a data if the <tt>#auto</tt> command is executed.<br />
<br />
For further information about the usage of the <tt>#AUTO PATCH</tt> command, please refer to [[#Patch file support]].<br />
<br />
===== Syntax =====<br />
#AUTO NOPATCH all|*|(<module>[,<module>]...)<br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || No error occurred.<br />
|-<br />
| <tt>#ERRxxx</tt> || Error occurred during operation. <tt>xxx</tt> represents the error code, which may be followed by an additional error text.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#AUTO NOPATCH 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)</tt><br />
|}<br />
<br />
==== Command #AUTO PATCH ====<br />
----<br />
The <tt>#AUTO PATCH</tt> command allows patching of the content of the data to be programmed.<br />
<br />
For further information about the usage of the <tt>#AUTO PATCH</tt> command please refer to [[#Patch file support]].<br />
<br />
===== Syntax =====<br />
#AUTO PATCH all|*|(<module>[,<module>]...) <number of patches>,<address>,<number of patched bytes>:<data bytes><br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || No error occurred.<br />
|-<br />
| <tt>#ERRxxx</tt> || Error occurred during operation. <tt>xxx</tt> represents the error code, which may be followed by an additional error text.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#AUTO PATCH 1 1,0,8:0011223344556677</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)</tt><br />
|}<br />
<br />
==== Command #BAUDRATE ====<br />
----<br />
This command can be sent in order to change the baud rate of the RS-232 interface used by the ASCII terminal.<br />
<br />
===== Syntax =====<br />
#BAUDRATE <baudrate><br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || No error occurred.<br />
|-<br />
| <tt>#ERR255: Invalid parameters</tt> || The baud rate parameter is invalid, e.g. contains characters that cannot be parsed.<br />
|-<br />
| <tt>#ERR255: Invalid parameters</tt> || The selected baud rate is not supported.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#BAUDRATE 115200</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#OK</tt><br />
|}<br />
<br />
==== Command #CANCEL ====<br />
----<br />
This command can be sent to abort a running operation.<br />
It may take a while until the current operation is actually canceled.<br />
<br />
===== Syntax =====<br />
#CANCEL all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#AUTO 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| <tt>#CANCEL 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:ERR255:Error while flashing</tt><br />
|}<br />
<br />
==== Command #ERASE ====<br />
----<br />
This command can be sent to erase all selected target flash sectors.<br />
<br />
===== Syntax =====<br />
#ERASE all|*|(<module>[,<module>]...)<br />
<br />
===== Results =====<br />
{| class="seggertable"<br />
|-<br />
!| Result || Meaning<br />
|-<br />
| <tt>#OK</tt> || Erase done successfully.<br />
|-<br />
| <tt>#ERRxxx: TEXT</tt> || Error message with text.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#ERASE 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 0.362s, Erase 0.252s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #FFORMAT ====<br />
----<br />
This command formats the file system on the specified module(s).<br />
<br />
===== Syntax =====<br />
#FFORMAT all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#FFORMAT 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #FWVERSION ====<br />
----<br />
This command returns the firmware version of the Flasher Hub-12.<br />
<br />
===== Syntax =====<br />
#FWVERSION<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#FWVERSION</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#OK:Flasher Hub-12 V1 compiled Sep 20 2023 15:55:39</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #FWVERSIONMOD ====<br />
----<br />
This command returns the firmware version of one or more modules connected to the Flasher Hub-12.<br />
<br />
===== Syntax =====<br />
#FWVERSIONMOD all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#FWVERSIONMOD 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#OK:1:J-Link / Flasher Compact V5 compiled Mar 17 2021 11:50:31</tt><br />
|-<br />
| || <tt>#OK:2:J-Link / Flasher Compact V5 compiled Mar 17 2021 11:50:31</tt><br />
|-<br />
| || <tt>#OK:3:J-Link / Flasher Compact V5 compiled Mar 17 2021 11:50:31</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #IPCONFIG ====<br />
----<br />
This command returns the current IP configuration.<br />
<br />
===== Syntax =====<br />
#IPCONFIG<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#IPCONFIG</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:IP address:192.168.1.111</tt><br />
|-<br />
| || <tt>#RESULT:subnet mask:255.255.0.0</tt><br />
|-<br />
| || <tt>#RESULT:Gateway:192.168.1.1</tt><br />
|-<br />
| || <tt>#RESULT:IP mode:Automatically assigned (DHCP)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
IP mode can be "<tt>Automatically assigned (DHCP)</tt>" or "<tt>User assigned</tt>".<br />
<br />
==== Command #POWERON ====<br />
----<br />
This command can be used to turn ON the target power (5V on pin 19 of the attached Flasher Compacts) without any erase, program or verify action.<br />
<br />
===== Syntax =====<br />
#POWERON all|*|(<module>[,<module>]...), <power source>,<discharge mode><br />
<br />
===== Parameters =====<br />
{| class="seggertable"<br />
|-<br />
!| Parameter || Meaning<br />
|-<br />
| power source || 0 = internal power<br />
|-<br />
| discharge mode || 0 = no discharge<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#POWERON 1,2,3 0,0</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|}<br />
<br />
==== Command #POWEROFF ====<br />
----<br />
This command can be used to turn OFF the target power (5V on pin 19 of the attached Flasher Compacts) without any erase, program or verify action.<br />
<br />
===== Syntax =====<br />
#POWEROFF all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#POWEROFF 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|}<br />
<br />
==== Command #PROGRAM ====<br />
----<br />
This command can be used instead of <tt>#AUTO</tt> to program a target without erasing the target before programming and without performing a final verification.<br />
<br />
===== Syntax =====<br />
#PROGRAM all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#PROGRAM 1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 9.963s, Prog 9.183s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #PROJECT ====<br />
----<br />
Returns the selected projects from the specified module numbers.<br />
<br />
===== Syntax =====<br />
#PROJECT all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#PROJECT 1,2</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK:FLASHER.UNI</tt><br />
|-<br />
| || <tt>#RESULT:2:OK:PROJECT.CFG</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #PROTVER ====<br />
----<br />
This command can be used to check the version of the ASCII command protocol in use.<br />
<br />
===== Syntax =====<br />
#PROTVER<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#PROTVER</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#OK:2.02b</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #RESETIPCONFIG ====<br />
----<br />
Reset the IP configuration to DHCP.<br />
<br />
===== Syntax =====<br />
#RESETIPCONFIG<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#RESETIPCONFIG</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:IP configuration was reset successfully.</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #RESULT ====<br />
----<br />
This command can be sent any time, even during other command execution.<br />
The Flasher Hub-12 responds with the result of the previously executed command.<br />
<br />
===== Syntax =====<br />
#RESULT all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#RESULT 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK ((Total 2.216s, Erase 0.126s, Prog 1.231s, Verify 0.144s)</tt><br />
|-<br />
| || <tt>#RESULT:2:OK ((Total 2.216s, Erase 0.126s, Prog 1.231s, Verify 0.144s)</tt><br />
|-<br />
| || <tt>#RESULT:3:OK ((Total 2.216s, Erase 0.126s, Prog 1.231s, Verify 0.144s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #RTTOFF ====<br />
----<br />
This command turns off the RTT connection for the given module(s).<br />
<br />
===== Syntax =====<br />
#RTTOFF all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#RTTOFF 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #RTTON ====<br />
----<br />
This command turns on the RTT connection for the given module(s).<br />
<br />
===== Syntax =====<br />
#RTTON all|*|(<module>[,<module>]...) <RTT channel>,<RTT control block addr>,<number down buffers>,<number up buffers><br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#RTTON 1,2,3 0,0x20001000,3,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #SELECT ====<br />
----<br />
The <tt>#SELECT</tt> command is used to select a specific configuration and data file pair to be used by the connected Flasher Compact modules to program the target.<br />
<br />
===== Syntax =====<br />
#SELECT all|*|(<module>[,<module>]...) <project><br />
<br />
===== Parameters =====<br />
{| class="seggertable"<br />
|-<br />
!| Parameter || Meaning<br />
|-<br />
| project || The <tt>[Project Name]</tt> specifies the name of file pair without extensions (.CFG and .DAT) on the Flasher Compact modules to be selected. The Flasher Compacts save the selected configuration and data file in the FLASHER.INI file. Therefore, this selection is remembered even after power-cycling the Flasher Compacts.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#SELECT 1,2,3 emPower</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK</tt><br />
|-<br />
| || <tt>#RESULT:2:OK</tt><br />
|-<br />
| || <tt>#RESULT:3:OK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #SELMODULE ====<br />
----<br />
This command is used to select one or more modules in a Flasher Hub-12 system.<br />
Following commands using an asterisk to specify the modules will use the modules selected by this command.<br />
<br />
===== Syntax =====<br />
#SELMODULE all|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#SELMODULE 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#SELECTED:1,2,3</tt><br />
|}<br />
<br />
==== Command #SERIAL ====<br />
----<br />
The <tt>#SERIAL</tt> command is used to query the serial number of the Flasher Hub-12.<br />
<br />
===== Syntax =====<br />
#SERIAL<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#serial</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1021000001</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #SERIALMOD ====<br />
----<br />
The <tt>#SERIALMOD</tt> command is used query the serial numbers of the connected Flasher Compact modules.<br />
<br />
===== Syntax =====<br />
#SERIALMOD all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#serialmod 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:1015000015</tt><br />
|-<br />
| || <tt>#RESULT:2:1015000016</tt><br />
|-<br />
| || <tt>#RESULT:3:1015000017</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #SETVTREF ====<br />
----<br />
This command can be used to set a fixed voltage for I/O pins of the target interface.<br />
<br />
===== Syntax =====<br />
#SETVTREF all|*|(<module>[,<module>]...) <voltage><br />
<br />
===== Parameters =====<br />
{| class="seggertable"<br />
|-<br />
!| Parameter || Meaning<br />
|-<br />
| voltage || The IO voltage level for the target interface in mV.<br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#SETVTREF 1,2,3 3300</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #START ====<br />
----<br />
This command can be sent to start the application using the method configured in the J-Flash project.<br />
<br />
===== Syntax =====<br />
#START all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#START 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 0.083s)</tt><br />
|-<br />
| || <tt>#RESULT:2:OK (Total 0.082s)</tt><br />
|-<br />
| || <tt>#RESULT:3:OK (Total 0.084s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #STATUS ====<br />
----<br />
This command can be sent any time, even during other command execution.<br />
The Flasher Hub-12 responds with its current state.<br />
All defined state messages are described under [[#Replies from the Flasher Hub-12]].<br />
<br />
===== Syntax =====<br />
#STATUS<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#STATUS</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#STATUS:READY</tt><br />
|}<br />
<br />
==== Command #TERMINAL ====<br />
----<br />
This command enables/disables the UART transceiver for the given module(s).<br />
For more information, please refer to the [[#UART to TCP transceiver]].<br />
<br />
===== Syntax =====<br />
#TERMINAL all|*|(<module>[,<module>]...) off|(<baudrate>,<data bits>,<parity>,<stop bits>)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#TERMINAL 1,2,3 9600,8,N,1</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#TERMINAL 1,2,3 off</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
==== Command #VERIFY ====<br />
----<br />
This command can be used to verify the target flash content against the data stored in the Flasher Compact module.<br />
<br />
===== Syntax =====<br />
#VERIFY all|*|(<module>[,<module>]...)<br />
<br />
===== Example sequence =====<br />
{| class="seggertable"<br />
|-<br />
!| Command || Reply<br />
|-<br />
| <tt>#VERIFY 1,2,3</tt> ||<br />
|-<br />
| || <tt>#ACK</tt><br />
|-<br />
| || <tt>#RESULT:1:OK (Total 0.206s, Verify 0.129s)</tt><br />
|-<br />
| || <tt>#RESULT:2:OK (Total 0.210s, Verify 0.131s)</tt><br />
|-<br />
| || <tt>#RESULT:3:OK (Total 0.207s, Verify 0.128s)</tt><br />
|-<br />
| || <tt>#DONE</tt><br />
|}<br />
<br />
=== Replies from the Flasher Hub-12 ===<br />
The reply messages from the Flasher Hub-12 follow the same data format as commands.<br />
Any reply message starts with ASCII start delimiter #, ends with simple carriage return (ASCII code 13), and is sent in uppercase.<br />
In contrast to commands, replies can be followed by a descriptive message, which provides more detailed information about the reply.<br />
This description is sent in mixed case.<br />
The <tt>#OK</tt> reply, for example, is such a reply.<br />
It is followed by a string containing information about the performance time needed for the operations:<br />
<br />
#OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)<br />
<br />
The following reply messages from the Flasher Hub-12 are defined:<br />
<br />
==== #ACK ====<br />
The Flasher Hub-12 replies with the <tt>#ACK</tt> message on reception of any defined command before the command itself is executed.<br />
<br />
==== #NACK ====<br />
The Flasher Hub-12 replies with <tt>#NACK</tt>, if an undefined command was received.<br />
<br />
==== #OK:<module>:<nowiki><data></nowiki> ====<br />
The Flasher Hub-12 replies with <tt>#OK</tt>, if a command other than <tt>#STATUS</tt> or <tt>#RESULT</tt> was executed and ended without any error.<br />
<tt>#OK</tt> may be followed by a module number and/or data.<br />
<br />
==== #STATUS:<status> ====<br />
The Flasher Hub-12 replies with its current state.<br />
<br />
The following status messages are currently defined:<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Message || Description<br />
|-<br />
| <tt>#STATUS:READY</tt> || Flasher Hub-12 is ready to receive a new command.<br />
|-<br />
| <tt>#STATUS:BUSY</tt> || Flasher Hub-12 is currently executing a previously received command.<br />
|}<br />
<br />
==== #RESULT:<module>:<nowiki><data></nowiki> ====<br />
The Flasher Hub-12 reports the result of an operation on a specific module.<br />
If the operation has been completed successfully, it will report the outcome with a single message of this type followed by the last result of the operation.<br />
<br />
==== #DONE ====<br />
This message is being sent once all operations are finished and all connected Flasher Compact modules are back in idle state.<br />
<br />
A typical sequence for using the Flasher Hub-12 is shown below:<br />
<br />
Flasher Hub-12 telnet-shell telnet-shell.<br />
Flasher Hub-12 V1.01a compiled May 17 2021 10:19:45<br />
#SELMODULE 1,2<br />
#ACK<br />
#SELECTED:1,2<br />
#AUTO *<br />
#ACK<br />
#RESULT:1:#ERR255:Error while flashing<br />
#RESULT:2:#OK (Total 2.653s, Erase 0.327s, Prog 1.960s, Verify 0.234s)<br />
#DONE<br />
<br />
==== #ERRxxx <nowiki><data></nowiki> ====<br />
If any command other than <tt>#STATUS</tt> or <tt>#RESULT</tt> was terminated with an error, the Flasher Hub-12 cancels the command and replies with an error message instead of the <tt>#OK</tt> message.<br />
<br />
Some error codes may be followed by a colon and an additional error text.<br />
<br />
For example:<br />
<br />
#ERR007:CANCELED.<br />
<br />
The error code numbers are described in the following table:<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Message || Description<br />
|-<br />
| <tt>#ERR007</tt> || Flasher Hub-12 received a <tt>#CANCEL</tt> command and has canceled the current operation.<br />
|-<br />
| <tt>#ERR008</tt> || Flasher Hub-12 is already busy with execution of previous command.<br />
|-<br />
| <tt>#ERR009</tt> || Failed to allocate memory.<br />
|-<br />
| <tt>#ERR010</tt> || Failed to open file.<br />
|-<br />
| <tt>#ERR011</tt> || Failed to read file.<br />
|-<br />
| <tt>#ERR012</tt> || Failed to write file.<br />
|-<br />
| <tt>#ERR013</tt> || Failed to delete file.<br />
|-<br />
| <tt>#ERR098</tt> || Failed to delete file.<br />
|-<br />
| <tt>#ERR098</tt> || Could not allocate memory for device specific algorithm.<br />
|-<br />
| <tt>#ERR099</tt> || Device specific algorithm is not yet supported by this firmware version. Please check for a firmware update.<br />
|-<br />
| <tt>#ERR101</tt> || Could not find device programming algorithm.<br />
|-<br />
| <tt>#ERR102</tt> || Could not open the data file.<br />
|-<br />
| <tt>#ERR255</tt> || Undefined error occurred. This reply is followed by an error string.<br />
|}<br />
<br />
== Handshake interface ==<br />
For a detailed description of the handshake interface, please refer to the [[UM08022_Flasher#Handshake_control| Flasher Manual (UM08022) chapter 'Handshake control']].<br />
<br />
= Support and FAQs =<br />
This chapter contains troubleshooting tips together with solutions for common problems which might occur when using the Flasher Hub-12.<br />
There are several steps you can take before contacting support.<br />
Performing these steps can solve many problems and often eliminates the need for assistance.<br />
This chapter also contains a collection of frequently asked questions (FAQs) with answers.<br />
<br />
== Contacting support ==<br />
Before contacting support, make sure you tried to solve your problem by trying your Flasher Hub-12 with a different PC and (if possible) with a different target system to see if it works there.<br />
If the device functions correctly, the USB setup on the original machine or your target hardware is the source of the problem, not the Flasher Hub-12.<br />
<br />
If you need to contact support, send the following information to<br><br />
''ticket_flasher@segger.com''<br />
<br />
* A detailed description of the problem<br />
* Flasher Hub-12 serial number<br />
* Information about your target hardware (processor, board, etc.).<br />
* <tt>FLASHER.JFLASH</tt>, <tt>FLASHER.CFG</tt>, <tt>FLASHER.DAT</tt> (if possible), <tt>FLASHER.LOG</tt>, <tt>Serial.txt</tt> file from the connected Flasher Compact. To get these files, please download them via FTP or via the Flasher Hub-12 web interface.<br />
<br />
The Flasher Hub-12 is sold directly by SEGGER.<br />
<br />
== Frequently Asked Questions ==<br />
'''Maximum target interface speed'''<br><br />
{|<br />
|-<br />
| '''Q:''' || What is the maximum target interface speed supported by Flasher Compact?<br />
|-<br />
| '''A:''' || The Flasher Compact's maximum supported target interface speed is 50MHz.<br />
|}<br />
<br />
'''Maximum download speed'''<br><br />
{|<br />
|-<br />
| '''Q:''' || What is the maximum download speed supported by Flasher Compact?<br />
|-<br />
| '''A:''' || The maximum download speed is currently about 3 Mbytes/second when downloading into RAM. The actual speed depends on various factors, such as target interface speed, clock speed, host CPU core etc.<br />
|}<br />
<br />
'''Flasher Hub-12 web interface access'''<br><br />
{|<br />
|-<br />
| '''Q:''' || How do I connect to the Flasher Hub's web interface?<br />
|-<br />
| '''A:''' || Locate the serial number of your Flasher Hub-12 on the product housing. Then point your browser to <nowiki>http://flasherhub-<serial_number>/index.htm</nowiki>.<br />
|}<br />
<br />
'''Flasher Hub-12 IP address'''<br><br />
{|<br />
|-<br />
| '''Q:''' || Where can I find the IP address assigned to my Flasher Hub-12?<br />
|-<br />
| '''A:''' || Connect to the Flasher Hub-12 web interface as described above. The Flasher Hub-12 IP address is located on the "Status" page.<br />
|}<br />
<br />
= Mechanics =<br />
If you need to mount the Flasher Hub-12 into the production environment, a drawing with the dimensions of the Flasher Hub-12 can be downloaded here:<br><br />
''https://www.segger.com/downloads/flasher#Mechanics''.<br />
<br />
= Literature and references =<br />
This chapter lists documents, which we think may be useful to gain a deeper understanding of technical details.<br />
<br />
{| class="seggertable"<br />
|-<br />
!| Reference || Title || Comments<br />
|-<br />
| [Flasher] || Flasher User Manual || [[UM08022_Flasher|Flasher User Manual (UM08022)]]<br />
|-<br />
| [J-Link] || J-Link / J-Trace User Guide || [[UM08001_J-Link_/_J-Trace_User_Guide|J-Link / J-Trace User Guide (UM08001)]]<br />
|-<br />
| [J-Flash] || J-Flash User Manual || [[UM08003_JFlash|J-Flash User Manual (UM08003)]]<br />
|}</div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_ModTermSrv_PuTTY_Config.png&diff=17707File:FH12 ModTermSrv PuTTY Config.png2024-02-08T13:29:54Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_ModTermSrv_ConnInfo.png&diff=17706File:FH12 WebIF ModTermSrv ConnInfo.png2024-02-08T13:28:01Z<p>Leon: Leon uploaded a new version of File:FH12 WebIF ModTermSrv ConnInfo.png</p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_ModTermSrv_PuTTY_Conn.png&diff=17705File:FH12 ModTermSrv PuTTY Conn.png2024-02-08T13:25:13Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_ModTermSrv_ConnInfo.png&diff=17704File:FH12 WebIF ModTermSrv ConnInfo.png2024-02-08T13:24:38Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_Config_FH_ModTermSrv.png&diff=17703File:FH12 WebIF Config FH ModTermSrv.png2024-02-08T13:12:36Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_ModTermSrv.png&diff=17702File:FH12 WebIF ModTermSrv.png2024-02-08T12:51:46Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub&diff=17628Flasher Hub2024-02-05T08:49:13Z<p>Leon: /* How to enable fail-safe mode */</p>
<hr />
<div>This is the user documentation for owners of a SEGGER Flasher Hub.<br />
<br />
[[File: FlasherHubPhoto.png | thumb | SEGGER Flasher Hub]]<br />
<br />
__TOC__<br />
<br />
= How Flasher Hub works =<br />
<br />
[[File: FlasherHubSetup.svg | thumb | Example setup for Flasher Hub]]<br />
<br />
Flasher Hub makes ultra-fast high speed parallel programming ("gang programming") with up to 24 channels possible.<br><br />
Flasher Hub is connected to one or more modules (Flasher Compact). Each module is connected to a target chip.<br><br />
Using one of the Flasher Hub's host interfaces, flash programming operations can be triggered and responses from the Flasher Hub can be read and evaluated.<br><br />
This makes the Flasher Hub a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
<br clear=all><br />
<br />
= Getting started = <br />
<br />
[[File: FlasherHubPower.png | thumb | USB-C port on the Flasher Hub]]<br />
[[File: FlasherHubEthernet.png | thumb | Ethernet port on the Flasher Hub]]<br />
[[File: FlasherHubUSB.png | thumb | USB ports on the Flasher Hub]]<br />
<br />
Before putting the Flasher Hub into operation, make sure to have the following devices at hand:<br />
* Flasher Hub<br />
* Power supply (see [[#Power_supply | below for more information]])<br />
* Externally powered USB Hub<br />
* One or more [https://www.segger.com/products/production/flasher/models/flasher-compact/ Flasher Compacts]<br />
* Ethernet cable (not mandatory)<br />
<br />
The Flasher Hub is set up and good-to-go in less than 30 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub can be setup:<br />
# Connect Flasher Hub to power supply via USB-C<br />
# Connect Flasher Hub to LAN via Ethernet cable<br />
# Connect USB Hub to power supply<br />
# Connect USB Hub to Flasher Hub via USB<br />
# Connect Flasher Compact(s) to Flasher Hub via USB<br />
# Wait for the Flasher Hub to finish booting (green LED stops flashing)<br />
# Note the serial number of your Flasher Hub<br />
# Open the Flasher Hub's web interface by visiting <nowiki>http://flasherhub-<SerialNo>/</nowiki> (Make sure to replace <SerialNo> with the serial number of your Flasher Hub)<br />
# Flasher Hub is now up and running<br />
<br />
<br clear=all><br />
<br />
== Preparing a module ==<br />
<br />
[[File: FlasherHubJFlash.png | thumb | One-time setup via J-Flash]]<br />
<br />
Before a Flasher Hub module can program a target chip, it needs to know what data that should be programmed. Additionally, the module needs information on the configuration to use.<br><br />
A module is prepared accordingly by downloading a Flasher data and configuration file pair into the module (.dat + .cfg files).<br><br />
Both are generated using J-Flash, SEGGER's free multi-platform production programming software.<br><br />
More information on J-Flash can be found on [https://www.segger.com/products/debug-probes/j-link/tools/j-flash/about-j-flash/ segger.com] and the [[JFlash | SEGGER Wiki]]<br />
<br />
# Download and install the most recent version of the [https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack J-Link software package].<br />
# Start J-Flash<br />
# Create a new project<br />
# Select a target device, target interface, target interface speed, ...<br />
# Adjust the project settings as needed (see [[JFlash#Project_Settings | here]] for more information)<br />
# Open the data file to be programmed in J-Flash (via drag-and-drop)<br />
# ''File'' --> ''Save Flasher config file''<br />
# ''File'' --> ''Save Flasher data file''<br />
# ''File'' --> ''Save project''<br />
# Close J-Flash<br />
# Make sure Flasher Hub is up and running and connected to the LAN<br />
# Make sure the module that should be prepared is connected to Flasher Hub<br />
# Connect to the Flasher Hub FTP server using a FTP Client (e.g. FileZilla)<br />
# Download the .cfg and .dat file to the designated modules<br />
# Done<br />
<br />
After providing a Flasher Hub module with data and configuration file, the module is ready to be used for programming operations.<br />
<br />
== Starting production programming ==<br />
<br />
[[File: FlasherHubProdProg.png | thumb | PuTTY console output when programming via Flasher Hub]]<br />
<br />
After preparing the Flasher Hub modules, the Flasher Hub is ready for production programming.<br><br />
The following instructions describe how to start production programming via the TELNET terminal:<br />
<br />
# Make sure the Flasher Hub is up and running and connected to the LAN<br />
# Make sure the Flasher Hub modules are prepared with a .dat and .cfg file<br />
# Make sure each Flasher Hub module is connected to its target chip<br />
# Open a terminal application (e.g. PuTTY) on a desktop PC<br />
# Connect to the Flasher Hub's TELNET terminal<br />
#* Host name: flasherhub-<SerialNo><br />
#* Port: 23<br />
# Upon successful connection, the Flasher Hub sends a welcome message<br />
# Now commands can be sent to the Flasher Hub using the ASCII command protocol explained below<br />
# Production programming is started by sending the AUTO command and specifying the positions of the modules to address<br />
#* Enter '''#AUTO 1,2,3''' to start production programming for the modules at positions 1, 2 and 3.<br />
# The Flasher Hub will acknowledge the command ('''#ACK''' response)<br />
# Now the production programming process is up and running<br />
# As soon as a module finishes production programming, the Flasher Hub sends a response with the programming result ('''#RESULT:...''' response)<br />
# After all modules are done programming, Flasher Hub responds with '''#DONE'''<br />
<br />
= Power supply = <br />
<br />
The Flasher Hub is powered via USB-C.<br />
The power supply must be able to supply up to 3A at 5V to the Flasher Hub.<br><br />
'''Note:'''<br><br />
Undefined behavior may occur when the Flasher Hub is not powered sufficiently.<br />
<br />
The Flasher Compacts connected to the Flasher Hub via USB must be powered externally,<br />
e.g. via an externally powered USB hub.<br><br />
'''Note:'''<br><br />
Undefined behavior may occur when the Flasher Compacts are not powered sufficiently.<br />
<br />
= Web interface =<br />
<br />
[[File: FlasherHubWeb.png | thumb | Flasher Hub Web interface]]<br />
<br />
The Flasher Hub comes with a built-in web interface which provides a status overview as well as controls for the Flasher Hub.<br><br />
The web interface can be accessed by navigating to the following location using a web browser (e.g. Mozilla Firefox, Google Chrome, ...):<br />
<nowiki>http://flasherhub-<SerialNo>/</nowiki><br />
<br />
'''Note:'''<br />
The web interface is only available if the Flasher Hub is connected to the LAN.<br />
<br />
<br clear=all><br />
<br />
= FTP interface =<br />
<br />
[[File: FlasherHubFTP.png | thumb | FTP Client (FileZilla) connected to Flasher Hub FTP Server]]<br />
<br />
The Flasher Hub comes with a built-in FTP server for transferring files from or to the Flasher Compacts connected to the Flasher Hub.<br><br />
Any FTP client software (e.g. FileZilla, etc...) can be used to connect to the Flasher Hub's FTP server.<br><br />
<br />
<code>Host: flasherhub-<SerialNo></code><br><br />
<code>Port: 21</code><br />
<br />
'''Credentials for read-only access:'''<br><br />
<code>User: anonymous</code><br><br />
<code>Pass: <None></code><br />
<br />
'''Credentials for read/write access:'''<br><br />
<code>User: admin</code><br><br />
<code>Pass: 1234</code><br />
<br />
<br clear=all><br />
<br />
= ASCII command interface =<br />
<br />
The Flasher Hub comes with an ASCII command interface (aka. Terminal) which can be used to send commands to the Flasher Hub, as well as receive responses from the Flasher Hub.<br><br />
The Terminal can be accessed by connecting to the Flasher Hub via TELNET:<br />
Host: flasherhub-<SerialNo><br />
Port: 23<br />
<br />
Once a successful connection to the Flasher Hub Terminal has been established, it will handle commands as described in the [[#Protocol | protocol below]].<br />
<br />
== Protocol ==<br />
<br />
=== Commands ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Commands to the Flasher Hub<br />
|-<br />
| [[#ASSIGNMODULE_Command | #ASSIGNMODULE]]<br />
|-<br />
| [[#AUTO_Command | #AUTO]]<br />
|-<br />
| [[#AUTO_NOPATCH_Command | #AUTO NOPATCH]]<br />
|-<br />
| [[#AUTO_PATCH_Command | #AUTO PATCH]]<br />
|-<br />
| [[#CANCEL_Command | #CANCEL]]<br />
|-<br />
| [[#ERASE_Command | #ERASE]]<br />
|-<br />
| [[#FWVERSION_Command | #FWVERSION]]<br />
|-<br />
| [[#FWVERSIONMOD_Command | #FWVERSIONMOD]]<br />
|-<br />
| [[#IPCONFIG_Command | #IPCONFIG]]<br />
|-<br />
| [[#POWERON_Command | #POWERON]]<br />
|-<br />
| [[#POWEROFF_Command | #POWEROFF]]<br />
|-<br />
| [[#PROGRAM_Command | #PROGRAM]]<br />
|-<br />
| [[#PROJECT_Command | #PROJECT]]<br />
|-<br />
| [[#PROTVER_Command | #PROTVER]]<br />
|-<br />
| [[#RESETIPCONFIG_Command | #RESETIPCONFIG]]<br />
|-<br />
| [[#RESTART_Command | #RESTART]]<br />
|-<br />
| [[#RESULT_Command | #RESULT]]<br />
|-<br />
| [[#SELECT_Command | #SELECT]]<br />
|-<br />
| [[#SELMODULE_Command | #SELMODULE]]<br />
|-<br />
| [[#SERIAL_Command | #SERIAL]]<br />
|-<br />
| [[#SERIALMOD_Command | #SERIALMOD]]<br />
|-<br />
| [[#SETVTREF_Command | #SETVTREF]]<br />
|-<br />
| [[#START_Command | #START]]<br />
|-<br />
| [[#STATUS_Command | #STATUS]]<br />
|-<br />
| [[#TERMINAL_Command | #TERMINAL]]<br />
|-<br />
| [[#VERIFY_Command | #VERIFY]]<br />
|}<br />
<br />
==== Specifying modules ====<br />
Most commands affect one or more modules connected to the Flasher Hub.<br />
Those commands expect the list of modules to address as the very first parameter following the command identifier itself, e.g. <br />
#AUTO <Modules><br />
There are different ways to specify the list of modules to address.<br><br />
'''Comma-separated list'''<br />
#AUTO 1,3,5 // Starts production programming for modules 1, 3 and 5. Other modules are not affected by this command<br />
'''"All"'''<br />
#AUTO ALL // Starts production programming for all currently connected modules<br />
'''Wildcard (*)'''<br />
#SELMODULE 2,4,6 // Selects modules 2, 4 and 6 for following operations using '*'<br />
[...]<br />
#AUTO * // Starts production programming for all previously selected modules (2, 4 and 6)<br />
[...]<br />
#SELMODULE 10,11,12 // Selects modules 10, 11 and 12 for following operations<br />
[...]<br />
#AUTO * // Starts production programming for all previously selected modules (10, 11 and 12)<br />
<br />
==== ASSIGNMODULE Command====<br />
'''Description:''' The serial number of a Flasher Compact is assigned to the module position of the Flasher Hub. <br>When the new module position is taken, a swap is performed. The Flasher Compact with the serial number must be connected to the Flasher Hub.<br />
<br />
'''Syntax:'''<br />
#ASSIGN <Serial>, <Position><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Serial> || Serial number of a Flasher Compact.<br />
|-<br />
| <Position> || Module position. <br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #ASSIGN 1015000001, 1 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #OK<br />
|}<br />
<br />
==== AUTO Command====<br />
'''Description:''' Starts production programming. Production programming refers to a sequence of the following operations, specified by the current configuration (.cfg):<br><br />
*Erase<br />
*Program<br />
*Verify<br />
<br />
'''Syntax:'''<br />
#AUTO <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to start production programming with<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #AUTO 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)<br />
|-<br />
| || #RESULT:2:OK (Total 13.995s, Erase 0.483s, Prog 9.189s, Verify 2.510s)<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== AUTO NOPATCH Command ====<br />
'''Description:''' Starts production programming but ignores an existing patch file for the programming.<br />
<br />
'''Syntax:'''<br />
#AUTO NOPATCH <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to start production programming with<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #AUTO NOPATCH 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK (Total 13.993s, Erase 0.483s, Prog 9.183s, Verify 2.514s)<br />
|-<br />
| || #RESULT:2:OK (Total 13.995s, Erase 0.483s, Prog 9.189s, Verify 2.510s)<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== AUTO PATCH Command ====<br />
'''Description:''' Starts production programming and allows patching of the content of the data to be programmed.<br />
<br />
'''Syntax:'''<br />
#AUTO PATCH <Modules> <NumPatches>,<Addr>,<NumBytes>:<Data>[,...]<br />
<br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to start production programming with<br />
|-<br />
| <NumPatches> || Number of patches that follow<br />
|-<br />
| <Addr> || Address to be patched. Value is expected in hex<br />
|-<br />
| <NumBytes> || Number of bytes for the current patch. Max. value is 20h (32 in decimal). Value is expected in hex<br />
|-<br />
| &lt;Data&gt; || Data to be patched. Value is expected in hex, e.g. 2 hexadecimal characters per byte (0xAB 0xCD --> "ABCD").<br />
|-<br />
| ... || <Next patch information><br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #AUTO PATCH 1 1,08000000,4:DEADBEEF || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK (Total 10.476s, Erase 8.293s, Prog 1.832s, Verify 0.137s)<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== CANCEL Command ====<br />
'''Description:''' Cancels an ongoing operation (e.g. erase, program, verify, ...).<br />
<br />
'''Syntax:'''<br />
#CANCEL <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to cancel ongoing operation for.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #AUTO 1 || <br />
|-<br />
| || #ACK<br />
|-<br />
| #CANCEL 1 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:ERR255:Error while flashing<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== ERASE Command ====<br />
'''Description:''' Erases all selected target flash sectors.<br />
<br />
'''Syntax:'''<br />
#ERASE <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to erase all selected target flash sectors for.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #ERASE 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK (Total 2.164s, Erase 1.936s)<br />
|-<br />
| || #RESULT:2:OK (Total 8.780s, Erase 8.552s)<br />
|-<br />
| || #DONE<br />
|-<br />
|}<br />
<br />
==== FWVERSION Command ====<br />
'''Description:''' Returns the firmware version of the Flasher Hub.<br />
<br />
'''Syntax:'''<br />
#FWVERSION<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #FWVERSION || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #OK:1.00<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== FWVERSIONMOD Command ====<br />
'''Description:''' Returns the firmware version for the specified modules.<br />
<br />
'''Syntax:'''<br />
#FWVERSIONMOD <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to return firmware version for.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #FWVERSIONMOD 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #OK:1:J-Link / Flasher Compact V5 compiled Feb 3 2021 10:44:44<br />
|-<br />
| || #OK:2:J-Link / Flasher Compact V5 compiled Feb 3 2021 10:44:44<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== IPCONFIG Command ====<br />
'''Description:''' Returns the Flasher Hub's current IP configuration.<br />
<br />
'''Syntax:'''<br />
#IPCONFIG<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #IPCONFIG || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:IP address:192.168.11.35<br />
|-<br />
| || #RESULT:Subnet mask:255.255.0.0<br />
|-<br />
| || #RESULT:Gateway:0.0.0.0<br />
|-<br />
| || #RESULT:IP mode:User assigned<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== POWERON Command ====<br />
'''Description:''' Enables the Flasher Compact's 5V target power supply for the given modules.<br />
<br />
'''Syntax:'''<br />
#POWERON <Modules> <PowerSource>,<Discharge><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to enable target power supply for.<br />
|-<br />
| <PowerSource> || Must be 0. Parameter exists to stay compatible to Flasher ATE, which supports different power sources.<br />
|-<br />
| <Discharge> || Must be 0. Parameter exists to stay compatible to Flasher ATE, which supports discharging target power.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| || #POWERON 1 0,0<br />
|-<br />
| || #ACK<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== POWEROFF Command ====<br />
'''Description:''' Disables the Flasher Compact's 5V target power supply for the given modules.<br />
<br />
'''Syntax:'''<br />
#POWEROFF <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to disable target power supply for.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| || #POWEROFF 1<br />
|-<br />
| || #ACK<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== PROGRAM Command ====<br />
'''Description:''' Programs the target. Other than #AUTO, this command does not erase nor verify target flash contents.<br />
<br />
'''Syntax:'''<br />
#PROGRAM <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to start programming for.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #PROGRAM 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK (Total 2.076s, Prog 1.833s)<br />
|-<br />
| || #RESULT:2:OK (Total 2.132s, Prog 1.888s)<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== PROJECT Command====<br />
'''Description:''' Returns the selected projects from the specified module numbers.<br />
<br />
'''Syntax:'''<br />
#PROJECT <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules from which you can get selected projects.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #PROJECT 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK:FLASHER.UNI<br />
|-<br />
| || #RESULT:2:OK:PROJECT.CFG<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== PROTVER Command ====<br />
'''Description:''' Returns the version of the ASCII command protocol in use.<br />
<br />
'''Syntax:'''<br />
#PROTVER<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #PROTVER || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #OK:2.02b<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== RESETIPCONFIG Command====<br />
'''Description:''' Reset the IP configuration to DHCP.<br />
<br />
'''Syntax:'''<br />
#RESETIPCONFIG <br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #RESETIPCONFIG ||<br />
|-<br />
| || #ACK <br />
|-<br />
| || #RESULT:The new IP configuration will take effect after restarting Flasher Hub.<br />
|-<br />
| || #DONE<br />
|-<br />
|}<br />
<br />
==== RESTART Command====<br />
'''Description:''' Restarts the Flasher Hub firmware.<br />
<br />
'''Syntax:'''<br />
#RESTART<br />
<br />
==== RESULT Command ====<br />
'''Description:''' Returns the last result of the previously executed command<br />
<br />
'''Syntax:'''<br />
#RESULT <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to return result for.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #RESULT 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK (Total 2.076s, Prog 1.833s)<br />
|-<br />
| || #RESULT:2:OK (Total 2.132s, Prog 1.888s)<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== SELECT Command ====<br />
'''Description:''' Selects a specific config and data file pair which should be used to program the target.<br />
<br />
'''Syntax:'''<br />
#SELECT <Modules> <Filename><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to select .cfg + .dat file pair for.<br />
|-<br />
| <Filename> || Name of .cfg + .dat file pair to select.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #SELECT 1,2 FWTest || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK<br />
|-<br />
| || #RESULT:2:OK<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== SELMODULE Command ====<br />
'''Description:''' Selects one or more modules. Commands with the wildcard character (*) in place of the <Modules> parameter will address the modules specified by this command.<br />
<br />
'''Syntax:'''<br />
#SELDMOULE <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to select.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #SELMODULE 1,2,3 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #SELECTED:1,2,3<br />
|}<br />
<br />
<br />
==== SERIAL Command ====<br />
'''Description:''' Returns the serial number of the Flasher Hub.<br />
<br />
'''Syntax:'''<br />
#SERIAL<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #SERIAL || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1021000000<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== SERIALMOD Command ====<br />
'''Description:''' Returns the serial number for the specified modules.<br />
<br />
'''Syntax:'''<br />
#SERIALMOD <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to select.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #SERIALMOD 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #OK:1:1015000000<br />
|-<br />
| || #OK:1:1015000001<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== SETVTREF Command ====<br />
'''Description:''' Sets a fixed voltage for I/O pins of the Flasher Compact's target interface.<br />
<br />
'''Syntax:'''<br />
#SETVTREF <Modules> <Voltage><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to set VTref for.<br />
|-<br />
| <Voltage> || Voltage in millivolt [mV].<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #SETVTREF 1 3300 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== START Command ====<br />
'''Description:''' Starts the target application. The Flasher Compact's configuration (.cfg file) determines the method of how the target application is started.<br />
<br />
'''Syntax:'''<br />
#START <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to start target application for.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #START 1 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK (Total 0.252s)<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
==== STATUS Command ====<br />
'''Description:''' Returns the current status of the Flasher Hub (READY or BUSY).<br />
<br />
'''Syntax:'''<br />
#STATUS<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #STATUS || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #STATUS:READY<br />
|}<br />
<br />
==== TERMINAL Command====<br />
'''Description:''' Turns the UART transceiver on or off for selected modules. Configures the UART settings for this modules.<br />
<br />
'''Syntax:'''<br />
#TERMINAL <Modules> <Baudrate>[, <NumDataBits>, <Parity>, <NumStopBits>]<br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules which will be accessed.<br />
|-<br />
| <Baudrate> || Baudrate or "off" to disable UART for specified modules.<br />
|-<br />
| <NumDataBits> || Number of data bits.<br />
|-<br />
| <Parity> || Parity: "N" (None), "E" (Even) or "O" (Odd)<br />
|-<br />
| <NumStopBits> || Number of stop bits.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #TERMINAL 1,2,3 115200, 8, N, 1 ||<br />
|-<br />
| || #ACK<br />
|-<br />
| || #DONE<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #TERMINAL 1,2,3 off ||<br />
|-<br />
| || #ACK<br />
|-<br />
| || #DONE<br />
|-<br />
|}<br />
<br />
==== VERIFY Command ====<br />
'''Description:''' Verifies target flash contents by comparing them to the data (.dat) file.<br />
<br />
'''Syntax:'''<br />
#VERIFY <Modules><br />
<br />
'''Parameters:'''<br />
{| class="wikitable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| <Modules> || List of modules to verify target flash contents for.<br />
|}<br />
<br />
'''Example:'''<br />
{| class="wikitable"<br />
|-<br />
! Command sent to Flasher Hub !! Reply<br />
|-<br />
| #VERIFY 1,2 || <br />
|-<br />
| || #ACK<br />
|-<br />
| || #RESULT:1:OK (Total 0.331s, Verify 0.117s)<br />
|-<br />
| || #RESULT:2:OK (Total 0.332s, Verify 0.117s)<br />
|-<br />
| || #DONE<br />
|}<br />
<br />
=== Replies ===<br />
<br />
{| class="wikitable"<br />
|-<br />
! Replies from the Flasher Hub<br />
|-<br />
| #ACK<br />
|-<br />
| #NACK<br />
|-<br />
| #OK<br />
|-<br />
| #OK:<NumBytes>:<Data><br />
|-<br />
| #OK:<Data><br />
|-<br />
| #OK:<Module>:<Data><br />
|-<br />
| #RESULT:<Module>:<br />
|-<br />
| #DONE<br />
|-<br />
| #ERRxxx<br />
|}<br />
<br />
= Fail-safe mode =<br />
<br />
Flasher Hub's fail-safe mode was introduced with Flasher Hub firmware version 1.08 and makes Flasher Hub more reliable in case of a power outage.<br><br />
Early units of Flasher Hub run the risk of "breaking" after a power outage while running (e.g. due to disconnecting the power supply).<br><br />
After that, Flasher Hub could not be used anymore without restoring it as described [[#How to restore a broken Flasher Hub | below]].<br><br />
<br />
New Flasher Hubs are now shipped with a USB flash drive which enables Flasher Hub's fail-safe mode,<br><br />
making sure Flasher Hub does not break with sudden power outages.<br />
<br />
For early units of Flasher Hub that were produced and shipped before fail-safe mode was introduced (e.g. no USB flash drive was shipped with Flasher Hub),<br><br />
fail-safe mode can be enabled as described [[#How to enable fail-safe mode | below]].<br />
<br />
== How to restore a broken Flasher Hub ==<br />
<br />
In case a Flasher Hub became unreachable following a power outage while running in non fail-safe mode,<br />
the following steps describe how to restore the Flasher Hub:<br />
# Remove power supply from Flasher Hub<br />
# Remove any cables attached to Flasher Hub <br />
# Using a Phillips screwdriver, remove the one screw at the top and the four screws on the bottom of the Flasher Hub casing<br />
# Remove the separate parts of Flasher Hubs' casing and put them aside<br />
# Remove the SD card from the PCB<br />
# Using an SD card reader and a PC, read back the contents of the SD card (e.g. using Win32DiskImager on a PC running Windows)<br />
# Write the exact same contents that were read from the SD card back onto the SD card<br />
#* Make sure not to modify the contents at all!<br />
# Put the SD card back into the PCB<br />
# Reassemble the Flasher Hub casing<br />
# Power Flasher Hub<br />
# Reattach USB/ Ethernet/ ... cables, if necessary<br />
# Flasher Hub is now restored<br />
<br />
== How to enable fail-safe mode ==<br />
<br />
For Flasher Hub units that were shipped with a USB flash drive, fail-safe mode is enabled by default.<br><br />
For early units of Flasher Hub that were produced and shipped before fail-safe mode was introduced (e.g. no USB flash drive was shipped with Flasher Hub),<br />
fail-safe mode can be enabled by following the steps below.<br />
<br />
{{Note|When switching to fail-safe mode, the current configuration is lost.<br>This means that the module positioning and other settings need to be manually checked and reconfigured.}}<br />
<br />
# Update Flasher Hub's firmware to the most recent release version available at [https://www.segger.com/downloads/flasher/FlasherHub_FW.zip segger.com]<br />
# Get a USB flash drive<br />
#* A capacity of a few MB (e.g. 128 MB) is sufficient already<br />
# Format the USB flash drive<br />
#* Make sure to use a file system '''other''' than exFAT.<br />
# Rename the USB flash drive label to '''"flasherhubrw"'''<br />
#* With Flasher Hub firmware version V1.10 onwards, the label "'''flasher'''" is accepted, as well<br />
#* On Windows, this can be done by right-clicking on the device in file explorer and selecting '''Rename'''<br />
# Eject and remove the USB flash drive from the PC<br />
# Attach the USB flash drive to Flasher Hub<br />
#* The USB flash drive does not need to be directly attached to Flasher Hub. It is also possible to connect it via a USB hub.<br />
# In the Flasher Hub web interface '''Config''' tab, click '''"Restart now"''' to restart Flasher Hub<br />
# Flasher Hub is now running in fail-safe mode, storing any non-volatile data on the external USB flash drive<br />
<br />
{{Note|Although possible, it is not recommended to switch back to non-fail-safe mode.<br><br />
This puts the Flasher Hub unit at risk of breaking after a power outage.}}</div>Leonhttps://wiki.segger.com/index.php?title=J-Link_Installer&diff=17395J-Link Installer2024-01-09T15:55:27Z<p>Leon: /* Available command line options */</p>
<hr />
<div>[[File: J-Link_Installer_options_page.PNG | thumb | J-Link Installer options page]]<br />
The J-Link Installer is an NSIS installer which installs the [[J-Link Software and Documentation Pack]].<br />
The J-Link Installer can be installed for "all users" and since Version 6.49a also for "user". The latter does not require admin elevation.<br />
<br />
__TOC__<br />
<br />
== Installation options ==<br />
This section of the article describes the options that can be set prior to the installation.<br><br />
'''Note:''' This is only valid for version '''7.94''' and on-wards.<br><br />
=== Create entry in start menu ===<br />
When checked, a start menu entry of the [[J-Link Software and Documentation Pack]] is created. Is selected by default.<br />
=== Add shortcuts to desktop ===<br />
When checked, a desktop shortcuts for J-Link Commander and J-Flash is created. Is selected by default.<br />
=== Update DLL in other applications ===<br />
When checked, the J-Link DLL Updater is started after installation.<br />
Requires admin rights. Starts the DLL Updater after installation. Is selected by default. Cannot be set when [[#Install for all users OR Install for this user only|Install for this user only]] is selected.<br />
=== Update existing installation OR Install a new instance ===<br />
This option sets whether a [[J-Link Software and Documentation Pack]] installed prior to the same destination folder is to be uninstalled before the installation or not. By default, "Update existing installation" is selected. Uninstalls the J-Link version found in the Install directory.<br />
=== Install for all users OR Install for this user only ===<br />
This option sets whether the [[J-Link Software and Documentation Pack]] is installed for all users or for this user only.<br />
By default, "Install for all users" is selected.<br />
=== Destination Folder ===<br />
This is the folder the [[J-Link Software and Documentation Pack]] is to be installed to.<br />
It cannot be set when [[#Install for all users OR Install for this user only|Install for this user only]] is selected.<br />
It can only be chosen whether the folder ends with _<Version> or not, by switching between [[#Update existing installation OR Install a new instance|Update existing and Install a new instance]].<br><br />
For defaults, refer to [[#Notes: Command line options|Command line options notes, (**)]].<br />
<br />
== Command line parameters ==<br />
The J-Link Installer supports command line usage since version '''6.49a'''. All options selectable in the GUI version of the installer can also be set by command line.<br />
=== Available command line options ===<br />
{| class="seggertable"<br />
|-<br />
! Command line !! Meaning !! Default !! Syntax<br />
|-<br />
| ''-InstAllUsers'' || Install for all users || ''1<ref name="Admin"/>'' || ''-InstAllUsers=<1/0>''<br />
|-<br />
| ''-CreateStartMenuEntry'' || Create a start menu entry || ''1'' || ''-CreateStartMenuEntry=<1/0>''<br />
|-<br />
| ''-CreateDesktopShortCut'' || Create a desktop shortcut || ''1'' || ''-CreateDesktopShortCut=<1/0>''<br />
|-<br />
| ''-UpdateExisting'' || Will uninstall the existing J-Link version in install directory prior to installation || ''0'' || ''-UpdateExisting=<1/0>''<br />
|-<br />
| ''-Silent'' || Start installer silent. '''Note:''' DLL updater wont be called if set to ''1'' || ''0'' || ''-Silent=<1/0>''<br />
|-<br />
| ''-UpdateNotificationMode'' || Set update notification mode || ''0''<ref name="UpdateNotifModes"/> || ''-UpdateNotificationMode=<0/1/2/3>''<ref name="UpdateNotifModes"/><br />
|-<br />
| ''-NotifyOnSecurityUpdate'' || Notify on security updates || ''1'' || ''-NotifyOnSecurityUpdate=<1/0>''<br />
|-<br />
<br />
!colspan="4" | The following command lines are ignored, if "-InstAllUsers=0" is set<br />
|-<br />
| ''-InstUSBDriver'' (depr.) || Install USB drivers<ref name="Admin"/><ref name="Legacy"/>'' || ''0'' || ''-InstUSBDriver=<1/0>''<br />
|-<br />
| ''-StartDLLUpdater'' || Start DLL Updater after installation<ref name="Admin"/>'' || ''1'' || ''-StartDLLUpdater=<1/0>''<br />
|-<br />
| ''-InstDir'' || Set the install directory<ref name="Admin"/>'' || ''X<ref name="InstDir"/>'' || ''-InstDir="<Path>"''<br />
|}<br />
<references><br />
<ref name="Admin">Requires admin rights.</ref><br />
<ref name="Legacy">Deprecated legacy option. Should not be used.</ref><br />
<ref name="InstDir">There are 6 defaults for the install path, depending on the installer and the installer options:<br />
{| class="seggertable"<br />
|-<br />
! Presets !! 32-bit installer !! 64-bit installer<br />
|-<br />
| ''-InstAllUsers='''1''' -UpdateExisting='''1''''' || ''%ProgramFiles'''(x86)'''%\SEGGER\JLink'' || ''%ProgramFiles%\SEGGER\JLink'' <br />
|-<br />
| ''-InstAllUsers='''1''' -UpdateExisting='''0''''' || ''%ProgramFiles'''(x86)'''%\SEGGER\JLink_<Version>'' || ''%ProgramFiles%\SEGGER\JLink_<Version>''<br />
|-<br />
| ''-InstAllUsers='''0''' -UpdateExisting='''1''''' || ''%UserProfile%\SEGGER\JLink'' || ''%UserProfile%\SEGGER\JLink'' <br />
|-<br />
| ''-InstAllUsers='''0''' -UpdateExisting='''0''''' || ''%UserProfile%\SEGGER\JLink_<Version>'' || ''%UserProfile%\SEGGER\JLink_<Version>'' <br />
|}<br />
</ref><br />
<ref name="UpdateNotifModes"><br />
The following values are supported for ''-UpdateNotificationMode'':<br />
{| class="seggertable"<br />
|-<br />
! Value !! Description<br />
|-<br />
| 0 || Do not notify when new version is available<br />
|-<br />
| 1 || Notify when new major version is available<br />
|-<br />
| 2 || Notify when new minor version is available<br />
|-<br />
| 3 || Notify when any new version is available<br />
|}<br />
<br><br />
{{Note|1=If update notification settings have been set prior to installation (e.g. by a previous installation), the installer will use the existing settings as defaults in order not to change systemwide settings with each installation.}}<br />
<br />
</ref><br />
</references></div>Leonhttps://wiki.segger.com/index.php?title=J-Link_Installer&diff=17394J-Link Installer2024-01-09T15:05:22Z<p>Leon: /* Available command line options */</p>
<hr />
<div>[[File: J-Link_Installer_options_page.PNG | thumb | J-Link Installer options page]]<br />
The J-Link Installer is an NSIS installer which installs the [[J-Link Software and Documentation Pack]].<br />
The J-Link Installer can be installed for "all users" and since Version 6.49a also for "user". The latter does not require admin elevation.<br />
<br />
__TOC__<br />
<br />
== Installation options ==<br />
This section of the article describes the options that can be set prior to the installation.<br><br />
'''Note:''' This is only valid for version '''7.94''' and on-wards.<br><br />
=== Create entry in start menu ===<br />
When checked, a start menu entry of the [[J-Link Software and Documentation Pack]] is created. Is selected by default.<br />
=== Add shortcuts to desktop ===<br />
When checked, a desktop shortcuts for J-Link Commander and J-Flash is created. Is selected by default.<br />
=== Update DLL in other applications ===<br />
When checked, the J-Link DLL Updater is started after installation.<br />
Requires admin rights. Starts the DLL Updater after installation. Is selected by default. Cannot be set when [[#Install for all users OR Install for this user only|Install for this user only]] is selected.<br />
=== Update existing installation OR Install a new instance ===<br />
This option sets whether a [[J-Link Software and Documentation Pack]] installed prior to the same destination folder is to be uninstalled before the installation or not. By default, "Update existing installation" is selected. Uninstalls the J-Link version found in the Install directory.<br />
=== Install for all users OR Install for this user only ===<br />
This option sets whether the [[J-Link Software and Documentation Pack]] is installed for all users or for this user only.<br />
By default, "Install for all users" is selected.<br />
=== Destination Folder ===<br />
This is the folder the [[J-Link Software and Documentation Pack]] is to be installed to.<br />
It cannot be set when [[#Install for all users OR Install for this user only|Install for this user only]] is selected.<br />
It can only be chosen whether the folder ends with _<Version> or not, by switching between [[#Update existing installation OR Install a new instance|Update existing and Install a new instance]].<br><br />
For defaults, refer to [[#Notes: Command line options|Command line options notes, (**)]].<br />
<br />
== Command line parameters ==<br />
The J-Link Installer supports command line usage since version '''6.49a'''. All options selectable in the GUI version of the installer can also be set by command line.<br />
=== Available command line options ===<br />
{| class="seggertable"<br />
|-<br />
! Command line !! Meaning !! Default !! Syntax<br />
|-<br />
| ''-InstAllUsers'' || Install for all users || ''1<ref name="Admin"/>'' || ''-InstAllUsers=<1/0>''<br />
|-<br />
| ''-CreateStartMenuEntry'' || Create a start menu entry || ''1'' || ''-CreateStartMenuEntry=<1/0>''<br />
|-<br />
| ''-CreateDesktopShortCut'' || Create a desktop shortcut || ''1'' || ''-CreateDesktopShortCut=<1/0>''<br />
|-<br />
| ''-UpdateExisting'' || Will uninstall the existing J-Link version in install directory prior to installation || ''0'' || ''-UpdateExisting=<1/0>''<br />
|-<br />
| ''-Silent'' || Start installer silent. '''Note:''' DLL updater wont be called if set to ''1'' || ''0'' || ''-Silent=<1/0>''<br />
|-<br />
| ''-UpdateNotificationMode'' || Set update notification mode || ''0''<ref name="UpdateNotifModes"/> || ''-UpdateNotificationMode=<0/1/2/3>''<ref name="UpdateNotifModes"/><br />
|-<br />
| ''-NotifyOnSecurityUpdate'' || Notify on security updates || ''1'' || ''-NotifyOnSecurityUpdate=<1/0>''<br />
|-<br />
<br />
!colspan="4" | The following command lines are ignored, if "-InstAllUsers=0" is set<br />
|-<br />
| ''-InstUSBDriver'' (depr.) || Install USB drivers<ref name="Admin"/><ref name="Legacy"/>'' || ''0'' || ''-InstUSBDriver=<1/0>''<br />
|-<br />
| ''-StartDLLUpdater'' || Start DLL Updater after installation<ref name="Admin"/>'' || ''1'' || ''-StartDLLUpdater=<1/0>''<br />
|-<br />
| ''-InstDir'' || Set the install directory<ref name="Admin"/>'' || ''X<ref name="InstDir"/>'' || ''-InstDir="<Path>"''<br />
|}<br />
<references><br />
<ref name="Admin">Requires admin rights.</ref><br />
<ref name="Legacy">Deprecated legacy option. Should not be used.</ref><br />
<ref name="InstDir">There are 6 defaults for the install path, depending on the installer and the installer options:<br />
{| class="seggertable"<br />
|-<br />
! Presets !! 32-bit installer !! 64-bit installer<br />
|-<br />
| ''-InstAllUsers='''1''' -UpdateExisting='''1''''' || ''%ProgramFiles'''(x86)'''%\SEGGER\JLink'' || ''%ProgramFiles%\SEGGER\JLink'' <br />
|-<br />
| ''-InstAllUsers='''1''' -UpdateExisting='''0''''' || ''%ProgramFiles'''(x86)'''%\SEGGER\JLink_<Version>'' || ''%ProgramFiles%\SEGGER\JLink_<Version>''<br />
|-<br />
| ''-InstAllUsers='''0''' -UpdateExisting='''1''''' || ''%UserProfile%\SEGGER\JLink'' || ''%UserProfile%\SEGGER\JLink'' <br />
|-<br />
| ''-InstAllUsers='''0''' -UpdateExisting='''0''''' || ''%UserProfile%\SEGGER\JLink_<Version>'' || ''%UserProfile%\SEGGER\JLink_<Version>'' <br />
|}<br />
</ref><br />
<ref name="UpdateNotifModes"><br />
The following values are supported for ''-UpdateNotificationMode'':<br />
{| class="seggertable"<br />
|-<br />
! Value !! Description<br />
|-<br />
| 0 || Do not notify when new version is available<br />
|-<br />
| 1 || Notify when new major version is available<br />
|-<br />
| 2 || Notify when new minor version is available<br />
|-<br />
| 3 || Notify when any new version is available<br />
|}<br />
</ref><br />
</references></div>Leonhttps://wiki.segger.com/index.php?title=J-Link_Update_Notifications&diff=17393J-Link Update Notifications2024-01-09T14:39:02Z<p>Leon: /* Configuration */</p>
<hr />
<div>The J-Link software package is updated regularly and new versions may contain additional features, improvements as well as bug fixes.<br><br />
There are multiple ways to stay up to date regarding J-Link and be notified upon the release of a new version.<br />
<br />
__TOC__<br />
<br />
== Email ==<br />
<br />
By submitting the following form, you can subscribe and stay up to date on new versions of the J-Link software package, as well as other SEGGER products:<br><br />
https://www.segger.com/notification/subscribe.php?prodid=7,94<br />
<br />
== Software pop-up ==<br />
<br />
Since V7.88 of the J-Link software package, it is possible to configure to automatically check for available updates.<br><br />
If the update check is enabled and a new version is available, a pop-up notification will be shown:<br />
<br />
[[File: UpdateNotifPopUp.png]]<br />
<br />
Future versions of the J-Link software may offer the user to automatically download and install an update.<br />
<br />
=== Configuration ===<br />
<br />
The update notifications can be configured from within the J-Link Configurator.<br />
# In the menu bar, go to "'''Options'''" and click "'''Systemwide settings...'''"<br />
#; [[File: Config_SysSettings.png]]<br />
# Inside the new dialog, the update notification settings can be configured<br />
#; [[File: Config_SysSettings_UpdateNotif.png]]</div>Leonhttps://wiki.segger.com/index.php?title=SEGGER_Flash_Loader&diff=16974SEGGER Flash Loader2023-11-15T08:19:08Z<p>Leon: /* Supported CPU architectures */</p>
<hr />
<div>== SEGGER Flash Loader ==<br />
The SEGGER Flash Loader (SFL) is part of the [[J-Link_Device_Support_Kit | J-Link Device Support Kit (DSK)]] and allows users to add flash programming support for a new device on their own.<br />
<br />
=== Minimum supported J-Link software version ===<br />
If not stated otherwise for a specific function / feature / etc., the minimum supported J-Link software version is V7.80.<br />
<br />
== Supported CPU architectures ==<br />
The SEGGER Flash Loader (SFL) is available for the following architectures:<br />
* ARMv4/v5<br />
** ARM720T, ARM7TDMI, ARM7TDMI-S<br />
** ARM920T, ARM922T, ARM926EJ-S, ARM946E-S, ARM966E-S<br />
* ARMv6-M<br />
** Cortex-M0, Cortex-M0+, Cortex-M1<br />
* ARMv7-M<br />
** Cortex-M3, Cortex-M4, Cortex-M7<br />
* ARMv8-M<br />
** Cortex-M23, Cortex-M33, Cortex-M55, Cortex-M85<br />
* ARMv7-A<br />
** Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A12, Cortex-A15, Cortex-A17<br />
* ARMv7-R<br />
** Cortex-R4, Cortex-R5, Cortex-R7, Cortex-R8<br />
* ARMv8-R<br />
** Cortex-R52<br />
* RISC-V RV32<br />
<br />
{{Note|1=<br />
Architectures / cores not listed here must be assumed as being not supported.<br><br />
While they may work by chance, no support is provided for problems in regards to getting SEGGER Flash Loaders running on non-listed architectures.<br><br />
In case of doubt, please feel free to contact SEGGER.<br />
}}<br />
<br />
== Supported flash types ==<br />
Because a SEGGER Flash Loader programs the flash via the MCU it runs on, basically any flash (or other non-volatile memories) can be supported.<br><br />
This applies to flash that is memory mapped accessible by the MCU (internal flash, external QSPI NOR flash, ...) as well as to non-memory mapped flashes (external I2C EEPROM, external NAND flash, ...)<br><br />
<br />
For non-memory-mapped flashes, the following additional entry functions must be implemented in an SFL:<br />
* SEGGER_FL_CheckBlank()<br />
* SEGGER_FL_Verify()<br />
* SEGGER_FL_Read()<br />
* SEGGER_FL_CalcCRC()<br />
<br />
== Entry functions overview ==<br />
<br />
The following table gives an overview about the mandatory and optional entry functions, of a SEGGER Flash Loader:<br />
{| class="seggertable"<br />
|-<br />
! Entry function !! Type<br />
|-<br />
| [[#SEGGER_FL_Prepare | SEGGER_FL_Prepare()]] || Mandatory<br />
|-<br />
| [[#SEGGER_FL_Restore | SEGGER_FL_Restore()]] || Mandatory<br />
|-<br />
| [[#SEGGER_FL_Program | SEGGER_FL_Program()]] || Mandatory<br />
|-<br />
| [[#SEGGER_FL_Erase | SEGGER_FL_Erase()]] || Mandatory<br />
|-<br />
| [[#SEGGER_FL_EraseChip | SEGGER_FL_EraseChip()]] || Optional<br />
|-<br />
| [[#SEGGER_FL_CheckBlank | SEGGER_FL_CheckBlank()]] || Optional<br />
|-<br />
| [[#SEGGER_FL_Verify | SEGGER_FL_Verify()]] || Optional<br />
|-<br />
| [[#SEGGER_FL_Read | SEGGER_FL_Read()]] || Optional<br />
|-<br />
| [[#SEGGER_FL_CalcCRC | SEGGER_FL_CalcCRC()]] || Optional<br />
|-<br />
| [[#SEGGER_FL_Start | SEGGER_FL_Start()]] || Optional<br />
|-<br />
| [[#SEGGER_FL_GetFlashInfo | SEGGER_FL_GetFlashInfo()]] || Optional<br />
|} <br />
<br />
=== SEGGER_FL_Prepare ===<br />
'''Prototype'''<br><br />
<source lang="c">int SEGGER_FL_Prepare(U32 PreparePara0, U32 PreparePara1, U32 PreparePara2);</source><br />
<br />
'''Function description'''<br><br />
Mandatory function. Must be present to make SFL detected as valid.<br><br />
Prepares SFL for further usage. Very first function of SFL to be called.<br><br />
Can rely on not being called multiple times in a row without a SEGGER_FL_Restore() in between.<br><br />
This function may be used for example to initialize the PLL of the device before flash programming starts, to improve flash programming performance.<br><br />
The following is a valid series of calls:<br />
<source><br />
SEGGER_FL_Prepare()<br />
SEGGER_FL_Erase()<br />
SEGGER_FL_Program()<br />
SEGGER_FL_Restore()<br />
SEGGER_FL_Prepare()<br />
SEGGER_FL_Erase()<br />
SEGGER_FL_Restore()<br />
</source><br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| PreparePara0 || Reserved for future use. Always == 0 for now<br />
|-<br />
| PreparePara1 || Reserved for future use. Always == 0 for now<br />
|-<br />
| PreparePara2 || Reserved for future use. Always == 0 for now<br />
|-<br />
|}<br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| >= 0 || OK<br />
|-<br />
| == 0 || OK, Clock speed of core not changed<br />
|-<br />
| > 0 || New clock speed in [Hz](!) of core<br />
|-<br />
| < 0 || Error<br />
|}<br />
<br />
=== SEGGER_FL_Restore ===<br />
'''Prototype'''<br><br />
<source lang="c">int SEGGER_FL_Restore(U32 RestorePara0, U32 RestorePara1, U32 RestorePara2);</source><br />
<br />
'''Function description'''<br><br />
Mandatory function. Must be present to make SFL detected as valid.<br><br />
Restores SFL after work is done. Very last function of SFL to be called.<br><br />
This function may be used for example to restore the PLL settings of the device after flash programming is done.<br><br />
This is for example needed when using the [https://www.segger.com/products/debug-probes/j-link/technology/flash-breakpoints/ unlimited number of breakpoints in flash] feature of J-Link.<br><br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| RestorePara0 || Reserved for future use. Always == 0 for now<br />
|-<br />
| RestorePara1 || Reserved for future use. Always == 0 for now<br />
|-<br />
| RestorePara2 || Reserved for future use. Always == 0 for now<br />
|-<br />
|}<br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| >= 0 || OK<br />
|-<br />
| < 0 || Error<br />
|}<br />
<br />
'''Notes'''<br><br />
{{Note|1=<br />
Can rely on not being called multiple times in a row without a SEGGER_FL_Prepare() in between.<br><br />
The following is a valid (but unlikely) series of calls:<br><br />
* SEGGER_FL_Prepare()<br />
* SEGGER_FL_Erase()<br />
* SEGGER_FL_Program()<br />
* SEGGER_FL_Restore()<br />
* SEGGER_FL_Prepare()<br />
* SEGGER_FL_Erase()<br />
* SEGGER_FL_Restore()<br />
}}<br />
<br />
=== SEGGER_FL_Program ===<br />
'''Prototype'''<br><br />
<source lang="c">int SEGGER_FL_Program(U32 DestAddr, U32 NumBytes, U8 *pSrcBuff);</source><br />
<br />
'''Function description'''<br><br />
Mandatory function. Must be present to make SFL detected as valid.<br><br />
Programs flash. The block passed to this function is always a multiple of what is indicated as page size by FlashDevice.PageSize.<br><br />
This function can rely on only being called with destination addresses and NumBytes that are aligned to FlashDevice.PageSize.<br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| DestAddr || Destination address. Always aligned to FlashDevice.PageSize<br />
|-<br />
| NumBytes || Number of bytes to be programmed (always a multiple of FlashDevice.PageSize)<br />
|-<br />
| pSrcBuff || Pointer to the data to be programmed<br />
|}<br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| == 0 || O.K.<br />
|-<br />
| == 1 || Error<br />
|-<br />
| == 2 || O.K., already performed implicit verify of block that was just programmed<br />
|}<br />
<br />
=== SEGGER_FL_Erase ===<br />
'''Prototype'''<br><br />
<source lang="c">int SEGGER_FL_Erase(U32 SectorAddr, U32 SectorIndex, U32 NumSectors);</source><br />
<br />
'''Function description'''<br><br />
Mandatory function. Must be present to make SFL detected as valid.<br><br />
Erases flash. For one-time programmable memories (OTP), this function may check if the passed sector is still erased/not programmed and throw an error in case it already is programmed.<br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| SectorAddr || Address of the first sector to be erased.<br />
|-<br />
| SectorIndex || Index of the start sector to be erased. Counting starts at 0 (first sector reported by FlashDevice.SectorInfo[0])<br />
|-<br />
| NumSectors || Number of sectors to be erased. It is the responsibility of this function to track the sector size in case a device provides multiple sector sizes.<br />
|} <br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| == 0 || O.K.<br />
|-<br />
| == 1 || Error<br />
|}<br />
<br />
=== SEGGER_FL_EraseChip ===<br />
'''Prototype'''<br><br />
<source lang="c">int SEGGER_FL_EraseChip(void);</source><br />
<br />
'''Function description'''<br><br />
Optional function. May be present to speed up erase procedure under special circumstances<br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| colspan="2" | None<br />
|} <br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| == 0 || O.K.<br />
|-<br />
| == 1 || Error<br />
|}<br />
<br />
=== SEGGER_FL_CheckBlank ===<br />
'''Prototype'''<br><br />
<source lang="c">int SEGGER_FL_CheckBlank(U32 Addr, U32 NumBytes, U8 BlankValue);</source><br />
<br />
'''Function description'''<br><br />
Optional function. May not be present.<br><br />
Checks if a memory region is blank / erased / unprogrammed.<br><br />
Mainly used to speed up flash programming as it allows J-Link to skip calls to SEGGER_FL_Erase() before calling SEGGER_FL_Program(), in case a sector is already erased.<br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| Addr || Address where checking for blank / erased data should start<br />
|-<br />
| NumBytes || Number of bytes to be checked<br />
|-<br />
| BlankValue || Blank (erased) value of flash (Most flashes have 0xFF, some have 0x00, some do not have a defined erased value)<br />
|} <br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| >= 0 || OK<br />
|-<br />
| == 0 || OK, complete region is blank<br />
|-<br />
| == 1 || OK, not the complete region is blank<br />
|-<br />
| < 0 || Error<br />
|}<br />
<br />
=== SEGGER_FL_Verify ===<br />
'''Prototype'''<br><br />
<source lang="c">U32 SEGGER_FL_Verify(U32 Addr, U32 NumBytes, U8* pData);</source><br />
<br />
'''Function description'''<br><br />
Optional function. May not be present. Not present for most memory-mapped accessible flash memories.<br><br />
Verifies a given range by comparing the provided data versus the data in the flash.<br><br />
Mainly used for non-memory mapped flashes in case flash is not simply read-accissble for the core at a certain address.<br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| Addr || Address where verify should start<br />
|-<br />
| NumBytes || Number of bytes to verify<br />
|-<br />
| pBuff || Pointer to data to compare flash contents to<br />
|} <br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| xxx || End address of verification.<br> ReturnVal == Addr+NumBytes indicates successful verification<br> ReturnVal != Addr+NumBytes indicates an error and gives the address where verification failed<br />
|}<br />
<br />
=== SEGGER_FL_Read ===<br />
'''Prototype'''<br><br />
<source lang="c">int SEGGER_FL_Read(U32 Addr, U32 NumBytes, U8 *pDestBuff);</source><br />
<br />
'''Function description'''<br><br />
Optional function. May not be present.<br><br />
Not needed for memory-mapped flashes that can be just read by the MCU core as RAM or other memories. Mainly used for non-memory mapped flashes where a virtual addres has been assigned to make J-Link flash download work.<br><br />
If this function is present, J-Link will call it to read flash memory instead of reading it directly via the core.<br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| Addr || Address to start reading flash at<br />
|-<br />
| NumBytes || Number of bytes to read<br />
|-<br />
| pBuff || Pointer to buffer where to store read data to<br />
|} <br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| >= 0 || OK, number of bytes read (usually == NumBytes)<br />
|-<br />
| < 0 || Error<br />
|}<br />
<br />
=== SEGGER_FL_CalcCRC ===<br />
'''Prototype'''<br><br />
<source lang="c">U32 SEGGER_FL_CalcCRC(U32 CRC, U32 Addr, U32 NumBytes, U32 Polynom);</source><br />
<br />
'''Function description'''<br><br />
Optional function, may not be present.<br><br />
If present, J-Link may call this function to speed up the verification because not all data must be read + transferred back to the host but instead only the CRC (calculated by the SFL) is transferred to the host.<br><br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| CRC || Start value of CRC<br />
|-<br />
| Addr || Address where calculation of CRC starts<br />
|-<br />
| NumBytes || Number of bytes to calculate CRC on<br />
|-<br />
| Polynom || Polynom to use for CRC calculation<br />
|} <br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| xxx || Calculated CRC<br />
|}<br />
<br />
'''Notes'''<br><br />
{{Note|1=<br />
# If an SFL implements this function, it is recommended to simply call SEGGER_OFL_Lib_CalcCRC() from the SEGGER_SFL_Lib.a library and pass its return value to the caller.<br />
}} <br />
<br />
=== SEGGER_FL_Start ===<br />
'''Prototype'''<br><br />
<source lang="c">void SEGGER_FL_Start(volatile struct SEGGER_FL_CMD_INFO* pInfo);</source><br />
<br />
'''Function description'''<br><br />
Optional function, may not be present.<br><br />
If present and target architecture supports turbo mode, J-Link will use this entry function to start turbo mode which will lead to a big performance gain in flash programming.<br><br />
If an SFL implements this function, it should simply call SEGGER_OFL_Lib_StartTurbo() from the SEGGER_SFL_Lib.a library. The exact operation of SEGGER_OFL_Lib_StartTurbo() is not disclosed.<br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| pInfo || Pointer to command info for SEGGER_OFL_Lib_StartTurbo()<br />
|} <br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| colspan="2" | None<br />
|}<br />
<br />
=== SEGGER_FL_GetFlashInfo ===<br />
'''Prototype'''<br><br />
<source lang="c">int SEGGER_FL_GetFlashInfo(SEGGER_FL_FLASH_INFO* pInfo, U32 InfoAreaSize);</source><br />
<br />
'''Function description'''<br><br />
Optional function. May not be present.<br><br />
Only needed for flash loaders where the exact sectorization is determined at runtime.<br><br />
This is for example the case for some loaders for external QSPI NOR flash, where different users may have different QSPI flashes connected to their hardware.<br><br />
This allows to have only 1 loader to serve many different setups.<br><br />
<br />
'''Parameters'''<br><br />
{| class="seggertable"<br />
|-<br />
! Parameter !! Description<br />
|-<br />
| pInfo || Points to info area which is used to store the flash info.<br />
|-<br />
| InfoAreaSize || Indicates how big the area pointed to by SEGGER_FL_FLASH_INFO really is.<br>May be used to extend pInfo->aRangeInfo[] in case more elements are needed for the detected flash memory.<br />
|} <br />
<br />
'''Return value'''<br><br />
{| class="seggertable"<br />
|-<br />
! Value !! Meaning<br />
|-<br />
| >= 0 || OK, number of bytes read (usually == NumBytes)<br />
|-<br />
| < 0 || Error<br />
|}<br />
<br />
'''Notes'''<br><br />
{{Note|1=<br />
# If present, this function is called before any erase, program, verify operation but after Preare().<br><br />
# If present, this function overrides the information provided by FlashDevice.TotalSize and FlashDevice.SectorInfo[]<br />
}}<br />
<br />
== FlashDevice struct ==<br />
The FlashDevice structure variable contains all the static information about the flash algorithm like sectorization of the flash, programming chunk size, ...<br><br />
In the following, the structure elements are explained in detail to give a good idea about what needs to be filled in for a new flash loader.<br />
<br />
<source lang="c"><br />
struct FlashDevice {<br />
U16 AlgoVer;<br />
U8 Name[128];<br />
U16 Type;<br />
U32 BaseAddr;<br />
U32 TotalSize;<br />
U32 PageSize;<br />
U32 Reserved;<br />
U8 ErasedVal;<br />
U32 TimeoutProg;<br />
U32 TimeoutErase;<br />
struct SECTOR_INFO SectorInfo[MAX_NUM_SECTORS];<br />
};<br />
</source><br />
<br />
{| class="seggertable"<br />
|-<br />
! Member !! Explanation<br />
|-<br />
| AlgoVer || Set to 0x0101. Do not set to anything else!<br />
|-<br />
| Name || Name of the flash bank this flash loader handles. (E.g. "internal flash", "QSPI", ...). Must not exceed 127 characters (last character reserved for string termination). NEVER change the size of this array!<br />
|-<br />
| Type || Flash device type. Currently ignored. Set to 1 to get max. compatibility.<br />
|-<br />
| BaseAddr || Flash base address. It is recommended to always use the real address of the flash here, even if the flash is also available at other addresses (via an alias / remap), depending on the current settings of the device.<br />
|-<br />
| TotalSize || Total flash device size in bytes. This describes the total size of the flash that is achieved when summing up all sector info from <SectorInfo>. If the flash is 512 KB in size, <TotalSize> must be 0x80000 (524,288 => 512 KB)<br />
|-<br />
| PageSize || This field describes in what chunks J-Link feeds the flash loader. The SEGGER_FL_Program() function will be called with a data chunk of multiple of <PageSize> bytes. For example if the flash requires to be programmed in multiple of 128 bytes, <PageSize> should be set to 128. If the flash can be programmed 4 byte wise, <PageSize> should be set to 4.<br />
|-<br />
| Reserved || Set this element to 0<br />
|-<br />
| ErasedVal || Most flashes have an erased value of 0xFF (set this element to 0xFF in such cases). However, some flashes have different erased value like for example 0x00 (set element to 0x00 for such cases)<br />
|-<br />
| TimeoutProg || Timeout in milliseconds (ms) to program one chunk of <PageSize>. <br> Since SEGGER_FL_Program can handle multiple pages at once, the J-Link software calculates how many pages should be programmed and accordingly calculates the total timeout for one call of SEGGER_FL_Program. Therefore the total programming timeout for one call of SEGGER_FL_Program is NumPagesAtOnce * TimeoutProg. <br />
|-<br />
| TimeoutErase || Timeout in milliseconds (ms) to erase one sector. <br> Since SEGGER_FL_Erase can handle multiple sectors at once, the J-Link software calculates how many sectors should be erased and accordingly calculates the total timeout for one call of SEGGER_FL_Erase. Therefore the total erase timeout for one call of SEGGER_FL_Erase is NumSectorsAtOnce * TimeoutErase. <br />
|-<br />
| SectorInfo ||<br />
This element is actually a list of '''different sector sizes''' present on target flash.<br><br />
Having a flash with uniform sectors will result in only SectorInfo[0] being used for sectorization information.<br><br />
In case the initial number of [4] regions is not sufficient, the array may be expanded up to [8] by the user when writing the flash algorithm.<br><br />
For more information, see the example below.<br />
|}<br />
<br />
'''Example for SectorInfo[] member'''<br><br />
<source lang="c"><br />
// Example device with 256 KB divided into:<br />
// 4 * 16 KB sectors<br />
// 1 * 64 KB sectors<br />
// 1 * 128 KB sectors<br />
//<br />
// FlashDevice.TotalSize:<br />
// 0x40000<br />
//<br />
// FlashDevice.SectorInfo[]:<br />
// {<br />
// SectSize StartAddr<br />
// { 0x00004000, 0x00000000 }, // 4 * 16 KB = 64 KB<br />
// { 0x00010000, 0x00010000 }, // 1 * 64 KB = 64 KB<br />
// { 0x00020000, 0x00020000 }, // 1 * 128 KB = 128 KB<br />
// { 0xFFFFFFFF, 0xFFFFFFFF } // Indicates the end of the flash sector layout. Must be present.<br />
// }<br />
//<br />
//<br />
// Example device with 256 KB divided into:<br />
// 256 * 1 KB sectors<br />
//<br />
// FlashDevice.TotalSize:<br />
// 0x40000<br />
//<br />
// FlashDevice.SectorInfo[]:<br />
// {<br />
// SectSize StartAddr<br />
// { 0x00000400, 0x00000000 }, // 256 * 1 KB = 256 KB<br />
// { 0xFFFFFFFF, 0xFFFFFFFF } // Indicates the end of the flash sector layout. Must be present.<br />
// }<br />
//<br />
</source><br />
<br />
== Integrate SFL in J-Link software ==<br />
For more information about how to actually integrate the resulting SFL binary into the J-Link software and connect it with support for your new device, please refer to the [[J-Link_Device_Support_Kit | J-Link DSK wiki article]]<br />
<br />
== Stack usage ==<br />
J-Link reserves 256 bytes stack for the SEGGER Flash Loader. This value is fixed and cannot be changed.<br />
<br />
== Section layout ==<br />
The J-Link software expects a special layout when it comes to RO code, RO data, RW data placement in the SFL binary.<br><br />
The reference algorithms and templates provided with the J-Link DSK already take care of that layout, so there is nothing special to be considered by the user.<br />
<br />
The section layout is as expected:<br />
<source lang="c"><br />
section PrgCode // Marks the start of the SFL. Must be the very first section<br />
sections .text, .rodata, ... // In any order<br />
section PrgData // Marks the end of the code + rodata region (functions, const data, ...) and the start of the data region (static + global variables)<br />
sections .textrw, .data, .fast, ... // In any order<br />
section DevDscr // Marks the location of the <FlashDevice> structure variable and also the end of the loader. Must(!!!) be the very last section<br />
</source><br />
<br />
== Templates ==<br />
There are templates as well as functioning reference loaders available in source. These are part of the [[J-Link_Device_Support_Kit| J-Link Device Support Kit (DSK)]].<br />
<br />
== Troubleshooting ==<br />
'''General considerations'''<br><br />
# Get the latest version of the template project<br />
# Follow the Step-By-Step instructions except of 1.2 FlashPrg.c --> Functions should not contain any code that accesses any SFRs<br />
# Build the flash loader using the release configuration<br />
# Perform a flash download using J-Link Commander. Flash download should report an error during verify<br />
# Implement SEGGER_FL_Erase() and retry the flash download test. J-Link Commander should still report verify failed but effected flash memory region should be empty. If not, check SEGGER_FL_Erase().<br />
# Implement SEGGER_FL_Program() and retry the flash download test. Expected result: Test reports O.K. --> Programmed successfully. If not, check SEGGER_FL_Program() code.<br />
<br />
'''PC has unexpected value after flash download'''<br><br />
This error may have different root causes:<br />
* Watchdog is enabled but not fed in the flash loader functions. This may result in a watchdog timeout pops up during RAMCode execution. The behavior is different but usually a reset will be triggered.<br />
* Accessing not enabled / clocked special function registers / peripherals<br />
* Accessing invalid memory regions (reserved)<br />
<br />
'''External flash pin init'''<br><br />
The SEGGER_FL_Prepare() code has to make sure that the (QSPI) pins as well as the (QSPI) controller are configured so that the flash is memory-mapped read-accessible.<br><br />
This is necessary as the J-Link software by default compares flash contents before starting the flash programming, to save time in case large portions of the flash are already identical to the programming data.<br><br />
This can be validated by setting the compare method in J-Link Commander to "skip" (exec SetCompareMode 0). Now start flash download.<br><br />
J-Link Commander should report a verify error but the flash should be memmory mapped accessible from now. If not, check the Init() code.<br><br />
<br />
'''I get build errors in release build config'''<br><br />
If you get build errors when switching from "Debug" to "Release" build in the template project the main cause is that third party libraries are used.<br><br />
The SEGGER Flash Loader interface expects all program parts to be linked to sections PrgCode and PrgData.<br><br />
Third party libraries often use statically linked program parts which will not be put in the aforementioned sections which will cause a build or linker error.<br><br />
Generally we recommend not using any third party libraries when creating Flash loaders as they will increase the Flash loader size drastically while usually slowing down the maximum possible Flash loader speed.<br><br />
If you happen to have to use an external library in your project it is user responsibility to make sure this external library is linked to the aforementioned sections for all application parts.<br />
<br />
== SFL FAQ ==<br />
'''Q:''' Do I need a valid Embedded Studio license when using the SEGGER Flash Loader in a commercial scope?<br><br />
'''A:''' Basically, any usage of ES in a commercial scope requires a valid license. However, the SEGGER Flash Loader is an exception. The evaluation license suffice; a valid license is not required.<br><br><br />
'''Q:''' How is the *.elf file that is the result from building the SLF executed?<br><br />
'''A:''' The *.elf file is loaded into the RAM of the target device and executed on its processor.<br><br><br />
'''Q:''' How are the functions like "SEGGER_FL_Program()" called and executed on the target?<br><br />
'''A:''' The J-Link DLL analyzes the ELF file to determine the function entry points and then calls those functions.<br><br><br />
'''Q:''' What does the "SEGGER_FL_Lib_<CORE>_LE.a" file contain and how are they used by SEGGER flash loader?<br><br />
'''A:''' The file contains generic (not device specific) logic which interacts with the custom Flashloader functions SEGGER_FL_*. It needs to be included in any build.<br><br><br />
'''Q:''' There are two files "SEGGER_FL_Lib_<CORE>_'''LE'''.a" and "SEGGER_FL_Lib_<CORE>_'''BE'''.a". Which one do I have to use?<br><br />
'''A:''' "SEGGER_FL_Lib_<CORE>_'''LE'''.a" is used for '''L'''ittle '''E'''ndian targets while "SEGGER_FL_Lib_<CORE>_'''BE'''.a" is used for '''B'''ig '''E'''ndian targets.<br><br><br />
'''Q:''' My flash loader uses interrupts. It works when debugging, but does not work when inegrated with J-Link software. How can this be solved?<br><br />
'''A:''' Before calling the flash loader functions, J-Link will disable interrupts on the device. If you require interrupts, you will need to reenable those e.g. in SEGGER_FL_Prepare().</div>Leonhttps://wiki.segger.com/index.php?title=UM08001_J-Link_/_J-Trace_User_Guide&diff=16939UM08001 J-Link / J-Trace User Guide2023-11-07T08:48:25Z<p>Leon: /* Windows Defender under Windows 10 */</p>
<hr />
<div>This is the user documentation for owners of SEGGER debug probes (J-Link and J-Trace).<br><br />
This manual documents the J-Link software provided by the [[#J-Link Software and Documentation Pack | J-Link Software and Documentation Pack]] and advanced features of J-Link and J-Trace, like [[RTT |Real Time Transfer (RTT)]], [[J-Link script files]] or [[General information about tracing | Trace]].<br />
<div class="toclimit-2"><br />
__TOC__<br />
</div><br />
<br />
== J-Link Software and Documentation Pack ==<br />
<!---- FF xxxxxx<br />
TBD:<br />
- Replace Manual ref to wiki ref once article is done.<br />
- Link to the versioning information page.<br />
- Add missing applications:<br />
%<br />
% Missing:<br />
% - J-Flash SPI (CL)<br />
% - J-Link DLL updater<br />
% - J-Link License Manager<br />
% - J-Link Registration<br />
% - J-Link RTT Client / Logger<br />
%<br />
% ----- Why does SWOAnalyzer not have an icon? -----<br />
%<br />
- Check "contacting support" links<br />
- Check for <!-,...<br />
----><br />
<br />
The J-Link Software and Documentation Pack, available for download on the [https://www.segger.com/downloads/jlink#J-LinkSoftwareAndDocumentationPack SEGGER homepage], includes applications to be used with J-Link and J-Trace and in some cases Flasher.<br><br />
It also comes with USB-drivers for J-Link, J-Trace and Flasher.<br />
<br />
=== Software overview ===<br />
{| class="wikitable"<br />
|-<br />
! Software !! Description<br />
|-<br />
| [[J-Link Commander]] || Command-line tool with basic functionality for target analysis.<br />
|-<br />
| [[J-Link GDB Server]] || The J-Link GDB Server is a server connecting to the GNU Debugger (GDB) via TCP/IP. It is required for toolchains using the GDB protocol to connect to J-Link.<br />
|-<br />
| [[J-Link GDB Server#J-Link GDB Server CL | J-Link GDB Server CL]] || Command line version of the J-Link GDB Server. Same functionality as the GUI version.<br />
|-<br />
| [[J-Link Remote Server]] || Utility which provides the possibility to use J-Link / J-Trace remotely via TCP/IP.<br />
|-<br />
| [[J-Mem]] || Target memory viewer. Shows the memory content of a running target and allows editing as well.<br />
|-<br />
| [[J-Flash]]<sup>1</sup> || Stand-alone flash programming application.<br />
|-<br />
| [[J-Flash SPI]]<sup>1</sup> || Stand-alone (Q)SPI flash programming application.<br />
|-<br />
| [[J-Flash Lite]] || Stand-alone flash programming application with reduced feature set of J-Flash.<br />
|-<br />
| [[J-Link RTT Viewer]] || Displays the terminal output of the target using [[RTT]]. Can be used in parallel with a debugger or stand-alone.<br />
|-<br />
| [[J-Link SWO Viewer]] || Displays the terminal output of the target using the SWO pin. Can be used in parallel with a debugger or stand-alone.<br />
|-<br />
| [[J-Link SWO Analyzer]] || Command line tool that analyzes SWO RAW output and stores it into a file.<br />
|-<br />
| [[JTAGLoad]] || Command line tool that opens an svf file and sends the data in it via J-Link / J-Trace to the target.<br />
|-<br />
| [[J-Link Configurator]] || GUI-based configuration tool for J-Link. Allows configuration of USB identification as well as TCP/IP identification of J-Link debug probes.<br />
|-<br />
| [[J-Link_RDI | RDI support (JLinkRDI.dll)]]<sup>1</sup> || Provides Remote Debug Interface (RDI) support. This allows the user to use J-Link with any RDI-compliant debugger.<br />
|-<br />
| [[J-Link STR91x Commander]] || Command line tool for handling specific STR91x processors.<br />
|-<br />
| [[J-Link STM32 Unlock]] || Command line tool for handling specific STM32 processors.<br />
|-<br />
| [[J-Run]] || Command line utility for automated tests.<br />
|-<br />
| [[J-Link License Manager]] || GUI-based J-Link license management tool<br />
|-<br />
| [[J-Scope]] || Data visualization and analysis tool.<br />
|-<br />
| [[J-Link DLL Updater]] || (Windows only) Application to update J-Link DLL for common IDEs with J-Link integration.<br />
|}<br />
<sup>1</sup>: Full-featured J-Link (PLUS, PRO, ULTRA+) or an additional license for J-Link Base model required.<br />
<br />
=== Troubleshooting ===<br />
This section covers generic troubleshooting advice when encountering issues while using J-Link/J-Trace.<br />
<br />
==== Connection issues ====<br />
Most connection issues between J-Link and Target MCU or host PC and J-Link are caused by problematic or faulty setups.<br />
To rule out setup related issues, please refer to the following articles:<br />
* [[J-Link_cannot_connect_to_the_CPU#J-Link_connection | Connection issues between Host PC and J-Link]]<br />
* [[J-Link_cannot_connect_to_the_CPU#Target_connection | Connection issues between J-Link and target MCU]]<br />
<br />
==== Reset unlock message box ====<br />
[[File:STM32_UnlockDialog.PNG | thumb | 800px | right | Device unlock messagebox for STM32 devices]]<br />
The J-Link DLL / J-Flash checks the write protection on connect (e.g. when triggering read-back) and offers to perform a<br />
unlock (mass erase) if active write-protection has been detected.<br />
In this case, a message box is shown which allows the user to confirm or decline the unlock.<br />
This message box can be disabled by checking the ''Remember selected action'' check box.<br><br />
The selection will be saved in a registry key.<br />
<br />
The setting can be reset using the J-Link Configurator.<br />
See: [[How to reset "Don't show again" settings]]<br />
<br clear=all><br />
<br />
==== Windows Defender under Windows 10 ====<br />
For some versions of the J-Link Software Pack, Windows Defender under Windows 10 triggered a false positive alarm for "Trojan:Win32/Tulim.C!plock" which disabled the download of the software package. This has been recently fixed by Microsoft via new virus definitions. Please make sure that Windows Defender virus definitions are up to date when downloading the package and are at least at the following version:<br />
Antivirus definition: 1.213.5588.0<br />
<br />
<!---- TBD FF xxxx<br />
== Setup ==<br />
TBD.<br />
----><br />
<br />
==== Missing GUI dialogs ====<br />
In some environments, tools that make use of the J-Link software may not show GUI dialogs from the J-Link software.<br><br />
For more information on this and how to get the GUI dialogs to show, refer to [[J-Link GUI Dialogs]].<br />
<br />
== Working with J-Link and J-Trace ==<br />
This section describes functionality and how to use J-Link and J-Trace.<br />
<br />
=== Probe network setup ===<br />
Some Probes provide an IP network interface to support an IP connection between host and Probe.<br />
For information about what has to be considered and how to set such an interface up, please refer to: [[Setting up IP network interface]]<br />
<br />
=== Supported IDEs ===<br />
J-Link supports almost all popular IDEs available today.<br />
If support for a IDE is lacking, feel free to get in [https://www.segger.com/support/technical-support/ contact with SEGGER].<br />
<br />
For a list of supported 3rd-party debuggers and IDEs and documentation on how to get started with those IDEs and J-Link / J-Trace es well as<br />
on how to use the advanced features of J-Link / J-Trace with any of them, please refer to:<br><br />
[[Getting_Started_with_Various_IDEs | Getting started with various IDEs]] and<br><br />
[https://www.segger.com/jlink-ide-integration.html List of supported IDEs].<br />
<br />
=== Connecting to target system ===<br />
==== Power-on sequence ====<br />
In general, J-Link / J-Trace should be powered on before connecting it with the target device.<br />
That means you should first connect J-Link / J-Trace with the host system via USB and then connect J-Link / J-Trace with the target device.<br />
Power-on the device after you connected J-Link / J-Trace to it.<br />
<br />
=== Verifying target device connection ===<br />
If the USB driver is working properly and your J-Link / J-Trace is connected with the host system, you may connect J-Link / J-Trace to your target hardware.<br />
Start the [[J-Link Commander]] (JLink.exe) which should now display the normal J-Link / J-Trace related information.<br />
After issuing the [[J-Link_Commander#connect | connect]] command and providing the additional information required to connect to the device, the J-Link connects to the device.<br />
Additional information about the targit is shown (e.g. ROM-Table).<br />
The screenshot below shows an example output when connecting to the [[Tracing_on_ST_STM32F407_(SEGGER_Cortex-M_Trace_Reference_Board) | SEGGER Cortex-M Trace Reference Board]]:<br />
<br />
[[File: JLink_Commander.png | thumb | none | J-Link Commander with a connection to the SEGGER Cortex-M Trace Reference Board]]<br />
<br />
==== Problems ====<br />
If you experience problems with any of the steps described above, please refer to the [[J-Link_cannot_connect_to_the_CPU | J-Link troubleshooting guide]].<br />
If you still do not find appropriate help there and your J-Link / J-Trace is an original SEGGER product, you can [[#Contacting_support | contact SEGGER support]].<br />
Please make sure to provide the necessary information about your target processor, board etc. and we will try to solve the problem.<br />
<br />
=== Indicators ===<br />
J-Link uses indicators (LEDs) to give the user some information about the current status of the connected J-Link.<br />
All J-Links feature the main indicator.<br />
Some newer J-Links such as the J-Link Pro / Ultra come with additional input/output Indicators. The J-Trace Pro features its own set of indicators that are described below as well.<br />
In the following, the meaning of these indicators will be explained.<br />
<br />
==== Main indicator ====<br />
J-Link V8 and higher comes with a bi-color indicator (Green & Red LED), which can show multiple colors: green, red and orange.<br />
For J-Links up to V7, the main indicator is single color (Green).<br />
<br />
===== Bi-color indicator (J-Link V8 and later) =====<br />
{| class="wikitable"<br />
|-<br />
! Indicator status !! Meaning<br />
|-<br />
| GREEN, flashing at 10 Hz || Emulator enumerates.<br />
|-<br />
| GREEN, flickering || Emulator is in operation.<br>Whenever the emulator is executing a command, the LED is switched off temporarily.<br>Flickering speed depends on target interface speed.<br>At low interface speeds, operations typically take longer and the "OFF" periods are typically longer than at fast speeds.<br />
|-<br />
| GREEN, constant || Emulator has enumerated and is in idle mode.<br />
|-<br />
| GREEN, switched off for 10ms once per second || J-Link heart beat.<br>Will be activated after the emulator has been in idle mode for at least 7 seconds.<br />
|-<br />
| ORANGE || Reset is active on target.<br />
|-<br />
| RED, flashing at 1 Hz || Emulator has a fatal error.<br>This should not normally happen.<br />
|-<br />
|}<br />
<br />
===== Single color indicator (J-Link V7 and earlier) =====<br />
{| class="wikitable"<br />
|-<br />
! Indicator status !! Meaning<br />
|-<br />
| GREEN, flashing at 10 Hz || Emulator enumerates.<br />
|-<br />
| GREEN, flickering || Emulator is in operation.<br>Whenever the emulator is executing a command, the LED is switched off temporarily.<br>Flickering speed depends on target interface speed.<br>At low interface speeds, operations typically take longer and the "OFF" periods are typically longer than at fast speeds.<br />
|-<br />
| GREEN, constant || Emulator has enumerated and is in idle mode.<br />
|-<br />
| GREEN, switched off for 10ms once per second || J-Link heart beat.<br>Will be activated after the emulator has been in idle mode for at least 7 seconds.<br />
|-<br />
| GREEN, flashing at 1 Hz || Emulator has a fatal error.<br>This should not normally happen.<br />
|-<br />
|}<br />
<br />
==== Input and Output indicator ====<br />
Some newer, high end J-Links such as the J-Link Pro/Ultra come with additional input/output indicators.<br><br />
The input indicator (&#8593;) is used to give the user some information about the status of the target hardware.<br><br />
The output indicator (&#8595;)is used to give the user some information about the emulator-to-target connection.<br />
<br />
===== Bi-color input indicator =====<br />
{| class="wikitable"<br />
|-<br />
! Indicator status !! Meaning<br />
|-<br />
| GREEN || Target voltage could be measured.<br>Target is connected.<br />
|-<br />
| ORANGE || Target voltage could be measured.<br>RESET is pulled low (active) on target side.<br />
|-<br />
| RED || RESET is pulled low (active) on target side.<br>If no target is connected, reset will also be active on target side.<br />
|-<br />
|}<br />
<br />
===== Bi-color output indicator =====<br />
{| class="wikitable"<br />
|-<br />
! Indicator status !! Meaning<br />
|-<br />
| OFF || Target power supply via Pin 19 is not active.<br />
|-<br />
| GREEN || Target power supply via Pin 19 is active.<br />
|-<br />
| ORANGE || Target power supply via Pin 19 is active.<br>Emulator pulls RESET low (active).<br />
|-<br />
| RED || Emulator pulls RESET low (active).<br />
|-<br />
|}<br />
<br />
==== J-Trace Pro indicator ====<br />
The following table is valid for J-Trace Pro V2 and later.<br />
{| class="wikitable"<br />
|-<br />
! Indicator label !! Meaning<br />
|-<br />
| Power || Green: J-Trace Pro is powered.<br />
|-<br />
| USB || See [[#Bi-color indicator (J-Link V8 and later) | Bi-color indicator (J-Link V8 and later)]]<br />
|-<br />
| Trace || Orange: Trace capture is enabled.<br />
|-<br />
| Target power || Green: Target powered through debug interface.<br> Red(Orange) blinking: Overcurrent protection tripped. Target draws to much current via debug interface. <br />
|-<br />
|}<br />
<br />
=== JTAG interface ===<br />
<!--- Mention our auto-detection? ---><br />
By default, only one device is assumed to be in the JTAG scan chain.<br />
If multiple devices are in the scan chain, they must be properly configured.<br />
To do so, the exact position of the CPU that should be addressed has to be specified.<br />
Configuration of the scan is done by the application using J-Link / J-Trace.<br />
This could be for example,<br />
* an IDE (such as [https://www.segger.com/products/development-tools/embedded-studio/ SEGGER Embedded Studio], Keil's uVision, IAR's)<br />
* a debugger (such as [https://www.segger.com/products/development-tools/ozone-j-link-debugger/ SEGGER Ozone], IAR C-SPY® debugger, ARM's AXD using RDI)<br />
* a flash programming application (such as [[J-Flash | SEGGER J-Flash]])<br />
* any other application using J-Link / J-Trace.<br />
It is the application's responsibility to supply a way to configure the scan chain.<br />
Most applications offer a dialog box for this purpose.<br />
<br />
==== Multiple devices in the scan chain ====<br />
J-Link / J-Trace can handle multiple devices in the scan chain.<br />
This applies to hardware where multiple chips are connected to the same JTAG connector.<br />
As can be seen in the following figure, the TCK and TMS lines of all JTAG device are connected, while the TDI and TDO lines form a bus.<br />
[[File:arm_2device_connect.png | thumb | none | 500px | JTAG connection example with two devices]]<br />
<br />
===== Specifications =====<br />
{| class="wikitable"<br />
! Specification !! Max supported value<br />
|-<br />
| Number of devices in chain || 32<br />
|-<br />
| Total IR length || 255<br />
|-<br />
| DR length || 64 bit (Max. DRLen of the device to connect to)<br />
|}<br />
One or more of these devices can be CPU cores; the other devices can be of any other type but need to comply with the JTAG standard.<br />
<br />
===== Configuration =====<br />
How the scan chain is configured and if it is configurable depends on the application using the J-Link DLL.<br />
In most applications (like [[J-Flash]] the scan chain is set via a [[UM08003_JFlash#JTAG_scan_chain | settings dialog]].<br />
In command line based applications, like [[J-Link Commander]], [[J-Link_Commander#jtagconf | specific commands]] might be available for that purpose.<br />
<br />
==== Determining values for scan chain configuration ====<br />
If only one device is connected to the scan chain, the default configuration can be used.<br />
In other cases, J-Link / J-Trace may succeed in automatically recognizing the devices on the scan chain, but whether this is possible depends on the devices present on the scan chain.<br />
<br />
Two values are required to setup the chain:<br />
* The position of the target device in the scan chain.<br />
* The total number of bits in the instruction registers of the devices before the target device (IR len).<br />
<br />
The position can usually be found in the schematics; the IR length can be found in the manual supplied by the manufacturers of the others devices.<br />
For example, ARM7/ARM9 have an IR length of four.<br />
<br />
===== Sample configurations =====<br />
The following table shows a few sample configurations with 1,2 and 3 devices inside a JTAG scan chain with different configurations.<br />
{| class="wikitable"<br />
|-<br />
! Device 0 Chip(IR len) !! Device 1 Chip(IR len) !! Device 2 Chip(IR len) !! Position !! IR len<br />
|-<br />
| '''ARM(4)''' || - || - || 0 || 0<br />
|-<br />
| '''ARM(4)''' || Xilinx(8) || - || 0 || 0<br />
|-<br />
| Xilinx(8) || '''ARM(4)''' || - || 1 || 8<br />
|-<br />
| Xilinx(8) || Xilinx(8) || '''ARM(4)''' || 2 || 16<br />
|-<br />
| '''ARM(4)''' || Xilinx(8) || ARM(4) || 0 || 0<br />
|-<br />
| ARM(4) || Xilinx(8) || '''ARM(4)''' || 2 || 12<br />
|-<br />
| Xilinx(8) || '''ARM(4)''' || Xilinx(8) || 1 || 8<br />
|-<br />
|}<br />
The target device is marked in '''bold'''.<br />
<br />
==== JTAG Speed ====<br />
There are basically three types of speed settings:<br />
* Fixed JTAG speed.<br />
* Automatic JTAG speed.<br />
* Adaptive clocking.<br />
These are explained below.<br />
<br />
===== Fixed JTAG speed =====<br />
The target is clocked at a fixed clock speed.<br />
The maximum JTAG speed the target can handle depends on the target itself.<br />
In general CPU cores without JTAG synchronization logic (such as ARM7-TDMI) can handle JTAG speeds up to the CPU speed,<br />
ARM cores with JTAG synchronization logic (such as ARM7-TDMI-S, ARM946E-S, ARM966EJ-S) can handle JTAG speeds up to 1/6 of the CPU speed.<br />
JTAG speeds of more than 10 MHz are not recommended.<br />
<br />
===== Automatic JTAG speed =====<br />
Selects the maximum JTAG speed handled by the TAP controller.<br><br />
'''Note:''' On ARM cores without synchronization logic, this may not work reliably, because the CPU core may be clocked slower than the maximum JTAG speed.<br />
<br />
===== Adaptive clocking =====<br />
If the target provides the RTCK signal, select the adaptive clocking function to synchronize the clock to the processor clock outside the core.<br />
This ensures there are no synchronization problems over the JTAG interface.<br />
If you use the adaptive clocking feature, transmission delays, gate delays, and synchronization requirements result in a lower maximum clock frequency than with non-adaptive clocking.<br />
<br />
=== SWD interface ===<br />
The J-Link support ARMs Serial Wire Debug (SWD).<br />
SWD replaces the 5-pin JTAG port with a clock (SWDCLK) and a single bi-directional data pin (SWDIO), providing all the normal JTAG debug and test functionality.<br />
SWDIO and SWCLK are overlaid on the TMS and TCK pins.<br />
In order to communicate with a SWD device, J-Link sends out data on SWDIO, synchronous to the SWCLK.<br />
With every rising edge of SWCLK, one bit of data is transmitted or received on the SWDIO.<br />
<br />
==== SWD speed ====<br />
Currently only selection of a fixed SWD speed is supported by J-Link.<br />
The target is clocked at a fixed clock speed.<br />
The SWD speed which is used for target communication should not exceed target CPU speed * 10 .<br />
The maximum SWD speed which is supported by J-Link depends on the hardware version and model of J-Link.<br />
For more information about the maximum SWD speed for each J-Link / J-Trace model, please refer to the [https://www.segger.com/products/debug-probes/j-link/models/model-overview/ J-Link/J-Trace models overview].<br />
<br />
==== SWO ====<br />
Serial Wire Output (SWO) support means support for a single pin output signal from the core.<br />
For an explanation what SWO is, please refer to the [[SWO | SWO article]].<br />
<br />
===== Max. SWO speeds =====<br />
The supported SWO speeds depend on the connected emulator.<br />
They can be retrieved from the emulator.<br />
To get the supported SWO speeds for your emulator, use [[J-Link Commander]]:<br />
J-Link> if SWD //Select target interface SWD<br />
J-Link> SWOSpeed<br />
<br />
A list of the available probes and the corresponding max. SWO speeds can be found on the [https://www.segger.com/products/debug-probes/j-link/models/model-overview SEGGER homepage]<br />
<br />
===== Configuring SWO speeds =====<br />
In most cases it should not be necessary to configure the SWO speed because this is usually done by the J-Link.<br />
The max. SWO speed in practice is the max. speed which both, target and J-Link can handle.<br />
J-Link can handle the frequencies described on the [https://www.segger.com/products/debug-probes/j-link/models/model-overview SEGGER homepage] whereas the max. deviation between the target and the J-Link speed is about 3%.<br />
The computation of possible SWO speeds is typically done by the debugger.<br />
The SWO output speed of the CPU is determined by TRACECLKIN, which is often the same as the CPU clock.<br />
<br />
=== Multi-core debugging ===<br />
J-Link / J-Trace is able to debug multiple cores on one target system connected to the same scan chain.<br />
Configuring and using this feature is described in this section.<br />
<br />
==== How multi-core debugging works ====<br />
[[File:MultiCoreDebugging.png | thumb | right | 400 px | Multi core debugging setup example]]<br />
Multi-core debugging requires multiple debuggers or multiple instances of the same debugger.<br />
Two or more debuggers can use the same J-Link / J-Trace simultaneously.<br />
Configuring a debugger to work with a core in a multi-core environment does not require special settings.<br />
All that is required is proper setup of the scan chain for each debugger.<br />
This enables J-Link / J-Trace to debug more than one core on a target at the same time.<br />
The figure on the right shows a host, debugging two CPU cores with two instances of the same debugger, via one J-Link/J-Trace.<br><br />
Both debuggers share the same physical connection.<br />
The core to debug is selected through the JTAG-settings as described below.<br />
<br clear=all><br />
<br />
==== Using multi-core debugging in detail ====<br />
# Connect your target to J-Link / J-Trace.<br />
# Start your debugger, for example IAR Embedded Workbench for ARM.<br />
# Choose Project|Options and configure your scan chain.<br>The picture below shows the configuration for the first CPU core on your target.<br>[[File:MultiCoreDebugging01.gif | thumb | none | 400px | J-Link settings - IAR - Multicore debugging - 01]]<br />
# Start debugging the first core.<br />
# Start another debugger, for example another instance of IAR Embedded Workbench for ARM.<br />
# Choose Project|Options and configure your second scan chain.<br>The following dialog box shows the configuration for the second ARM core on your target.<br>[[File:MultiCoreDebugging02.gif| thumb | none | 400px | J-Link settings - IAR - Multicore debugging - 02]]<br />
# Start debugging your second core.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Core #1 !! Core #2 !! Core #3 !! TAP number debugger #1 !! TAP number debugger #2<br />
|-<br />
| '''ARM7TDMI''' || '''ARM7TDMI-S''' || ARM7TDMI || 0 || 1<br />
|-<br />
| '''ARM7TDMI''' || ARM7TDMI || '''ARM7TDMI''' || 0 || 2<br />
|-<br />
| ARM7TDMI-S || '''ARM7TDMI-S''' || '''ARM7TDMI-S''' || 1 || 2<br />
|-<br />
|}<br />
<br />
For a multi core debugging example project for SEGGER Ozone, please refer to [[Dual_Core_Debugging_with_Ozone | Dual Core Debugging with Ozone]].<br />
<br />
==== Things you should be aware of ====<br />
Multi-core debugging is more difficult than single-core debugging.<br />
You should be aware of the pitfalls related to JTAG speed and resetting the target.<br />
<br />
===== JTAG speed =====<br />
Each core has its own maximum JTAG speed.<br />
The maximum JTAG speed of all cores in the same chain is the minimum of the maximum JTAG speeds.<br />
For example:<br />
* Core #1: 2MHz maximum JTAG speed<br />
* Core #2: 4MHz maximum JTAG speed<br />
* Scan chain: 2MHz maximum JTAG speed<br />
<br />
===== Resetting the target =====<br />
All cores share the same RESET line.<br />
You should be aware that resetting one core through the RESET line means resetting all cores which have their RESET pins connected to the RESET line on the target.<br />
<br />
=== Connecting multiple J-Links / J-Traces to your PC ===<br />
In general, it is possible to have an unlimited number of J-Links / J-Traces connected to the same PC.<br />
Current J-Link models are already factory-configured to be used in a multi-J-Link environment, older J-Links can be re-configured to use them in a multi-J-link environment.<br />
<br />
The OS identifies the USB devices by their product ID, vendor id and serial number.<br />
The serial number reported by current J-Links is a unique number which allows to have an almost unlimited number of J-Links connected to the same host at the same time.<br />
In order to connect to the correct J-Link, the user has to make sure that the correct J-Link is selected (by SN or IP).<br />
In cases where no specific J-Link is selected, follwing pop up will be shown and allow the user to select the proper J-Link.<br />
[[File:GenericIDE_JLink_Select.png|thumb|none|400px| J-Link selection dialog]]<br />
<br />
==== Reconfiguration of older J-Link models to the new enumeration method ====<br />
Older J-Links may report USB0-3 instead of unique serial number when enumerating via USB.<br />
For these J-Links, we recommend to re-configure them to use the new enumeration method (report real serial number) since the USB0-3 behavior is obsolete.<br />
<br />
Re-configuration can be done by using the [[J-Link Configurator]], which is part of the [[J-Link Software and Documentation Pack]].<br />
<br />
==== Re-configuration to the old USB 0-3 enumeration method ====<br />
In some special cases, it may be necessary to switch back to the obsolete USB 0-3 enumeration method.<br />
For example, old IAR EWARM versions supports connecting to a J-Link via the USB0-3 method only.<br />
As soon as more than one J-Link is connected to the pc, there is no opportunity to pre-select the J-Link which should be used for a debug session.<br />
<br />
Below, a small instruction of how to re-configure J-Link to enumerate with the old obsolete enumeration method in order to prevent compatibility problems,<br />
a short instruction is give on how to set USB enumeration method to USB 2 is given:<br />
# Start [[J-Link Commander]] (JLink.exe)<br />
# Connect to the J-Link you want to re-configure <br />
# Enter wconf 0 02 // Set USB-Address 2<br />
# Enter wconf 1 00 // Set enumeration method to USB-Address<br />
# Power-cycle J-Link in order to apply new configuration.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Config area byte !! Meaning<br />
|-<br />
| 0 || USB-Address. Can be set to 0-3, 0xFF is default which means USB-Address 0.<br />
|-<br />
| 1 || Enumeration method<br>0x00 / 0xFF: USB-Address is used for enumeration.<br>0x01: Real-SN is used for enumeration.<br />
|-<br />
|}<br />
<br />
=== J-Link web control panel ===<br />
For information about the J-Link web control panel, please refer to the [[J-Link - Web control panel]] article.<br />
<br />
=== Reset strategies ===<br />
* See: [[J-Link Reset Strategies]]<br />
<br />
=== Using DCC for memory access ===<br />
The ARM7/9 architecture requires cooperation of the CPU to access memory when the CPU is running (not in debug mode).<br />
This means that memory cannot normally be accessed while the CPU is executing the application program.<br />
The normal way to read or write memory is to halt the CPU (put it into debug mode) before accessing memory.<br />
Even if the CPU is restarted after the memory access, the real time behavior is significantly affected; halting and restarting the CPU costs typically multiple milliseconds.<br />
For this reason, most debuggers do not even allow memory access if the CPU is running.<br />
<br />
However, there is one other option: DCC (Direct communication channel) can be used to communicate with the CPU while it is executing the application program.<br />
All that is required is the application program to call a DCC handler from time to time.<br />
This DCC handler typically requires less than 1 s per call.<br />
<br />
The DCC handler, as well as the optional DCC abort handler, is part of the J-Link software package and can be found in the %JLinkInstallDir%\Samples\DCC\IAR directory of the package.<br />
<br />
==== Requirements ====<br />
* An application program on the host (typically a debugger) that uses DCC (e.g. the [[J-Link Commander]]).<br />
* A target application program that regularly calls the DCC handler.<br />
* The supplied abort handler should be installed (optional).<br />
<br />
==== Target DCC handler ====<br />
The target DCC handler is a simple C-file taking care of the communication.<br />
The function DCC_Process() needs to be called regularly from the application program or from an interrupt handler.<br />
If an RTOS is used, a good place to call the DCC handler is from the timer tick interrupt.<br />
In general, the more often the DCC handler is called, the faster memory can be accessed.<br />
On most devices, it is also possible to let the DCC generate an interrupt which can be used to call the DCC handler.<br />
<br />
==== Target DCC abort handler ====<br />
An optional DCC abort handler (a simple assembly file) can be included in the application.<br />
The DCC abort handler allows data aborts caused by memory reads/writes via DCC to be handled gracefully.<br />
If the data abort has been caused by the DCC communication, it returns to the instruction right after the one causing the abort, allowing the application program to continue to run.<br />
In addition to that, it allows the host to detect if a data abort occurred.<br />
<br />
In order to use the DCC abort handler, 3 things need to be done:<br />
* A branch to DCC_Abort has to be placed at address 0x10 ("vector" used for data aborts).<br />
* The Abort-mode stack pointer has to be initialized to an area of at least 8 bytes of stack memory required by the handler.<br />
* The DCC abort handler assembly file has to be added to the application.<br />
<br />
=== J-Link settings file ===<br />
The J-Link setting file is only relevant for IDE developers and thus not further discussed here anymore.<br />
<br />
It is used to provide information to the [[J-Link web control panel]].<br />
<br />
=== J-Link script files ===<br />
Please refer to the [[J-Link script files]].<br />
<br />
=== J-Link Command Strings ===<br />
Please refer to [[J-Link Command Strings]].<br />
<br />
=== Switching off CPU clock during debug ===<br />
<!--- up to date? ---><br />
We recommend not to switch off CPU clock during debug.<br />
However, if you do, you should consider the following:<br />
<br />
==== Non-synthesizable cores (ARM7TDMI, ARM9TDMI, ARM920, etc.) ====<br />
With these cores, the TAP controller uses the clock signal provided by the emulator, which means the TAP controller and ICE-Breaker continue to be accessible even if the CPU has no clock.<br><br />
Therefore, switching off CPU clock during debug is normally possible if the CPU clock is periodically (typically using a regular timer interrupt) switched on every<br />
few ms for at least a few us.<br />
In this case, the CPU will stop at the first instruction in the ISR (typically at address 0x18).<br />
<br />
==== Synthesizable cores (ARM7TDMI-S, ARM9E-S, etc.) ====<br />
With these cores, the clock input of the TAP controller is connected to the output of a three-stage synchronizer, which is fed by clock signal provided by the emulator, which means<br />
that the TAP controller and ICE-Breaker are not accessible if the CPU has no clock.<br><br />
If the RTCK signal is provided, adaptive clocking function can be used to synchronize the JTAG clock (provided by the emulator) to the processor clock.<br />
This way, the JTAG clock is stopped if the CPU clock is switched off.<br><br />
<br />
If adaptive clocking is used, switching off CPU clock during debug is normally possible if the CPU clock is periodically (typically using a regular timer interrupt) switched on every<br />
few ms for at least a few us.<br />
In this case, the CPU will stop at the first instruction in the ISR (typically at address 0x18).<br />
<br />
=== Cache handling ===<br />
<!--- up to date? ---><br />
Most target systems with external memory have at least one cache.<br />
Typically, ARM7 systems with external memory come with a unified cache, which is used for both code and data.<br />
Most ARM9 systems with external memory come with separate caches for the instruction bus (I-Cache) and data bus (D-Cache) due to the hardware architecture.<br />
<br />
==== Cache coherency ====<br />
When debugging or otherwise working with a system with processor with cache, it is important to maintain the cache(s) and main memory coherent.<br />
This is easy in systems with a unified cache and becomes increasingly difficult in systems with hardware architecture.<br />
A write buffer and a D-Cache configured in write-back mode can further complicate the problem.<br />
<br />
ARM9 chips have no hardware to keep the caches coherent, so that this is the responsibility of the software.<br />
<br />
==== Cache clean area ====<br />
J-Link / J-Trace handles cache cleaning directly through JTAG commands.<br />
Unlike other emulators, it does not have to download code to the target system.<br />
This makes setting up J-Link / J-Trace easier.<br />
Therefore, a cache clean area is not required.<br />
<br />
==== Cache handling of ARM7 cores ====<br />
Because ARM7 cores have a unified cache, there is no need to handle the caches during debug<br />
<br />
==== Cache handling of ARM9 cores ====<br />
'''Note:''' The implementation of the cache handling is different for different cores. However, the cache is handled correctly for all supported ARM9 cores.<br />
<br />
ARM9 cores with cache require J-Link / J-Trace to handle the caches during debug.<br />
If the processor enters debug state with caches enabled, J-Link / J-Trace does the following:<br />
<br />
===== When entering debug state =====<br />
J-Link / J-Trace performs the following:<br />
* It stores the current write behavior for the D-Cache.<br />
* It selects write-through behavior for the D-Cache.<br />
<br />
===== When leaving debug state =====<br />
J-Link / J-Trace performs the following:<br />
* It restores the stored write behavior for the D-Cache.<br />
* It invalidates the D-Cache.<br />
<br />
=== VCOM Virtual COM Port (VCOM) ===<br />
==== Configuring Virtual COM Port ====<br />
In general, the VCOM feature can be disabled and enabled for debug probes which comes with support for it via J-Link Commander and J-Link Configurator.<br />
Below, a small description of how to use use them to configure the feature is given.<br />
<br><br>'''Note:''' VCOM can only be used when debugging via SWD target interface. Pin 5 = J-Link-Tx (out), Pin 17 = J-Link-Rx (in).<br><br />
Only J-Link models with hardware version 9 or newer come with VCOM capabilities.<br />
===== Via J-Link Configurator =====<br />
The [[J-Link Configurator]] allows the user to enable and disable the VCOM.<br />
===== Via J-Link Commander =====<br />
Start the [[J-Link Commander]] and use [[J-Link Commander#VCOM | VCOM enable|disable]] to either enable or disable the VCOM.<br><br />
After changing the configuration a power on cycle of the debug probe is necessary in order to use the new configuration.<br />
<br />
== Flash download ==<br />
This section describes how the flash download feature of the DLL can be used in different debugger environments.<br />
<br />
The J-Link DLL comes with a lot of flash loaders that allow direct programming of internal flash memory for popular microcontrollers.<br />
Moreover, the J-Link DLL also allows programming of CFI-compliant external NOR flash memory.<br />
The flash download feature of the J-Link DLL does not require an extra license and can be used free of charge.<br />
<br />
=== Benefits of the J-Link flash download feature ===<br />
Being able to download code directly into flash from the debugger or integrated IDE significantly shortens the turn-around times when testing software.<br />
The flash download feature of J-Link is very efficient and allows fast flash programming.<br />
For example, if a debugger splits the download image into several pieces, the flash download software will collect the individual parts and<br />
perform the actual flash programming right before program execution.<br />
This avoids repeated flash programming.<br />
Moreover, the J-Link flash loaders make flash behave like RAM.<br />
This means that the debugger only needs to select the correct device which enables the J-Link DLL to automatically activate the correct<br />
flash loader if the debugger writes to a specific memory address.<br><br />
This also makes it very easy for debugger vendors to make use of the flash download feature because almost no extra work is necessary on the<br />
debugger side since the debugger does not have to differ between memory writes to RAM and memory writes to flash.<br />
<br />
=== Licensing ===<br />
As mentioned in the introduction, no extra license required.<br />
The flash download feature can be used free of charge.<br />
<br />
=== Supported devices ===<br />
J-Link supports download into the internal flash of a large number of microcontrollers.<br />
You can always find the latest list of supported devices on the<br />
[https://www.segger.com/products/debug-probes/j-link/technology/cpus-and-devices/overview-of-supported-cpus-and-devices/ SEGGER Homepge].<br />
In general, J-Link can be used with any cores listed, even if it does not provide internal flash.<br><br />
Furthermore, flash download is also available for all CFI-compliant external NOR-flash devices.<br />
<br />
=== Setup for various debuggers (internal flash) ===<br />
The J-Link flash download feature can be used by different debuggers, such as IAR Embedded Workbench, Keil MDK, GDB based IDEs, ... .<br />
For different debuggers there are different steps required to enable J-Link flash download.<br><br />
Most debuggers will use the J-Link flashloader by default if the target device is specified.<br><br />
A few debuggers come with their own flashloaders and need to be configured to use the J-Link flashloader in order to achieve the maximum possible performance.<br />
For further information on how to specify the target device and on how to use the J-Link flashloader in different debuggers, please refer to [[Getting Started with Various IDEs]].<br />
<br>'''Note:'''<br><br />
While using flashloaders of a 3rd party application works in most cases,<br />
SEGGER can neither offer support for those nor guarantee that<br />
other features won't be impaired as a side effect of not using the J-Link flashloader<br />
<br />
=== Setup for various debuggers (CFI flash) ===<br />
The setup for download into CFI-compliant memory is different from the one for internal flash.<br />
Initialization of the external memory interface the CFI flash is connected to,<br />
is user's responsibility and is expected by the J-Link software to be done prior to performing accesses to the specified CFI area.<br><br />
Specifying of the CFI area is done in a J-Link script file, as explained in [[Generic IDE#CFI flash]].<br />
Furhter information about this topic can be found in<br />
*[[J-Link script files | General information about J-Link Script files]]<br />
*[[Getting Started with Various IDEs | Information about setting J-Link script files in various IDEs]]<br />
<br />
=== Setup for various debuggers (SPIFI flash) ===<br />
The J-Link DLL supports programming of SPIFI flash and the J-Link flash download feature can be used therefore by different debuggers,<br />
such as IAR Embedded Work bench, Keil MDK, GDB based IDEs, ...<br />
<br />
There is nothing special to be done by the user to also enable download into SPIFI flash.<br />
The setup and behavior is the same as if download into internal flash.<br />
For more information about how to setup different debuggers for downloading into SPIFI flash memory,<br />
please refer to [[#Setup for various debuggers (internal flash) | Setup for various debuggers (internal flash)]].<br />
<br />
=== QSPI flash support ===<br />
The J-Link DLL also supports programming of any (Q)SPI flash connected to a device that is supported by the J-Link DLL, if the device allows memory-mapped access to the flash.<br />
Most modern MCUs / CPUs provide a so called "QSPI area" in their memory-map which allows the CPU to read-access a (Q)SPI flash as regular memory (RAM, internal flash etc.).<br />
(Q)SPI flashes, that are not supported by the J-Link DLL can be added manually, with the [[SEGGER Flash Loader]].<br />
<br />
==== Setup the DLL for QSPI flash download ====<br />
There is nothing special to be done by the user to also enable download into a QSPI flash connected to a specific device.<br />
The setup and behavior is the same as if download into internal flash, which mainly means the device has to be selected and nothing else, would be performed.<br />
For more information about how to setup the J-Link DLL for download into internal flash memory, please refer to [[Setup for various debuggers (internal flash)]].<br><br />
The sectorization command set and other flash parameters are fully auto-detected by the J-Link DLL, so no special user setup is required.<br />
<br />
=== Using the DLL flash loaders in custom applications ===<br />
The J-Link DLL flash loaders make flash behave as RAM from a user perspective,<br />
since flash programming is triggered by simply calling the J-Link API functions for memory reading / writing.<br />
For more information about how to setup the J-Link API for flash programming please refer to the [https://www.segger.com/products/debug-probes/j-link/technology/j-link-sdk/ J-Link SDK].<br />
<br />
=== Debugging applications that change flash contents at runtime ===<br />
By default, when downloading an application to flash via J-Link,<br />
it is assumed that this application does not change during the debug session.<br />
This allows J-Link to do some optimization like caching certain target contents and so speed up debugging<br />
(depending on the IDE integration and the behavior of the IDE, reaction time can be 2-3 times faster with caching certain contents).<br />
However, there are cases where the application, downloaded at debug session start, may change during debugging it.<br />
These case are for example:<br />
* The application contains self-modifying code<br />
* There are some constant arrays etc. downloaded as part of the application but these are modified during the execution (e.g. non-volatile configuration data etc.)<br />
When debugging in such cases, memory windows etc. in the IDE may show the original (now incorrect) value.<br />
In order to debug in such cases,J-Link needs to be aware of that certain ranges of the flash memory are considered to be "volatile"during the debug session.<br />
This can be achieved with the [[J-Link_Command_Strings#ExcludeFlashCacheRange | ExcludeFlashCacheRange]] J-Link Command String.<br />
ExcludeFlashCacheRange <SAddr>-<EAddr><br />
Example:<br />
//<br />
// Mark the first 64 KiB of the flash as volatile<br />
//<br />
ExcludeFlashCacheRange 0x08000000-0x0800FFFF<br />
<br />
== Flash breakpoints ==<br />
This chapter describes the flash breakpoints feature of the J-Link DLL and how it can be used in different debugger environments.<br />
<br />
=== Introduction ===<br />
The J-Link DLL supports a feature called flash breakpoints which allows the user to set an unlimited number of breakpoints in flash memory rather than only<br />
being able to use the hardware breakpoints of the device.<br />
<!---- % Cortex-M? table of avaiable hardware breakpoints per arch? (inlcuding renesas rx, ) ---><br />
Usually when using hardware breakpoints only, a maximum of 2 (ARM 7/9/11) to 8 (Cortex-A/R) breakpoints can be set.<br />
The flash memory can be the internal flash memory of a supported microcontroller or external CFI-compliant flash memory.<br />
<!----- %update after move to wiki? ----><br />
This feature allows setting an unlimited number of breakpoints even if the application program is located in flash memory, thereby utilizing the debugging environment to its fullest.<br />
In the following sections the setup for different debuggers for use of the flash breakpoints feature is explained.<br />
<br />
==== How do breakpoints work? ====<br />
There are basically 2 types of breakpoints in a computer system: Hardware breakpoints and software breakpoints.<br />
Hardware breakpoints require a dedicated hardware unit for every breakpoint.<br />
In other words, the hardware dictates how many hardware breakpoints can be set simultaneously.<br />
ARM 7/9 cores have 2 breakpoint units (called "watchpoint units" in ARM's documentation), allowing 2 hardware breakpoints to be set.<br />
Hardware breakpoints do not require modification of the program code.<br />
Software breakpoints are different: The debugger modifies the program and replaces the breakpointed instruction with a special value.<br />
Additional software breakpoints do not require additional hardware units in the processor, since simply more instructions are replaced.<br />
This is a standard procedure that most debuggers are capable of, however, this usually requires the program to be located in RAM.<br />
<br />
==== What is special about software breakpoints in flash? ====<br />
Using flash break points allows setting an unlimited number of breakpoints even if the user application is not located in RAM.<br />
On modern microcontrollers this is the standard scenario because on most microcontrollers the internal RAM is not big enough to hold the complete application.<br />
When replacing instructions in flash memory this requires re-programming of the flash which takes much more time than simply replacing a instruction when debugging in RAM.<br />
The J-Link flash breakpoints feature is highly optimized for fast flash programming speed and in combination with the instruction set simulation only<br />
re-programs flash that is absolutely necessary.<br />
This makes debugging in flash using flash breakpoints almost as flawless as debugging in RAM.<br />
<br />
==== What performance can I expect? ====<br />
The J-Link flash algorithm is specially designed for this purpose and sets/clears flash breakpoints extremely fast;<br />
on microcontrollers with fast flash the difference between software breakpoints in RAM and flash is hardly noticeable.<br />
<br />
==== How is this performance achieved? ====<br />
A lot of effort was put into making flash breakpoints really usable and convenient.<br />
Flash sectors are programmed only when necessary; this is usually the moment when execution of the target program is started.<br />
Often, more than one breakpoint is located in the same flash sector, which allows programming multiple breakpoints by programming just a single sector.<br />
The contents of program memory are cached, avoiding time consuming reading of the flash sectors.<br />
A smart combination of software and hardware breakpoints allows us to use hardware breakpoints a lot of times, especially when the debugger is source level-stepping,<br />
avoiding re-programming the flash in these situations.<br />
A built-in instruction set simulator further reduces the number of required flash operations.<br />
This minimizes delays for the user, while maximizing the life time of the flash.<br />
All resources of the ARM microcontroller are available to the application program, no memory is lost for debugging.<br />
<br />
=== Licensing ===<br />
[[File:FlashBP_Eval_Warning.png | right | thumb | 400px | Flash break point limit license warning]]<br />
In order to use the flash breakpoints feature a separate license is necessary for each J-Link.<br />
For some devices J-Link comes with a device-based license and some J-Link models also come with a full license for flash breakpoints.<br />
For more information about licensing itself and which devices have a device-based license, please refer to [https://www.segger.com/products/debug-probes/j-link/models/model-overview/ The J-Link model overview].<br />
<br />
==== Free for evaluation and non-commercial use ====<br />
In general, the unlimited flash breakpoints feature of the J-Link DLL can be used free of charge for evaluation and non-commercial use.<br />
If used in a commercial project, a license needs to be purchased when the evaluation is complete.<br />
There is no time limit on the evaluation period.<br />
<br clear=all><br />
<br />
=== Supported devices ===<br />
J-Link supports flash breakpoints for a large number of microcontroller devices.<br />
A list of all supported devices can be found on the [https://www.segger.com/products/debug-probes/j-link/technology/cpus-and-devices/overview-of-supported-cpus-and-devices/ SEGGER homepage].<br />
Furthermore, flash breakpoints are also available for all CFI compliant external NOR-flashes as well as QSPI flashes<br />
<br />
=== Setup with various IDES ===<br />
In compatible debuggers, flash breakpoints work if the J-Link flash loader works and a license for flash breakpoints is present.<br />
No additional setup is required.<br />
The flash breakpoint feature is available for internal flashes and for external flash (parallel NOR CFI flash as well as QSPI flash).<br />
For more information about how to setup various debuggers for flash download, please refer to [[Getting_Started_with_Various_IDEs | Getting started with various IDEs]].<br />
Whether flash breakpoints are available can be verified using the J-Link control panel:<br />
[[File:VerifyFlashBPLic.PNG | thumb | none | 400px | J-Link - Web control panel - Settings tab]]<br />
<br />
==== Compatibility with various debuggers ====<br />
Flash breakpoints can be used in all debuggers which use the proper J-Link API to set breakpoints.<br />
Known compatible debuggers / debug interfaces are:<br />
* IAR Embedded Workbench<br />
* Keil MDK<br />
* GDB-based debuggers<br />
* Freescale Codewarrior<br />
* Mentor Graphics Sourcery CodeBench<br />
* RDI-compliant debuggers<br />
* emIDE<br />
* SEGGER Embedded Studio<br />
* SEGGER Ozone<br />
<br />
Known incompatible debuggers / debug interfaces:<br />
* Rowley Crossworks<br />
<br />
=== Flash Breakpoints in QSPI flash ===<br />
Many modern CPUs allow direct execution from QSPI flash in a so-called "QSPI area" in their memory-map.<br />
This feature is called execute-in-place (XIP).<br />
On some cores like Cortex-M where hardware breakpoints are only available in a certain address range, sometimes J-Link flash breakpoints are the only possibility to<br />
set breakpoints when debugging code running in QSPI flash.<br />
<br />
==== QSPI flashbreakpoint setup ====<br />
The setup for the debugger is the same as for downloading into QSPI flash. For more information please refer to [[#QSPI_flash_support | QSPI flash support]].<br />
<br />
== Monitor Mode Debugging ==<br />
In general, there are two standard debug modes available for CPUs:<br />
# Halt mode<br />
# Monitor mode<br />
<br />
Halt mode is the default debug mode used by J-Link.<br />
In this mode the CPU is halted and stops program execution when a breakpoint is hit or the debugger issues a halt request.<br />
This means that no parts of the application continue running while the CPU is halted (in debug mode) and peripheral interrupts can only<br />
become pending but not taken as this would require execution of the debug interrupt handlers.<br />
In some circumstances halt mode may cause problems during debugging specific systems:<br />
# Certain parts of the application need to keep running in order to make sure communication with external components does not break down.<br>This for example is the case for Bluetooth applications where the Bluetooth link needs to be kept up while the CPU is in debug mode, otherwise the communication would fail and a resume or single stepping of the user application would not be possible.<br />
# Some peripherals are also stopped when the CPU enters debug mode. For example, Pulse-width modulation (PWM) units for motor control applications may be halted while in an undefined / or even dangerous state, resulting in unwanted side-effects on the external hardware connected to these units.<br />
<br />
This is where monitor mode debugging becomes effective.<br />
In monitor debug mode the CPU is not halted but takes a specific debug exception and jumps into a defined exception handler that executes (usually in a loop)<br />
a debug monitor software that performs communication with J-Link (in order to read/write CPU registers and so on).<br />
The main effect is the same as for halting mode: the user application is interrupted at a specific point but in contrast to halting mode, the fact that the CPU<br />
executes a handler also allows it to perform some specific operations on debug entry / exit or even periodically during debug mode with almost no delay.<br />
This enables the handling of such complex debug cases as those explained above.<br />
<br />
=== Enabling monitor debugging mode ===<br />
As explained before, J-Link uses halt mode debugging by default.<br />
In order to enable monitor mode debugging, the J-Link software needs to be explicitly told to use monitor mode debugging.<br />
This is done slightly different depending on the IDE used.<br />
In general, the IDE does not notice any difference between halting and monitor debug mode.<br />
If J-Link is unable to locate a valid monitor in the target memory, it will default back to halt mode debugging in order to still allow debugging.<br><br />
For instructions on how to enable Monitor Mode Debugging, please refer to [[Generic_IDE#Enable_Monitor_Mode_Debugging | Enable Monitor Mode Debugging]]<br />
<br />
=== Availability and limitations of monitor mode ===<br />
Many CPUs only support one of these debug modes, halt mode or monitor mode.<br />
In the following it is explained for which CPU cores monitor mode is available and the resulting limitations, if any.<br />
<br />
==== Cotex-M3 and Cortex-M4 ====<br />
For Cortex-M3 and Cortex-M4, monitor mode debugging is supported.<br />
The monitor code provided by SEGGER can easily be linked into the user application.<br />
===== Considerations & Limitations =====<br />
* The user-specific monitor functions must not block the generic monitor for more than 100ms.<br />
* Manipulation of the stackpointer register (SP) from within the IDE is not possible as the stackpointer is necessary for resuming the user application on Go().<br />
* The unlimited number of flash breakpoints feature cannot be used in monitor mode. (this may change in future versions)<br />
* It is not possible to debug the monitor itself while using monitor mode.<br />
<br />
=== Monitor code ===<br />
A CPU core-specific monitor code (also ''monitor'') is necessary to perform monitor mode debugging with J-Link.<br />
This monitor code performs the communication with J-Link while the CPU is in debug mode (meaning in the monitor exception).<br />
The monitor code needs to be compiled and linked as a normal part of the application.<br><br />
Monitor codes for different cores are available from SEGGER upon request via the [https://www.segger.com/ticket Support ticket system].<br><br />
In general, the monitor code consists of three files:<br />
* <tt>JLINK_MONITOR.c</tt>: Contains user-specific functions that are called on debug mode entry, exit and periodically while the CPU is in debug mode. Functions can be filled with user-specific code. None of the functions must block the generic monitor for more than 100ms.<br />
* <tt>JLINK_MONITOR.h</tt>: Header file to populate JLINK_MONITOR_ functions.<br />
* <tt>JLINK_MONITOR_ISR.s</tt>: Generic monitor assembler file. '''This file should not be modified by the user.'''<br />
<br />
=== Debugging interrupts ===<br />
In general it is possible to debug interrupts when using monitor mode debugging but there are some things that need to be taken care of when debugging interrupts in monitor mode:<br />
* Only interrupts with a lower priority than the debug/monitor interrupt can be debugged / stepped.<br />
* Setting breakpoints in interrupt service routines (ISRs) with higher priority than the debug/monitor interrupt will result in malfunction because the CPU cannot take the debug interrupt when hitting the breakpoint.<br />
<br />
=== Servicing interrupts in debug mode ===<br />
Under some circumstances it may be useful or even necessary to have some servicing interrupts still firing while the CPU is "halted" for<br />
the debugger (meaning it has taken the debug interrupt and is executing the monitor code).<br />
This is for example the case when a Bluetooth link is supposed to be kept active.<br />
In general it is possible to have such interrupts by just assigning a higher priority to them than the debug interrupt has.<br />
Please keep in mind that there are some limitations for such interrupts:<br />
* They cannot be debugged<br />
* No breakpoints must be set in any code used by these interrupts<br />
<br />
=== Forwarding Monitor Interrupts ===<br />
In some applications, there might be an additional software layer that takes all interrupts in the first place and forwards them to the user application by<br />
explicitly calling the ISRs from the user application vector table.<br />
For such cases, it is impossible for J-Link to automatically check for the existence of a monitor mode handler as the handler is usually linked in the user application and<br />
not in the additional software layer, so the DLL will automatically switch back to halt mode debugging.<br />
In order to enable monitor mode debugging for such cases, the base address of the vector table of the user application that includes the actual monitor handler needs to be manually specified.<br />
For more information about how to do this for various IDEs, please refer to [[#Enabling monitor debugging mode | Enabling monitor debugging mode]].<br />
<br />
=== Target application performs reset (Cortex-M) ===<br />
For Cortex-M based target CPUs if the target application contains some code that issues a reset (e.g. a watchdog reset), some special care needs to be taken regarding breakpoints.<br />
In general, a target reset will leave the debug logic of the CPU untouched meaning that breakpoints etc. are left intact, however monitor mode gets disabled (bits in DEMCR get cleared).<br />
J-Link automatically restores the monitor bits within a few microseconds, after they have been detected as being cleared without explicitly being cleared by J-Link.<br><br />
However, there is a small window in which it can happen that a breakpoint is hit before J-Link has restored the monitor bits.<br />
If this happens, instead of entering debug mode, a HardFault is triggered.<br />
To avoid this, a special version of the HardFault_Handler is needed which detects if the reason for the HardFault was a breakpoint and if so,<br />
just ignores it and resumes execution of the target application.<br />
A sample for such a HardFault handler can be downloaded from the [https://www.segger.com/downloads/appnotes SEGGER website], file: ''"Generic SEGGER HardFault handler".''<br />
<br />
== Low Power Debugging ==<br />
This chapter describes how to debug low power modes on a supported target CPU.<br />
<br />
=== Introduction ===<br />
As power consumption is an important factor for embedded systems, CPUs provide different kinds of low power modes to reduce power consumption of the target system.<br />
As useful this is for the application, as problematic it is for debugging.<br />
In general, how and if debugging target applications that make use of low power modes is possible heavily depends on the target device.<br />
This is because the behavior in low power modes is implementation defined and differs from device to device.<br><br />
The following cases are the most common ones:<br />
# The device provides specific special function registers for debugging to keep some clocks running necessary for debugging, while it is in a low power mode.<br />
# The device wakes up automatically, as soon as there is a request by the debug probe on the debug interface<br />
# The device powers off the debug interface partially, allowing the debug probe to read-access certain parts but does not allow to control the CPU.<br />
# The device powers off the debug interface completely and the debug probe loses the connection to the device (temporarily)<br />
While cases 1-3 are the most convenient ones from the debug perspective because the low power mode is transparent to the end user,<br />
they do not provide a real-world scenario because certain things cannot be really tested if certain clocks are still active which would not be in the release configuration with no debug probe attached.<br />
In addition to that, the power consumption is significantly higher than in the release configuration which may cause problems on some hardware designs which<br />
are specifically designed for very low power consumption.<br><br />
The last case (debug probes temporarily loses connection) usually causes the end of a debug session because the debugger would get errors on accesses like "check if CPU is halted/hit a BP".<br />
To avoid this, there is a special setting for J-Link that can be activated, to handle such cases in a better way, which is explained in the following.<br />
<br />
=== Activating low power mode handling for J-Link ===<br />
While usually the J-Link DLL handles communication losses as errors, there is a possibility to enable low power mode handling in the J-Link DLL, which<br />
puts the DLL into a less restrictive mode (low-power handling mode) when it comes to a connection loss.<br />
The low-power handling mode is disabled by default to allow the DLL to react on target communication breakdowns.<br />
This behavior however is not desired when debugging target is unresponsive only temporarily.<br />
How the low-power mode handling mode is enabled, depends on the debug environment<br><br />
Please refer to [[Generic_IDE#Low_power_debugging | Low power mode debugging]] for instructions on how to enable low power mode handling.<br />
<br />
=== Restrictions ===<br />
As the connection to the target is temporary lost while it is in low power mode, some restrictions apply while debugging:<br />
* Make sure that the IDE does not perform periodic accesses to memory while the target is in a low power mode. E.g.: Disable periodic refresh of memory windows, close live watch windows etc.<br />
* Avoid issuing manual halt requests to the target while it is in a low power mode.<br />
* Do not try to set breakpoints while the target already is in a low power mode. If a breakpoint in a wake-up routine is supposed to be hit as soon as the target wakes up from low power mode, set this breakpoint before the target enters low power mode. This is necessary because setting break points is disabled by design while in low power mode.<br />
* Single stepping instructions that enter a low power mode (e.g. WFI/WFE on Cortex-M) is not possible/supported.<br />
* Device in low power modes that require a reset to wake-up can only be debugged when this does not reset the device's debug interface. Otherwise breakpoints and other settings are lost which may result in unpredictable behavior.<br />
<br />
J-Link does it's best to handle cases where one or more of the above restrictions is not considered but depending on how the IDE reacts to specific operations to fail,<br />
error messages may appear or the debug session will be terminated by the IDE.<br />
<br />
== RDI ==<br />
Refer to [[J-Link RDI]]<br />
<br />
== ARM SWD specifics ==<br />
Serial Wire Debug (SWD) is a debug interface specified by ARM, as a low pin count (2: SWCLK, SWDIO) alternative to the traditional 4-wire JTAG (IEEE 1149.1) debug interface.<br />
It was released before 2-wire cJTAG (IEEE 1149.7) was released.<br />
This chapter explains SWD specifics that do not apply for other debug interfaces.<br />
<br />
=== SWD multi-drop ===<br />
By default, SWD was designed as a point-to-point protocol where only one device is connected to J-Link at the same time.<br />
With the SWD V2 specification, ARM introduced support for SWD multi-drop which allows (similar to JTAG) having multiple devices sharing the same debug signals (SWCLK and SWDIO)<br />
and so allow to address many devices on the same PCB with just one debug connector.<br />
<br />
<br>'''Note:'''<br><br />
Not all devices that support SWD also support multi-drop.<br />
This requires SWDv2 compatibility. For more information about if a specific device supports multi-drop,<br />
please refer to the technical reference manual of the specific device.<br />
<br />
==== How it works ====<br />
The different devices on the multi-drop bus are identified by a combination of their <DeviceID> and a so-called <InstanceID>.<br />
While the <DeviceID> is fixed per device, the <InstanceID> is usually determined by a device via certain GPIOs being sampled at boot time<br />
(please refer to the technical reference manual of the specific device for more information about how to determine its <InstanceID>).<br />
By default, all devices on the SWD multi-drop bus are active (to be backward compatible in case only a single device is mounted on the PCB) and<br />
would all respond to commands being received.<br />
<br />
On debug session start, J-Link will send a special sequence that contains the <DeviceID> and <InstanceID> which makes sure<br />
that only the affected device is selected and all other ones enter a listening state where they do not respond on the bus anymore but<br />
still listen for a wake-up sequence containing their ID pair.<br />
From there on, only the selected device is responsive and can be debugged.<br />
<br />
==== Setting up SWD multi-drop in the J-Link software ====<br />
In order to select a specific device on the multi-drop bus, J-Link needs to know the <DeviceID> and <InstanceID> of the device to communicate with.<br />
This ID pair can be passed to J-Link via [[J-Link script files]].<br />
The J-Link script needs to implement the [[J-Link script files#ConfigTargetSettings | ConfigTargetSettings]] function and provide the following contents:<br />
<source lang="c">int ConfigTargetSettings(void) {<br />
JLINK_ExecCommand("SetSWDTargetId=0x01234567"); // 28-bit target ID<br />
JLINK_ExecCommand("SetSWDInstanceId=0x8"); // 4-bit instance ID<br />
return 0;<br />
}<br />
</source><br />
<br />
==== J-Link SWD multi-drop support ====<br />
SWD multi-drop needs to be supported by the J-Link hardware in use.<br />
For an overview about which models and hardware versions support SWD multi-drop, please refer to [[Software and Hardware Features Overview]].<br />
<br />
== RTT ==<br />
Refer to [[RTT]].<br />
<br />
== Trace ==<br />
<!--- TBD: This section needs reworking:<br />
We should refer to the different trace pages (e.g. tested devices, setting up trace, tracing on xxx, etc.<br />
Maybe some sample jlinkscript file to show people how to implement trace for themselves?<br />
---><br />
This section provides information about tracing in general as well as information about how to use SEGGER J-Trace.<br />
<br />
=== Introduction - Trace ===<br />
With increasing complexity of embedded systems, demands to debug probes and utilities (IDE, ...) increased, too.<br />
With tracing, it is possible to get an even better idea about what is happening / has happened on the target system, when tracking down a specific error.<br />
A special trace component in the target CPU (e.g. ETM on ARM targets) registers instruction fetches done by the CPU as well as some additional actions like<br />
execution/skipping of conditional instructions, target addresses of branch/jump instructions etc. and provides these events to the trace probe.<br />
Instruction trace allows reproducing what instructions have been executed by the CPU in which order, which conditional instructions have been<br />
executed/skipped etc., allowing to reconstruct a full execution flow of the CPU.<br />
<br />
<br>'''Note:'''<br>To use any of the trace features mentioned in this chapter, the CPU needs to implement this specific trace hardware unit.<br />
For more information about which targets support tracing, please refer to [[#Target devices with trace support | Target devices with trace support]].<br />
<br />
==== What is backtrace? ====<br />
Backtrace makes use of the information received from instruction trace and reconstructs the instruction flow from a specific point (e.g. when a breakpoint is hit) backwards as far as<br />
possible with the amount of sampled trace data.<br><br />
<br />
Example scenario: A breakpoint is set on a specific error case in the source that the application occasionally hits.<br><br />
When the breakpoint is hit, the debugger can recreate the instruction flow, based on the trace data provided by J-Trace,<br />
of as many instructions as fit into the trace buffer, that have been executed before the breakpoint was hit.<br />
This for example allows tracking down very complex problems e.g. interrupt related issues.<br />
These problems are hard to find with traditional debugging methods (stepping, printf debugging, ...)<br />
as they change the real-time behavior of the application and therefore might make the problem to disappear.<br />
<br />
==== Most common trace types ====<br />
There are two common approaches how a trace probe collects trace data:<br />
<ol><br />
<li><br />
'''Buffer trace:'''<br>Collects trace data while the CPU is running and stores them in a buffer on the trace probe.<br />
If the buffer is full, the buffers oldest trace data is overwritten with new data.<br />
The debugger on the PC side can request trace data from the probe only when the target CPU is halted.<br />
This allows doing backtrace as described in [[#What is backtrace? | What is backtrace?]].<br />
</li><br />
<li><br />
'''Streaming trace:'''<br />
Trace data is collected and streamed to the PC in real-time, while the CPU is running and executing code.<br />
This way, the trace buffer is read and "emptied" while being filled with trace data.<br />
This increases the amount of trace data that can used to an theoretically unlimited size (on modern systems multiple terabytes).<br />
Streaming trace allows to implement more complex trace features like code coverage and code profiling as these require a complete instruction flow,<br />
not only the last executed instructions as when using buffer trace.<br />
<br>'''Note:'''<br><br />
A J-Trace PRO is required to use this feature, as it is not supported by the J-Link models.<br />
</li><br />
</ol><br />
<br />
==== What is code coverage? ====<br />
Code coverage metrics are a way to describe the "quality" of code, as it shows how much code was executed while running in a test setup.<br />
A code coverage analyzer measures the execution of code and shows how much of a source line, block, function or file has been executed.<br />
With this information it is possible to detect code which has not been covered by tests or may even be unreachable.<br />
This enables a fast and efficient way to improve the code or to create a suitable test suite for uncovered blocks.<br />
<br>'''Note:'''<br />
As this feature makes use of streaming trace, a J-Trace PRO is required.<br />
<br />
==== What is code profiling? ====<br />
Code profiling is a form of measuring the execution time and the execution count of functions, blocks or instructions.<br />
It can be used as a metric for the complexity of a system and can highlight where computing time is spent.<br />
This provides a great insight into the running system and is essential when identifying code that is executed frequently, potentially placing a high load onto a system.<br />
The code profiling information can help to optimize a system, as it accurately shows which blocks take the most time and are worth optimizing.<br />
<br>'''Note:'''<br><br />
As this feature makes use of streaming trace, a J-Trace PRO is required.<br />
<br />
=== Tracing via trace pins ===<br />
This is the most common streaming tracing method.<br />
The target outputs trace data + a trace clock on specific pins.<br />
These pins are sampled by J-Trace and the trace data is collected.<br />
As trace data is output with a relatively high frequency (easily >= 100 MHz on modern embedded systems) a high end hardware, like J-Trace PRO, is necessary<br />
to be able to sample and digest the trace data sent by the target CPU.<br />
Our J-Trace PRO models support up to 4-bit trace which can be manually set by the user by overwriting the global variable JLINK_TRACE_Portwidth (4 by default).<br />
Please refer to [[J-Link_script_files#Global_DLL_variables | Global DLL variables]] for further information.<br />
<br />
==== Cortex-M specifics ====<br />
The trace clock output by the CPU is usually 1/2 of the speed of the CPU clock, but trace data is output double data rate (on each edge of the trace clock).<br />
There are usually 4 trace data pins on which data is output, resulting in 1 byte trace data being output per trace clock (2 * 4 bits).<br />
<br />
==== Trace signal timing ====<br />
There are certain signal timings that must be met, such as rise/fall timings for clock and data, as well as setup and hold timings for the trace data.<br />
These timings are specified by the vendor that designs the trace hardware unit (e.g. ARM that provides the ETM as a trace component for their cores).<br />
<br />
==== Adjusting trace signal timing on J-Trace ====<br />
Some target CPUs do not meet the trace timing requirements when it comes to the trace data setup times<br />
(some output the trace data at the same time they output a trace clock edge, resulting on effectively no setup time).<br />
Another case where timing requirements may not be met is for example when having one trace data line on a hardware that is longer than the other ones<br />
(necessary due to routing requirements on the PCB).<br />
For such cases J-Trace PRO allows to adjust the timing of the trace signals, inside the J-Trace firmware.<br />
For example, in case the target CPU does not provide a (sufficient) trace data setup time, the data sample timing can be adjusted inside J-Trace.<br />
This causes the data edges to be recognized by J-Trace delayed, virtually creating a setup time for the trace data.<br />
<br />
Further information about the following trace related topics can be found on the [https://www.segger.com/products/debug-probes/j-trace/technology/setting-up-trace/ SEGGER web page].<br />
* Trace timings<br />
* How to setup trace with J-Trace PRO<br />
* How trace signals can be adjusted with J-Trace PRO<br />
<br />
=== Tracing with on-chip trace buffer ===<br />
Some target CPUs provide trace functionality via an on-chip trace buffer that is used to store the trace data output by the trace hardware unit on the device.<br />
This allows to use backtrace on such targets with a regular J-Link,<br />
as the on-chip trace buffer can be read out via the regular debug interface J-Link uses to communicate with the target CPU.<br />
Downside of this implementation is that it needs RAM on the target CPU that can be used as a trace buffer.<br />
This trace buffer is very limited (usually between 1 and 4 KiB) and reduces the RAM that can be used by the target application, while tracing is done.<br />
<br />
<br>'''Note:'''<br><br />
Streaming trace is not possible with this trace implementation<br />
<br />
==== CPUs that provide tracing via pins and on-chip buffer ====<br />
Some CPUs provide a choice to either use the on-chip trace buffer for tracing<br />
(e.g. when the trace pins are needed as GPIOs etc. or are not available on all packages of the device).<br />
<ul><br />
<li>For J-Link:<br><br />
The on-chip trace buffer is automatically used, as this is the only method J-Link supports.<br />
</li><br />
<li><br />
For J-Trace:<br><br />
By default, tracing via trace pins is used.<br />
If, for some reason, the on-chip trace buffer shall be used instead, the J-Link software needs to be made aware of this.<br />
The trace source can be selected via the [[J-Link Command Strings#SelectTraceSource | SelectTraceSource]] command string.<br><br />
For more information about the syntax and how to use J-Link Command Strings, please refer to [[J-Link Command Strings]].<br />
</li><br />
</ul><br />
<br />
=== Target devices with trace support ===<br />
If and which kind of trace is support by a target device, is implementation defined.<br />
For information about trace support of a target device, please refer to the device's User/Reference Manual.<br />
<br />
==== Additional information about device support ====<br />
* [https://www.segger.com/products/debug-probes/j-link/technology/cpus-and-devices/overview-of-supported-cpus-and-devices/ General overview of all target devices that can be debugged with J-Link]<br />
* [https://www.segger.com/products/debug-probes/j-trace/technology/tested-devices/ List of devices trace was tested with, including sample projects working out-of-the-box with J-Trace]<br />
<br />
=== Streaming trace ===<br />
With introducing streaming trace, some additional concepts needed to be introduced in order to make real time analysis of the trace data possible.<br />
In the following, some considerations and specifics, that need to be kept in mind when using streaming trace, are explained.<br />
<br />
==== Download and execution address ====<br />
Analysis of trace data requires that J-Trace is aware of which instruction is present at what address on the target device.<br />
As reading from the target memory every time is not feasible during live analysis (would lead to a too big performance drop), a copy<br />
of the application contents is cached in the J-Link software at the time the application download is performed.<br />
This implies that streaming trace is only possible when the application was downloaded in the same debug session.<br />
<br />
This also implies that the execution address must be the same as the download address.<br />
In case both addresses differ from each other, the J-Link software needs to be told that the unknown addresses hold the same data as the cached ones.<br><br />
This is done via the [[J-Link Command Strings | J-Link command string]]: ''[[J-Link_Command_Strings#ReadIntoTraceCache | ReadIntoTraceCache]]''<br />
<br />
== Target interfaces and adapters ==<br />
===Interfaces===<br />
*[[Target Interface SWD]]<br />
*[[Target Interface JTAG]]<br />
*[[Target Interface C2]]<br />
*...<br />
===Adapters===<br />
*[[20-pin_J-Link_Connector | 20-pin J-Link Connector ]]<br />
*[[19-pin_JTAG/SWD_and_Trace_Connector | 19-pin JTAG/SWD and Trace Connector ]]<br />
*[[9-pin_JTAG/SWD_connector | 9-pin JTAG/SWD Connector ]]<br />
*...<br />
=== Pull-up/pull-down resistors ===<br />
Unless otherwise specified by the semiconductor manufacturer, arm recommends 100kOhms pull-ups/pull-downs.<br />
In case of doubt you should follow the recommendations given by the semiconductor manufacturer.<br />
<br />
=== Target power supply ===<br />
On the 20 pin connector pin 19,<br><br />
on the 19 pin connector pin 11 and 13<br><br />
can be used to supply power to the target hardware.<br />
Supply voltage is 5V, max. current is 300mA.<br />
The output current is monitored and protected against overload and short-circuit.<br><br />
Power can be controlled via the [[J-Link Commander]].<br />
<br>'''Note:''' The 9 pin connector does not support this feature.<br><br />
The following commands are available to control power:<br />
{| class="wikitable"<br />
! Command !! Explanation<br />
|-<br />
| [[J-Link_Commander#power | power on]] || Switch target power on<br />
|-<br />
| [[J-Link_Commander#power | power off]] || Switch target power off<br />
|-<br />
| [[J-Link_Commander#power | power on perm]] || Set target power supply default to "on"<br />
|-<br />
| [[J-Link_Commander#power | power off perm]] || Set target power supply default to "off"<br />
|}<br />
<br />
=== Reference voltage (VTref) ===<br />
VTref is the target reference voltage.<br />
It is used by the J-Link to check if the target has power, to create the logic-level reference for the input comparators and to control the output logic levels to the target.<br />
It is normally fed from VDD of the target board and must not have a series resistor.<br />
<br />
Current hardware versions of J-Link support configuring a fixed voltage for VTref which is then generated by J-Link on its own and fed to the input comparators of J-Link.<br><br />
This allows saving the VTref pin in the board design.<br><br />
For more information on how to configure and enable the fixed VTref feature on J-Link, please refer to [[J-Link_Commander#VTREF | J-Link Commander and its "VTREF" command]].<br />
<br />
In cases where the VTref signal should not be wired to save one more pin / place on the target hardware interface connector (e.g. in production environments),<br />
SEGGER offers a special adapter called J-Link Supply Adapter which can be used for such purposes.<br />
Further information regarding this, can be found on the [https://www.segger.com/products/debug-probes/j-link/accessories/adapters/supply-adapter/ SEGGER website].<br />
<br />
=== Adapters ===<br />
There are various adapters available for J-Link as for example the JTAG isolator, the J-Link RX adapter or the J-Link Cortex-M adapter.<br><br />
For more information about the different adapters, please refer to the [https://www.segger.com/products/debug-probes/j-link/accessories/adapters/overview/ SEGGER website].<br />
<br />
== Background information ==<br />
For general background information about embedded systems, embedded programming languages, debug communication and more, please refer to the [[Knowledge Base]] of this wiki.<br />
<br />
=== Flash programming ===<br />
J-Link / J-Trace comes with a DLL, which allows - amongst other functionalities - reading and writing RAM, CPU registers, starting and stopping the CPU, and setting breakpoints.<br />
The standard DLL does not have API functions for flash programming.<br />
However, the functionality offered can be used to program the flash.<br />
In that case, a flashloader is required.<br />
<br />
==== How does flash programming via J-Link / J-Trace work? ====<br />
This requires extra code.<br />
This extra code typically downloads a program into the RAM of the target system, which is able to erase and program the flash.<br />
This program is called ''RAM code''. It contains an implementation of the flash programming algorithm for the particular flash.<br />
Different flash chips have different programming algorithms; the programming algorithm also depends on other things such as endianness of the target system and organization<br />
of the flash memory (for example 1 * 8 bits, 1 * 16 bits, 2 * 16 bits or 32 bits).<br />
The RAM code requires data to be programmed into the flash memory.<br />
There are 2 ways of supplying this data: Data download to RAM or data download via DCC.<br />
<br />
==== Data download to RAM ====<br />
The data (or part of it) is downloaded to another part of the RAM of the target system.<br />
The Instruction pointer (R15) of the CPU is then set to the start address of the RAM code, the CPU is started, executing the RAM code.<br />
The RAM code, which contains the programming algorithm for the flash chip, copies the data into the flash chip.<br />
The CPU is stopped after this.<br />
This process may have to be repeated until the entire data is programmed into the flash.<br />
<br />
==== Data download via DCC ====<br />
<!--- up to date? ----> <br />
In this case, the RAM code is started as described above before downloading any data.<br />
The RAM code then communicates with the host computer (via DCC, JTAG and J-Link / J-Trace), transferring data to the target.<br />
It programs the data into flash and waits for new data from the host.<br />
The WriteMemory functions of J-Link / J-Trace are used to transfer the RAM code only, but not to transfer the data.<br />
The CPU is started and stopped only once.<br />
Using DCC for communication is typically faster than using WriteMemory for RAM download because the overhead is lower.<br />
<br />
==== Available options for flash programming ====<br />
There are different solutions available to program internal or external flashes connected to ARM cores using J-Link / J-Trace.<br />
The different solutions have different fields of application, but of course also some overlap.<br />
<br />
===== J-Flash - Complete flash programming solution =====<br />
J-Flash is a stand-alone Windows application, which can read / write data files and program the flash in almost any ARM system.<br />
For information about J-Flash, Please refer to [[J-Flash]].<br />
<br />
===== RDI flash loader: Allows flash download from any RDI-compliant tool chain =====<br />
RDI (Remote debug interface) is a standard not commonly used anymore, for "debug transfer agents" such as J-Link.<br />
It allows using J-Link from any RDI compliant debugger.<br />
RDI by itself does not include download to flash.<br />
To debug in flash, you need to somehow program your application program (debuggee) into the flash.<br />
You can use J-Flash for this purpose, use the flash loader supplied by the debugger company (if they supply a matching flash loader) or use the flash loader integrated in the J-Link RDI software.<br />
The RDI software as well as the RDI flash loader require licenses from SEGGER.<br />
<br />
===== Flash loader of compiler / debugger =====<br />
A lot of debuggers (some of them integrated into an IDE) come with their own flash loaders (e.g. IAR).<br />
The flash loaders can of course be used if they match your flash configuration, which is something that needs to be checked with the vendor of the debugger.<br />
<br />
===== Write your own flash loader =====<br />
Please refer to [[SEGGER Flash Loader]].<br />
<br />
=== J-Link / J-Trace firmware ===<br />
[[File:Firmware_Update_Marked.png | thumb | right | 600px | <br />
<ul><li>The <span style="color:red">red box</span> identifies the new firmware.</li><li>The <span style="color:green">green box</span> identifies the old firmware which has been replaced.</li></ul><br />
]]<br />
The heart of J-Link / J-Trace is a microcontroller.<br />
The firmware is the software executed by the microcontroller inside of the J-Link / J-Trace.<br />
The J-Link / J-Trace firmware sometimes needs to be updated.<br />
This firmware update is performed automatically as necessary by the J-Link DLL.<br />
<br />
==== Firmware update ====<br />
Every time you connect to J-Link / J-Trace, the J-Link DLL checks if its embedded firmware is newer than the one used the J-Link / J-Trace.<br />
The DLL will then update the firmware automatically.<br />
This process usually takes less than 3 seconds and does not require power cycle of the J-Link.<br />
<br />
'''It is recommended to always use the latest version of J-Link DLL, available as part of the [[#J-Link software and documentation pack | J-Link Software and Documentation Pack]].'''<br />
<br clear=all><br />
<br />
==== Downgrading / Replacing the firmware ====<br />
[[File:Firmware_Downgrade_Marked.png | right | thumb | 600px |<br />
<ul><li> "Updating firmware" identifies the new firmware.</li><li>"Replacing firmware" identifies the old firmware which has been replaced.</li></ul><br />
]]<br />
Downgrading J-Link / J-Trace is not performed automatically through an old J-Link DLL.<br />
J-Link / J-Trace will continue using its current, newer firmware when using older versions of the J-Link DLL.<br />
<br />
<br>'''Note:'''<br />
* Downgrading J-Link / J-Trace is not recommended. It is performed by the users own risk!<br />
* Out dated firmware might not execute properly with newer hardware versions.<br />
<br />
There are multiple ways to replace the firmware of a J-Link / J-Trace. However, the procedure itself is always the same:<br><br />
# The current J-Link / J-Trace firmware has to be invalidated.<br />
# The J-Link / J-Trace has to be updated to the desired firmware.<br />
<br />
The two most common ways to do this are:<br />
<ul><br />
<li><br />
Via the [[J-Link Configurator]]:<br><br />
<ol><br />
<li>Open the J-Link Configurator of the [[#J-Link Software and Documentation Pack | J-Link Software and Documentation Pack]] with the J-Link DLL containing the desired Firmware version.<br />
<li>Right click on the J-Link / J-Trace you want to replace the firmware on.</li><br />
<li>Click on "Replace firmware".</li><br />
</ol><br />
</li><br />
<li><br />
Via the [[J-Link Commander]]:<br><br />
<ol><br />
<li>Connect to the J-Link / J-Trace you want to replace the firmware on.</li><br />
<li>Execute the [[J-Link_Command_Strings#InvalidateFW | InvalidateFW command string]] via the command: <tt>exec InvalidateFW</tt>.</li><br />
<li><br />
Connect to the J-Link with any application using the the J-Link DLL containing the desired Firmware version.<br><br />
This automatically replaces the invalidated firmware with its embedded firmware.<br />
</li><br />
</ol><br />
</li><br />
</ul><br />
In the screenshot, the yellow box contains information about the formerly used J-Link / J-Trace firmware version, which is invalidated.<br />
This is also show in the screenshot, were the invalidated firmware (2nd red box) is replaced with the one provided by the currently used J-Link DLL (green box).<br />
<br clear=all><br />
<br />
== Designing the target board for trace ==<br />
<!--- Chapter up-to-date? ----><br />
This chapter describes the hardware requirements which have to be met by the target board.<br />
<br />
=== Overview of high-speed board design ===<br />
Failure to observe high-speed design rules when designing a target system containing an ARM Embedded Trace Macrocell (ETM)<br />
trace port can result in incorrect data being captured by J-Trace.<br />
Serious consideration must be given to high-speed signals when designing the target system.<br><br />
The signals coming from an ARM ETM trace port can have very fast rise and fall times,<br />
even at relatively low frequencies.<br />
<br />
'''Note:'''These principles apply to all of the trace port signals (''TRACECLK, TRACEDATA[0], TRACEDATA[1], TRACEDATA[2], TRACEDATA[3]'').<br />
<br />
==== Avoiding stubs ====<br />
Stubs are short pieces of track that tee off from the main track carrying the signal to, for example, a test point or a connection to an intermediate device.<br />
Stubs cause impedance discontinuities that affect signal quality and must be avoided.<br><br />
Special care must therefore be taken when ETM signals are multiplexed with other pin functions and<br />
where the PCB is designed to support both functions with differing tracking requirements.<br />
<br />
==== Minimizing Signal Skew (Balancing PCB Track Lengths) ====<br />
It must be attempted to match the lengths of the PCB tracks carrying the trace signals from the CPU to<br />
the [[#19-pin JTAG/SWD and Trace connector | 19-pin JTAG/SWD and Trace connector]] to be within approximately 0.5 inches (12.5mm) of each other.<br />
Any greater differences directly impact the setup and hold time requirements.<br />
<br />
==== Minimizing Crosstalk ====<br />
Normal high-speed design rules must be observed.<br />
For example, do not run dynamic signals parallel to each other for any significant distance, keep them spaced well apart, and use a ground plane and so forth.<br />
Particular attention must be paid to the ''TRACECLK'' signal.<br />
If in any doubt, place grounds or static signals between the ''TRACECLK'' and any other dynamic signals.<br />
<br />
==== Using impedance matching and termination ====<br />
Termination is almost certainly necessary, but there are some circumstances where it is not required.<br />
The decision is related to track length between the CPU and the [[#19-pin JTAG/SWD and Trace connector | 19-pin JTAG/SWD and Trace connector]],<br />
see [[#Terminating the trace signal | Terminating the trace signal]] for further reference.<br />
<br />
==== Terminating the trace signal ====<br />
There are three options for the trace signal termination:<br />
* Matched impedance.<br />
* Series (source) termination.<br />
* DC parallel termination.<br />
<br />
===== Matched impedance =====<br />
Where available, the best termination scheme is to have the CPU manufacturer match the output impedance of the driver to the impedance of the PCB track on your board.<br />
This produces the best possible signal.<br />
<br />
===== Series (source) termination =====<br />
This method requires a resistor fitted in series with the signal.<br />
The resistor value plus the output impedance of the driver must be equal to the PCB track impedance.<br />
<br />
===== DC parallel termination =====<br />
This requires either a single resistor to ground, or a pull-up/pull-down combination of resistors (Thevenin termination),<br />
fitted at the end of each signal and as close as possible to the [[#19-pin JTAG/SWD and Trace connector | 19-pin JTAG/SWD and Trace connector]].<br />
If a single resistor is used, its value must be set equal to the PCB track impedance.<br />
If the pull-up/pull-down combination is used, their resistance values must be selected so that their parallel combination equals the PCB track impedance.<br><br />
'''Caution:'''<br><br />
At lower frequencies, parallel termination requires considerably more drive capability from the CPU than series termination and so,<br />
in practice, DC parallel termination is rarely used.<br />
<br />
==== Rules for series terminators ====<br />
Series (source) termination is the most commonly used method.<br />
The basic rules are:<br />
<ol><br />
<li><br />
The series resistor must be placed as close as possible to the ASIC pin (less than 0.5 inches).<br />
</li><br />
<li><br />
The value of the resistor must equal the impedance of the track minus the output impedance of the output driver.<br />
So for example, a 50 PCB track driven by an output with a 17 impedance, requires a resistor value of 33.<br />
</li><br />
<li><br />
A source terminated signal is only valid at the end of the signal path.<br />
At any point between the source and the end of the track, the signal appears distorted because of reflections.<br />
Any device connected between the source and the end of the signal path therefore sees the distorted signal and might not operate correctly.<br />
Care must be taken not to connect devices in this way, unless the distortion does not affect device operation.<br />
</li><br />
</ol><br />
<br />
=== Signal requirements ===<br />
The table below lists the specifications that apply to the signals as seen at the [[#19-pin JTAG/SWD and Trace connector | 19-pin JTAG/SWD and Trace connector]].<br />
{| class="wikitable"<br />
! Signal name !! Description !! Value<br />
|-<br />
| t<sub>wl</sub> || TRACECLK LOW pulse width || Min. 2 ns<br />
|-<br />
| t<sub>wh</sub> || TRACECLK HIGH pulse width || Min. 2 ns<br />
|-<br />
| t<sub>r</sub>/t<sub>f</sub> || Clock and data rise/fall time || Max. 3 ns<br />
|-<br />
| t<sub>s</sub> || Data setup time || Min. 3 ns<br />
|-<br />
| t<sub>h</sub> || Data hold time || Min. 2 ns<br />
|}<br />
'''Note:''' J-Trace PRO has been designed to work with min. 1 ns ts and min. 1 ns th.<br />
<br />
== Semihosting ==<br />
Refer to [[Semihosting]]<br />
<br />
== Environmental Conditions & Safety ==<br />
* '''Common trades for all devices:'''<br />
** Operating temperature +5°C ... +60°C (+5°C ... +45°C for '''Flasher Portable PLUS''' while charging internal battery)<br />
** Storage temperature -20°C ... +65°C<br />
** Relative humidity (non-condensing) Max. 90% rH<br />
** For indoor use only. Use on current-limited USB ports only.<br />
* '''J-Link WiFi:'''<br />
** This device is test equipment and consequently is exempt from part 15 of the FCC rules under section 15.103.<br />
<br />
=== Affected models ===<br />
If not otherwise mentioned, the following models are affected by these safety notes:<br><br />
* [https://www.segger.com/products/debug-probes/j-link/models/model-overview/ J-Link]:<br />
** J-Link BASE<br />
** J-Link PLUS<br />
** J-Link ULTRA+<br />
** J-Link WiFi<br />
** J-Link PRO<br />
** J-Link BASE Compact<br />
** J-Link PLUS Compact<br />
* [https://www.segger.com/products/production/flasher/ Flasher]:<br />
** Flasher ARM<br />
** Flasher PRO<br />
** Flasher Portable<br />
** Flasher Portable PLUS<br />
** Flasher Secure<br />
* [https://www.segger.com/products/debug-probes/j-trace/models/model-overview/ J-Trace]:<br />
** J-Trace PRO Cortex-M<br />
** J-Trace PRO Cortex<br />
<br />
== Contacting support ==<br />
Before contacting support, make sure you tried to solve the problem by following the steps outlined in the [[J-Link_cannot_connect_to_the_CPU | J-Link troubleshooting guide]].<br><br />
Please also try your J-Link / J-Trace with another PC and if possible with another target system to see if it works there.<br><br />
If the device functions correctly, the USB setup on the original machine or your target hardware is the source of the problem, not J-Link / J-Trace.<br><br />
If you require support and your poduct is still within valid support period, or you encountered a bug, please contact us via the [https://www.segger.com/support/technical-support/ contact form on the SEGGER homepage].<br><br />
Otherwise, feel free to ask your questions in the [https://forum.segger.com/ SEGGER community forum].<br />
<br />
Please make sure to provide:<br />
* A detailed description of the problem.<br />
* J-Link/J-Trace serial number.<br />
* A screenshot of the entire [[J-Link_Commander | J-Link Commander]] output.<br />
* Your findings of the signal analysis.<br />
* Information about your target hardware (processor, board, etc.).<br />
<br />
J-Link / J-Trace is sold directly by SEGGER or as OEM-product by other vendors.<br />
Please note that SEGGER can only support official SEGGER products.</div>Leonhttps://wiki.segger.com/index.php?title=J-Link_GUI_Dialogs&diff=16938J-Link GUI Dialogs2023-11-07T08:45:35Z<p>Leon: Created page with "The J-Link GUI Software, as well as other SEGGER software, such as Ozone and Embedded Studio, and third-party tools, which include J-Link support, may show informa..."</p>
<hr />
<div>The [[J-Link GUI Software]], as well as other SEGGER software, such as [[Ozone]] and [[Embedded Studio]], and third-party tools, which include J-Link support,<br />
may show informative pop up windows and dialogs regarding the operation of J-Link.<br />
<br />
For consistent display of GUI dialogs the [https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack J-Link Software Pack] needs to be installed.<br />
<br />
The J-Link Software can handle systems without a window manager. It does not attempt to show dialogs and accepts dialogs with the default choice.<br />
This enables use of the J-Link Software and additional tools on headless systems, such as in CI/CD pipelines.<br />
<br />
== Missing Dialogs ==<br />
<br />
When the J-Link Software Pack is not installed, other tools which include a J-Link library V7.88f or later might not display dialogs, such as the flash programming dialog anymore.<br />
The J-Link operation is not affected by this behavior. If there are errors, they will be propagated to the tool and handled as usual.<br />
<br />
To resolve the inconvenience, install the J-Link Software Pack.<br />
An update of the J-Link Library in the tool, as provided by J-Link DLL Updater, is recommended but optional.</div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12&diff=16810Flasher Hub-122023-10-26T08:02:05Z<p>Leon: Redirected page to UM08043 Flasher Hub-12</p>
<hr />
<div>#REDIRECT [[UM08043_Flasher_Hub-12]]</div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12&diff=16668Flasher Hub-122023-10-19T11:30:45Z<p>Leon: /* Getting started */</p>
<hr />
<div>[[File: FlasherHub12.svg | thumb | SEGGER Flasher Hub-12]]<br />
<br />
This is the user documentation for owners of a SEGGER Flasher Hub-12.<br />
<br />
'''This article is work in progress.'''<br />
<br />
<br />
__TOC__<br />
<br />
= How Flasher Hub-12 works =<br />
<br />
Flasher Hub-12 makes ultra-fast high speed parallel programming ("gang programming") with up to 12 channels possible.<br />
Flasher Hub-12 is connected to one or more modules (Flasher Compact). Each module is connected to a target chip.<br />
Using one of the Flasher Hub-12's host interfaces, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
= Getting started =<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply ([[#Power_supply |see below for more information]])<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is running the most recent firmware, [[#Updating_Flasher_Hub-12_firmware | as described below]]<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Flasher Hub-12 is now up and running<br />
<br />
= Power supply = <br />
<br />
[[File: SEGGER_Flasher-Hub12_Host-Connector.png | 400px | float | right | Flasher Hub-12 back panel]]<br />
<br />
Flasher Hub-12 is powered via the '''POWER''' connector on the back panel.<br><br />
The power supply must be able to supply 8 - 30 V DC, max. 60 W to Flasher Hub-12.<br />
<br clear="all"><br />
{{Note|1=<br />
* The power supply powers Flasher Hub-12 itself as well as all connected modules.<br />
* An insufficient power supply may lead to undefined behavior of Flasher Hub-12.<br />
}}<br />
<br />
= Firmware update =<br />
<br />
Firmware update files for both, Flasher Hub-12 as well as Flasher Compact modules are shipped with each new release of the Flasher software package.<br />
<br />
== Updating Flasher Hub-12 firmware ==<br />
<br />
The Flasher Hub-12 firmware can up updated by using the Flasher software or by using Flasher Hub's web interface.<br />
<br />
=== Using Flasher software ===<br />
<br />
[[File: FlasherConfig_FH12FWUpdate.png | thumb | Flasher Hub-12 firmware update in Flasher Configurator]]<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to a PC via USB or IP<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Flasher Configurator will now update the firmware of Flasher Hub-12<br />
<br />
<br clear="all"><br />
<br />
=== Using Flasher Hub-12 web interface ===<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher Hub-12 firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''FlasherHub-12_V1.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Reboot Flasher Hub to apply the firmware update<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_FWUpdate.png | Web interface firmware update file upload<br />
File: FH12_WebIF_SelectFW.png | Selection of Flasher Hub-12 firmware file<br />
File: FH12_WebIF_ProcessingFW.png | Flasher Hub-12 processing a firmware update file<br />
File: FH12_WebIF_FWUpdateReboot.png | Web interface following a successful firmware update file upload<br />
</gallery><br />
<br />
== Updating module firmware ==<br />
<br />
The firmware of modules connected to the Flasher Hub-12 can be updated as follows.<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''Flasher_Compact_V*.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Navigate to ''Status''<br />
# In the table below ''Module Status'', select the modules to apply the firmware update to<br />
# Click ''Update firmwares''<br />
# <br />
<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_ModFWUpdate.png | Web interface module firmware update file upload<br />
File: FH12_WebIF_SelectModFW.png | Selection of Flasher Hub-12 module firmware file<br />
File: FH12_WebIF_ProcessingModFW.png | Flasher Hub-12 processing a module firmware update file<br />
File: FH12_WebIF_UpdateMod.png | Web interface ''Status''<br />
File: FH12_WebIF_ApplyingModFWUpdate.png | Web interface while module firmware update is applied<br />
</gallery></div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12&diff=16667Flasher Hub-122023-10-19T11:30:13Z<p>Leon: /* Getting started */</p>
<hr />
<div>[[File: FlasherHub12.svg | thumb | SEGGER Flasher Hub-12]]<br />
<br />
This is the user documentation for owners of a SEGGER Flasher Hub-12.<br />
<br />
'''This article is work in progress.'''<br />
<br />
<br />
__TOC__<br />
<br />
= How Flasher Hub-12 works =<br />
<br />
Flasher Hub-12 makes ultra-fast high speed parallel programming ("gang programming") with up to 12 channels possible.<br />
Flasher Hub-12 is connected to one or more modules (Flasher Compact). Each module is connected to a target chip.<br />
Using one of the Flasher Hub-12's host interfaces, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
= Getting started =<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply (see below for more information)<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is running the most recent firmware, [[#Updating_Flasher_Hub-12_firmware | as described below]]<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Flasher Hub-12 is now up and running<br />
<br />
= Power supply = <br />
<br />
[[File: SEGGER_Flasher-Hub12_Host-Connector.png | 400px | float | right | Flasher Hub-12 back panel]]<br />
<br />
Flasher Hub-12 is powered via the '''POWER''' connector on the back panel.<br><br />
The power supply must be able to supply 8 - 30 V DC, max. 60 W to Flasher Hub-12.<br />
<br clear="all"><br />
{{Note|1=<br />
* The power supply powers Flasher Hub-12 itself as well as all connected modules.<br />
* An insufficient power supply may lead to undefined behavior of Flasher Hub-12.<br />
}}<br />
<br />
= Firmware update =<br />
<br />
Firmware update files for both, Flasher Hub-12 as well as Flasher Compact modules are shipped with each new release of the Flasher software package.<br />
<br />
== Updating Flasher Hub-12 firmware ==<br />
<br />
The Flasher Hub-12 firmware can up updated by using the Flasher software or by using Flasher Hub's web interface.<br />
<br />
=== Using Flasher software ===<br />
<br />
[[File: FlasherConfig_FH12FWUpdate.png | thumb | Flasher Hub-12 firmware update in Flasher Configurator]]<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to a PC via USB or IP<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Flasher Configurator will now update the firmware of Flasher Hub-12<br />
<br />
<br clear="all"><br />
<br />
=== Using Flasher Hub-12 web interface ===<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher Hub-12 firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''FlasherHub-12_V1.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Reboot Flasher Hub to apply the firmware update<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_FWUpdate.png | Web interface firmware update file upload<br />
File: FH12_WebIF_SelectFW.png | Selection of Flasher Hub-12 firmware file<br />
File: FH12_WebIF_ProcessingFW.png | Flasher Hub-12 processing a firmware update file<br />
File: FH12_WebIF_FWUpdateReboot.png | Web interface following a successful firmware update file upload<br />
</gallery><br />
<br />
== Updating module firmware ==<br />
<br />
The firmware of modules connected to the Flasher Hub-12 can be updated as follows.<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''Flasher_Compact_V*.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Navigate to ''Status''<br />
# In the table below ''Module Status'', select the modules to apply the firmware update to<br />
# Click ''Update firmwares''<br />
# <br />
<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_ModFWUpdate.png | Web interface module firmware update file upload<br />
File: FH12_WebIF_SelectModFW.png | Selection of Flasher Hub-12 module firmware file<br />
File: FH12_WebIF_ProcessingModFW.png | Flasher Hub-12 processing a module firmware update file<br />
File: FH12_WebIF_UpdateMod.png | Web interface ''Status''<br />
File: FH12_WebIF_ApplyingModFWUpdate.png | Web interface while module firmware update is applied<br />
</gallery></div>Leonhttps://wiki.segger.com/index.php?title=File:SEGGER_Flasher-Hub12_Host-Connector.png&diff=16666File:SEGGER Flasher-Hub12 Host-Connector.png2023-10-19T11:28:25Z<p>Leon: Leon uploaded a new version of File:SEGGER Flasher-Hub12 Host-Connector.png</p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:SEGGER_Flasher-Hub12_Host-Connector.png&diff=16665File:SEGGER Flasher-Hub12 Host-Connector.png2023-10-19T11:25:41Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12&diff=16660Flasher Hub-122023-10-19T08:10:02Z<p>Leon: /* Updating Flasher Hub-12 firmware */</p>
<hr />
<div>[[File: FlasherHub12.svg | thumb | SEGGER Flasher Hub-12]]<br />
<br />
This is the user documentation for owners of a SEGGER Flasher Hub-12.<br />
<br />
'''This article is work in progress.'''<br />
<br />
<br />
__TOC__<br />
<br />
= How Flasher Hub-12 works =<br />
<br />
Flasher Hub-12 makes ultra-fast high speed parallel programming ("gang programming") with up to 12 channels possible.<br />
Flasher Hub-12 is connected to one or more modules (Flasher Compact). Each module is connected to a target chip.<br />
Using one of the Flasher Hub-12's host interfaces, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
= Getting started =<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply (see below for more information)<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is running the most recent firmware, [[#Updating_Flasher_Hub-12_firmware | as described below]]<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Flasher Hub-12 is now up and running<br />
<br />
= Firmware update =<br />
<br />
Firmware update files for both, Flasher Hub-12 as well as Flasher Compact modules are shipped with each new release of the Flasher software package.<br />
<br />
== Updating Flasher Hub-12 firmware ==<br />
<br />
The Flasher Hub-12 firmware can up updated by using the Flasher software or by using Flasher Hub's web interface.<br />
<br />
=== Using Flasher software ===<br />
<br />
[[File: FlasherConfig_FH12FWUpdate.png | thumb | Flasher Hub-12 firmware update in Flasher Configurator]]<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to a PC via USB or IP<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Flasher Configurator will now update the firmware of Flasher Hub-12<br />
<br />
<br clear="all"><br />
<br />
=== Using Flasher Hub-12 web interface ===<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher Hub-12 firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''FlasherHub-12_V1.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Reboot Flasher Hub to apply the firmware update<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_FWUpdate.png | Web interface firmware update file upload<br />
File: FH12_WebIF_SelectFW.png | Selection of Flasher Hub-12 firmware file<br />
File: FH12_WebIF_ProcessingFW.png | Flasher Hub-12 processing a firmware update file<br />
File: FH12_WebIF_FWUpdateReboot.png | Web interface following a successful firmware update file upload<br />
</gallery><br />
<br />
== Updating module firmware ==<br />
<br />
The firmware of modules connected to the Flasher Hub-12 can be updated as follows.<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to LAN<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''Flasher_Compact_V*.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Navigate to ''Status''<br />
# In the table below ''Module Status'', select the modules to apply the firmware update to<br />
# Click ''Update firmwares''<br />
# <br />
<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_ModFWUpdate.png | Web interface module firmware update file upload<br />
File: FH12_WebIF_SelectModFW.png | Selection of Flasher Hub-12 module firmware file<br />
File: FH12_WebIF_ProcessingModFW.png | Flasher Hub-12 processing a module firmware update file<br />
File: FH12_WebIF_UpdateMod.png | Web interface ''Status''<br />
File: FH12_WebIF_ApplyingModFWUpdate.png | Web interface while module firmware update is applied<br />
</gallery></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_SelectModFW.png&diff=16659File:FH12 WebIF SelectModFW.png2023-10-19T08:08:06Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_UpdateMod.png&diff=16658File:FH12 WebIF UpdateMod.png2023-10-19T08:06:43Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_ProcessingModFW.png&diff=16657File:FH12 WebIF ProcessingModFW.png2023-10-19T08:06:28Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_ModFWUpdate.png&diff=16656File:FH12 WebIF ModFWUpdate.png2023-10-19T08:06:15Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_ApplyingModFWUpdate.png&diff=16655File:FH12 WebIF ApplyingModFWUpdate.png2023-10-19T08:05:50Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12&diff=16654Flasher Hub-122023-10-19T07:42:50Z<p>Leon: /* Updating Flasher Hub-12 firmware */</p>
<hr />
<div>[[File: FlasherHub12.svg | thumb | SEGGER Flasher Hub-12]]<br />
<br />
This is the user documentation for owners of a SEGGER Flasher Hub-12.<br />
<br />
'''This article is work in progress.'''<br />
<br />
<br />
__TOC__<br />
<br />
= How Flasher Hub-12 works =<br />
<br />
Flasher Hub-12 makes ultra-fast high speed parallel programming ("gang programming") with up to 12 channels possible.<br />
Flasher Hub-12 is connected to one or more modules (Flasher Compact). Each module is connected to a target chip.<br />
Using one of the Flasher Hub-12's host interfaces, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
= Getting started =<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply (see below for more information)<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is running the most recent firmware, [[#Updating_Flasher_Hub-12_firmware | as described below]]<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Flasher Hub-12 is now up and running<br />
<br />
= Firmware update =<br />
<br />
Firmware update files for both, Flasher Hub-12 as well as Flasher Compact modules are shipped with each new release of the Flasher software package.<br />
<br />
== Updating Flasher Hub-12 firmware ==<br />
<br />
The Flasher Hub-12 firmware can up updated by using the Flasher software or by using Flasher Hub's web interface.<br />
<br />
=== Using Flasher software ===<br />
<br />
[[File: FlasherConfig_FH12FWUpdate.png | thumb | Flasher Hub-12 firmware update in Flasher Configurator]]<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to a PC via USB or IP<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Flasher Configurator will now update the firmware of Flasher Hub-12<br />
<br />
<br clear="all"><br />
<br />
=== Using Flasher Hub-12 web interface ===<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Navigate to ''Configuration'' > ''Flasher Hub''<br />
# Next to ''Flasher Hub-12 firmware update'' click ''Choose file''<br />
# Navigate to the installation folder of the Flasher software (e.g. ''C:\Program Files\SEGGER\Flasher'')<br />
# Inside the "''Firmwares''" folder, select the '''FlasherHub-12_V1.bin'''<br />
# Click ''Open''<br />
# Click ''Upload''<br />
# Wait for the firmware update file to be processed by Flasher Hub-12<br />
# Reboot Flasher Hub to apply the firmware update<br />
<gallery mode="slideshow"><br />
File: FH12_WebIF_Config_FH.png | Web interface ''Configuration'' > ''Flasher Hub''<br />
File: FH12_WebIF_FWUpdate.png | Web interface firmware update file upload<br />
File: FH12_WebIF_SelectFW.png | Selection of Flasher Hub-12 firmware file<br />
File: FH12_WebIF_ProcessingFW.png | Flasher Hub-12 processing a firmware update file<br />
File: FH12_WebIF_FWUpdateReboot.png | Web interface following a successful firmware update file upload<br />
</gallery></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_FWUpdateReboot.png&diff=16653File:FH12 WebIF FWUpdateReboot.png2023-10-19T07:37:51Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_ProcessingFW.png&diff=16652File:FH12 WebIF ProcessingFW.png2023-10-19T07:37:41Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_SelectFW.png&diff=16651File:FH12 WebIF SelectFW.png2023-10-19T07:37:35Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_FWUpdate.png&diff=16650File:FH12 WebIF FWUpdate.png2023-10-19T07:37:26Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=File:FH12_WebIF_Config_FH.png&diff=16649File:FH12 WebIF Config FH.png2023-10-19T07:37:17Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12&diff=16648Flasher Hub-122023-10-18T15:35:20Z<p>Leon: /* Getting started */</p>
<hr />
<div>[[File: FlasherHub12.svg | thumb | SEGGER Flasher Hub-12]]<br />
<br />
This is the user documentation for owners of a SEGGER Flasher Hub-12.<br />
<br />
'''This article is work in progress.'''<br />
<br />
<br />
__TOC__<br />
<br />
= How Flasher Hub-12 works =<br />
<br />
Flasher Hub-12 makes ultra-fast high speed parallel programming ("gang programming") with up to 12 channels possible.<br />
Flasher Hub-12 is connected to one or more modules (Flasher Compact). Each module is connected to a target chip.<br />
Using one of the Flasher Hub-12's host interfaces, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
= Getting started =<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply (see below for more information)<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is running the most recent firmware, [[#Updating_Flasher_Hub-12_firmware | as described below]]<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Flasher Hub-12 is now up and running<br />
<br />
= Firmware update =<br />
<br />
Firmware update files for both, Flasher Hub-12 as well as Flasher Compact modules are shipped with each new release of the Flasher software package.<br />
<br />
== Updating Flasher Hub-12 firmware ==<br />
<br />
The Flasher Hub-12 firmware can up updated by using the Flasher software or by using Flasher Hub's web interface.<br />
<br />
=== Using Flasher software ===<br />
<br />
[[File: FlasherConfig_FH12FWUpdate.png | thumb | Flasher Hub-12 firmware update in Flasher Configurator]]<br />
<br />
# Make sure to download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Make sure Flasher Hub-12 is connected to a PC via USB or IP<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Flasher Configurator will now update the firmware of Flasher Hub-12<br />
<br />
<br clear="all"></div>Leonhttps://wiki.segger.com/index.php?title=File:FlasherConfig_FH12FWUpdate.png&diff=16647File:FlasherConfig FH12FWUpdate.png2023-10-18T15:34:12Z<p>Leon: </p>
<hr />
<div></div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12&diff=16455Flasher Hub-122023-09-29T12:27:09Z<p>Leon: /* Getting started */</p>
<hr />
<div>[[File: FlasherHub12.svg | thumb | SEGGER Flasher Hub-12]]<br />
<br />
This is the user documentation for owners of a SEGGER Flasher Hub-12.<br />
<br />
'''This article is work in progress.'''<br />
<br />
<br />
__TOC__<br />
<br />
= How Flasher Hub-12 works =<br />
<br />
Flasher Hub-12 makes ultra-fast high speed parallel programming ("gang programming") with up to 12 channels possible.<br />
Flasher Hub-12 is connected to one or more modules (Flasher Compact). Each module is connected to a target chip.<br />
Using one of the Flasher Hub-12's host interfaces, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
= Getting started =<br />
<br />
[[File: FlasherConfigFH12.png | thumb | Flasher Hub-12 listed in Flasher Configurator]]<br />
[[File: FlasherConfigFH12FWUpdate.png | thumb | Flasher Hub-12 firmware update via Flasher Configurator]]<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply (see below for more information)<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on the Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub-12)<br />
# Flasher Hub-12 is now up and running</div>Leonhttps://wiki.segger.com/index.php?title=Flasher_Hub-12&diff=16454Flasher Hub-122023-09-29T12:27:03Z<p>Leon: Created page with " SEGGER Flasher Hub-12 This is the user documentation for owners of a SEGGER Flasher Hub-12. '''This article is work in progress.''' __..."</p>
<hr />
<div>[[File: FlasherHub12.svg | thumb | SEGGER Flasher Hub-12]]<br />
<br />
This is the user documentation for owners of a SEGGER Flasher Hub-12.<br />
<br />
'''This article is work in progress.'''<br />
<br />
<br />
__TOC__<br />
<br />
= How Flasher Hub-12 works =<br />
<br />
Flasher Hub-12 makes ultra-fast high speed parallel programming ("gang programming") with up to 12 channels possible.<br />
Flasher Hub-12 is connected to one or more modules (Flasher Compact). Each module is connected to a target chip.<br />
Using one of the Flasher Hub-12's host interfaces, flash programming operations can be triggered and responses from the Flasher Hub-12 can be read and evaluated.<br />
This makes the Flasher Hub-12 a perfect fit for small-scale as well as large-scale production environments.<br />
<br />
= Getting started =<br />
<br />
[[File: FlasherConfigFH12.png | thumb | Flasher Hub-12 listed in Flasher Configurator]]<br />
[[File: FlasherConfigFH12FWUpdate.png | thumb | Flasher Hub-12 firmware update via Flasher Configurator]]<br />
<br />
Before putting the Flasher Hub-12 into operation, make sure to have the following devices at hand:<br />
<br />
* Power supply (see below for more information)<br />
* One or more Flasher Compacts<br />
* Ethernet cable (not mandatory)<br />
* PC (Windows/ Linux/ macOS)<br />
* The Flasher Hub-12 is set up and good-to-go in less than 10 minutes<br />
<br />
After making sure that the devices mentioned above are all available, the Flasher Hub-12 can be setup:<br />
<br />
# Connect Flasher Hub-12 to power supply via the ''POWER'' connector<br />
# Connect Flasher Hub-12 to LAN via the ''LAN'' connector<br />
# Connect Flasher Compact(s) to Flasher Hub-12 via USB C<br />
# Download and install the most recent version of the Flasher software package<br />
#* https://www.segger.com/downloads/flasher/<br />
# Start Flasher Configurator (''FlasherConfig.exe'')<br />
# Right-click on the Flasher Hub-12<br />
# Click "''Update firmware''"<br />
# Open Flasher Hub-12's web interface by visiting http://flasherhub-<SerialNo>/ (Make sure to replace <SerialNo> with the serial number of your Flasher Hub)<br />
# Flasher Hub-12 is now up and running</div>Leonhttps://wiki.segger.com/index.php?title=File:FlasherConfigFH12FWUpdate.png&diff=16453File:FlasherConfigFH12FWUpdate.png2023-09-29T12:25:32Z<p>Leon: </p>
<hr />
<div></div>Leon