Myxa with Ardupilot

Hi!
I’m looking to fit in 4 Myxa’s on my Ardupilot powered Quadcopter. However, I’m on Telega v1, so using CAN is currently not supported. Is it possible that I downgrade back to Telega v0.2 so that I can fully use Drone/UAVCAN with Ardupilot. This would be more optimal than migrating the whole drone to PX4.
I’ve tried downloading the firmware from here and uploading it to the Myxa using Yukon but I don’t see any Software Version change and all those versions are using OpenCyphal rather than DroneCAN.

tl;dr: Is is possible for me to downgrade my Myxa from Telega v1 to v0.2 to use it with Ardupilot. If so, how do I do this??

Thanks!

v0.2 is probably too old for most applications. You can use any of the firmware versions that you already linked instead – they are all DroneCAN compatible, not Cyphal.

However, I would strongly advise using RC PWM control with Telega v1.0 instead of downgrading back to v0.

Try using Yakut instead. The command is yakut file-server <FIRMWARE-DIRECTORY> --update-software <NODE_ID>; see yakut file-server --help for usage info.

Thanks @pavel-kirienko for your reply!

A few more things…

While this is a possibility, I bought Myxas for their excellent motor control but also the CAN interface, diagnostics and the additional data that comes through. Using RCPWM is a workaround, but basically a waste of 4 Myxas with my Pixhawk.
I don’t mind using RCPWM for a while if I was given a rough date or time when there would be some form of OpenCyphal support or a Lua script.

Is 0.6 DroneCAN compatible? This will work with Ardupilot?

Ok, will setup Yakut and report back.

Thanks again!

Perhaps you could consider this:

Pull requests would be welcome!

Yes to both.

Indeed this will be part of the roadmap. I want to get the full system working with Ardupilot working natively with the Myxa’s before I try OpenCyphal through a Lua script.

While running the command you provided (^) and the one from the Telega Reference Manual, I get an output telling me that the node does not require a firmware update.

2024-11-10 19:27:05 0013548 INF yakut.cmd.file_server: Checking if node 125 requires a software update...
2024-11-10 19:27:05 0013548 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: Checking if com.zubax.telega-1-0.4.0000000025f393bf.app is equivalent...
2024-11-10 19:27:05 0013548 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: No, the software version does not match.
2024-11-10 19:27:05 0013548 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: Checking if this app should be updated to com.zubax.telega-1-0.4.0000000025f393bf.app...
2024-11-10 19:27:05 0013548 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: The applications appear to be compatible -- an update would not break the node. Looking further...
2024-11-10 19:27:05 0013548 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: CRC is identical or not defined, checking the version information...
2024-11-10 19:27:05 0013548 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: No, the other application is older.
2024-11-10 19:27:05 0013548 WAR yakut.cmd.file_server: Node 125 does not require a software update.

How can I bypass this and force the update??

To force a software update it is necessary to explicitly address the node to be updated e.g.
yakut file-server ./fw_directory --update-software 125 where 125 is an example for a ESC node id (check using yakut monitor).


Alternatively rename the firmware file, increasing the software version (SWMAJ or SWMIN) number according to the diagram in the manual (yakut file-server --help) thus make yakut trigger an update:

NAME-HWMAJ.HWMIN-SWMAJ.SWMIN.VCS.CRC.app*
[...]
A node running software version X (as determined from uavcan.node.GetInfo) is considered to require
an update to Y (a local package file) if the names are matching, the hardware version is compatible,
and either condition holds:

- The software image CRC is defined for both X and Y and is different.
- The software version of Y is higher than X.
- The software version of Y is not older than X and the VCS hash is different.
- There may be additional heuristics to handle edge cases. Inspect logs or use --verbose to see
details.

e.g rename your file com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app to com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app

then trigger the update as usual:

yakut file-server ./fw_directory --update-software

You could also call the node’s remote procedure manually and start a fileserver in parallel.

y --verbose file-server --plug-and-play allocation_table.db ./fw
yakut call <NODE_ID> 435:uavcan.node.ExecuteCommand '{command: 65533, parameter: "your.firmware-255.0.app.bin"}'
2 Likes

