MicroPython eric7

Fri, 17 Mar 2023 19:10:33 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 17 Mar 2023 19:10:33 +0100
branch
eric7
changeset 9915
fd5ff16632cb
parent 9913
702ad0ef6b3f
child 9916
211d05a7197f

MicroPython
- Added a dialog to enter the parameters to convert a .hex or .bin firmware file to UF2.

docs/changelog.md file | annotate | diff | comparison | revisions
eric7.epj file | annotate | diff | comparison | revisions
src/eric7/APIs/Python3/eric7.api file | annotate | diff | comparison | revisions
src/eric7/APIs/Python3/eric7.bas file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.MicroPython.ConvertToUF2Dialog.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWidget.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.MicroPython.Tools.uf2conv.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/index-eric7.MicroPython.Tools.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/index-eric7.MicroPython.html file | annotate | diff | comparison | revisions
src/eric7/MicroPython/ConvertToUF2Dialog.py file | annotate | diff | comparison | revisions
src/eric7/MicroPython/ConvertToUF2Dialog.ui file | annotate | diff | comparison | revisions
src/eric7/MicroPython/MicroPythonWidget.py file | annotate | diff | comparison | revisions
src/eric7/MicroPython/Tools/__init__.py file | annotate | diff | comparison | revisions
src/eric7/MicroPython/Tools/uf2conv.py file | annotate | diff | comparison | revisions
src/eric7/MicroPython/Tools/uf2families.json file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_cs.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.qm file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_empty.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_en.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_es.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_fr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_it.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_pt.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_ru.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_tr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/docs/changelog.md	Fri Mar 17 11:29:09 2023 +0100
+++ b/docs/changelog.md	Fri Mar 17 19:10:33 2023 +0100
@@ -12,6 +12,8 @@
     - Added support for Ethernet enabled boards.
     - Added support for synchronizing the board time via NTP for network enabled
       boards.
+    - Added a dialog to enter the parameters to convert a .hex or .bin firmware
+      file to UF2.
 - Third Party packages
     - Upgraded eradicate to version 2.2.0.
     - Upgraded pipdeptree to version 2.5.2.
--- a/eric7.epj	Fri Mar 17 11:29:09 2023 +0100
+++ b/eric7.epj	Fri Mar 17 19:10:33 2023 +0100
@@ -63,7 +63,7 @@
         "CopyrightMinFileSize": 0,
         "DocstringType": "eric_black",
         "EnabledCheckerCategories": "C, D, E, I, M, N, Y, W",
-        "ExcludeFiles": "*/ThirdParty/*, */coverage/*, */Ui_*.py, */Examples/*, */pycodestyle.py,*/pyflakes/checker.py,*/mccabe.py,*/eradicate.py,*/ast_unparse.py,*/piplicenses.py,*/pipdeptree.py,*/MCUScripts/*",
+        "ExcludeFiles": "*/ThirdParty/*, */coverage/*, */Ui_*.py, */Examples/*, */pycodestyle.py,*/pyflakes/checker.py,*/mccabe.py,*/eradicate.py,*/ast_unparse.py,*/piplicenses.py,*/pipdeptree.py,*/MCUScripts/*,*/MicroPython/Tools/*",
         "ExcludeMessages": "C101,E203,E265,E266,E305,E402,M201,M301,M302,M303,M304,M305,M306,M307,M308,M311,M312,M313,M314,M315,M321,M701,M702,M811,M834,N802,N803,N807,N808,N821,W293,W503,Y401,Y402",
         "FixCodes": "",
         "FixIssues": false,
@@ -339,6 +339,7 @@
       "src/eric7/MicroPython/BluetoothDialogs/BluetoothStatusDialog.ui",
       "src/eric7/MicroPython/BoardDataDialog.ui",
       "src/eric7/MicroPython/ConnectionSelectionDialog.ui",
+      "src/eric7/MicroPython/ConvertToUF2Dialog.ui",
       "src/eric7/MicroPython/Devices/CircuitPythonUpdater/RequirementsDialog.ui",
       "src/eric7/MicroPython/Devices/CircuitPythonUpdater/ShowBundlesDialog.ui",
       "src/eric7/MicroPython/Devices/CircuitPythonUpdater/ShowInstalledDialog.ui",
@@ -839,6 +840,7 @@
       "src/eric7/IconEditor/cursors/eraser-cursor.xpm",
       "src/eric7/IconEditor/cursors/fill-cursor.xpm",
       "src/eric7/IconEditor/cursors/paintbrush-cursor.xpm",
+      "src/eric7/MicroPython/Tools/uf2families.json",
       "src/eric7/Plugins/UiExtensionPlugins/Translator/icons/engines/deepl-dark.svg",
       "src/eric7/Plugins/UiExtensionPlugins/Translator/icons/engines/deepl-light.svg",
       "src/eric7/Plugins/UiExtensionPlugins/Translator/icons/engines/googlev1.svg",
