How to Reset Arduboy if it's Bricked

A “Community Market” would be a nice idea. I’m sure if say, sweatpants or shirts were ever made by someone the store could sell them, and other such items like 3d printed products from the community.

We do also have a #classifieds section, and I believe our current Terms of Service would cover us pretty well if users wanted to try and sell items to each other, within some reason of course. I rarely see forum classifieds working with any great effect, but I did see a group buy offer posted the other day :slight_smile:

http://community.arduboy.com/t/big-overhead-shipping-cost-15-anyone-for-a-group-buy-in-france/1751

It would be fun to try and source a few hours on a few dozen 3d printers if the design is solid, and just do a round of orders that way.

This is my report.
If you know wrong, please tell me.

@ekem
very sry. my english is super wrong. pls rewrite my document.

Problem

  1. My Arduboy can’t Sketch!
  2. My Arduboy can’t detect COM port!(tool -> Serial Port)

Why?

Problem There are multiple.
Here, I talk about the process of up to play the game.

  1. Turn ON Arduboy.
  2. run Bootloader.
  3. run Arduboy Library.
  4. run Sketch.

How to recovery.

case number 4.

Game or your original sketch break.
Possibility is CPU of Program Counter, Memory leak, Pointer Problem.

Please use flashlight mode.
Library prevents the sketch of the intrusion.
https://github.com/Arduboy/Arduboy/blob/stable/src/Arduboy.cpp#L54

  1. Keep push UP Button.
  2. Turn ON Arduboy.
  3. Write Sketich form Arduino IDE.
  4. Recovery!

case number 2.

Serious sickness.

Possibility is Big Sketich, Big Global and Local Variable.
Max Variable is 2,560 bytes. but probably 2000 over break Arduboy.
I don’t have answer. It might conflict sections.
http://www.nongnu.org/avr-libc/user-manual/mem_sections.html

Arduino IDE can’t write Big Sketich.
Probably you use platformio or original makefile.

Max is 28672 bytes. if 28672 bytes over write, Arduboy will break.

reset switch video here.

but reset timing is very short. 500ms - 1sec?
I found 100% timing.

  1. keeping reset switch
  2. turn on.
  3. write sketich(Library of Hello World) from Arduino IDE. and keeping reset siwtch!

log(in japanese).

最大28,672バイトのフラッシュメモリのうち、スケッチが10,522バイト(36%)を使っています。
最大2,560バイトのRAMのうち、グローバル変数が1,253バイト(48%)を使っていて、ローカル変数で1,307バイト使うことができます。
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
指定されたポートには、ボードが接続されていません。正しいポートを選んである事を確認してください。もしも正しいポートを選んである場合には、書き込みを開始した直後にボードのリセットボタンを押してみてください。

Did you have the same result?
In the case of the same result, it has worked a reset switch.

Next step. You don’t keep reset switch when you find log of “PORTS”.
Your Arduboy can write Sketich.

but if you see log, bootloader break!
log(in japanese).

PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {} => {}
PORTS {} / {COM3, } => {COM3, }
Found upload port: COM3
E:\program\Arduino\hardware\tools\avr/bin/avrdude -CE:\program\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -PCOM3 -b57600 -D -Uflash:w:C:\Users\fletcher\AppData\Local\Temp\build622a37fead4ee654a1b9a5613f737b3a.tmp/HelloWorld.ino.hex:i 

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
     Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
     Copyright (c) 2007-2009 Joerg Wunsch

     System wide configuration file is "E:\program\Arduino\hardware\tools\avr/etc/avrdude.conf"

     Using Port                    : COM3
     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
マイコンボードに書き込もうとしましたが、エラーが発生しました。
このページを参考にしてください。
http://www.arduino.cc/en/Guide/Troubleshooting#upload

Arduboy does not heal by itself.

You need Arudino Board or AVR ISP mkII.

Arduino UNO - devkit

pin13 - CLK
pin12 - MISO
pin11 - MOSI
pin10 - RESET
GND   - GND
3.3V  - VCC

i dont have kickStarter Arduboy. sry. picture is My devkit.
devkit pins is VCC, RST, MISO, MOSI, CLK, GND.
pls set cable.

next. Arduino IDE write Arduino UNO.

[file]→[sketch example]→[11.ArduinoISP]→[ArduinoISP]

you change target. Arduboy Setting here.

[tool]->[board]->[Arduino Leonardo]
[tool]->[Burn board]->[Arduino as ISP]
[tool]->[Burn bootloader]

Burn time is 1,2 min. You will feel long time :slight_smile:
last. it write Hello World of Arduboy Libary.
All is complete.

4 Likes

@akkera102, glancing through the guide, it seems everything is straight forward. I will break out my dev kit and step through this process, and do any clarification needed. I’ll post any edits here, and then we can make the new topic for a guide from the source here. Thanks a ton!!! This is amazing work, thank you. どうもありがとうございました!

1 Like
devkit (land side) --- arduino uno (cable pin side)

If the connection is loose, it will result in an error.
it need strong physical power. i used both hands.

1 Like

If you do manage to brick your Arduboy and can’t fix it yourself please let us know via our contact form or direct message and we will do our best to help you out! Amazing to see the hacker spirit in people trying to bring it back to life!

2 Likes

Hello,

My Arduboy no longer recognize the COM port.
I reset it, but a problem is not solved.

