# Keyboardio Brick Recovery help needed

**URL:** <https://community.keyboard.io/t/keyboardio-brick-recovery-help-needed/4640>\
**Category:** Programming\
**Tags:** question\
**Created:** [February 22, 2021, 6:52am UTC](https://community.keyboard.io/t/keyboardio-brick-recovery-help-needed/4640 "2021-02-22T06:52:02Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Joe33](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.keyboard.io/joe33/32/3775_2.png) [@Joe33](https://community.keyboard.io/u/Joe33)\
**Post date:** [February 22, 2021, 6:52am UTC](https://community.keyboard.io/t/keyboardio-brick-recovery-help-needed/4640/1 "2021-02-22T06:52:03Z")

</div>

Hi all,

I was trying to update my keyboard with Chrysalis to v 0.8.2 using the AppImage (Chrysalis-0.8.2.AppImage). Process started well but update froze with the red light over number 4. Computer crash.

I was left with a pretty brick of a keyboard afterwards.

Pressing the prog-key before plugging in brings on the red light and the device is seen by Chrysalis and says I need to re-flash the firmware. Attempting to re-flash firmware in Chrysalis is unsuccessful (takes more than 10 minutes saying updating without the red lights ever flashing on the keyboard).

To get better control over the situation, I’ve setup the arduino IDE with the firmware and tried to install it that way. The log is below.

Any help with next steps to revive this will be very welcome.

Thank you,  
J.

Arduino: 1.8.13 (Linux), Board: “Keyboardio Model 01”

/snap/arduino/50/arduino-builder -dump-prefs -logger=machine -hardware /snap/arduino/50/hardware -hardware /home/jsilver/snap/arduino/50/.arduino15/packages -tools /snap/arduino/50/tools-builder -tools /snap/arduino/50/hardware/tools/avr -tools /home/jsilver/snap/arduino/50/.arduino15/packages -built-in-libraries /snap/arduino/50/libraries -libraries /home/jsilver/snap/arduino/current/Arduino/libraries -fqbn=keyboardio:avr:model01 -vid-pid=27C6\_5385 -ide-version=10813 -build-path /tmp/arduino\_build\_13088 -warnings=none -build-cache /tmp/arduino\_cache\_538489 -prefs=build.warn\_data\_percentage=75 -prefs=runtime.tools.avr-gcc.path=/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=/snap/arduino/50/hardware/tools/avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=/snap/arduino/50/hardware/tools/avr -verbose /home/jsilver/snap/arduino/50/.arduino15/packages/keyboardio/hardware/avr/1.99.3/libraries/Model01-Firmware/Model01-Firmware.ino  
/snap/arduino/50/arduino-builder -compile -logger=machine -hardware /snap/arduino/50/hardware -hardware /home/jsilver/snap/arduino/50/.arduino15/packages -tools /snap/arduino/50/tools-builder -tools /snap/arduino/50/hardware/tools/avr -tools /home/jsilver/snap/arduino/50/.arduino15/packages -built-in-libraries /snap/arduino/50/libraries -libraries /home/jsilver/snap/arduino/current/Arduino/libraries -fqbn=keyboardio:avr:model01 -vid-pid=27C6\_5385 -ide-version=10813 -build-path /tmp/arduino\_build\_13088 -warnings=none -build-cache /tmp/arduino\_cache\_538489 -prefs=build.warn\_data\_percentage=75 -prefs=runtime.tools.avr-gcc.path=/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=/snap/arduino/50/hardware/tools/avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=/snap/arduino/50/hardware/tools/avr -verbose /home/jsilver/snap/arduino/50/.arduino15/packages/keyboardio/hardware/avr/1.99.3/libraries/Model01-Firmware/Model01-Firmware.ino  
Using board ‘model01’ from platform in folder: /home/jsilver/snap/arduino/50/.arduino15/packages/keyboardio/hardware/avr/1.99.3  
Using core ‘arduino’ from platform in folder: /snap/arduino/50/hardware/arduino/avr  
Detecting libraries used…  
/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=c++14 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Woverloaded-virtual -Wno-unused-parameter -Wno-unused-variable -Wno-ignored-qualifiers -Wno-sized-deallocation -w -x c++ -E -CC -mmcu=atmega32u4 -DF\_CPU=16000000L -DARDUINO=10813 -DARDUINO\_AVR\_MODEL01 -DARDUINO\_ARCH\_AVR -DUSB\_VID=0x1209 -DUSB\_PID=0x2301 “-DUSB\_MANUFACTURER=“Keyboardio”” "-DUSB\_PRODUCT=“Model 01"” “-DKALEIDOSCOPE\_HARDWARE\_H=“Kaleidoscope-Hardware-Model01.h”” -DTWI\_BUFFER\_LENGTH=32 -I/snap/arduino/50/hardware/arduino/avr/cores/arduino -I/home/jsilver/snap/arduino/50/.arduino15/packages/keyboardio/hardware/avr/1.99.3/variants/model01 /tmp/arduino\_build\_13088/sketch/Model01-Firmware.ino.cpp -o /dev/null -DARDUINO\_LIB\_DISCOVERY\_PHASE  
Alternatives for Kaleidoscope.h: [Kaleidoscope@1.99.3]  
ResolveLibrary(Kaleidoscope.h)  
 → candidates: [Kaleidoscope@1.99.3]

… Compilation Log

/tmp/arduino\_build\_13088/Model01-Firmware.ino.elf  
Sketch uses 25556 bytes (89%) of program storage space. Maximum is 28672 bytes.  
Global variables use 1379 bytes (53%) of dynamic memory, leaving 1181 bytes for local variables. Maximum is 2560 bytes.  
Forcing reset using 1200bps open/close on port /dev/ttyACM0  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
PORTS {/dev/ttyACM0, } / {/dev/ttyACM0, } =\> {}  
Uploading using selected port: /dev/ttyACM0  
/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude -C/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/ttyACM0 -b57600 -D -Uflash:w:/tmp/arduino\_build\_13088/Model01-Firmware.ino.hex:i

avrdude: Version 6.3-20190619  
Copyright © 2000-2005 Brian Dean, [http://www.bdmicro.com/](http://www.bdmicro.com/)  
Copyright © 2007-2014 Joerg Wunsch

```
     System wide configuration file is "/home/jsilver/snap/arduino/50/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf"
     User configuration file is "/home/jsilver/snap/arduino/50/.avrduderc"
     User configuration file does not exist or is not a regular file, skipping

     Using Port : /dev/ttyACM0
     Using Programmer : avr109
     Overriding Baud Rate : 57600
     AVR Part : ATmega32U4
     Chip Erase delay : 9000 us
     PAGEL : PD7
     BS2 : PA0
     RESET disposition : dedicated
     RETRY pulse : SCK
     serial program mode : yes
     parallel program mode : yes
     Timeout : 200
     StabDelay : 100
     CmdexeDelay : 25
     SyncLoops : 32
     ByteDelay : 0
     PollIndex : 3
     PollValue : 0x53
     Memory Detail :

                              Block Poll Page Polled
       Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
       ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
       eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
       flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
       lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
       hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
       efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
       lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
       calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
       signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

     Programmer Type : butterfly
     Description : Atmel AppNote AVR109 Boot Loader

```

Connecting to programmer: .avrdude: butterfly\_recv(): programmer is not responding

avrdude: butterfly\_recv(): programmer is not responding  
avrdude: butterfly\_recv(): programmer is not responding  
avrdude: butterfly\_recv(): programmer is not responding  
avrdude: butterfly\_recv(): programmer is not responding  
avrdude: butterfly\_recv(): programmer is not responding  
Found programmer: Id = “”; type =  
Software Version = .; Hardware Version = .  
avrdude: butterfly\_recv(): programmer is not responding  
avrdude: butterfly\_recv(): programmer is not responding  
avrdude: error: buffered memory access not supported. Maybe it isn’t  
a butterfly/AVR109 but a AVR910 device?  
avrdude: initialization failed, rc=-1  
Double check connections and try again, or use -F to override  
this check.

avrdude: butterfly\_recv(): programmer is not responding  
avrdude: error: programmer did not respond to command: leave prog mode  
avrdude: butterfly\_recv(): programmer is not responding  
avrdude: error: programmer did not respond to command: exit bootloader

avrdude done. Thank you.

the selected serial port  
does not exist or your board is not connected

---

<div class="post-metadata">

**Author:** ![Joe33](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.keyboard.io/joe33/32/3775_2.png) [@Joe33](https://community.keyboard.io/u/Joe33)\
**Post date:** [February 22, 2021, 11:17am UTC](https://community.keyboard.io/t/keyboardio-brick-recovery-help-needed/4640/2 "2021-02-22T11:17:36Z")

</div>

After a few more tinkering, I’ve concluded that the device was wrong, should be ttyACM1 (but that only appears after keyboard is connected and doesn’t stay connected for long).

Unfortunately ttyACM1 has the wrong permissions on creation (root/root). Permissions revert when re-created.

After hacking around the permissions (permission changing script), I can see it and it starts flashing, but seems to not complete before timeout again…

I’m fairly confident this can be brought back to life, it just seems I can’t be fast enough…

---

<div class="post-metadata">

**Author:** ![Rom1deTroyes](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.keyboard.io/rom1detroyes/32/3352_2.png) [@Rom1deTroyes](https://community.keyboard.io/u/Rom1deTroyes)\
**Post date:** [February 23, 2021, 9:04am UTC](https://community.keyboard.io/t/keyboardio-brick-recovery-help-needed/4640/3 "2021-02-23T09:04:57Z")

</div>

> [@Joe33](#):
>
> I can’t be fast enough

I had the same kind of problem with my Atreus (flashing my own firmware), and I got it with Chrysalis by using the pinhole reset button.  
To have a good timing, `dmesg --follow` was a life changer :

- launch `sudo dmesg --follow` in a terminal
- plug the keyboard and look at the connection / disconnection messages (I remember something like 3 or 4 seconds between them)
- unplug the keyboard and see no message from dmesg : the keyboard has already vanished ! (Ready ?)
- Load Chrysalis and open the firmware update (Steady ?)
- Put a finger on the `Prog` button, re-plug the keyboard and with your third hand, click the button to launch the upload (Go !)
- Look at the dmesg console : if the keyboard vanish before the upload finish, well… Same player shoot again !

It may takes some attempts to get the good timing, and a second person is a great help too 😄

Good luck !

---

<div class="post-metadata">

**Author:** ![Joe33](https://yyz1.discourse-cdn.com/flex031/user_avatar/community.keyboard.io/joe33/32/3775_2.png) [@Joe33](https://community.keyboard.io/u/Joe33)\
**Post date:** [February 23, 2021, 6:02pm UTC](https://community.keyboard.io/t/keyboardio-brick-recovery-help-needed/4640/4 "2021-02-23T18:02:34Z")

</div>

Thanks a lot! After a few tries I have now managed to bring it back to life. The dmesg tip to time things was very useful.
