Page MenuHomeAleph Objects Inc

Add support for flashing FW to Ultimachine Archim board for Quiver
Open, HighPublic


The Archim board is a 32-bit board based on the Arduino Due. This board uses a different flashing program. In order for the Archim board to be used on Quiver, Cura 2 will need to be able to flash it.

Edit: we should always use development names for in development products because final release names are likely to change before final release.

Event Timeline

marcio created this task.Oct 31 2017, 2:30 PM


Is the Archim board required for the TAZ7 vs/ RAMBO?

Steven renamed this task from Add support for flashing FW to Ultimachine Archim board for TAZ 7 to Add support for flashing FW to Ultimachine Archim board for Quiver.Dec 5 2017, 3:43 PM
Steven updated the task description. (Show Details)
Steven added a subscriber: Steven.

@martinbogo we are currently looking at the Archim board for use in the next revision of the TAZ. We're still early in development so this is always subject to change.

Okay, I have switched out the Rambo for an Archim board in the Quiver.

alexei triaged this task as Normal priority.Jan 25 2018, 8:03 AM
alexei changed the edit policy from "Custom Policy" to "Cura LulzBot Edition (Project)".

Related question:

Where is the config.h / advanced config for Marlin for the quiver to build it for Archim?

marcio added a comment.Feb 5 2018, 9:15 AM

@martinbogo: Well, the only firmware I've used with it is a hacked up version of Marlin 2.0 from Ultimachine. There is no current stable FW for the Archim board because Marlin 2.0 hasn't been released yet, so I haven't really put much work into it. I've attached a ZIP file with the code I had used to compile FW several months ago, it's really old, but it is what we are using on our internal testing.

marcio added a comment.EditedFeb 5 2018, 9:42 AM

@martinbogo: The above FW requires TMC2130 drivers. If you are using a retail Archim 1.0, you will need to modify the FW to turn off support for the Trinamic drivers. We haven't tested it in that configuration however. Our only development board is using TMC2130 drivers and this is what the Quiver will likely have.

karrad lowered the priority of this task from Normal to Low.Feb 21 2018, 2:11 PM
karrad added a subscriber: karrad.

This will be required for next release, moving to backlog for now

Attached are the ".elf" and".bin" file I obtain when I compile the Archim 2.0 FW using the Arduino 1.8.3 IDE. Johnny told me this can be flashed to the Archim using the following command line:

~/.arduino15/packages/arduino/tools/bossac/1.7.0/bossac -i -U true -e -w -b -R /

I also found out you can generate a ".hex" file by running the following command line:

avr-objcopy -O ihex -R .eeprom Marlin.ino.elf Marlin.ino.hex

But Cura gives the error "Firmware update failed due to a communication error" when trying to upload that ".hex" file to the Archim 2.0.



The Arduino IDE uses Bossac as well, using the following command line:

/home/aleph/.arduino15/packages/arduino/tools/bossac/1.7.0/bossac -i -d --port=ttyACM0 -U true -e -w -v -b /tmp/arduino_build_576153/Marlin.ino.bin -R

Here is the project page for Bossac:

The Archim 2.0 has a atsam3x8e

I have now updated the Makefile for Marlin 2.0 such that I can generate .hex files for Quiver. Still no way to install them, however.

alexei raised the priority of this task from Low to High.Sep 11 2018, 11:11 PM
marcio added a subscriber: alexei.Sep 12 2018, 7:52 AM

@alexei: In order to properly compile, the "arm-none-eabi-*" tools will need to be present in the PATH. This is not the case for our standard LulzBot Debian build. The tool chain I am now using stored on my machine here:


It appears to be part of the Arduino IDE.

It is now possible to update Quiver FW from the command line using a ".bin" file generated from the Makefile. The shell script and executable to do the FW install is here:


It looks like bossac does not support .hex files, but if Cura is made to support them we could use .hex instead of .bin for consistency with the other printers.

I'm following this for flashing

Hold the erase button and press the reset button. The board will now boot into the Bossa bootloader.

From bossa bootloader I can then flash with

bin/bossac -i -d --port=ttyACM0 -U true -e -w -v -b -R Marlin_Quiver_TAZ7_Quiver_DualExtruder_bugfix-2.0.x.1_5727a786a.bin

After this new USB device comes up for a while:

Oct 15 14:17:02 kernel: usb 1-5: new full-speed USB device number 14 using xhci_hcd
Oct 15 14:17:02 kernel: usb 1-5: not running at top speed; connect to a high speed hub
Oct 15 14:17:02 kernel: usb 1-5: New USB device found, idVendor=03eb, idProduct=2424
Oct 15 14:17:02 kernel: usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Oct 15 14:17:02 kernel: usb 1-5: Product: LulzBot Quiver
Oct 15 14:17:02 kernel: usb 1-5: Manufacturer:
Oct 15 14:17:02 kernel: usb 1-5: SerialNumber: 123985739853
Oct 15 14:17:02 kernel: cdc_acm 1-5:1.0: ttyACM0: USB ACM device

But then something is happening and it falls back to Archim:

Oct 15 14:17:36 kernel: usb 1-5: reset full-speed USB device number 14 using xhci_hcd
Oct 15 14:17:36 kernel: usb 1-5: device firmware changed
Oct 15 14:17:36 kernel: cdc_acm 1-5:1.0: ttyACM0: USB ACM device
Oct 15 14:17:36 kernel: usb 1-5: USB disconnect, device number 14
Oct 15 14:17:36 kernel: usb 1-5: new full-speed USB device number 15 using xhci_hcd
Oct 15 14:17:37 kernel: usb 1-5: New USB device found, idVendor=27b1, idProduct=0001
Oct 15 14:17:37 kernel: usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Oct 15 14:17:37 kernel: usb 1-5: Product: Archim
Oct 15 14:17:37 kernel: usb 1-5: Manufacturer: UltiMachine
Oct 15 14:17:37 kernel: cdc_acm 1-5:1.0: ttyACM0: USB ACM device

After which I can't communicate with the board. Probably this is happening because I have nothing, except for power (logic middle PS) and USB connected?
What am I doing wrong?

@alexei: It's possible it's just failing because of lack of thermistors. This will cause Marlin to halt. It appears to me that you may have flashed successfully, you just don't really have a good way to see it since you just have a board. I can compile some FW for you without MIN_TEMP errors.

@marcio ,
Yes, Marlin build that just works without anything connected to the board except for power and USB would be extremely helpful.
Because with current FW it's impossible to flash from CuraLE, since it can't even connect via ttyACM0.

@alexei: Try this one. I set the MIN_TEMP to 0C, so hopefully it won't trigger

@marcio ,
Yes, this worked!
I needed to push reset button, but after doing so I was able to M115:

> [14:53:26] M115
< [14:53:26] FIRMWARE_NAME:Marlin FIRMWARE_VERSION:bugfix-2.0.x.1.1
< [14:53:26] Cap:SERIAL_XON_XOFF:0
< [14:53:26] Cap:EEPROM:1
< [14:53:26] Cap:VOLUMETRIC:0
< [14:53:26] Cap:AUTOREPORT_TEMP:1
< [14:53:26] Cap:PROGRESS:0
< [14:53:26] Cap:PRINT_JOB:1
< [14:53:26] Cap:AUTOLEVEL:1
< [14:53:26] Cap:Z_PROBE:1
< [14:53:26] Cap:LEVELING_DATA:1
< [14:53:26] Cap:BUILD_PERCENT:0
< [14:53:26] Cap:SOFTWARE_POWER:0
< [14:53:26] Cap:TOGGLE_LIGHTS:0
< [14:53:26] Cap:CASE_LIGHT_BRIGHTNESS:0
< [14:53:26] Cap:EMERGENCY_PARSER:1
< [14:53:26] Cap:AUTOREPORT_SD_STATUS:0
< [14:53:26] Cap:THERMAL_PROTECTION:1
< [14:53:26] Cap:PAREN_COMMENTS:0
< [14:53:26] Cap:MOTION_MODES:0

I have another question though: Is it possible to reload into bossa bootloader without pushing any buttons on the board?

@marcio , Just tested it with bossac from master branch and -a switch doesn't work on Archim board :(

I have another question though: Is it possible to reload into bossa bootloader without pushing any buttons on the board?

In general, if the FW is not running (i.e. crashed), you must hit the erase button. I have not found a way around this. On TAZ 7, we added a recessed button to allow the user to erase the board, as this seems necessary on the Due style board.

@alexei: And after the flash, you must power cycle the printer (since you can't push the reset button)

alexei added a comment.EditedOct 15 2018, 2:43 PM


This is what works for me and not requiring the reset afterwards:

stty -F /dev/ttyACM0 1200; sleep 2; bin/bossac -i --port=ttyACM0 -U true -u -e -w -v -b -R Marlin_Quiver_TAZ7_Quiver_DualExtruder_bugfix-2.0.x.1_00fd7439b.bin

bossac is built from arduino branch (master doesn't work for me)

A bit of explanation about magic 1200 baudrate:

@marcio , Output of the above command, just for reference here.

Atmel SMART device 0x285e0a60 found
Device       : ATSAM3X8
Chip ID      : 285e0a60
Version      : v1.1 Dec 15 2010 19:25:04
Address      : 524288
Pages        : 2048
Page Size    : 256 bytes
Total Size   : 512KB
Planes       : 2
Lock Regions : 32
Locked       : 12
Security     : false
Boot Flash   : false
Unlock all regions
Erase flash
done in 0.012 seconds

Write 287108 bytes to flash (1122 pages)
[==============================] 100% (1122/1122 pages)
done in 7.735 seconds

Verify 287108 bytes of flash
[==============================] 100% (1122/1122 pages)
Verify successful
done in 5.715 seconds
Set boot flash true
CPU reset.
alexei claimed this task.Oct 16 2018, 9:28 AM
logan added a subscriber: logan.Feb 1 2019, 3:27 PM
marcio added a comment.Feb 5 2019, 8:34 AM

@karrad: The to the bossac build is this. There are releases for Linux, Windows and Mac. Once you install that, you can load the ".bin" file from the command line using the following command:

bossac -i -U true -e -w -b -R <firmware_file>.bin

@logan: You had asked about something that could be put in OHAI that would not require "shared-j" access. This should work. The script we have been using internally only needs "shared-j" for the menu interface, the flashing itself happens with bossac.

logan added a comment.Feb 5 2019, 8:35 AM

@marcio Ah, when i tried flashing with the script pushed to the repo it wasn't working, it said "bossac: no such file or directory" or something similar

marcio added a comment.Feb 5 2019, 3:20 PM

@logan: If it is not in your path, you need to do ./bossac -i -U true -e -w -b -R <firmware_file>.bin

Firmware flashing for Archim works now, there are still some pieces missing like progress indicator and flash verification, but I think it can be merged to master at present state.

marcio added a comment.Feb 7 2019, 1:48 PM

_detectSerialPort shoud accept both port.vid == 0x03EB and port.vid == 0x271B. Here are the possibilities:

  • Mini Rambo: 271B:0001
  • Rambo: 271B:0001
  • Archim in "erase" mode: 03eb:6124
  • Archim running with default Marlin: 03eb:2424
  • Archim running with FW > .86: 271B:0001

So checking for either 0x03EB and 0x271B should be sufficient.

alexei added a comment.Feb 7 2019, 4:32 PM

Merged to master. Leaving this ticket open, because there is still some work to do.

Attempted to flash firmware to Quiver 7 with 3.6.5 but am getting errors. Attaching a .txt of the error that is getting thrown.

This is the error thrown after hitting reset button and attempting flash

Following these steps @logan and I were able to get a successful flash through 3.6.5: and hold reset button
2.turn off printer
3.release reset button
4.turn on printer
5.flash by selecting custom firmware .86

@EricNugent , @logan ,

You shouldn't push any buttons and turning printer on and off.
I also suspect that by "reset" button you really mean "erase" button?

I attempted to flash with the same steps listed above except replacing step 5 with "automatically upgrade firmware"
This resulted in 2 fails, unknown connection error reported both times.
I then attempted to flash by specifying custom FW similar to above, but after selecting the appropriate FW file, CuraLE immediately closed (crashed).

logan added a comment.Feb 11 2019, 1:01 PM

@alexei well if we didn't, it didn't work, so....

@logan, "automatically upgrade firmware" is not supposed to work, because there is no Quiver FW files in CuraLE yet.

@logan, If you have serial ports and baudrate set to AUTO, please set them to a specyfic values too (/dev/ttyACM0 and 250000) there are known issues with AUTO options ATM.

logan added a comment.Feb 11 2019, 1:17 PM

@alexei good to know about auto FW flashing, thank you for relaying that information. If we're testing something, that is good information to relay ahead of time.
Also good to know that now we shouldn't press the erase button vs before when it was required, we were not informed of this.

I set port to ACM0 after starting a new instance of CuraLE 3.6.5, baud rate was 250k
The only issue I am seeing right now is due to things still in development listed above I think; progress indicators etc.
One attempt at flashing, the flash was successful but never reported as finished by CuraLE, just acted like it was still trying
The next attempt quickly reported finished

@logan , good that now you can flash, yes, progress indicator is still WIP and currently it doesn't work.

adam added a subscriber: adam.EditedFeb 13 2019, 10:32 AM

3rd time was the charm for me. The first two instances of cura I tried froze up in the file manager trying to track down the custom firmware location. Once cura stopped freezing it flashed .86 fine. There was some odd LCD grey-out and then flicker for a minute after flashing, but it's stable and correct now.
edit: I did not hit the erase button nor did I power down the machine before/after flashing. I treated this the exact same way I would flash custom firmware to a Mini 2