Thank you @psandro.
However, trying both the force update and the renaming method, by Myxa goes offline when I try to make the update. This happens both on Yakut and Yukon where is command is sent successfully after it determines it is a “new” update, but the Myxa fails to make the update by simply disappearing then reappearing.

Edit for @pavel-kirienko

PS C:\Windows\system32> y --verbose file-server --plug-and-play allocation_table.db C:\Users\Public --update-software
2024-11-11 18:22:53 0007464 INF yakut.cmd.file_server: File server root directories: ['C:\\Users\\Public']
2024-11-11 18:22:53 0007464 INF yakut.cmd.file_server: Total update: True; trigger explicitly: []
2024-11-11 18:22:55 0007464 INF yakut.param.transport: Transport constructed from registers: CANTransport(PythonCANMedia('slcan:COM7', mtu=8), local_node_id=35)
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Starting a plug-and-play allocator using file 'C:\\Windows\\System32\\allocation_table.db'
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Initializing the node tracker
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Initializing the software update checker
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=457, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Node 124 info: <not available>
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=457, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Node 124 info: uavcan.node.GetInfo.Response.1.0(protocol_version=uavcan.node.Version.1.0(major=1, minor=0), hardware_version=uavcan.node.Version.1.0(major=1, minor=3), software_version=uavcan.node.Version.1.0(major=1, minor=0), software_vcs_revision_id=2187630895419027378, unique_id=[62, 0,79, 0,10,81,54,49,48,54,56,56, 0, 0, 0, 0], name='com.zubax.telega', software_image_crc=[7652891267415001969], certificate_of_authenticity="|\x98_\xa7\x11Co\xe0\xda\xce\x92\x9c\xea\xf1%\xa8\r)\xb0\x86V\xbfT\xad\x14\xbd\xe0\xed&C}c\xeamr\xf2u\x8dx\x85\xd2\x96aW\xaa\xa2\x00vz\x1ecl4[\x8e\xfd\x92fEx\x99\x9a-\xdb\xaeS\xc0Y%\x10:)\xc9\xb4\xfd\t\xa9_\x91\xde\xec\x8aBK;\x11\x92M2\xd3\xd7\x89u\x0b\xa2o\xd1\x99\xfd\xd9\x14\xba\xb2\x15\xd9p\xa5\xc9\xc2(\x89r\xa7\xb7#\x96\xbf\xd3\x91\xd74\xf3\x7f\x8f\xc3\xc2\xed\x9a3'\xe5-`\xaa\x81R\xaa0\x8di\xd9V\x0f\x14\x95HbR\xf54\xff\x9f\xe3\x98\xa5G\xc9M\x12\x80\xd7\xe5\xfc\xbf\x83\x9fc\xe7\x08S\xd5\xa3\x0bL\x01C\x16\xf0\x1aM\xa8k(ET\x89u\x100\xfa\xab\x8e^\xfd\x82cv\xac4\xf5\xaa\n\xcf:(V\x10\xf6\xa3\xc1\x8d\xb6y5\x1aYv\xf7\xdb\xf2\x97]")

(Then repeats automatically)

PS C:\Windows\system32> yakut file-server  C:\ --update-software 124
2024-11-11 18:09:35 0014760 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 18:09:43 0014760 WAR yakut.cmd.file_server: Node 124 ignored because total update mode not selected and its ID is not given explicitly (explicit node-IDs are: (none given))

(Then hangs)

PS C:\Windows\system32> yakut file-server  -P 124 C:\ --update-software
2024-11-11 18:12:28 0013184 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 18:12:37 0013184 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 18:12:45 0013184 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 18:12:53 0013184 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')

(Then repeats continously)

In Yukon

24-11-11 18:29:42 Frontend U: ✓ uavcan.node.ExecuteCommand.Response.1.1(status=0) (success)
24-11-11 18:29:46 yukon.services.avatar_handler W: Node with id 124 disappeared at 18:29:46

What happens now??

Please share the exact Yakut command you are executing, and the contents of the directory that is passed to the file server command.

Errors:

PS C:\Windows\system32> y --verbose file-server --plug-and-play allocation_table.db C:\Users\Public --update-software
2024-11-11 18:22:53 0007464 INF yakut.cmd.file_server: File server root directories: ['C:\\Users\\Public']
2024-11-11 18:22:53 0007464 INF yakut.cmd.file_server: Total update: True; trigger explicitly: []
2024-11-11 18:22:55 0007464 INF yakut.param.transport: Transport constructed from registers: CANTransport(PythonCANMedia('slcan:COM7', mtu=8), local_node_id=35)
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Starting a plug-and-play allocator using file 'C:\\Windows\\System32\\allocation_table.db'
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Initializing the node tracker
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Initializing the software update checker
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=457, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Node 124 info: <not available>
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=457, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-11 18:22:55 0007464 INF yakut.cmd.file_server: Node 124 info: uavcan.node.GetInfo.Response.1.0(protocol_version=uavcan.node.Version.1.0(major=1, minor=0), hardware_version=uavcan.node.Version.1.0(major=1, minor=3), software_version=uavcan.node.Version.1.0(major=1, minor=0), software_vcs_revision_id=2187630895419027378, unique_id=[62, 0,79, 0,10,81,54,49,48,54,56,56, 0, 0, 0, 0], name='com.zubax.telega', software_image_crc=[7652891267415001969], certificate_of_authenticity="|\x98_\xa7\x11Co\xe0\xda\xce\x92\x9c\xea\xf1%\xa8\r)\xb0\x86V\xbfT\xad\x14\xbd\xe0\xed&C}c\xeamr\xf2u\x8dx\x85\xd2\x96aW\xaa\xa2\x00vz\x1ecl4[\x8e\xfd\x92fEx\x99\x9a-\xdb\xaeS\xc0Y%\x10:)\xc9\xb4\xfd\t\xa9_\x91\xde\xec\x8aBK;\x11\x92M2\xd3\xd7\x89u\x0b\xa2o\xd1\x99\xfd\xd9\x14\xba\xb2\x15\xd9p\xa5\xc9\xc2(\x89r\xa7\xb7#\x96\xbf\xd3\x91\xd74\xf3\x7f\x8f\xc3\xc2\xed\x9a3'\xe5-`\xaa\x81R\xaa0\x8di\xd9V\x0f\x14\x95HbR\xf54\xff\x9f\xe3\x98\xa5G\xc9M\x12\x80\xd7\xe5\xfc\xbf\x83\x9fc\xe7\x08S\xd5\xa3\x0bL\x01C\x16\xf0\x1aM\xa8k(ET\x89u\x100\xfa\xab\x8e^\xfd\x82cv\xac4\xf5\xaa\n\xcf:(V\x10\xf6\xa3\xc1\x8d\xb6y5\x1aYv\xf7\xdb\xf2\x97]")

(Then repeats automatically)

PS C:\Windows\system32> yakut file-server  C:\ --update-software 124
2024-11-11 18:09:35 0014760 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 18:09:43 0014760 WAR yakut.cmd.file_server: Node 124 ignored because total update mode not selected and its ID is not given explicitly (explicit node-IDs are: (none given))

(Then hangs)

PS C:\Windows\system32> yakut file-server  -P 124 C:\ --update-software
2024-11-11 18:12:28 0013184 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 18:12:37 0013184 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 18:12:45 0013184 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 18:12:53 0013184 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')

(Then repeats continously)

In Yukon

24-11-11 18:29:42 Frontend U: ✓ uavcan.node.ExecuteCommand.Response.1.1(status=0) (success)
24-11-11 18:29:46 yukon.services.avatar_handler W: Node with id 124 disappeared at 18:29:46

The logs contain no errors.

This message says that you are already running firmware com.zubax.telega-1.0.1e5c06b5751eefb2.6a34880f9af5cb71 (I see that you added the hardware version number to the file name but it’s not needed). Updating to the same version does not make a lot of sense.

The syntax is correct but the command will only work if the C:\ directory contains the firmware file. From the other invocations it is unclear if this is the case.

It doesn’t hang but keeps running while not doing anything, because there are either no nodes to update or no firmware files available.

This invocation is probably not what you mean because you are using 124 as the file name for the allocation table, while not giving an explicit list of nodes to update. The previous forms are correct.


In case you are dealing with some Windows-specific issues, you could upload the firmware via the debug connector of Myxa:

The load address is 0x800c000