@@ -991,7 +993,7 @@
     "OTHERTOOLSPARMS": {
       "Black": {
         "exclude": "/(\\.direnv|\\.eggs|\\.git|\\.hg|\\.mypy_cache|\\.nox|\\.tox|\\.venv|venv|\\.svn|\\.ipynb_checkpoints|_build|buck-out|build|dist|__pypackages__)/",
-        "extend-exclude": "/(\n\tExamples/\n\t| ThirdParty/\n\t| coverage/\n  | MCUScripts/\n\t| Ui_.*\\.py\n\t| pycodestyle\\.py\n\t| pyflakes/checker\\.py\n\t| mccabe\\.py\n\t| eradicate\\.py\n\t| ast_unparse\\.py\n\t| piplicenses\\.py\n\t| pipdeptree\\.py\n)",
+        "extend-exclude": "/(\n\tExamples/\n\t| ThirdParty/\n\t| coverage/\n  | MCUScripts/\n  | MicroPython/Tools/\n\t| Ui_.*\\.py\n\t| pycodestyle\\.py\n\t| pyflakes/checker\\.py\n\t| mccabe\\.py\n\t| eradicate\\.py\n\t| ast_unparse\\.py\n\t| piplicenses\\.py\n\t| pipdeptree\\.py\n)",
         "force-exclude": "",
         "line-length": 88,
         "skip-magic-trailing-comma": false,
@@ -1019,6 +1021,7 @@
           "*/ThirdParty/*",
           "*/coverage/*",
           "*/MCUScripts/*",
+          "*/MicroPython/Tools/*",
           "*/Ui_*.py",
           "*/pycodestyle.py",
           "*/pyflakes/checker.py",
@@ -1303,6 +1306,7 @@
       "src/eric7/MicroPython/BluetoothDialogs/__init__.py",
       "src/eric7/MicroPython/BoardDataDialog.py",
       "src/eric7/MicroPython/ConnectionSelectionDialog.py",
+      "src/eric7/MicroPython/ConvertToUF2Dialog.py",
       "src/eric7/MicroPython/Devices/CircuitPythonDevices.py",
       "src/eric7/MicroPython/Devices/CircuitPythonUpdater/CircuitPythonUpdaterInterface.py",
       "src/eric7/MicroPython/Devices/CircuitPythonUpdater/CircupFunctions.py",
@@ -1348,6 +1352,8 @@
       "src/eric7/MicroPython/MipPackageDialog.py",
       "src/eric7/MicroPython/NtpParametersDialog.py",
       "src/eric7/MicroPython/ShowModulesDialog.py",
+      "src/eric7/MicroPython/Tools/__init__.py",
+      "src/eric7/MicroPython/Tools/uf2conv.py",
       "src/eric7/MicroPython/UF2FlashDialog.py",
       "src/eric7/MicroPython/UnknownDevicesDialog.py",
       "src/eric7/MicroPython/WifiDialogs/WifiApConfigDialog.py",
--- a/src/eric7/APIs/Python3/eric7.api	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/APIs/Python3/eric7.api	Fri Mar 17 19:10:33 2023 +0100
@@ -2588,6 +2588,12 @@
 eric7.MicroPython.ConnectionSelectionDialog.ConnectionSelectionDialog.on_deviceTypeComboBox_currentTextChanged?4(txt)
 eric7.MicroPython.ConnectionSelectionDialog.ConnectionSelectionDialog.on_portNameComboBox_currentTextChanged?4(txt)
 eric7.MicroPython.ConnectionSelectionDialog.ConnectionSelectionDialog?1(ports, currentPort, currentType, parent=None)
+eric7.MicroPython.ConvertToUF2Dialog.ConvertToUF2Dialog.ConvertScript?7
+eric7.MicroPython.ConvertToUF2Dialog.ConvertToUF2Dialog.FamiliesFile?7
+eric7.MicroPython.ConvertToUF2Dialog.ConvertToUF2Dialog.on_convertButton_clicked?4()
+eric7.MicroPython.ConvertToUF2Dialog.ConvertToUF2Dialog.on_familiesComboBox_currentTextChanged?4(family)
+eric7.MicroPython.ConvertToUF2Dialog.ConvertToUF2Dialog.on_firmwarePicker_textChanged?4(firmware)
+eric7.MicroPython.ConvertToUF2Dialog.ConvertToUF2Dialog?1(parent=None)
 eric7.MicroPython.Devices.CircuitPythonDevices.CircuitPythonDevice.DeviceVolumeName?7
 eric7.MicroPython.Devices.CircuitPythonDevices.CircuitPythonDevice.activateBluetoothInterface?4()
 eric7.MicroPython.Devices.CircuitPythonDevices.CircuitPythonDevice.addDeviceMenuEntries?4(menu)
@@ -3059,6 +3065,29 @@
 eric7.MicroPython.ShowModulesDialog.ShowModulesDialog.getSelection?4()
 eric7.MicroPython.ShowModulesDialog.ShowModulesDialog.on_modulesList_itemChanged?4(item)
 eric7.MicroPython.ShowModulesDialog.ShowModulesDialog?1(modulesList, selectionMode=False, info="", parent=None)
+eric7.MicroPython.Tools.uf2conv.Block.encode?4(blockno, numblocks)
+eric7.MicroPython.Tools.uf2conv.Block?1(addr)
+eric7.MicroPython.Tools.uf2conv.INFO_FILE?7
+eric7.MicroPython.Tools.uf2conv.UF2_MAGIC_END?7
+eric7.MicroPython.Tools.uf2conv.UF2_MAGIC_START0?7
+eric7.MicroPython.Tools.uf2conv.UF2_MAGIC_START1?7
+eric7.MicroPython.Tools.uf2conv.appstartaddr?7
+eric7.MicroPython.Tools.uf2conv.board_id?4(path)
+eric7.MicroPython.Tools.uf2conv.convert_from_hex_to_uf2?4(buf)
+eric7.MicroPython.Tools.uf2conv.convert_from_uf2?4(buf)
+eric7.MicroPython.Tools.uf2conv.convert_to_carray?4(file_content)
+eric7.MicroPython.Tools.uf2conv.convert_to_uf2?4(file_content)
+eric7.MicroPython.Tools.uf2conv.error?4(msg)
+eric7.MicroPython.Tools.uf2conv.familyid?7
+eric7.MicroPython.Tools.uf2conv.get_drives?4()
+eric7.MicroPython.Tools.uf2conv.has_info?4(d)
+eric7.MicroPython.Tools.uf2conv.is_hex?4(buf)
+eric7.MicroPython.Tools.uf2conv.is_uf2?4(buf)
+eric7.MicroPython.Tools.uf2conv.list_drives?4()
+eric7.MicroPython.Tools.uf2conv.load_families?4()
+eric7.MicroPython.Tools.uf2conv.main?4()
+eric7.MicroPython.Tools.uf2conv.to_str?4(b)
+eric7.MicroPython.Tools.uf2conv.write_file?4(name, buf)
 eric7.MicroPython.UF2FlashDialog.SupportedUF2Boards?7
 eric7.MicroPython.UF2FlashDialog.UF2FlashDialog.DeviceTypeRole?7
 eric7.MicroPython.UF2FlashDialog.UF2FlashDialog.DeviceVidPidRole?7
--- a/src/eric7/APIs/Python3/eric7.bas	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/APIs/Python3/eric7.bas	Fri Mar 17 19:10:33 2023 +0100
@@ -130,6 +130,7 @@
 ConfigurationWindow EricMainWindow
 Connection QTcpSocket
 ConnectionSelectionDialog QDialog Ui_ConnectionSelectionDialog
+ConvertToUF2Dialog QDialog Ui_ConvertToUF2Dialog
 CookieExceptionsModel QAbstractTableModel
 CookieJar QNetworkCookieJar
 CookiesConfigurationDialog QDialog Ui_CookiesConfigurationDialog
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Help/source.qhp	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/Documentation/Help/source.qhp	Fri Mar 17 19:10:33 2023 +0100
@@ -303,6 +303,9 @@
               <section title="eric7.MicroPython.EthernetDialogs.IPv4AddressDialog" ref="eric7.MicroPython.EthernetDialogs.IPv4AddressDialog.html" />
               <section title="eric7.MicroPython.EthernetDialogs.WiznetUtilities" ref="eric7.MicroPython.EthernetDialogs.WiznetUtilities.html" />
             </section>
+            <section title="eric7.MicroPython.Tools" ref="index-eric7.MicroPython.Tools.html">
+              <section title="eric7.MicroPython.Tools.uf2conv" ref="eric7.MicroPython.Tools.uf2conv.html" />
+            </section>
             <section title="eric7.MicroPython.WifiDialogs" ref="index-eric7.MicroPython.WifiDialogs.html">
               <section title="eric7.MicroPython.WifiDialogs.WifiApConfigDialog" ref="eric7.MicroPython.WifiDialogs.WifiApConfigDialog.html" />
               <section title="eric7.MicroPython.WifiDialogs.WifiApStationsDialog" ref="eric7.MicroPython.WifiDialogs.WifiApStationsDialog.html" />
@@ -315,6 +318,7 @@
             <section title="eric7.MicroPython.AddEditDevicesDialog" ref="eric7.MicroPython.AddEditDevicesDialog.html" />
             <section title="eric7.MicroPython.BoardDataDialog" ref="eric7.MicroPython.BoardDataDialog.html" />
             <section title="eric7.MicroPython.ConnectionSelectionDialog" ref="eric7.MicroPython.ConnectionSelectionDialog.html" />
+            <section title="eric7.MicroPython.ConvertToUF2Dialog" ref="eric7.MicroPython.ConvertToUF2Dialog.html" />
             <section title="eric7.MicroPython.IgnoredDevicesDialog" ref="eric7.MicroPython.IgnoredDevicesDialog.html" />
             <section title="eric7.MicroPython.MicroPythonDeviceInterface" ref="eric7.MicroPython.MicroPythonDeviceInterface.html" />
             <section title="eric7.MicroPython.MicroPythonFileManager" ref="eric7.MicroPython.MicroPythonFileManager.html" />
@@ -2236,6 +2240,9 @@
       <keyword name="BlackReport.path_ignored" id="BlackReport.path_ignored" ref="eric7.CodeFormatting.BlackFormattingDialog.html#BlackReport.path_ignored" />
       <keyword name="BlackStatistics" id="BlackStatistics" ref="eric7.CodeFormatting.BlackFormattingDialog.html#BlackStatistics" />
       <keyword name="BlackUtilities (Module)" id="BlackUtilities (Module)" ref="eric7.CodeFormatting.BlackUtilities.html" />
+      <keyword name="Block" id="Block" ref="eric7.MicroPython.Tools.uf2conv.html#Block" />
+      <keyword name="Block (Constructor)" id="Block (Constructor)" ref="eric7.MicroPython.Tools.uf2conv.html#Block.__init__" />
+      <keyword name="Block.encode" id="Block.encode" ref="eric7.MicroPython.Tools.uf2conv.html#Block.encode" />
       <keyword name="BluetoothAdvertisement" id="BluetoothAdvertisement" ref="eric7.MicroPython.BluetoothDialogs.BluetoothAdvertisement.html#BluetoothAdvertisement" />
       <keyword name="BluetoothAdvertisement (Constructor)" id="BluetoothAdvertisement (Constructor)" ref="eric7.MicroPython.BluetoothDialogs.BluetoothAdvertisement.html#BluetoothAdvertisement.__init__" />
       <keyword name="BluetoothAdvertisement (Module)" id="BluetoothAdvertisement (Module)" ref="eric7.MicroPython.BluetoothDialogs.BluetoothAdvertisement.html" />
@@ -3508,6 +3515,17 @@
       <keyword name="ConnectionSelectionDialog.getData" id="ConnectionSelectionDialog.getData" ref="eric7.MicroPython.ConnectionSelectionDialog.html#ConnectionSelectionDialog.getData" />
       <keyword name="ConnectionSelectionDialog.on_deviceTypeComboBox_currentTextChanged" id="ConnectionSelectionDialog.on_deviceTypeComboBox_currentTextChanged" ref="eric7.MicroPython.ConnectionSelectionDialog.html#ConnectionSelectionDialog.on_deviceTypeComboBox_currentTextChanged" />
       <keyword name="ConnectionSelectionDialog.on_portNameComboBox_currentTextChanged" id="ConnectionSelectionDialog.on_portNameComboBox_currentTextChanged" ref="eric7.MicroPython.ConnectionSelectionDialog.html#ConnectionSelectionDialog.on_portNameComboBox_currentTextChanged" />
+      <keyword name="ConvertToUF2Dialog" id="ConvertToUF2Dialog" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog" />
+      <keyword name="ConvertToUF2Dialog (Constructor)" id="ConvertToUF2Dialog (Constructor)" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.__init__" />
+      <keyword name="ConvertToUF2Dialog (Module)" id="ConvertToUF2Dialog (Module)" ref="eric7.MicroPython.ConvertToUF2Dialog.html" />
+      <keyword name="ConvertToUF2Dialog.__conversionFinished" id="ConvertToUF2Dialog.__conversionFinished" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.__conversionFinished" />
+      <keyword name="ConvertToUF2Dialog.__populateFamilyComboBox" id="ConvertToUF2Dialog.__populateFamilyComboBox" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.__populateFamilyComboBox" />
+      <keyword name="ConvertToUF2Dialog.__readError" id="ConvertToUF2Dialog.__readError" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.__readError" />
+      <keyword name="ConvertToUF2Dialog.__readOutput" id="ConvertToUF2Dialog.__readOutput" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.__readOutput" />
+      <keyword name="ConvertToUF2Dialog.__updateConvertButton" id="ConvertToUF2Dialog.__updateConvertButton" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.__updateConvertButton" />
+      <keyword name="ConvertToUF2Dialog.on_convertButton_clicked" id="ConvertToUF2Dialog.on_convertButton_clicked" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.on_convertButton_clicked" />
+      <keyword name="ConvertToUF2Dialog.on_familiesComboBox_currentTextChanged" id="ConvertToUF2Dialog.on_familiesComboBox_currentTextChanged" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.on_familiesComboBox_currentTextChanged" />
+      <keyword name="ConvertToUF2Dialog.on_firmwarePicker_textChanged" id="ConvertToUF2Dialog.on_firmwarePicker_textChanged" ref="eric7.MicroPython.ConvertToUF2Dialog.html#ConvertToUF2Dialog.on_firmwarePicker_textChanged" />
       <keyword name="CookieExceptionsModel" id="CookieExceptionsModel" ref="eric7.WebBrowser.CookieJar.CookieExceptionsModel.html#CookieExceptionsModel" />
       <keyword name="CookieExceptionsModel (Constructor)" id="CookieExceptionsModel (Constructor)" ref="eric7.WebBrowser.CookieJar.CookieExceptionsModel.html#CookieExceptionsModel.__init__" />
       <keyword name="CookieExceptionsModel (Module)" id="CookieExceptionsModel (Module)" ref="eric7.WebBrowser.CookieJar.CookieExceptionsModel.html" />
@@ -10884,6 +10902,7 @@
       <keyword name="MicroPythonWidget.__compileFile2Mpy" id="MicroPythonWidget.__compileFile2Mpy" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__compileFile2Mpy" />
       <keyword name="MicroPythonWidget.__configure" id="MicroPythonWidget.__configure" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__configure" />
       <keyword name="MicroPythonWidget.__connectToDevice" id="MicroPythonWidget.__connectToDevice" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__connectToDevice" />
+      <keyword name="MicroPythonWidget.__convertToUF2" id="MicroPythonWidget.__convertToUF2" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__convertToUF2" />
       <keyword name="MicroPythonWidget.__crossCompile" id="MicroPythonWidget.__crossCompile" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__crossCompile" />
       <keyword name="MicroPythonWidget.__disconnectFromDevice" id="MicroPythonWidget.__disconnectFromDevice" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__disconnectFromDevice" />
       <keyword name="MicroPythonWidget.__doZoom" id="MicroPythonWidget.__doZoom" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__doZoom" />
@@ -16808,6 +16827,7 @@
       <keyword name="ToolGroupConfigurationDialog.on_newButton_clicked" id="ToolGroupConfigurationDialog.on_newButton_clicked" ref="eric7.Preferences.ToolGroupConfigurationDialog.html#ToolGroupConfigurationDialog.on_newButton_clicked" />
       <keyword name="ToolGroupConfigurationDialog.on_upButton_clicked" id="ToolGroupConfigurationDialog.on_upButton_clicked" ref="eric7.Preferences.ToolGroupConfigurationDialog.html#ToolGroupConfigurationDialog.on_upButton_clicked" />
       <keyword name="Toolbox (Package)" id="Toolbox (Package)" ref="index-eric7.Toolbox.html" />
+      <keyword name="Tools (Package)" id="Tools (Package)" ref="index-eric7.MicroPython.Tools.html" />
       <keyword name="Tools (Package)" id="Tools (Package)" ref="index-eric7.Tools.html" />
       <keyword name="Tools (Package)" id="Tools (Package)" ref="index-eric7.WebBrowser.Tools.html" />
       <keyword name="Translation" id="Translation" ref="eric7.Tools.TRPreviewer.html#Translation" />
@@ -19145,6 +19165,7 @@
       <keyword name="blackListCalls (Module)" id="blackListCalls (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.blackListCalls.html" />
       <keyword name="blackListImports (Module)" id="blackListImports (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.blackListImports.html" />
       <keyword name="blank_lines" id="blank_lines" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#blank_lines" />
+      <keyword name="board_id" id="board_id" ref="eric7.MicroPython.Tools.uf2conv.html#board_id" />
       <keyword name="break_after_binary_operator" id="break_after_binary_operator" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#break_after_binary_operator" />
       <keyword name="break_before_binary_operator" id="break_before_binary_operator" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#break_before_binary_operator" />
       <keyword name="calculateEndline" id="calculateEndline" ref="eric7.Utilities.ClassBrowsers.pyclbr.html#calculateEndline" />
@@ -19222,6 +19243,10 @@
       <keyword name="continued_indentation" id="continued_indentation" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#continued_indentation" />
       <keyword name="convertLineEnds" id="convertLineEnds" ref="eric7.Utilities.__init__.html#convertLineEnds" />
       <keyword name="convertPasswords" id="convertPasswords" ref="eric7.Preferences.__init__.html#convertPasswords" />
+      <keyword name="convert_from_hex_to_uf2" id="convert_from_hex_to_uf2" ref="eric7.MicroPython.Tools.uf2conv.html#convert_from_hex_to_uf2" />
+      <keyword name="convert_from_uf2" id="convert_from_uf2" ref="eric7.MicroPython.Tools.uf2conv.html#convert_from_uf2" />
+      <keyword name="convert_to_carray" id="convert_to_carray" ref="eric7.MicroPython.Tools.uf2conv.html#convert_to_carray" />
+      <keyword name="convert_to_uf2" id="convert_to_uf2" ref="eric7.MicroPython.Tools.uf2conv.html#convert_to_uf2" />
       <keyword name="copyDesktopFile" id="copyDesktopFile" ref="eric7.eric7_post_install.html#copyDesktopFile" />
       <keyword name="copyLinuxMetaData" id="copyLinuxMetaData" ref="eric7.eric7_post_install.html#copyLinuxMetaData" />
       <keyword name="copyMetaFile" id="copyMetaFile" ref="eric7.eric7_post_install.html#copyMetaFile" />
@@ -19474,6 +19499,7 @@
       <keyword name="eric7_virtualenv (Module)" id="eric7_virtualenv (Module)" ref="eric7.eric7_virtualenv.html" />
       <keyword name="eric7config (Module)" id="eric7config (Module)" ref="eric7.eric7config.html" />
       <keyword name="eric7dbgstub (Module)" id="eric7dbgstub (Module)" ref="eric7.DebugClients.Python.eric7dbgstub.html" />
+      <keyword name="error" id="error" ref="eric7.MicroPython.Tools.uf2conv.html#error" />
       <keyword name="escape_entities" id="escape_entities" ref="eric7.Utilities.__init__.html#escape_entities" />
       <keyword name="escape_uentities" id="escape_uentities" ref="eric7.Utilities.__init__.html#escape_uentities" />
       <keyword name="escapedBytesRepresentation" id="escapedBytesRepresentation" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#escapedBytesRepresentation" />
@@ -19749,6 +19775,7 @@
       <keyword name="get_class_members" id="get_class_members" ref="eric7.DebugClients.Python.FlexCompleter.html#get_class_members" />
       <keyword name="get_coding" id="get_coding" ref="eric7.Utilities.__init__.html#get_coding" />
       <keyword name="get_codingBytes" id="get_codingBytes" ref="eric7.Utilities.__init__.html#get_codingBytes" />
+      <keyword name="get_drives" id="get_drives" ref="eric7.MicroPython.Tools.uf2conv.html#get_drives" />
       <keyword name="get_installed_distributions" id="get_installed_distributions" ref="eric7.PipInterface.pipdeptree.html#get_installed_distributions" />
       <keyword name="get_output_fields" id="get_output_fields" ref="eric7.PipInterface.piplicenses.html#get_output_fields" />
       <keyword name="get_packages" id="get_packages" ref="eric7.PipInterface.piplicenses.html#get_packages" />
@@ -19769,6 +19796,7 @@
       <keyword name="hasEnvironmentEntry" id="hasEnvironmentEntry" ref="eric7.SystemUtilities.OSUtilities.html#hasEnvironmentEntry" />
       <keyword name="hasEric6Configuration" id="hasEric6Configuration" ref="eric7.Preferences.__init__.html#hasEric6Configuration" />
       <keyword name="hasShell" id="hasShell" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionShell.html#hasShell" />
+      <keyword name="has_info" id="has_info" ref="eric7.MicroPython.Tools.uf2conv.html#has_info" />
       <keyword name="hashPassword" id="hashPassword" ref="eric7.Utilities.crypto.py3PBKDF2.html#hashPassword" />
       <keyword name="hashPasswordTuple" id="hashPasswordTuple" ref="eric7.Utilities.crypto.py3PBKDF2.html#hashPasswordTuple" />
       <keyword name="hg (Module)" id="hg (Module)" ref="eric7.Plugins.VcsPlugins.vcsMercurial.hg.html" />
@@ -19847,7 +19875,9 @@
       <keyword name="isWaylandSession" id="isWaylandSession" ref="eric7.SystemUtilities.DesktopUtilities.html#isWaylandSession" />
       <keyword name="isWindowsPlatform" id="isWindowsPlatform" ref="eric7.DebugClients.Python.DebugUtilities.html#isWindowsPlatform" />
       <keyword name="isWindowsPlatform" id="isWindowsPlatform" ref="eric7.SystemUtilities.OSUtilities.html#isWindowsPlatform" />
+      <keyword name="is_hex" id="is_hex" ref="eric7.MicroPython.Tools.uf2conv.html#is_hex" />
       <keyword name="is_string_literal" id="is_string_literal" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#is_string_literal" />
+      <keyword name="is_uf2" id="is_uf2" ref="eric7.MicroPython.Tools.uf2conv.html#is_uf2" />
       <keyword name="isinpath" id="isinpath" ref="eric7.SystemUtilities.FileSystemUtilities.html#isinpath" />
       <keyword name="jinja2Templates (Module)" id="jinja2Templates (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.jinja2Templates.html" />
       <keyword name="joinext" id="joinext" ref="eric7.SystemUtilities.FileSystemUtilities.html#joinext" />
@@ -19864,9 +19894,12 @@
       <keyword name="linerange_fix" id="linerange_fix" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#linerange_fix" />
       <keyword name="linesep" id="linesep" ref="eric7.Utilities.__init__.html#linesep" />
       <keyword name="linestarts" id="linestarts" ref="eric7.UI.PythonDisViewer.html#linestarts" />
+      <keyword name="list_drives" id="list_drives" ref="eric7.MicroPython.Tools.uf2conv.html#list_drives" />
       <keyword name="listdirStat" id="listdirStat" ref="eric7.MicroPython.MicroPythonFileSystemUtilities.html#listdirStat" />
       <keyword name="loadTranslatorForLocale" id="loadTranslatorForLocale" ref="eric7.Toolbox.Startup.html#loadTranslatorForLocale" />
       <keyword name="loadTranslators" id="loadTranslators" ref="eric7.Toolbox.Startup.html#loadTranslators" />
+      <keyword name="load_families" id="load_families" ref="eric7.MicroPython.Tools.uf2conv.html#load_families" />
+      <keyword name="main" id="main" ref="eric7.MicroPython.Tools.uf2conv.html#main" />
       <keyword name="main" id="main" ref="eric7.PipInterface.pipdeptree.html#main" />
       <keyword name="main" id="main" ref="eric7.PipInterface.piplicenses.html#main" />
       <keyword name="main" id="main" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.eradicate.html#main" />
@@ -20168,6 +20201,7 @@
       <keyword name="toNativeSeparators" id="toNativeSeparators" ref="eric7.SystemUtilities.FileSystemUtilities.html#toNativeSeparators" />
       <keyword name="toSecondLevelDomain" id="toSecondLevelDomain" ref="eric7.WebBrowser.AdBlock.AdBlockRule.html#toSecondLevelDomain" />
       <keyword name="toString" id="toString" ref="eric7.Plugins.WizardPlugins.SetupWizard.SetupCfgUtilities.html#toString" />
+      <keyword name="to_str" id="to_str" ref="eric7.MicroPython.Tools.uf2conv.html#to_str" />
       <keyword name="tomlCheckSyntax (Module)" id="tomlCheckSyntax (Module)" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.tomlCheckSyntax.html" />
       <keyword name="tomlSyntaxBatchCheck" id="tomlSyntaxBatchCheck" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.tomlCheckSyntax.html#tomlSyntaxBatchCheck" />
       <keyword name="tomlSyntaxCheck" id="tomlSyntaxCheck" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.tomlCheckSyntax.html#tomlSyntaxCheck" />
@@ -20186,6 +20220,7 @@
       <keyword name="translations (Module)" id="translations (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.translations.html" />
       <keyword name="tryCompile" id="tryCompile" ref="eric7.UI.PythonDisViewer.html#tryCompile" />
       <keyword name="tryExcept (Module)" id="tryExcept (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.tryExcept.html" />
+      <keyword name="uf2conv (Module)" id="uf2conv (Module)" ref="eric7.MicroPython.Tools.uf2conv.html" />
       <keyword name="uiStartUp" id="uiStartUp" ref="eric7.eric7_ide.html#uiStartUp" />
       <keyword name="uic (Module)" id="uic (Module)" ref="eric7.Utilities.uic.html" />
       <keyword name="unescape_uentities" id="unescape_uentities" ref="eric7.Utilities.__init__.html#unescape_uentities" />
@@ -20232,6 +20267,7 @@
       <keyword name="workerTask" id="workerTask" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.tomlCheckSyntax.html#workerTask" />
       <keyword name="workerTask" id="workerTask" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#workerTask" />
       <keyword name="writeEncodedFile" id="writeEncodedFile" ref="eric7.Utilities.__init__.html#writeEncodedFile" />
+      <keyword name="write_file" id="write_file" ref="eric7.MicroPython.Tools.uf2conv.html#write_file" />
       <keyword name="yamlCheckSyntax (Module)" id="yamlCheckSyntax (Module)" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html" />
       <keyword name="yamlLoad (Module)" id="yamlLoad (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.yamlLoad.html" />
       <keyword name="yamlSyntaxBatchCheck" id="yamlSyntaxBatchCheck" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#yamlSyntaxBatchCheck" />
@@ -20453,6 +20489,7 @@
       <file>eric7.MicroPython.BluetoothDialogs.BluetoothStatusDialog.html</file>
       <file>eric7.MicroPython.BoardDataDialog.html</file>
       <file>eric7.MicroPython.ConnectionSelectionDialog.html</file>
+      <file>eric7.MicroPython.ConvertToUF2Dialog.html</file>
       <file>eric7.MicroPython.Devices.CircuitPythonDevices.html</file>
       <file>eric7.MicroPython.Devices.CircuitPythonUpdater.CircuitPythonUpdaterInterface.html</file>
       <file>eric7.MicroPython.Devices.CircuitPythonUpdater.CircupFunctions.html</file>
@@ -20486,6 +20523,7 @@
       <file>eric7.MicroPython.MipPackageDialog.html</file>
       <file>eric7.MicroPython.NtpParametersDialog.html</file>
       <file>eric7.MicroPython.ShowModulesDialog.html</file>
+      <file>eric7.MicroPython.Tools.uf2conv.html</file>
       <file>eric7.MicroPython.UF2FlashDialog.html</file>
       <file>eric7.MicroPython.UnknownDevicesDialog.html</file>
       <file>eric7.MicroPython.WifiDialogs.WifiApConfigDialog.html</file>
@@ -21474,6 +21512,7 @@
       <file>index-eric7.MicroPython.Devices.EspDialogs.html</file>
       <file>index-eric7.MicroPython.Devices.html</file>
       <file>index-eric7.MicroPython.EthernetDialogs.html</file>
+      <file>index-eric7.MicroPython.Tools.html</file>
       <file>index-eric7.MicroPython.WifiDialogs.html</file>
       <file>index-eric7.MicroPython.html</file>
       <file>index-eric7.MultiProject.html</file>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.ConvertToUF2Dialog.html	Fri Mar 17 19:10:33 2023 +0100
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.ConvertToUF2Dialog</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.ConvertToUF2Dialog</h1>
+
+<p>
+Module implementing a dialog to convert a .hex or .bin firmware file to .uf2.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#ConvertToUF2Dialog">ConvertToUF2Dialog</a></td>
+<td>Class implementing a dialog to convert a .hex or .bin firmware file to .uf2.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="ConvertToUF2Dialog" ID="ConvertToUF2Dialog"></a>
+<h2>ConvertToUF2Dialog</h2>
+
+<p>
+    Class implementing a dialog to convert a .hex or .bin firmware file to .uf2.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_ConvertToUF2Dialog
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>ConvertScript</td></tr><tr><td>FamiliesFile</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#ConvertToUF2Dialog.__init__">ConvertToUF2Dialog</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#ConvertToUF2Dialog.__conversionFinished">__conversionFinished</a></td>
+<td>Private slot handling the end of the conversion process.</td>
+</tr>
+<tr>
+<td><a href="#ConvertToUF2Dialog.__populateFamilyComboBox">__populateFamilyComboBox</a></td>
+<td>Private method to populate the chip family combo box with values read from 'uf2families.json' file.</td>
+</tr>
+<tr>
+<td><a href="#ConvertToUF2Dialog.__readError">__readError</a></td>
+<td>Private slot to read the standard error channel of the conversion process.</td>
+</tr>
+<tr>
+<td><a href="#ConvertToUF2Dialog.__readOutput">__readOutput</a></td>
+<td>Private slot to read the standard output channel of the conversion process.</td>
+</tr>
+<tr>
+<td><a href="#ConvertToUF2Dialog.__updateConvertButton">__updateConvertButton</a></td>
+<td>Private method to set the enabled status of the 'Convert' button.</td>
+</tr>
+<tr>
+<td><a href="#ConvertToUF2Dialog.on_convertButton_clicked">on_convertButton_clicked</a></td>
+<td>Private slot activating the conversion process.</td>
+</tr>
+<tr>
+<td><a href="#ConvertToUF2Dialog.on_familiesComboBox_currentTextChanged">on_familiesComboBox_currentTextChanged</a></td>
+<td>Private slot handling the selection of a chip family.</td>
+</tr>
+<tr>
+<td><a href="#ConvertToUF2Dialog.on_firmwarePicker_textChanged">on_firmwarePicker_textChanged</a></td>
+<td>Private slot handling a change of the firmware file name.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="ConvertToUF2Dialog.__init__" ID="ConvertToUF2Dialog.__init__"></a>
+<h4>ConvertToUF2Dialog (Constructor)</h4>
+<b>ConvertToUF2Dialog</b>(<i>parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="ConvertToUF2Dialog.__conversionFinished" ID="ConvertToUF2Dialog.__conversionFinished"></a>
+<h4>ConvertToUF2Dialog.__conversionFinished</h4>
+<b>__conversionFinished</b>(<i>exitCode, exitStatus</i>)
+
+<p>
+        Private slot handling the end of the conversion process.
+</p>
+<dl>
+
+<dt><i>exitCode</i> (int)</dt>
+<dd>
+exit code of the process
+</dd>
+<dt><i>exitStatus</i> (QProcess.ExitStatus)</dt>
+<dd>
+exit status of the process
+</dd>
+</dl>
+<a NAME="ConvertToUF2Dialog.__populateFamilyComboBox" ID="ConvertToUF2Dialog.__populateFamilyComboBox"></a>
+<h4>ConvertToUF2Dialog.__populateFamilyComboBox</h4>
+<b>__populateFamilyComboBox</b>(<i></i>)
+
+<p>
+        Private method to populate the chip family combo box with values read from
+        'uf2families.json' file.
+</p>
+<a NAME="ConvertToUF2Dialog.__readError" ID="ConvertToUF2Dialog.__readError"></a>
+<h4>ConvertToUF2Dialog.__readError</h4>
+<b>__readError</b>(<i></i>)
+
+<p>
+        Private slot to read the standard error channel of the conversion process.
+</p>
+<a NAME="ConvertToUF2Dialog.__readOutput" ID="ConvertToUF2Dialog.__readOutput"></a>
+<h4>ConvertToUF2Dialog.__readOutput</h4>
+<b>__readOutput</b>(<i></i>)
+
+<p>
+        Private slot to read the standard output channel of the conversion process.
+</p>
+<a NAME="ConvertToUF2Dialog.__updateConvertButton" ID="ConvertToUF2Dialog.__updateConvertButton"></a>
+<h4>ConvertToUF2Dialog.__updateConvertButton</h4>
+<b>__updateConvertButton</b>(<i></i>)
+
+<p>
+        Private method to set the enabled status of the 'Convert' button.
+</p>
+<a NAME="ConvertToUF2Dialog.on_convertButton_clicked" ID="ConvertToUF2Dialog.on_convertButton_clicked"></a>
+<h4>ConvertToUF2Dialog.on_convertButton_clicked</h4>
+<b>on_convertButton_clicked</b>(<i></i>)
+
+<p>
+        Private slot activating the conversion process.
+</p>
+<a NAME="ConvertToUF2Dialog.on_familiesComboBox_currentTextChanged" ID="ConvertToUF2Dialog.on_familiesComboBox_currentTextChanged"></a>
+<h4>ConvertToUF2Dialog.on_familiesComboBox_currentTextChanged</h4>
+<b>on_familiesComboBox_currentTextChanged</b>(<i>family</i>)
+
+<p>
+        Private slot handling the selection of a chip family.
+</p>
+<dl>
+
+<dt><i>family</i> (str)</dt>
+<dd>
+name of the selected chip family
+</dd>
+</dl>
+<a NAME="ConvertToUF2Dialog.on_firmwarePicker_textChanged" ID="ConvertToUF2Dialog.on_firmwarePicker_textChanged"></a>
+<h4>ConvertToUF2Dialog.on_firmwarePicker_textChanged</h4>
+<b>on_firmwarePicker_textChanged</b>(<i>firmware</i>)
+
+<p>
+        Private slot handling a change of the firmware file name.
+</p>
+<dl>
+
+<dt><i>firmware</i> (str)</dt>
+<dd>
+name of the firmware file
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWidget.html	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWidget.html	Fri Mar 17 19:10:33 2023 +0100
@@ -96,6 +96,10 @@
 <td>Private method to connect to the selected device.</td>
 </tr>
 <tr>
+<td><a href="#MicroPythonWidget.__convertToUF2">__convertToUF2</a></td>
+<td>Private slot to convert a non-UF2 MicroPython firmware file to UF2.</td>
+</tr>
+<tr>
 <td><a href="#MicroPythonWidget.__crossCompile">__crossCompile</a></td>
 <td>Private method to cross compile a Python file to a .mpy file.</td>
 </tr>
@@ -384,6 +388,13 @@
             automatically
 </dd>
 </dl>
+<a NAME="MicroPythonWidget.__convertToUF2" ID="MicroPythonWidget.__convertToUF2"></a>
+<h4>MicroPythonWidget.__convertToUF2</h4>
+<b>__convertToUF2</b>(<i></i>)
+
+<p>
+        Private slot to convert a non-UF2 MicroPython firmware file to UF2.
+</p>
 <a NAME="MicroPythonWidget.__crossCompile" ID="MicroPythonWidget.__crossCompile"></a>
 <h4>MicroPythonWidget.__crossCompile</h4>
 <b>__crossCompile</b>(<i>pythonFile="", title=""</i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.Tools.uf2conv.html	Fri Mar 17 19:10:33 2023 +0100
@@ -0,0 +1,241 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.Tools.uf2conv</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.Tools.uf2conv</h1>
+
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>INFO_FILE</td></tr><tr><td>UF2_MAGIC_END</td></tr><tr><td>UF2_MAGIC_START0</td></tr><tr><td>UF2_MAGIC_START1</td></tr><tr><td>appstartaddr</td></tr><tr><td>familyid</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#Block">Block</a></td>
+<td></td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#board_id">board_id</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#convert_from_hex_to_uf2">convert_from_hex_to_uf2</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#convert_from_uf2">convert_from_uf2</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#convert_to_carray">convert_to_carray</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#convert_to_uf2">convert_to_uf2</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#error">error</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#get_drives">get_drives</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#has_info">has_info</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#is_hex">is_hex</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#is_uf2">is_uf2</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#list_drives">list_drives</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#load_families">load_families</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#main">main</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#to_str">to_str</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#write_file">write_file</a></td>
+<td></td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="Block" ID="Block"></a>
+<h2>Block</h2>
+
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#Block.__init__">Block</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#Block.encode">encode</a></td>
+<td></td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="Block.__init__" ID="Block.__init__"></a>
+<h4>Block (Constructor)</h4>
+<b>Block</b>(<i>addr</i>)
+
+<a NAME="Block.encode" ID="Block.encode"></a>
+<h4>Block.encode</h4>
+<b>encode</b>(<i>blockno, numblocks</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="board_id" ID="board_id"></a>
+<h2>board_id</h2>
+<b>board_id</b>(<i>path</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="convert_from_hex_to_uf2" ID="convert_from_hex_to_uf2"></a>
+<h2>convert_from_hex_to_uf2</h2>
+<b>convert_from_hex_to_uf2</b>(<i>buf</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="convert_from_uf2" ID="convert_from_uf2"></a>
+<h2>convert_from_uf2</h2>
+<b>convert_from_uf2</b>(<i>buf</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="convert_to_carray" ID="convert_to_carray"></a>
+<h2>convert_to_carray</h2>
+<b>convert_to_carray</b>(<i>file_content</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="convert_to_uf2" ID="convert_to_uf2"></a>
+<h2>convert_to_uf2</h2>
+<b>convert_to_uf2</b>(<i>file_content</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="error" ID="error"></a>
+<h2>error</h2>
+<b>error</b>(<i>msg</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="get_drives" ID="get_drives"></a>
+<h2>get_drives</h2>
+<b>get_drives</b>(<i></i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="has_info" ID="has_info"></a>
+<h2>has_info</h2>
+<b>has_info</b>(<i>d</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="is_hex" ID="is_hex"></a>
+<h2>is_hex</h2>
+<b>is_hex</b>(<i>buf</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="is_uf2" ID="is_uf2"></a>
+<h2>is_uf2</h2>
+<b>is_uf2</b>(<i>buf</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="list_drives" ID="list_drives"></a>
+<h2>list_drives</h2>
+<b>list_drives</b>(<i></i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="load_families" ID="load_families"></a>
+<h2>load_families</h2>
+<b>load_families</b>(<i></i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="main" ID="main"></a>
+<h2>main</h2>
+<b>main</b>(<i></i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="to_str" ID="to_str"></a>
+<h2>to_str</h2>
+<b>to_str</b>(<i>b</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="write_file" ID="write_file"></a>
+<h2>write_file</h2>
+<b>write_file</b>(<i>name, buf</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/index-eric7.MicroPython.Tools.html	Fri Mar 17 19:10:33 2023 +0100
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.Tools</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<h1>eric7.MicroPython.Tools</h1>
+
+<p>
+Package implementing some MicroPython related tools.
+</p>
+<p>
+Note: There might be tools taken from third party sources.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+
+<tr>
+<td><a href="eric7.MicroPython.Tools.uf2conv.html">uf2conv</a></td>
+<td></td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/src/eric7/Documentation/Source/index-eric7.MicroPython.html	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/Documentation/Source/index-eric7.MicroPython.html	Fri Mar 17 19:10:33 2023 +0100
@@ -27,6 +27,10 @@
 <td>Package implementing Ethernet related dialogs.</td>
 </tr>
 <tr>
+<td><a href="index-eric7.MicroPython.Tools.html">Tools</a></td>
+<td>Package implementing some MicroPython related tools.</td>
+</tr>
+<tr>
 <td><a href="index-eric7.MicroPython.WifiDialogs.html">WifiDialogs</a></td>
 <td>Package implementing WiFi related dialogs.</td>
 </tr>
@@ -48,6 +52,10 @@
 <td>Module implementing a dialog to select the port to connect to and the type of the attached device.</td>
 </tr>
 <tr>
+<td><a href="eric7.MicroPython.ConvertToUF2Dialog.html">ConvertToUF2Dialog</a></td>
+<td>Module implementing a dialog to convert a .hex or .bin firmware file to .uf2.</td>
+</tr>
+<tr>
 <td><a href="eric7.MicroPython.IgnoredDevicesDialog.html">IgnoredDevicesDialog</a></td>
 <td>Module implementing a dialog to manage the list of ignored serial devices.</td>
 </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/ConvertToUF2Dialog.py	Fri Mar 17 19:10:33 2023 +0100
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to convert a .hex or .bin firmware file to .uf2.
+"""
+
+import json
+import os
+
+from PyQt6.QtCore import QProcess, QRegularExpression, pyqtSlot
+from PyQt6.QtGui import QRegularExpressionValidator
+from PyQt6.QtWidgets import QDialog
+
+from eric7 import Preferences
+from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
+from eric7.SystemUtilities.PythonUtilities import getPythonExecutable
+
+from .Ui_ConvertToUF2Dialog import Ui_ConvertToUF2Dialog
+
+
+class ConvertToUF2Dialog(QDialog, Ui_ConvertToUF2Dialog):
+    """
+    Class implementing a dialog to convert a .hex or .bin firmware file to .uf2.
+    """
+
+    FamiliesFile = os.path.join(os.path.dirname(__file__), "Tools", "uf2families.json")
+    ConvertScript = os.path.join(os.path.dirname(__file__), "Tools", "uf2conv.py")
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.firmwarePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
+        self.firmwarePicker.setFilters(
+            self.tr("MicroPython Firmware Files (*.hex *.bin);;All Files (*)")
+        )
+
+        self.__validator = QRegularExpressionValidator(
+            QRegularExpression(r"[0-9a-fA-F]{0,7}")
+        )
+        self.addressEdit.setValidator(self.__validator)
+        self.addressEdit.setEnabled(False)
+
+        self.__populateFamilyComboBox()
+
+        self.__process = QProcess(self)
+        self.__process.readyReadStandardOutput.connect(self.__readOutput)
+        self.__process.readyReadStandardError.connect(self.__readError)
+        self.__process.finished.connect(self.__conversionFinished)
+
+        self.__updateConvertButton()
+
+    def __populateFamilyComboBox(self):
+        """
+        Private method to populate the chip family combo box with values read from
+        'uf2families.json' file.
+        """
+        with open(ConvertToUF2Dialog.FamiliesFile, "r") as f:
+            families = json.load(f)
+
+        self.familiesComboBox.addItem("", "")
+        for family in families:
+            self.familiesComboBox.addItem(family["description"], family["id"])
+        self.familiesComboBox.model().sort(0)
+
+    def __updateConvertButton(self):
+        """
+        Private method to set the enabled status of the 'Convert' button.
+        """
+        self.convertButton.setEnabled(
+            bool(self.firmwarePicker.text())
+            and bool(self.familiesComboBox.currentText())
+        )
+
+    @pyqtSlot(str)
+    def on_firmwarePicker_textChanged(self, firmware):
+        """
+        Private slot handling a change of the firmware file name.
+
+        @param firmware name of the firmware file
+        @type str
+        """
+        self.addressEdit.setEnabled(firmware.lower().endswith(".bin"))
+        self.__updateConvertButton()
+
+    @pyqtSlot(str)
+    def on_familiesComboBox_currentTextChanged(self, family):
+        """
+        Private slot handling the selection of a chip family.
+
+        @param family name of the selected chip family
+        @type str
+        """
+        self.__updateConvertButton()
+
+    @pyqtSlot()
+    def on_convertButton_clicked(self):
+        """
+        Private slot activating the conversion process.
+        """
+        self.outputEdit.clear()
+
+        inputFile = self.firmwarePicker.text()
+        outputFile = os.path.splitext(inputFile)[0] + ".uf2"
+        args = [
+            ConvertToUF2Dialog.ConvertScript,
+            "--convert",
+            "--family",
+            self.familiesComboBox.currentData(),
+            "--output",
+            outputFile,
+        ]
+        if inputFile.lower().endswith(".bin"):
+            address = self.addressEdit.text()
+            if address:
+                args.extend(["--base", "0x{0}".format(address)])
+        args.append(inputFile)
+        python = getPythonExecutable()
+
+        # output the generated command
+        self.outputEdit.insertPlainText(
+            "{0} {1}\n{2}\n\n".format(python, " ".join(args), "=" * 40)
+        )
+        self.outputEdit.ensureCursorVisible()
+
+        # start the conversion process
+        self.convertButton.setEnabled(False)
+        self.__process.start(python, args)
+
+    @pyqtSlot()
+    def __readOutput(self):
+        """
+        Private slot to read the standard output channel of the conversion process.
+        """
+        out = str(
+            self.__process.readAllStandardOutput(),
+            Preferences.getSystem("IOEncoding"),
+            "replace",
+        )
+        self.outputEdit.insertPlainText(out)
+        self.outputEdit.ensureCursorVisible()
+
+    @pyqtSlot()
+    def __readError(self):
+        """
+        Private slot to read the standard error channel of the conversion process.
+        """
+        out = str(
+            self.__process.readAllStandardError(),
+            Preferences.getSystem("IOEncoding"),
+            "replace",
+        )
+        self.outputEdit.insertPlainText(self.tr("--- ERROR ---\n"))
+        self.outputEdit.insertPlainText(out)
+        self.outputEdit.ensureCursorVisible()
+
+    def __conversionFinished(self, exitCode, exitStatus):
+        """
+        Private slot handling the end of the conversion process.
+
+        @param exitCode exit code of the process
+        @type int
+        @param exitStatus exit status of the process
+        @type QProcess.ExitStatus
+        """
+        self.convertButton.setEnabled(True)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/ConvertToUF2Dialog.ui	Fri Mar 17 19:10:33 2023 +0100
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ConvertToUF2Dialog</class>
+ <widget class="QDialog" name="ConvertToUF2Dialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>600</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Convert To UF2</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Firmware File:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1" colspan="2">
+      <widget class="EricPathPicker" name="firmwarePicker" native="true">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::WheelFocus</enum>
+       </property>
+       <property name="toolTip">
+        <string>Enter the path of the MicroPython firmware file to be converted.</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Chip Family:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1" colspan="2">
+      <widget class="QComboBox" name="familiesComboBox">
+       <property name="toolTip">
+        <string>Select the chip family of the firmware file.</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="0">
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>Base Address:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QLineEdit" name="addressEdit">
+       <property name="toolTip">
+        <string>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</string>
+       </property>
+       <property name="maxLength">
+        <number>4</number>
+       </property>
+       <property name="clearButtonEnabled">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="2">
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>338</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="3" column="0" colspan="3">
+      <widget class="QPushButton" name="convertButton">
+       <property name="toolTip">
+        <string>Press to start the conversion process.</string>
+       </property>
+       <property name="text">
+        <string>Convert</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QTextEdit" name="outputEdit">
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>EricPathPicker</class>
+   <extends>QWidget</extends>
+   <header>eric7/EricWidgets/EricPathPicker.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>firmwarePicker</tabstop>
+  <tabstop>familiesComboBox</tabstop>
+  <tabstop>addressEdit</tabstop>
+  <tabstop>convertButton</tabstop>
+  <tabstop>outputEdit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ConvertToUF2Dialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ConvertToUF2Dialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- a/src/eric7/MicroPython/MicroPythonWidget.py	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/MicroPython/MicroPythonWidget.py	Fri Mar 17 19:10:33 2023 +0100
@@ -41,7 +41,7 @@
 from eric7.SystemUtilities import FileSystemUtilities, OSUtilities
 from eric7.UI.Info import BugAddress
 
-from . import Devices, UF2FlashDialog
+from . import ConvertToUF2Dialog, Devices, UF2FlashDialog
 from .BluetoothDialogs.BluetoothController import BluetoothController
 from .EthernetDialogs.EthernetController import EthernetController
 from .MicroPythonFileManager import MicroPythonFileManager
@@ -1604,6 +1604,7 @@
                 self.tr("Show Documentation"), self.__showDocumentation
             ).setEnabled(self.__device.hasDocumentationUrl())
             self.__superMenu.addSeparator()
+        self.__superMenu.addAction(self.tr("Convert To UF2"), self.__convertToUF2)
         self.__superMenu.addAction(self.tr("Flash UF2 Device"), self.__flashUF2)
         self.__superMenu.addSeparator()
         self.__superMenu.addAction(
@@ -2082,6 +2083,14 @@
         dlg.exec()
 
     @pyqtSlot()
+    def __convertToUF2(self):
+        """
+        Private slot to convert a non-UF2 MicroPython firmware file to UF2.
+        """
+        dlg = ConvertToUF2Dialog.ConvertToUF2Dialog()
+        dlg.exec()
+
+    @pyqtSlot()
     def __showBuiltinModules(self):
         """
         Private slot to show a list of builtin modules.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/Tools/__init__.py	Fri Mar 17 19:10:33 2023 +0100
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing some MicroPython related tools.
+
+Note: There might be tools taken from third party sources.
+"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/Tools/uf2conv.py	Fri Mar 17 19:10:33 2023 +0100
@@ -0,0 +1,438 @@
+#!/usr/bin/env python3
+
+# Microsoft UF2
+#
+# The MIT License (MIT)
+#
+# Copyright (c) Microsoft Corporation
+#
+# All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+import sys
+import struct
+import subprocess
+import re
+import os
+import os.path
+import argparse
+import json
+
+
+UF2_MAGIC_START0 = 0x0A324655  # "UF2\n"
+UF2_MAGIC_START1 = 0x9E5D5157  # Randomly selected
+UF2_MAGIC_END = 0x0AB16F30  # Ditto
+
+INFO_FILE = "/INFO_UF2.TXT"
+
+appstartaddr = 0x2000
+familyid = 0x0
+
+
+def is_uf2(buf):
+    w = struct.unpack("<II", buf[0:8])
+    return w[0] == UF2_MAGIC_START0 and w[1] == UF2_MAGIC_START1
+
+
+def is_hex(buf):
+    try:
+        w = buf[0:30].decode("utf-8")
+    except UnicodeDecodeError:
+        return False
+    if w[0] == ":" and re.match(b"^[:0-9a-fA-F\r\n]+$", buf):
+        return True
+    return False
+
+
+def convert_from_uf2(buf):
+    global appstartaddr
+    global familyid
+    numblocks = len(buf) // 512
+    curraddr = None
+    currfamilyid = None
+    families_found = {}
+    prev_flag = None
+    all_flags_same = True
+    outp = []
+    for blockno in range(numblocks):
+        ptr = blockno * 512
+        block = buf[ptr : ptr + 512]
+        hd = struct.unpack(b"<IIIIIIII", block[0:32])
+        if hd[0] != UF2_MAGIC_START0 or hd[1] != UF2_MAGIC_START1:
+            print("Skipping block at " + ptr + "; bad magic")
+            continue
+        if hd[2] & 1:
+            # NO-flash flag set; skip block
+            continue
+        datalen = hd[4]
+        if datalen > 476:
+            assert False, "Invalid UF2 data size at " + ptr
+        newaddr = hd[3]
+        if (hd[2] & 0x2000) and (currfamilyid == None):
+            currfamilyid = hd[7]
+        if curraddr == None or ((hd[2] & 0x2000) and hd[7] != currfamilyid):
+            currfamilyid = hd[7]
+            curraddr = newaddr
+            if familyid == 0x0 or familyid == hd[7]:
+                appstartaddr = newaddr
+        padding = newaddr - curraddr
+        if padding < 0:
+            assert False, "Block out of order at " + ptr
+        if padding > 10 * 1024 * 1024:
+            assert False, "More than 10M of padding needed at " + ptr
+        if padding % 4 != 0:
+            assert False, "Non-word padding size at " + ptr
+        while padding > 0:
+            padding -= 4
+            outp += b"\x00\x00\x00\x00"
+        if familyid == 0x0 or ((hd[2] & 0x2000) and familyid == hd[7]):
+            outp.append(block[32 : 32 + datalen])
+        curraddr = newaddr + datalen
+        if hd[2] & 0x2000:
+            if hd[7] in families_found.keys():
+                if families_found[hd[7]] > newaddr:
+                    families_found[hd[7]] = newaddr
+            else:
+                families_found[hd[7]] = newaddr
+        if prev_flag == None:
+            prev_flag = hd[2]
+        if prev_flag != hd[2]:
+            all_flags_same = False
+        if blockno == (numblocks - 1):
+            print("--- UF2 File Header Info ---")
+            families = load_families()
+            for family_hex in families_found.keys():
+                family_short_name = ""
+                for name, value in families.items():
+                    if value == family_hex:
+                        family_short_name = name
+                print(
+                    "Family ID is {:s}, hex value is 0x{:08x}".format(
+                        family_short_name, family_hex
+                    )
+                )
+                print("Target Address is 0x{:08x}".format(families_found[family_hex]))
+            if all_flags_same:
+                print("All block flag values consistent, 0x{:04x}".format(hd[2]))
+            else:
+                print("Flags were not all the same")
+            print("----------------------------")
+            if len(families_found) > 1 and familyid == 0x0:
+                outp = []
+                appstartaddr = 0x0
+    return b"".join(outp)
+
+
+def convert_to_carray(file_content):
+    outp = "const unsigned long bindata_len = %d;\n" % len(file_content)
+    outp += "const unsigned char bindata[] __attribute__((aligned(16))) = {"
+    for i in range(len(file_content)):
+        if i % 16 == 0:
+            outp += "\n"
+        outp += "0x%02x, " % file_content[i]
+    outp += "\n};\n"
+    return bytes(outp, "utf-8")
+
+
+def convert_to_uf2(file_content):
+    global familyid
+    datapadding = b""
+    while len(datapadding) < 512 - 256 - 32 - 4:
+        datapadding += b"\x00\x00\x00\x00"
+    numblocks = (len(file_content) + 255) // 256
+    outp = []
+    for blockno in range(numblocks):
+        ptr = 256 * blockno
+        chunk = file_content[ptr : ptr + 256]
+        flags = 0x0
+        if familyid:
+            flags |= 0x2000
+        hd = struct.pack(
+            b"<IIIIIIII",
+            UF2_MAGIC_START0,
+            UF2_MAGIC_START1,
+            flags,
+            ptr + appstartaddr,
+            256,
+            blockno,
+            numblocks,
+            familyid,
+        )
+        while len(chunk) < 256:
+            chunk += b"\x00"
+        block = hd + chunk + datapadding + struct.pack(b"<I", UF2_MAGIC_END)
+        assert len(block) == 512
+        outp.append(block)
+    return b"".join(outp)
+
+
+class Block:
+    def __init__(self, addr):
+        self.addr = addr
+        self.bytes = bytearray(256)
+
+    def encode(self, blockno, numblocks):
+        global familyid
+        flags = 0x0
+        if familyid:
+            flags |= 0x2000
+        hd = struct.pack(
+            "<IIIIIIII",
+            UF2_MAGIC_START0,
+            UF2_MAGIC_START1,
+            flags,
+            self.addr,
+            256,
+            blockno,
+            numblocks,
+            familyid,
+        )
+        hd += self.bytes[0:256]
+        while len(hd) < 512 - 4:
+            hd += b"\x00"
+        hd += struct.pack("<I", UF2_MAGIC_END)
+        return hd
+
+
+def convert_from_hex_to_uf2(buf):
+    global appstartaddr
+    appstartaddr = None
+    upper = 0
+    currblock = None
+    blocks = []
+    for line in buf.split("\n"):
+        if line[0] != ":":
+            continue
+        i = 1
+        rec = []
+        while i < len(line) - 1:
+            rec.append(int(line[i : i + 2], 16))
+            i += 2
+        tp = rec[3]
+        if tp == 4:
+            upper = ((rec[4] << 8) | rec[5]) << 16
+        elif tp == 2:
+            upper = ((rec[4] << 8) | rec[5]) << 4
+        elif tp == 1:
+            break
+        elif tp == 0:
+            addr = upper + ((rec[1] << 8) | rec[2])
+            if appstartaddr == None:
+                appstartaddr = addr
+            i = 4
+            while i < len(rec) - 1:
+                if not currblock or currblock.addr & ~0xFF != addr & ~0xFF:
+                    currblock = Block(addr & ~0xFF)
+                    blocks.append(currblock)
+                currblock.bytes[addr & 0xFF] = rec[i]
+                addr += 1
+                i += 1
+    numblocks = len(blocks)
+    resfile = b""
+    for i in range(0, numblocks):
+        resfile += blocks[i].encode(i, numblocks)
+    return resfile
+
+
+def to_str(b):
+    return b.decode("utf-8")
+
+
+def get_drives():
+    drives = []
+    if sys.platform == "win32":
+        r = subprocess.check_output(
+            [
+                "wmic",
+                "PATH",
+                "Win32_LogicalDisk",
+                "get",
+                "DeviceID,",
+                "VolumeName,",
+                "FileSystem,",
+                "DriveType",
+            ]
+        )
+        for line in to_str(r).split("\n"):
+            words = re.split("\s+", line)
+            if len(words) >= 3 and words[1] == "2" and words[2] == "FAT":
+                drives.append(words[0])
+    else:
+        rootpath = "/media"
+        if sys.platform == "darwin":
+            rootpath = "/Volumes"
+        elif sys.platform == "linux":
+            tmp = rootpath + "/" + os.environ["USER"]
+            if os.path.isdir(tmp):
+                rootpath = tmp
+        for d in os.listdir(rootpath):
+            drives.append(os.path.join(rootpath, d))
+
+    def has_info(d):
+        try:
+            return os.path.isfile(d + INFO_FILE)
+        except:
+            return False
+
+    return list(filter(has_info, drives))
+
+
+def board_id(path):
+    with open(path + INFO_FILE, mode="r") as file:
+        file_content = file.read()
+    return re.search("Board-ID: ([^\r\n]*)", file_content).group(1)
+
+
+def list_drives():
+    for d in get_drives():
+        print(d, board_id(d))
+
+
+def write_file(name, buf):
+    with open(name, "wb") as f:
+        f.write(buf)
+    print("Wrote %d bytes to %s" % (len(buf), name))
+
+
+def load_families():
+    # The expectation is that the `uf2families.json` file is in the same
+    # directory as this script. Make a path that works using `__file__`
+    # which contains the full path to this script.
+    filename = "uf2families.json"
+    pathname = os.path.join(os.path.dirname(os.path.abspath(__file__)), filename)
+    with open(pathname) as f:
+        raw_families = json.load(f)
+
+    families = {}
+    for family in raw_families:
+        families[family["short_name"]] = int(family["id"], 0)
+
+    return families
+
+
+def main():
+    global appstartaddr, familyid
+
+    def error(msg):
+        print(msg)
+        sys.exit(1)
+
+    parser = argparse.ArgumentParser(description="Convert to UF2 or flash directly.")
+    parser.add_argument(
+        "input", metavar="INPUT", type=str, nargs="?", help="input file (HEX, BIN or UF2)"
+    )
+    parser.add_argument(
+        "-b",
+        "--base",
+        dest="base",
+        type=str,
+        default="0x2000",
+        help="set base address of application for BIN format (default: 0x2000)",
+    )
+    parser.add_argument(
+        "-o",
+        "--output",
+        metavar="FILE",
+        dest="output",
+        type=str,
+        help='write output to named file; defaults to "flash.uf2" or "flash.bin" where sensible',
+    )
+    parser.add_argument("-d", "--device", dest="device_path", help="select a device path to flash")
+    parser.add_argument("-l", "--list", action="store_true", help="list connected devices")
+    parser.add_argument("-c", "--convert", action="store_true", help="do not flash, just convert")
+    parser.add_argument("-D", "--deploy", action="store_true", help="just flash, do not convert")
+    parser.add_argument(
+        "-f",
+        "--family",
+        dest="family",
+        type=str,
+        default="0x0",
+        help="specify familyID - number or name (default: 0x0)",
+    )
+    parser.add_argument(
+        "-C", "--carray", action="store_true", help="convert binary file to a C array, not UF2"
+    )
+    parser.add_argument(
+        "-i",
+        "--info",
+        action="store_true",
+        help="display header information from UF2, do not convert",
+    )
+    args = parser.parse_args()
+    appstartaddr = int(args.base, 0)
+
+    families = load_families()
+
+    if args.family.upper() in families:
+        familyid = families[args.family.upper()]
+    else:
+        try:
+            familyid = int(args.family, 0)
+        except ValueError:
+            error("Family ID needs to be a number or one of: " + ", ".join(families.keys()))
+
+    if args.list:
+        list_drives()
+    else:
+        if not args.input:
+            error("Need input file")
+        with open(args.input, mode="rb") as f:
+            inpbuf = f.read()
+        from_uf2 = is_uf2(inpbuf)
+        ext = "uf2"
+        if args.deploy:
+            outbuf = inpbuf
+        elif from_uf2 and not args.info:
+            outbuf = convert_from_uf2(inpbuf)
+            ext = "bin"
+        elif from_uf2 and args.info:
+            outbuf = ""
+            convert_from_uf2(inpbuf)
+        elif is_hex(inpbuf):
+            outbuf = convert_from_hex_to_uf2(inpbuf.decode("utf-8"))
+        elif args.carray:
+            outbuf = convert_to_carray(inpbuf)
+            ext = "h"
+        else:
+            outbuf = convert_to_uf2(inpbuf)
+        if not args.deploy and not args.info:
+            print(
+                "Converted to %s, output size: %d, start address: 0x%x"
+                % (ext, len(outbuf), appstartaddr)
+            )
+        if args.convert or ext != "uf2":
+            drives = []
+            if args.output == None:
+                args.output = "flash." + ext
+        else:
+            drives = get_drives()
+
+        if args.output:
+            write_file(args.output, outbuf)
+        else:
+            if len(drives) == 0:
+                error("No drive to deploy.")
+        for d in drives:
+            print("Flashing %s (%s)" % (d, board_id(d)))
+            write_file(d + "/NEW.UF2", outbuf)
+
+
+if __name__ == "__main__":
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/Tools/uf2families.json	Fri Mar 17 19:10:33 2023 +0100
@@ -0,0 +1,192 @@
+[
+    {
+        "id": "0x16573617",
+        "short_name": "ATMEGA32",
+        "description": "Microchip (Atmel) ATmega32"
+    },
+    {
+        "id": "0x1851780a",
+        "short_name": "SAML21",
+        "description": "Microchip (Atmel) SAML21"
+    },
+    {
+        "id": "0x1b57745f",
+        "short_name": "NRF52",
+        "description": "Nordic NRF52"
+    },
+    {
+        "id": "0x1c5f21b0",
+        "short_name": "ESP32",
+        "description": "ESP32"
+    },
+    {
+        "id": "0x1e1f432d",
+        "short_name": "STM32L1",
+        "description": "ST STM32L1xx"
+    },
+    {
+        "id": "0x202e3a91",
+        "short_name": "STM32L0",
+        "description": "ST STM32L0xx"
+    },
+    {
+        "id": "0x21460ff0",
+        "short_name": "STM32WL",
+        "description": "ST STM32WLxx"
+    },
+    {
+        "id": "0x2abc77ec",
+        "short_name": "LPC55",
+        "description": "NXP LPC55xx"
+    },
+    {
+        "id": "0x300f5633",
+        "short_name": "STM32G0",
+        "description": "ST STM32G0xx"
+    },
+    {
+        "id": "0x31d228c6",
+        "short_name": "GD32F350",
+        "description": "GD32F350"
+    },
+    {
+        "id": "0x04240bdf",
+        "short_name": "STM32L5",
+        "description": "ST STM32L5xx"
+    },
+    {
+        "id": "0x4c71240a",
+        "short_name": "STM32G4",
+        "description": "ST STM32G4xx"
+    },
+    {
+        "id": "0x4fb2d5bd",
+        "short_name": "MIMXRT10XX",
+        "description": "NXP i.MX RT10XX"
+    },
+    {
+        "id": "0x53b80f00",
+        "short_name": "STM32F7",
+        "description": "ST STM32F7xx"
+    },
+    {
+        "id": "0x55114460",
+        "short_name": "SAMD51",
+        "description": "Microchip (Atmel) SAMD51"
+    },
+    {
+        "id": "0x57755a57",
+        "short_name": "STM32F4",
+        "description": "ST STM32F401"
+    },
+    {
+        "id": "0x5a18069b",
+        "short_name": "FX2",
+        "description": "Cypress FX2"
+    },
+    {
+        "id": "0x5d1a0a2e",
+        "short_name": "STM32F2",
+        "description": "ST STM32F2xx"
+    },
+    {
+        "id": "0x5ee21072",
+        "short_name": "STM32F1",
+        "description": "ST STM32F103"
+    },
+    {
+        "id": "0x621e937a",
+        "short_name": "NRF52833",
+        "description": "Nordic NRF52833"
+    },
+    {
+        "id": "0x647824b6",
+        "short_name": "STM32F0",
+        "description": "ST STM32F0xx"
+    },
+    {
+        "id": "0x68ed2b88",
+        "short_name": "SAMD21",
+        "description": "Microchip (Atmel) SAMD21"
+    },
+    {
+        "id": "0x6b846188",
+        "short_name": "STM32F3",
+        "description": "ST STM32F3xx"
+    },
+    {
+        "id": "0x6d0922fa",
+        "short_name": "STM32F407",
+        "description": "ST STM32F407"
+    },
+    {
+        "id": "0x6db66082",
+        "short_name": "STM32H7",
+        "description": "ST STM32H7xx"
+    },
+    {
+        "id": "0x70d16653",
+        "short_name": "STM32WB",
+        "description": "ST STM32WBxx"
+    },
+    {
+        "id": "0x7eab61ed",
+        "short_name": "ESP8266",
+        "description": "ESP8266"
+    },
+    {
+        "id": "0x7f83e793",
+        "short_name": "KL32L2",
+        "description": "NXP KL32L2x"
+    },
+    {
+        "id": "0x8fb060fe",
+        "short_name": "STM32F407VG",
+        "description": "ST STM32F407VG"
+    },
+    {
+        "id": "0xada52840",
+        "short_name": "NRF52840",
+        "description": "Nordic NRF52840"
+    },
+    {
+        "id": "0xbfdd4eee",
+        "short_name": "ESP32S2",
+        "description": "ESP32-S2"
+    },
+    {
+        "id": "0xc47e5767",
+        "short_name": "ESP32S3",
+        "description": "ESP32-S3"
+    },
+    {
+        "id": "0xd42ba06c",
+        "short_name": "ESP32C3",
+        "description": "ESP32-C3"
+    },
+    {
+        "id": "0x2b88d29c",
+        "short_name": "ESP32C2",
+        "description": "ESP32-C2"
+    },
+    {
+        "id": "0x332726f6",
+        "short_name": "ESP32H2",
+        "description": "ESP32-H2"
+    },
+    {
+        "id": "0xe48bff56",
+        "short_name": "RP2040",
+        "description": "Raspberry Pi RP2040"
+    },
+    {
+        "id": "0x00ff6919",
+        "short_name": "STM32L4",
+        "description": "ST STM32L4xx"
+    },
+    {
+        "id": "0x9af03e33",
+        "short_name": "GD32VF103",
+        "description": "GigaDevice GD32VF103"
+    }
+]
--- a/src/eric7/i18n/eric7_cs.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_cs.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7864,6 +7864,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50920,7 +50979,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation type="unfinished" />
@@ -50946,27 +51005,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation type="unfinished" />
@@ -50983,165 +51042,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation type="unfinished">Konfigurovat</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation type="unfinished">neznámý</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">Python soubory (*.py);;Všechny soubory (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_de.qm has changed
--- a/src/eric7/i18n/eric7_de.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_de.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7807,6 +7807,66 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation>MicroPython Firmware Dateien (*.hex *.bin);;Alle Dateien (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation>--- FEHLER ---
+</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation>Zu UF2 konvertieren</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation>Firware Datei:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation>Gib den Pfad der zu konvertierenden MicroPython Firmware Datei ein.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation>Chip Familie:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation>Wähle die Chip Familie der Firmware Datei.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation>Basisadresse:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation>Gib die Basisadresse für .bin Firmware Dateien ein oder lasse es leer, um den Standardwert (0x2000) zu verwenden.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation>Drücken, um die Konvertierung zu starten.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation>Konvertieren</translation>
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50802,7 +50862,7 @@
       <translation>Board Daten anzeigen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation>Zeit synchronisieren</translation>
@@ -50828,27 +50888,27 @@
       <translation>Eingebaute Module anzeigen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation>Paket installieren</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation>Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation>Python Datei übersetzen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation>Aktuellen Editor übersetzen</translation>
@@ -50865,165 +50925,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation>Zu UF2 konvertieren</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation>UF2 Gerät flashen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation>Unbekannte Geräte verwalten</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation>Ignorierte Serielle Geräte</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation>Einstellungen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;Versionsinformationen des Gerätes&lt;/h3&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation>Versionsinformationen des Gerätes</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation>Versionsinformationen des Gerätes</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation>Keine Versionsinformationen verfügbar.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation>unbekannt</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation> ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation>Informationen zur Implementierung</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Informationen zur Implementierung&lt;/h3&gt;&lt;p&gt;Dieses Gerät enthält &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation>Informationen zur Implementierung</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Informationen zur Implementierung&lt;/h3&gt;&lt;p&gt;Dieses Gerät enthält &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation>Keine Informationen zur Implementierung verfügbar.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Zeit des angeschlossenen Gerätes wurde mit der lokalen Zeit synchronisiert.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation>Datum und Zeit des Gerätes</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation>Lokales Datum und Zeit</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation>Lokales Datum und Zeit</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;h3&gt;Lokales Datum und Zeit&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation>Datum und Zeit</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation>Datum und Zeit</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation>Fehler bei Gerätekommunikation</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation>Fehler bei Gerätekommunikation</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Es trat ein Fehler bei der Kommunikation mit dem Gerät auf.&lt;/p&gt;&lt;p&gt;Methode: {0}&lt;/p&gt;&lt;p&gt;Nachricht: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation>Der MicroPython Crosscompiler &lt;b&gt;mpy-cross&lt;/b&gt; kann nicht gefunden werden. Stelle sicher, dass er im Suchpfad liegt oder konfiguriere ihn auf der MicroPython Konfigurationsseite.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation>Python-Dateien (*.py);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation>Die Python Datei &lt;b&gt;{0}&lt;/b&gt; existiert nicht. Abbruch...</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation>'mpy-cross' Ausgabe</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation>Der aktuelle Editortext enthält keine Pythondatei. Abbruch...</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation>Unbekannte Geräte hinzufügen</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation>Unbekannte Geräte hinzufügen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation>Wähle die hinzuzufügenden unbekannten Geräte:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation>Zusätzlich alle Module im Dateisystem.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation>Gib die zu installierenden Pakete durch Leerzeichen getrennt ein:</translation>
     </message>
--- a/src/eric7/i18n/eric7_empty.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_empty.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7748,6 +7748,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50558,7 +50617,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation type="unfinished" />
@@ -50584,27 +50643,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation type="unfinished" />
@@ -50621,165 +50680,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_en.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_en.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7757,6 +7757,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50604,7 +50663,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation type="unfinished" />
@@ -50630,27 +50689,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation type="unfinished" />
@@ -50667,165 +50726,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_es.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_es.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7818,6 +7818,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50829,7 +50888,7 @@
       <translation>Mostrar Datos de Microprocesador</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation>Sincronizar Hora</translation>
@@ -50855,27 +50914,27 @@
       <translation>Mostrar Módulos Incorporados</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished">Instalar Packages</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation>Compilar Archivo de Python</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation>Compilar Editor Actual</translation>
@@ -50892,165 +50951,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation>Flashear Dispositivo UF2</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation>Gestión Dispositivos Desconocidos</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation>Dispositivos de Serie Ignorados</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation>Configurar</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;Información de Versión de Dispositivo&lt;/h3&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation>Información de Versión de Dispositivo</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation>Información de Versión de Dispositivo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation>No hay información de versión disponible.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation>desconocido</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation> ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation>Información de Implementación de Dispositivo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Información de Implementación de Dispositivo&lt;/h3&gt;&lt;p&gt;Este dispositivo contiene &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation>Información de Implementación de Dispositivo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Información de Implementación de Dispositivo&lt;/h3&gt;&lt;p&gt;Este dispositivo contiene &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation>Sin información disponible de implementación de dispositivo.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation>&lt;p&gt;La hora del dispositivo conectado está sincronizada con la hora local.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation>Fecha y Hora del Dispositivo</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation>Fecha y Hora Local</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation>Fecha y Hora Local</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;h3&gt;Fecha y Hora del Local&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation>Fecha y Hora</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation>Fecha y Hora</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation>Error de gestión del dispositivo</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation>Error de gestión del dispositivo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Ha ocurrido un error al comunicar con el dispositivo conectado.&lt;/p&gt;&lt;p&gt;Método: {0}&lt;/p&gt;&lt;p&gt;Mensaje: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation>El compilador multiplataforma de MicroPython &lt;b&gt;mpy-cross&lt;/b&gt; no se encuentra. Asegúrese de que está en la ruta de búsqueda o configurarlo en la página de configuración de MicroPython.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation>Archivos Python (*.py);;Todos los Archivos (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation>El archivo de Python &lt;b&gt;{0}&lt;/b&gt; no existe. Abortando...</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation>Salida de 'mpy-cross'</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation>El editor actual no contiene un archivo de Python. Abortando...</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation>Añadir Dispositivos Desconocidos</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation>Añadir Dispositivos Desconocidos</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation>Seleccionar los dispositivos a añadir:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation>Más cualesquiera módulos en el sistema de archivos.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_fr.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_fr.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7914,6 +7914,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -51061,7 +51120,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation>Synchroniser le temps</translation>
@@ -51087,27 +51146,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished">Installer des packages</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation>Compilier le fichier Python</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation type="unfinished" />
@@ -51124,165 +51183,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation>Matériels séries ignorés</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation>Configuration</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation>Pas d'information de version disponible.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation>inconnu</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation>&lt;p&gt;L'horloge du matériel connecté a été synchronisée à l'horloge locale.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;h3&gt;Date et heure matériel&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation>&lt;h3&gt;Date et heure matériel&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation>Date et heure matériel</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation>Date et heure locales</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation>Date et heure locales</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;h3&gt;Date et heure locales&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation>Date et heure</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Date et heure locales&lt;/th&gt;&lt;th&gt;Date et heure matériel&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation>Date et heure</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Date et heure locales&lt;/th&gt;&lt;th&gt;Date et heure matériel&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Date et heure locales&lt;/th&gt;&lt;th&gt;Date et heure matériel&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Il y a eu une erreur de communication avec le matériel connecté.&lt;/p&gt;&lt;p&gt;Méthode : {0}&lt;/p&gt;&lt;p&gt;Message : {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation>Fichiers Python (*.py);;Tous les fichiers (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation>Le fichier Python &lt;b&gt;{0}&lt;/b&gt; n'existe pas. Annulation...</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation>L'éditeur courant ne contient pas un fichier Python. Annulation...</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_it.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_it.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7879,6 +7879,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50968,7 +51027,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation type="unfinished" />
@@ -50994,27 +51053,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation type="unfinished" />
@@ -51031,165 +51090,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation type="unfinished">Configura</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">File Python (*.py);;Tutti i File (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_pt.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_pt.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7894,6 +7894,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50962,7 +51021,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation type="unfinished" />
@@ -50988,27 +51047,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation type="unfinished" />
@@ -51025,165 +51084,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation type="unfinished">Configurar</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation type="unfinished">desconhecido</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation type="unfinished">Data e Hora</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation type="unfinished">Data e Hora</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">Ficheiros Python (*.py);;Ficheiros Todos (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_ru.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_ru.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7830,6 +7830,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50899,7 +50958,7 @@
       <translation>Показать данные платы</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation>Синхронизировать время</translation>
@@ -50925,27 +50984,27 @@
       <translation>Показать встроенные модули</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished">Установить пакеты</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation>Компилировать файл Python</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation>Компилировать текущий редактор</translation>
@@ -50962,165 +51021,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation>Прошивка UF2-устройств</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation>Менеджер неизвестных устройств</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation>Проигнорированные последовательные устройства</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation>Настройки</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;Информация о версии устройства&lt;/h3&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation>Информация о версии устройства</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation>Информация о версии устройства</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation>Информация о версии недоступна.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation>unknown</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation> ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation>Информация о исполнении устройства</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Информация о реализации устройства&lt;/h3&gt;&lt;p&gt;Это устройство содержит &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation>Информация о исполнении устройства</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Информация о реализации устройства&lt;/h3&gt;&lt;p&gt;Это устройство содержит &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation>Информация о реализации устройства отсутствует.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Время подключенного устройства было синхронизировано с локальным временем.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;h3&gt;Дата и время устройства&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation>&lt;h3&gt;Дата и время устройства&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation>Дата и время устройства</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation>Локальные дата и время</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation>Локальные дата и время</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;h3&gt;Локальные дата и время&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation>Дата и время</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Дата и время локальные&lt;/th&gt;&lt;th&gt;Дата и время устройства&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата &lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время &lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation>Дата и время</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Дата и время локальные&lt;/th&gt;&lt;th&gt;Дата и время устройства&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата &lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время &lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Дата и время локальные&lt;/th&gt;&lt;th&gt;Дата и время устройства&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation>Ошибка при работе с устройством</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation>Ошибка при работе с устройством</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Произошла ошибка при работе с подключаемым устройством.&lt;/p&gt;&lt;p&gt;Метод: {0}&lt;/p&gt;&lt;p&gt;Сообщение: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation>Кросс-компилятор MicroPython &lt;b&gt;mpy-cross&lt;/b&gt; не найден. Убедитесь, что он находится в пути поиска, или настройте его на странице конфигурации MicroPython.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation>Файлы Python (*.py);;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation>Файл Python &lt;b&gt;{0}&lt;/b&gt; не существует. Отмена...</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation>Вывод команды 'mpy-cross'</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation>Текущий редактор не содержит файл Python. Отмена...</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation>Добавить неизвестное устройство</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation>Добавить неизвестное устройство</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation>Выбор устройств для добавления:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation>Плюс любые модули в файловой системе.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_tr.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_tr.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7856,6 +7856,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50905,7 +50964,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation type="unfinished" />
@@ -50931,27 +50990,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation type="unfinished" />
@@ -50968,165 +51027,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation type="unfinished">Yapılandırma</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation type="unfinished">bilinmeyen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">Python Dosyaları (*.py);;Tüm Dosyalar (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts	Fri Mar 17 11:29:09 2023 +0100
+++ b/src/eric7/i18n/eric7_zh_CN.ts	Fri Mar 17 19:10:33 2023 +0100
@@ -7915,6 +7915,65 @@
     </message>
   </context>
   <context>
+    <name>ConvertToUF2Dialog</name>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="44" />
+      <source>MicroPython Firmware Files (*.hex *.bin);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.py" line="162" />
+      <source>--- ERROR ---
+</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Firmware File:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the path of the MicroPython firmware file to be converted.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Chip Family:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Select the chip family of the firmware file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Base Address:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Enter the base address for .bin firmware files or leave empty to use the default (0x2000).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Press to start the conversion process.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/ConvertToUF2Dialog.ui" line="0" />
+      <source>Convert</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>CookieDetailsDialog</name>
     <message>
       <location filename="../WebBrowser/CookieJar/CookieDetailsDialog.ui" line="0" />
@@ -50938,7 +50997,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1722" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
       <source>Synchronize Time</source>
       <translation type="unfinished" />
@@ -50964,27 +51023,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2121" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
       <source>Install Package</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2133" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2130" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2142" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2139" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1946" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1947" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1572" />
       <source>Compile Python File</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1970" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1961" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1971" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
       <location filename="../MicroPython/MicroPythonWidget.py" line="1576" />
       <source>Compile Current Editor</source>
       <translation type="unfinished" />
@@ -51001,165 +51060,170 @@
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1607" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1608" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1610" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1611" />
       <source>Manage Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1613" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1614" />
       <source>Ignored Serial Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1617" />
       <source>Configure</source>
       <translation type="unfinished">配置</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1625" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
       <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1636" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1632" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1637" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1661" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1653" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1662" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1654" />
       <source>unknown</source>
       <translation type="unfinished">未知</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1667" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1668" />
       <source> ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1683" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1684" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1675" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1676" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1685" />
       <source>No device implementation information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1723" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1724" />
       <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1745" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1746" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1753" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1754" />
       <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1769" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1770" />
       <source>Device Date and Time</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1781" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1783" />
       <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1823" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1806" />
-      <source>Date and Time</source>
-      <translation type="unfinished">日期和时间</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1824" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1807" />
+      <source>Date and Time</source>
+      <translation type="unfinished">日期和时间</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1808" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1825" />
       <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1848" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1849" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1850" />
       <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1891" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1892" />
       <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1917" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1918" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1927" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1928" />
       <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1936" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1937" />
       <source>'mpy-cross' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1962" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1963" />
       <source>The current editor does not contain a Python file. Aborting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2054" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="2055" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2056" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2096" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2105" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2134" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="2143" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial