Loader
The online loader tool found at loader.duelink.com is provided to help with firmware and driver updates. It also supports updating a chain of modules using the cloning feature.
The online loader tool only works with Chrome or Edge browsers. However, it can be any operating system.
The update steps are simple and clear. Visit loader.duelink.com and select which firmware you want to load, DUELink Official or DUELink MicroBlocks.
Troubleshooting
This section is useful should you have any issues with firmware/driver updates.
In order for a module to accept a new firmware, it needs to be in a special mode called DFU (Device Firmware Update). This can be done using the "Erase All" feature found on the loader page. If that did not work then you can force DFU mode as outlined later on this page.
Windows OS: Windows users that have never used DFU before must download and install a required driver.
Note that "Erase All" features needs an active firmware for it to work. Once the module is erased, it can't be erased again until it is loaded with the firmware first. So, if "Erase All" failed, your module might already be in DFU mode, and you can go on to the next step and load the firmware.
Once a module is updated, it can be used to update the other modules in a chain. This uses the internal clone feature. For cloning to work, it needs a functional chain of modules, that are all preloaded with DUELink firmware. If cloning failed, then modules must be updated individually. Start by disconnecting modules from a chain, connect them one-by-one to a computer and re-run the update steps.
MicroBlocks Note: Updating the MicroBlocks firmware steps are the same. However, if there is a need for updating a chain of modules then you must start with the update as if MicroBlocks is not being used. Once all modules are updated, go back and reload MicroBlocks on the first module.
Force DFU Mode
You can optionally force DFU mode, like if Erase All failed or if a custom firmware was loaded. This is simply done by connecting LDR pin to high-level on system reset or power up. On some modules, LDR pin is connected to a button labeled LDR or A.

Modules that do not have a button, they have 2 pads instead.

For power users: LDR pin is the name we use for STM32's BOOT0 pin.
To force a module in DFU mode press and continue to hold the LDR or A button while resetting the board (clicking reset button or re-power). If neither LDR nor A button is available, then bend and place a small metal paper clip (or a wire) between the 2 LDR Pads, and reset/re-power the board. You can remove the paper clip after the board is powered up.

Upon forcing DFU Mode successfully, the module will present itself as a DFU device. If this is done on a PC for the first time, check the Device Manager to verify the USB Driver is installed, as explained under the drivers section on this page.
This option "forces" the system into DFU Mode. It does not erase or modify the module's contents, till new firmware is sent.
Once in DFU mode, go to https://console.duelink.com/, click Firmware on the top menu then Connect.
Clone Feature
This is a great feature that allows a module to clone its own firmware to the next module in a Daisylink.
While the provided online loader automatically handles Cloning, we adding more details here for advanced uses.
Cloning can be executed on any "selected module" using Sel(), which then will erase the "next module" in the chain, and load "next module" with a clone of the firmware of the "current module".
Note that the device getting written to will have a firmware clone but will not have any Driver Script after cloning is done. Loading the Driver Script will be necessary.
The device getting updated will automatically get enumerated to the same address it previously had. The "cloner" will internally use the private SetAdd() command.
The cloning feature can be used to update the firmware on a modules that do not have a USB connection, and without using USB Hook. In this example, PixoBit can be loaded with the latest firmware and then it can be cloned to the chained modules.

Important notes:
- Cloning can only be executed on chains of modules that are all loaded with DUELink official firmware.
- Cloning can not be done on blank modules, even if they are already in DFU mode, pre-loading with DUELink official firmware is required.
- Cloning is disabled when Downlink port is not in the default Daisylink mode, including host mode.
Cloning is meant to be sent to the device from its interface. But, here is a simple example to clone the current module to the next using a script! This can be ran in the Console.
# wait for enumeration, blink meanwhile!
while getadd() = 0
dwrite(0,1) # STAT LED is always pin 0
wait(100)
dwrite(0,0)
wait(100)
wend
# We are enumerated!
r = clone()
println("Cloned fw from: ", getadd(), " to: ", r)
It is also possible to Clone() the firmware to the entire chain. Here is Python example that clones the firmware found on device 1 to all modules in the chain, one by one.
import time
from DUELink.DUELinkController import DUELinkController
availablePort = DUELinkController.GetConnectionPort()
duelink = DUELinkController(availablePort)
def GetDeviceCount():
return int(duelink.Engine.ExecuteCommand("GetCnt()"))
for i in range(1, GetDeviceCount()):
duelink.Engine.Select(i)
timeout = duelink.ReadTimeout
# Clone can take up to 30 seconds
duelink.ReadTimeout = 30
responsed = int(duelink.Engine.ExecuteCommand("Clone()"))
if responsed != (i + 1):
print(f"Cloning from {i} to {i+1} failed")
break
else:
print(f"Cloning from {i} to {i+1} succeeded")
# Restore the default timeout
duelink.ReadTimeout = timeout
DFU USB Drivers
DFU is a standard USB class that is supported by all major operating systems.
While Windows supports DFU, it sadly does not automatically install the DFU drivers, and it may not prompt you to install them! If in doubt, just install the USB drivers from the downloads page.
With a properly installed driver, the Device Manager will show DFU in FS Mode with no errors.

Custom Firmware
The STM32C071 chip utilized on all DUELink modules can be loaded with any special firmware using any DFU tool, including the ones from ST Micro.
Updates are typically sent to the chip over USB DFU mode connection. Using UART to send firmware updates via the Uplink connectors is another (unsupported) option.
The Arduino page shows how to load a custom Arduino program.