My apologies.

I didn’t do that - that was the same file name from the server.

Would updating it to a much higher version number work?? (i.e. v1.5.6)

Indeed this the case. I tried a few different folders just to be sure…

I’m just trying everything at this point given that I’m not familar with Yakut as much as I’d like to be.

PS C:\Windows\system32> yakut file-server C:\Users\Public --update-software 124
2024-11-11 21:43:14 0003680 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.4.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-11 21:43:22 0003680 WAR yakut.cmd.file_server: Node 124 ignored because total update mode not selected and its ID is not given explicitly (explicit node-IDs are: (none given))

This is the closest (I think) I’ve gotten.

I’m using a Babel as part of this workflow. How do I use the the debug connector…?

Hm, this is sus. Your logs refer to com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin (the second entry from your previous post), but the file on the file server is named slightly differently. The name itself doesn’t matter that much but I need to understand what caused it to be different.

Regarless, though, you don’t need to use the v1 firmware, since you want to downgrade (although I would go with that Lua script still, in which case no downgrade is needed). If you’re confident you want to downgrade, obtain the latest v0 firmware from the file server.

Please try running your first command again, but this time ensure that the binary file is indeed contained in the specified path (or change the path), and add the node-ID after the --update-software flag, like this (I am using shorthand options here for brevity):

y -v file-server  C:\Users\Public  -P allocation_table.db  -u 124

You should see the command emit messages like Requesting node 124 to update its software: ..., followed by requests coming back from the node. If anything goes wrong, we should see helpful log messages.


An alternative to this would be to use any STM32-compatible SWD adapter to upload the firmware as I mentioned earlier. One such adapter is available here:

I changed the name to “cheat” the updater into thinking it was a newer version of firmware (as per @psandro 's suggestion). That’s all. :slight_smile:

I tried this, but my Pixhawk 2 doesn’t have enough mem for the script apparently.

In C:\ until I manually cancel it:

PS C:\Windows\system32> y -v file-server  C:\Users\Public  -P allocation_table.db  -u 124
2024-11-12 07:29:33 0009848 INF yakut.cmd.file_server: File server root directories: ['C:\\Users\\Public']
2024-11-12 07:29:33 0009848 INF yakut.cmd.file_server: Total update: False; trigger explicitly: [124]
2024-11-12 07:29:36 0009848 INF yakut.param.transport: Transport constructed from registers: CANTransport(PythonCANMedia('slcan:COM7', mtu=8), local_node_id=3)
2024-11-12 07:29:36 0009848 INF yakut.param.node: Output TID map: Could not restore from file C:\Users\Jeeva Arjun\AppData\Roaming\yakut\v0.13\output-transfer-id-maps\3: FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Jeeva Arjun\\AppData\\Roaming\\yakut\\v0.13\\output-transfer-id-maps\\3'. No problem, will use defaults.
2024-11-12 07:29:36 0009848 INF yakut.cmd.file_server: Starting a plug-and-play allocator using file 'C:\\Windows\\System32\\allocation_table.db'
2024-11-12 07:29:36 0009848 INF yakut.cmd.file_server: Initializing the node tracker
2024-11-12 07:29:36 0009848 INF yakut.cmd.file_server: Initializing the software update checker
2024-11-12 07:29:37 0009848 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=30, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-12 07:29:37 0009848 INF yakut.cmd.file_server: Node 124 info: <not available>
2024-11-12 07:29:42 0009848 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=35, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-12 07:29:42 0009848 INF yakut.cmd.file_server: Node 124 info: uavcan.node.GetInfo.Response.1.0(protocol_version=uavcan.node.Version.1.0(major=1, minor=0), hardware_version=uavcan.node.Version.1.0(major=1, minor=3), software_version=uavcan.node.Version.1.0(major=1, minor=0), software_vcs_revision_id=2187630895419027378, unique_id=[62, 0,79, 0,10,81,54,49,48,54,56,56, 0, 0, 0, 0], name='com.zubax.telega', software_image_crc=[7652891267415001969], certificate_of_authenticity="|\x98_\xa7\x11Co\xe0\xda\xce\x92\x9c\xea\xf1%\xa8\r)\xb0\x86V\xbfT\xad\x14\xbd\xe0\xed&C}c\xeamr\xf2u\x8dx\x85\xd2\x96aW\xaa\xa2\x00vz\x1ecl4[\x8e\xfd\x92fEx\x99\x9a-\xdb\xaeS\xc0Y%\x10:)\xc9\xb4\xfd\t\xa9_\x91\xde\xec\x8aBK;\x11\x92M2\xd3\xd7\x89u\x0b\xa2o\xd1\x99\xfd\xd9\x14\xba\xb2\x15\xd9p\xa5\xc9\xc2(\x89r\xa7\xb7#\x96\xbf\xd3\x91\xd74\xf3\x7f\x8f\xc3\xc2\xed\x9a3'\xe5-`\xaa\x81R\xaa0\x8di\xd9V\x0f\x14\x95HbR\xf54\xff\x9f\xe3\x98\xa5G\xc9M\x12\x80\xd7\xe5\xfc\xbf\x83\x9fc\xe7\x08S\xd5\xa3\x0bL\x01C\x16\xf0\x1aM\xa8k(ET\x89u\x100\xfa\xab\x8e^\xfd\x82cv\xac4\xf5\xaa\n\xcf:(V\x10\xf6\xa3\xc1\x8d\xb6y5\x1aYv\xf7\xdb\xf2\x97]")
2024-11-12 07:29:42 0009848 INF yakut.cmd.file_server: Checking if node 124 requires a software update...
2024-11-12 07:29:42 0009848 WAR yakut.cmd.file_server: Node 124 does not require a software update.
2024-11-12 07:30:02 0009848 INF pycyphal.transport.can.media.pythoncan._pythoncan: PythonCANMedia('slcan:COM7', mtu=8) thread is about to exit

In C:\Users\Public until I manually cancel it:

PS C:\Windows\system32> y -v file-server  C:\  -P allocation_table.db  -u 124
2024-11-12 07:30:14 0009428 INF yakut.cmd.file_server: File server root directories: ['C:\\']
2024-11-12 07:30:14 0009428 INF yakut.cmd.file_server: Total update: False; trigger explicitly: [124]
2024-11-12 07:30:16 0009428 INF yakut.param.transport: Transport constructed from registers: CANTransport(PythonCANMedia('slcan:COM7', mtu=8), local_node_id=3)
2024-11-12 07:30:16 0009428 INF yakut.cmd.file_server: Starting a plug-and-play allocator using file 'C:\\Windows\\System32\\allocation_table.db'
2024-11-12 07:30:16 0009428 INF yakut.cmd.file_server: Initializing the node tracker
2024-11-12 07:30:16 0009428 INF yakut.cmd.file_server: Initializing the software update checker
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=70, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: Node 124 info: <not available>
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=70, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: Node 124 info: uavcan.node.GetInfo.Response.1.0(protocol_version=uavcan.node.Version.1.0(major=1, minor=0), hardware_version=uavcan.node.Version.1.0(major=1, minor=3), software_version=uavcan.node.Version.1.0(major=1, minor=0), software_vcs_revision_id=2187630895419027378, unique_id=[62, 0,79, 0,10,81,54,49,48,54,56,56, 0, 0, 0, 0], name='com.zubax.telega', software_image_crc=[7652891267415001969], certificate_of_authenticity="|\x98_\xa7\x11Co\xe0\xda\xce\x92\x9c\xea\xf1%\xa8\r)\xb0\x86V\xbfT\xad\x14\xbd\xe0\xed&C}c\xeamr\xf2u\x8dx\x85\xd2\x96aW\xaa\xa2\x00vz\x1ecl4[\x8e\xfd\x92fEx\x99\x9a-\xdb\xaeS\xc0Y%\x10:)\xc9\xb4\xfd\t\xa9_\x91\xde\xec\x8aBK;\x11\x92M2\xd3\xd7\x89u\x0b\xa2o\xd1\x99\xfd\xd9\x14\xba\xb2\x15\xd9p\xa5\xc9\xc2(\x89r\xa7\xb7#\x96\xbf\xd3\x91\xd74\xf3\x7f\x8f\xc3\xc2\xed\x9a3'\xe5-`\xaa\x81R\xaa0\x8di\xd9V\x0f\x14\x95HbR\xf54\xff\x9f\xe3\x98\xa5G\xc9M\x12\x80\xd7\xe5\xfc\xbf\x83\x9fc\xe7\x08S\xd5\xa3\x0bL\x01C\x16\xf0\x1aM\xa8k(ET\x89u\x100\xfa\xab\x8e^\xfd\x82cv\xac4\xf5\xaa\n\xcf:(V\x10\xf6\xa3\xc1\x8d\xb6y5\x1aYv\xf7\xdb\xf2\x97]")
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: Checking if node 124 requires a software update...
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: Checking if com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app is equivalent...
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: No, the software version does not match.
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: Checking if this app should be updated to com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app...
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: The applications appear to be compatible -- an update would not break the node. Looking further...
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: CRC is identical or not defined, checking the version information...
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: com.zubax.telega-1.3-1.0.1e5c06b5751eefb2.6a34880f9af5cb71.app: Yes, com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app is of a different version and is not older than the current one.
2024-11-12 07:30:17 0009428 WAR yakut.cmd.file_server: Requesting node 124 to update its software: uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-12 07:30:17 0009428 INF yakut.cmd.file_server: Node 124 confirmed software update command uavcan.node.ExecuteCommand.Request.1.1(command=65533, parameter='com.zubax.telega-1.3-1.1.1e5c06b5751eefb2.6a34880f9af5cb71.app.bin')
2024-11-12 07:30:21 0009428 INF yakut.cmd.file_server: Node 124 went offline
2024-11-12 07:30:25 0009428 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=3, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-12 07:30:25 0009428 INF yakut.cmd.file_server: Node 124 info: <not available>
2024-11-12 07:30:25 0009428 INF yakut.cmd.file_server: Node 124 most recent heartbeat: uavcan.node.Heartbeat.1.0(uptime=3, health=uavcan.node.Health.1.0(value=0), mode=uavcan.node.Mode.1.0(value=0), vendor_specific_status_code=0)
2024-11-12 07:30:25 0009428 INF yakut.cmd.file_server: Node 124 info: uavcan.node.GetInfo.Response.1.0(protocol_version=uavcan.node.Version.1.0(major=1, minor=0), hardware_version=uavcan.node.Version.1.0(major=1, minor=3), software_version=uavcan.node.Version.1.0(major=1, minor=0), software_vcs_revision_id=2187630895419027378, unique_id=[62, 0,79, 0,10,81,54,49,48,54,56,56, 0, 0, 0, 0], name='com.zubax.telega', software_image_crc=[7652891267415001969], certificate_of_authenticity="|\x98_\xa7\x11Co\xe0\xda\xce\x92\x9c\xea\xf1%\xa8\r)\xb0\x86V\xbfT\xad\x14\xbd\xe0\xed&C}c\xeamr\xf2u\x8dx\x85\xd2\x96aW\xaa\xa2\x00vz\x1ecl4[\x8e\xfd\x92fEx\x99\x9a-\xdb\xaeS\xc0Y%\x10:)\xc9\xb4\xfd\t\xa9_\x91\xde\xec\x8aBK;\x11\x92M2\xd3\xd7\x89u\x0b\xa2o\xd1\x99\xfd\xd9\x14\xba\xb2\x15\xd9p\xa5\xc9\xc2(\x89r\xa7\xb7#\x96\xbf\xd3\x91\xd74\xf3\x7f\x8f\xc3\xc2\xed\x9a3'\xe5-`\xaa\x81R\xaa0\x8di\xd9V\x0f\x14\x95HbR\xf54\xff\x9f\xe3\x98\xa5G\xc9M\x12\x80\xd7\xe5\xfc\xbf\x83\x9fc\xe7\x08S\xd5\xa3\x0bL\x01C\x16\xf0\x1aM\xa8k(ET\x89u\x100\xfa\xab\x8e^\xfd\x82cv\xac4\xf5\xaa\n\xcf:(V\x10\xf6\xa3\xc1\x8d\xb6y5\x1aYv\xf7\xdb\xf2\x97]")
2024-11-12 07:30:25 0009428 WAR yakut.cmd.file_server: Node 124 ignored because total update mode not selected and its ID is not given explicitly (explicit node-IDs are: (none given))
2024-11-12 07:30:40 0009428 INF pycyphal.transport.can.media.pythoncan._pythoncan: PythonCANMedia('slcan:COM7', mtu=8) thread is about to exit

Thoughts??

Can I not use Babel??

Oh I see what the problem is – I should have checked this early. The device you’re upgrading was manufactured back in 2019. The bootloaders shipped in 2019 are not compatible with Telega v1 – you can switch to v1 but you can’t go back after that. You have two solutions:

  • Replace the bootloader using an SWD adapter. Babel cannot be used for this because it is not an SWD adapter. To do that, upload this binary at 0x08000000 (i.e., the origin of flash): https://files.zubax.com/products/com.zubax.telega/com.zubax.telega.bootloader.bin; be sure to retain the 256 bytes between 0x0000BF00 and 0x0000C000, they contain the digital signature. Since you’re using the SWD adapter anyway, you can also use it to rewrite the application as well while you’re at it; the load address is 0x0000C000.

  • Replace the bootloader using this script via CAN, then update the firmware normally like you’ve been attempting to do: update_bootloader.py (13.5 KB); invoke it as follows (this is Unix shell; adjust for powershell as needed):

export UAVCAN__CAN__IFACE='socketcan:slcan0'  # Update as necessary
export UAVCAN__CAN__MTU=8
export UAVCAN__CAN__BITRATE='1000000 1000000'
export UAVCAN__NODE__ID=$(yakut accommodate)
echo "Auto-selected node-ID for this session: $UAVCAN__NODE__ID"
#export VERBOSE=1  # Enable extra logging for troubleshooting.
export UAVCAN__CLN__LOW_LEVEL_IO__ID=10
exec ./update_bootloader.py
1 Like

In attempting to run the Python script:

PS C:\Users\Jeeva Arjun\Downloads> python ./update_bootloader.py
Install PyCyphal: pip install pycyphal[transport-can-pythoncan,transport-serial]; also configure the CYPHAL_PATH environment variable; see PyCyphal or Yakut docs for details.

I have set my Windows environment variables, but this error strongly suggests I’ve done it incorrectly. I’ve tried it a few different ways and there is no change.
(Indeed my installation of PyCyphal is also correct - installed as per the PyPI docs and the error thrown up)
Some help would be appreciated in the verification of my installation.

Thanks!

Have you considered switching to Linux, you’d be surprised how much easier it is to setup (and for Pavel to help you).

I used to run WSL (Windows Subsystem for Linux) for that express purpose but it had lots of cross-os dependency issues.

I run Windows for Solidworks/Edge and other stuff. Unless I really have to, I’d like to stick to Windows, but I guess I could run an Ubuntu Virtual Machine. It just means that I’ve got to set everything up again.
@pavel-kirienko, did you want me to switch to Ubuntu or can you help me solve this Windows environment variable problem?
Thanks again!

As far as I’m aware using WSL does not solve the issue that Windows is just not very good for these kinds of tasks.

It might work for compiling the occasional program or something like that, but as soon as you want to venture beyond that (like connecting to CAN networks) it becomes really difficult (as you mentioned, that’s when the cross-OS issues start to get in the way).

As a simple example, here I’m doing a simple demo by turning a magnet on/off; on Ubuntu I can open 2 separate terminals connected to the device through Cyphal/CAN; one observing the state of the magnet and one sending commands. This works because at the level of interacting with the network we can rely on SocketCAN.

Using Windows, doing exactly the same is simply not possible: a serial port can only be accessed by 1 process on Windows (and SocketCAN is only supported on Linux).

(If you’re planning to do embedded programming, GNU/Linux is also a no-brainer.)

I have no experience with WSL so I can’t be certain if things are going to work there as they should. If you can switch to a GNU/Linux distribution, that would certainly help (it doesn’t have to be Ubuntu).

The error message explains what needs to be done to fix the problem:

Install PyCyphal: pip install pycyphal[transport-can-pythoncan,transport-serial];

Once you’ve executed that command, things should work.

Tried that, no difference. Just tells me that I’ve already installed pycyphal and just checks the installation.

I’d assume something wrong with my environment variables.