Lynovation CTR2-Dial Reflash Travelogue


  • Wed 13 August 2025
  • misc

About four months ago I bought a Lynovation CTR2-Dial controller as a control surface for SmartSDR on iPad.

So far I love it. I haven't tried it as a control surface for SmartSDR on a laptop, nor have I tried it with Thetis (which I hear it works well with too).

There's been a flurry of firmware development in the intervening four months and a bunch of new features including the abilty to dual boot the CTR2-Flex firmware - turning the CTR2-Dial from a MIDI controller into a remote control that works over TCP/IP as an API client to the Flex, much like a Maestro would.

The manual is not terribly opinionated about the best tools to use to perform the flash upgrade, and perhaps assumes a bit more familiarity/recency with the manual of arms forreflashing ESP32s3 devices than I have.

If you're on a Mac or Linux machine though there's good news - they include a shell script in the zip file that you download with the firmare, and it does a great job of using a Python-based tool for making things happen. All you need is to have Python installed, be able to figure out what the serial device is in /dev (in my case /dev/cu.usbmodem1101), and be able to use a Unix text editor. Easy.

So I figured I'd just post the terminal output from running the script here. Worked on the first try. Far easier than trying to figure out how to make the web browser based programmer work.

Note that I create a venv before running the script. It does install a single Python package with pip. Probably no big deal, but this is all out of an abundance of caution - keeps everything nice and neat and self contained.

Hunters-Laptop:~ rs$ cd Downloads/CTR2-Flex__v20101
Hunters-Laptop:CTR2-Flex__v20101 rs$ ls -la
total 12280
drwx------@   11 rs  staff      352 Aug 12 17:35 .
drwx------@ 1204 rs  staff    38528 Aug 12 17:35 ..
-rw-rw-r--@    1 rs  staff     4264 May  7 18:57 App_Maps_v1.01.zip
-rw-rw-r--@    1 rs  staff     8192 Oct 29  2023 boot_app0_0xe000.bin
-rw-rw-r--@    1 rs  staff  2224165 Aug 10 21:16 CTR2-Dial_Operation_Manual_v20101.pdf
-rw-rw-r--@    1 rs  staff     1008 Apr 29 10:04 CTR2-Flex_Install.sh
-rw-rw-r--@    1 rs  staff  2620801 Aug 10 20:48 CTR2-Flex_Operation_Manual_v20101.pdf
-rw-rw-r--@    1 rs  staff  1389680 Aug 11 03:46 CTR2-Flex.ino_0x10000.bin
-rw-rw-r--@    1 rs  staff    15104 Aug 11 03:44 CTR2-Flex.ino.bootloader_0x0.bin
-rw-rw-r--@    1 rs  staff     3072 Aug 11 03:46 CTR2-Flex.ino.partitions_0x8000.bin
-rw-rw-r--@    1 rs  staff     1470 Aug 10 21:17 READ_ME.txt
Hunters-Laptop:CTR2-Flex__v20101 rs$ ls -l /dev/cu.*
crw-rw-rw-  1 root  wheel  0x9000005 Aug 10 10:39 /dev/cu.Bluetooth-Incoming-Port
crw-rw-rw-  1 root  wheel  0x9000001 Aug 12 17:30 /dev/cu.debug-console
crw-rw-rw-  1 root  wheel  0x9000003 Aug 10 10:39 /dev/cu.OlderJabraEvolve265
crw-rw-rw-  1 root  wheel  0x9000007 Aug 12 17:34 /dev/cu.usbmodem1101
Hunters-Laptop:CTR2-Flex__v20101 rs$ vi CTR2-Flex_Install.sh
Hunters-Laptop:CTR2-Flex__v20101 rs$ python3 -m venv venv
Hunters-Laptop:CTR2-Flex__v20101 rs$ . venv/bin/activate
(venv) Hunters-Laptop:CTR2-Flex__v20101 rs$ sh ./CTR2-Flex_Install.sh

[notice] A new release of pip is available: 25.1.1 -> 25.2
[notice] To update, run: pip install --upgrade pip
Hold down ENCODER and press any key to continueWarning: Deprecated: Command 'write_flash' is deprecated. Use 'write-flash' instead.
esptool v5.0.2
Connected to ESP32-S3 on /dev/cu.usbmodem1101:
Chip type:          ESP32-S3 (QFN56) (revision v0.2)
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded Flash 8MB (GD)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                48:ca:43:3a:27:80

Stub flasher running.

Configuring flash size...
Flash will be erased from 0x00000000 to 0x00003fff...
Compressed 15104 bytes to 10399...
Wrote 15104 bytes (10399 compressed) at 0x00000000 in 0.2 seconds (528.3 kbit/s).
Hash of data verified.

Hard resetting via RTS pin...
Warning: Deprecated: Command 'write_flash' is deprecated. Use 'write-flash' instead.
esptool v5.0.2
Connected to ESP32-S3 on /dev/cu.usbmodem1101:
Chip type:          ESP32-S3 (QFN56) (revision v0.2)
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded Flash 8MB (GD)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                48:ca:43:3a:27:80

Stub flasher running.

Configuring flash size...
Flash will be erased from 0x00008000 to 0x00008fff...
Wrote 3072 bytes (146 compressed) at 0x00008000 in 0.0 seconds (650.3 kbit/s).
Hash of data verified.

Hard resetting via RTS pin...
Warning: Deprecated: Command 'write_flash' is deprecated. Use 'write-flash' instead.
esptool v5.0.2
Connected to ESP32-S3 on /dev/cu.usbmodem1101:
Chip type:          ESP32-S3 (QFN56) (revision v0.2)
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded Flash 8MB (GD)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                48:ca:43:3a:27:80

Stub flasher running.

Configuring flash size...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (838.5 kbit/s).
Hash of data verified.

Hard resetting via RTS pin...
Warning: Deprecated: Command 'write_flash' is deprecated. Use 'write-flash' instead.
esptool v5.0.2
Connected to ESP32-S3 on /dev/cu.usbmodem1101:
Chip type:          ESP32-S3 (QFN56) (revision v0.2)
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded Flash 8MB (GD)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                48:ca:43:xx:xx:xx

Stub flasher running.

Configuring flash size...
Flash will be erased from 0x00010000 to 0x00163fff...
Compressed 1389680 bytes to 890595...
Writing at 0x00017f31 [                              ]   1.8% 16384/890595 bytes
Writing at 0x0001f2e1 [>                             ]   3.7% 32768/890595 bytes
Writing at 0x0002b447 [>                             ]   5.5% 49152/890595 bytes
Writing at 0x00034e2f [=>                            ]   7.4% 65536/890595 bytes
Writing at 0x0003aad8 [=>                            ]   9.2% 81920/890595 bytes
Writing at 0x0004ebda [==>                           ]  11.0% 98304/890595 bytes
Writing at 0x00055a9a [==>                           ]  12.9% 114688/890595 byte
Writing at 0x0005ccbd [===>                          ]  14.7% 131072/890595 byte
Writing at 0x000630a4 [===>                          ]  16.6% 147456/890595 byte
Writing at 0x00069df9 [====>                         ]  18.4% 163840/890595 byte
Writing at 0x00070652 [=====>                        ]  20.2% 180224/890595 byte
Writing at 0x000767ab [=====>                        ]  22.1% 196608/890595 byte
Writing at 0x0007d2b6 [======>                       ]  23.9% 212992/890595 byte
Writing at 0x0008357e [======>                       ]  25.8% 229376/890595 byte
Writing at 0x00088987 [=======>                      ]  27.6% 245760/890595 byte
Writing at 0x0008e090 [=======>                      ]  29.4% 262144/890595 byte
Writing at 0x00093b6d [========>                     ]  31.3% 278528/890595 byte
Writing at 0x0009915d [========>                     ]  33.1% 294912/890595 byte
Writing at 0x0009e68d [=========>                    ]  35.0% 311296/890595 byte
Writing at 0x000a3b6e [==========>                   ]  36.8% 327680/890595 byte
Writing at 0x000a9490 [==========>                   ]  38.6% 344064/890595 byte
Writing at 0x000aeda7 [===========>                  ]  40.5% 360448/890595 byte
Writing at 0x000b491f [===========>                  ]  42.3% 376832/890595 byte
Writing at 0x000ba074 [============>                 ]  44.2% 393216/890595 byte
Writing at 0x000bf705 [============>                 ]  46.0% 409600/890595 byte
Writing at 0x000c51a0 [=============>                ]  47.8% 425984/890595 byte
Writing at 0x000ca2dd [=============>                ]  49.7% 442368/890595 byte
Writing at 0x000cf120 [==============>               ]  51.5% 458752/890595 byte
Writing at 0x000d43f6 [===============>              ]  53.4% 475136/890595 byte
Writing at 0x000d931c [===============>              ]  55.2% 491520/890595 byte
Writing at 0x000de201 [================>             ]  57.0% 507904/890595 byte
Writing at 0x000e36e9 [================>             ]  58.9% 524288/890595 byte
Writing at 0x000e8502 [=================>            ]  60.7% 540672/890595 byte
Writing at 0x000edb54 [=================>            ]  62.5% 557056/890595 byte
Writing at 0x000f3289 [==================>           ]  64.4% 573440/890595 byte
Writing at 0x000f8201 [==================>           ]  66.2% 589824/890595 byte
Writing at 0x000fdb73 [===================>          ]  68.1% 606208/890595 byte
Writing at 0x001030e5 [===================>          ]  69.9% 622592/890595 byte
Writing at 0x00107f40 [====================>         ]  71.7% 638976/890595 byte
Writing at 0x0010d01f [=====================>        ]  73.6% 655360/890595 byte
Writing at 0x001120c5 [=====================>        ]  75.4% 671744/890595 byte
Writing at 0x0011743b [======================>       ]  77.3% 688128/890595 byte
Writing at 0x0011c87e [======================>       ]  79.1% 704512/890595 byte
Writing at 0x0012240a [=======================>      ]  80.9% 720896/890595 byte
Writing at 0x00127b02 [=======================>      ]  82.8% 737280/890595 byte
Writing at 0x0012d401 [========================>     ]  84.6% 753664/890595 byte
Writing at 0x001339df [========================>     ]  86.5% 770048/890595 byte
Writing at 0x0013b885 [=========================>    ]  88.3% 786432/890595 byte
Writing at 0x00144086 [==========================>   ]  90.1% 802816/890595 byte
Writing at 0x00149b10 [==========================>   ]  92.0% 819200/890595 byte
Writing at 0x001504f5 [===========================>  ]  93.8% 835584/890595 byte
Writing at 0x00155a1f [===========================>  ]  95.7% 851968/890595 byte
Writing at 0x0015b40c [============================> ]  97.5% 868352/890595 byte
Writing at 0x001611ec [============================> ]  99.3% 884736/890595 byte
Wrote 1389680 bytes (890595 compressed) at 0x00010000 in 9.0 seconds (1241.5 kbit/s).
Hash of data verified.

Hard resetting via RTS pin...
(venv) Hunters-Laptop:CTR2-Flex__v20101 rs$