There is a need to write the bootloader.
Should I write in it using these 6 points?

Yes.

I haven’t seen the power supply part of the Arduboy schematic, because @bateske still hasn’t published it, but I suspect that you should leave the Arduboy powered off when attaching the programmer, and have the programmer supply power to VCC. To avoid damaging the display, you should probably use a 3.3V programmer.

2 Likes

If you have the original 6pin AVRISPMKII from Atmel like the one that I used then you need to power your Arduboy to flash it. The VCC pin of this programmer is only an input to sense the VCC of the target.
As I said, just for the original AVRISPMKII. There are clones out there that supply the VCC with either 5V or 3.3V.

1 Like

That’s fine, as long as the programmer senses that the Arduboy’s VCC is somewhere between 3.2V and 4.2V (because it comes directly from the battery) and adjusts its output signals to match. I suspect this is true for the AVRISPMKII. It may not be the case with other programmers.

1 Like

I try with 1.6.9. Holding UP key while resetting permits me to upload the sketch. It is working perfectly .

I think the case is often that the programmer output has a buffer (level shifter) that uses the device VCC for the output. At least that is how the USBtinyISP that I have works. It is possible to power the device from USB though, but that’s selected by a jumper.

The popular, cheap USBASP programmers don’t. Some of them have a jumper for 5V or 3.3V operation but they don’t do it properly. The jumper just changes the VCC supply output to 3.3V but the output signals remain at 5V :scream:

I have a USBASP V2.0 clone which I modified to properly work at 3.3V (as well as 5V).

Well, that’s bad. But good to know, thanks.

It’s good that mine is USBtinyISP and it wasn’t expensive. Maybe I should check the levels just to be sure, but I think it’s proper. I’ve yet to use it with anything else than Arduinos or plain AVRs.

I made wiki.
Please edit if there is content that can be added to it. :smiley:
http://community.arduboy.com/t/how-to-burn-bootloader-in-avrisp-mkii-and-atmel-studio-7/1893

1 Like

I wrote a sketch that reads and displays the fuse and lock bit settings. It also reports if the settings properly protect the bootloader from being overwritten.

On my Kickstarter Arduboy, the bootloader is NOT PROTECTED! This means that it would be possible to upload a sketch that is too large, which would corrupt the bootloader, making further uploads impossible. The bootloader would have to be reinstalled using a hardware programmer attached to pads on the back of the Arduboy’s circuit board.

If your Arduboy is the same, I’d be pretty careful about uploading sketches using anything other than the Arduino IDE. (The Arduino IDE checks to make sure the sketch isn’t to large before performing an upload, so the bootloader won’t be overwritten.)

Note that it’s not possible to set the lock bits to the proper value without attaching a hardware programmer. It can’t be done using the USB port.

You can use the following sketch to check if your Arduboy has an unprotected bootloader.
If it reports:

  • “LOCK bits are OK” then the bootloader is safe.
  • “Bootloader UNLOCKED!” then corruption of the bootloader is possible.
  • “LOCK bits INCORRECT!” then the lock bits are set to an unexpected pattern.
/* Arduboy Fuses and Lock Bits display
 *
 * Displays the values set for the fuses and lock bits 
 * then indicates if the lock bits are:
 *
 *  - set correctly so the bootloader can't overwrite itself.
 *
 *  - set to default, which means the bootloader is unlocked and could
 *    overwrite itself.
 *
 *  - set incorrectly, meaning the lock bits are set in an unexpected pattern.
 *    The bootloader may or may not be locked.
 */

#include <Arduboy.h>
#include <avr/boot.h>

Arduboy arduboy;

void setup() {
  uint8_t lowFuse = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS);
  uint8_t highFuse = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS);
  uint8_t extendedFuse = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS);
  uint8_t lockBits = boot_lock_fuse_bits_get(GET_LOCK_BITS);

  arduboy.begin();
  arduboy.clear();
  arduboy.setCursor(0,0);
  arduboy.print("LOW Fuse:      0x");
  arduboy.println(lowFuse, HEX);
  arduboy.print("HIGH Fuse:     0x");
  arduboy.println(highFuse, HEX);
  arduboy.print("EXTENDED Fuse: 0x");
  arduboy.println(extendedFuse, HEX);
  arduboy.print("LOCK bits:     0x");
  arduboy.println(lockBits, HEX);

  lockBits &= 0x3f;
  if (lockBits == 0x2f) {
    arduboy.println("\nLOCK bits are OK");
  } else if (lockBits == 0x3f) {
    arduboy.println("\nBootloader UNLOCKED!");
  } else {
    arduboy.println("\nLOCK bits INCORRECT!");
  }

  arduboy.display();
}

void loop() {
}
1 Like

Yeah as mentioned before Kickstarter units don’t have lock bits set. I had asked the factory to flash same as Leonardo but the lock fuses were omitted. All the preorder units have the correct and more safe setting. If people have a problem and somehow damage the bootloader we can try to help but the primary cause seems to be using non-recommended tools for uploading.

Other than the Arduino IDE, is there a list of “recommended” tools?

Codebender

and we are evaluating the offline loader, we would love it if that was open source.

Working on getting our own online loader, so you’ll be able to one click upload games.

2 Likes

Not any more
https://codebender.cc/next-chapter

I’d just like to add that USB hubs can cause the reset button method to not work. Plug your arduboy directly into your computer.