AVR SPI programming issue - microcontroller

I'm trying to program an ATtiny13A with avrdude, using an Olimex AVR-ISP500 programmer, through the 6-pin ICSP connector. However, I can't get it to communicate with my MCU. The user guide tells to use -cstk500v2, here is the log with this option: https://ghostbin.com/paste/8yx35, and here is the log with -cavrisp: https://ghostbin.com/paste/2rpx6 (the command is $ avrdude -cXXXXXXX -P/dev/ttyACM0 -pattiny13 -v -F). The chip signature changes, but it always starts with 0x88. Here is how it's connected:
What might I have done wrong?
UPD: rearranged the wires like that:
[Vcc] [MISO]
[MOSI] [SCK]
[GND] [RST]
It now measures the voltage correctly, but is still unable to communicate with the MCU.
UPD2: uploaded the new log with wires rearranged.
UPD3: on each side, both red and black wires are connected to a power supply, red to Vcc, black to GND.

The programmer was too fast, -B5 solved it.

Related

atmega32u4 Failed to enter programming mode

I have designed a custom board using atmega32u4 with a few other components (Such as RTC, memory and etc) but left them empty to test if the microcontroller can be programmed. After just hand soldering the microcontroller and the necessary capacitors and resistors, ATMEL Studio can't read device signature.I'm using AVRISP MKII. This board was inspired by ARDUINO ProMicro in design. The things I tried to solve it:
Measure all 3.3 volt supply lines and all of the grounds. (They all correspond with PCB and schematic)
Checked SPI lines to see if microcontroller receives commands from the programmer by using oscilloscope.
I tried removing the 16MHZ crystal, still the same.
I reflowed the microcontroller since it is a QFN type (atmega32-MU package) and I have a few via holes under the micro for flux to come out.
I have properly washed the board after reflow.
I have AREF grounded with a 0.1uF capacitor and !HWB pin (PE7) is left empty. I didn't ground it.
I tested the programmer with an actual promicro board and it programs fine.
I think I'm missing something but I don't know what... I'd be grateful if you guys could help me. Attached is the schematic of the circuit.
The micro controller RESET is indicated by MICRO RST on pin 13. That RESET on PB4 is for another device which is not populated yet and left empty, I checked Pin 13 with Oscilloscope and it seemed working fine and going to zero at the first moment of programming. Also MISO and MOSI and SCK were sending signals to the relevant pins.
Thanks
If you are programming the board with ISP you have to connect RESET to the programmer. otherwise the controller could not be programmed!
Image from microcontroller.net
It seems that your RESET is on PB4 but for programming it should be connected to RESET of uC.
So, I realized the problem after almost a month! I had removed the 16MHz crystal from the circuit and this caused the problem with programming. Now, after placing the crystal the program is successfully uploaded to the ATMEGA32U4.

PWM/PPM Output misses some edges

I am using ESP8266 (NODEMCU 3.0 or something) to make a quadcopter. Ive connected ardu pro mini to RC receiver so I am reading PPM values from it. Pro mini sends data with tx to ESP8266. ESP reads it with software serial with 115200 baudrate. I am communicating with MPU9255 (Waveshire) via I2C either.
My problem is that I cant fully controll my brushless motors. When I was using arduino instead of ESP8266, servo library was the best and reliable. But ESP's servo library is different, since its not AVR, and problems occurs. First of the servo library didnt want to work on most frequencies. I mean default is 50Hz (20000uS) and in this state ESC of motors did armed but unfortunatelly when changes was fast and short (1250-> 1370 -> 1250) it did miss that change like nothing happnd... This makes my D value in PID controller useless...
Sometimes on 100Hz freq all was working fine, but sometimes not...
When Ive started to use analogWrite only 500Hz was working fine, rest of freq didnt want to arm ESCs.
PS. I am using 3.3V to 5V converter for PPM/PWM pins so I am sure that the signal is fine for ESCs.
PS2. I dont have any osciloscope unfortunately.
The ESP82266 present on your module is a RF transceiver integrated circuit that can handle WiFi communication, both configured as a slave to a microcontroller such as the ones present on various Arduino boards, or as a standalone chip by having it's on-board Tensilica L106 32-bit processor programmed via an external SPI flash memory. If used as a slave, the communication between, for example, an Arduino an the ESP82266 can be done using different protocols such as SPI / SDIO or I2C / UART interfaces. Googling a comprehensive Tensilica L106 user guide on the internet doesn't seem an easy task, and it looks as if some people have already failed to find it. If you're seeking to add Wi-Fi capabilities to your quadcopter the solution I suggest is having the Arduino take control over the servos, motors, etc. and hand off messages via SPI to your ESP82266 module. If this isn't the answer you are looking for, please try to be clearer about it, maybe find someone to do as an English translator for you.
However, if this is what you're concerned about, and you would like to use the ESP82266 module as as standalone solution, please link its built-in processor datasheet and the relevant parts of the quadcopters code that might need debugging.

Arduino Standalone

I have an Arduino Uno and I am using arduino 1.0.5 IDE. I followed he procedures for bootloading an atmega328P-PU on a breadboard.
I uploaded the ArduinoISP sketch first, made the connections(using the External Oscillator) and then wired it up. Then, I selected the programmer as Arduino as ISP, selected the board as Arduino duemilanove w/ Atmega328P. Then I selected the correct serial port and clicked Burn Bootloader.
I got the following errors:
avrdude.exe: stk500_program_enable(): protocol error, expect=0x14,
resp=0x50avrdude.exe: initialization failed, rc=-1 Double
check connections and try again, or use -F to override
this check.avrdude.exe: stk500_disable(): protocol error, expect=0x14,
resp=0x51
How to solve this issue? Also, can I upload the bootloader directly by using it on the Uno in place of the original chip. If so, how?
to my understanding the error you have indicates a bad reading from the chip. I experienced that with chips that were either dead or not properly connected, especially to power supply.
You may find more detailed information in th tutorial : https://www.arduino.cc/en/Tutorial/ArduinoISP
Especially those things :
Note for Arduino 1.0: you need to make one small change to the
ArduinoISP code. Find the line in the heartbeat() function that says
"delay(40);" and change it to "delay(20);".
Select the items in the
Tools > Board and Serial Port menus that correspond to the board you
are using as the programmer (not the board being programmed).
Instead of arduino built-in boot loader just go through below link and it will be great for uploading boot loader and verifying board status info
I am replying you this because same issue I got long back and it saved me.
One more thing for arduino boot loader: for atmega328 you need to put capacitor between reset and gnd( in case you missed)
For gammon bootloader you don't need it.
Be Innovative.
For reset line you might me using 100nf(thats what stated in documentation )...but sometimes it doesn't work...try something like 4.7uf, 22uf or 47uf or close values
I had a similar problem and the issue was that my programmer was a bit slow, I used the -B flag for avrdude to slow down the bitrate and it started working, I set the -B20 and works like a charm every time, but I use the USBTinyISP programmer, not the stk500 one, so this might not work for you.
In case someone stuck at this as I did and nothing like changing the cap value helped. Make sure you are using your USB-TTL adapter in a 5v mode (obviously for a 5v powered chip). I always used it in a 3.3v mode in order not to accidentally burn my 3.3v chips and it always worked. Until today, I was trying to flash my custom atmega8 board and everything worked with the ISP but I was having a hard time using the bootloader and after half a day searching and trying different stuff the 5v setting to the rescue.

Arduino Sketch upload issue - avrdude: stk500_recv(): programmer is not responding

I have an Arduino Duemilanove with an ATmega328. I am working on Ubuntu 12.04 (Precise Pangolin), and the Arduino IDE's version is 1.0. Recently, I tried to upload a few of the sample sketches onto it, such as the Blink one. However, none of my attempts are working and they result in the same error every time I try it:
avrdude: stk500_recv(): programmer is not responding.
I have enabled /dev/ttyUSB0 under menu Tools → Serial Port. I have also selected the correct board (Duemilanove with ATmega328) from the list. Yet, I am not able to resolve the issue. I have searched online as well and none of the other responses for this problem seem to be working for me. Why I am encountering this issue and how to resolve it?
I also tried turning the onboard ATmega and fitting it in the other direction. Now, I encounter no problems uploading, but nothing happens afterwards. The onboard LED also does not seem to be blinking.
I had this problem with a Crowduino, running the Arduino IDE on OS X. The solution for me was to switch on verbose output during upload (in the Arduino IDE preferences pane).
Then, when uploading, you can see AVRDUDE sending three packets avrdude: Send: 0 [30] [20] (with corresponding RX flashes on the board) right before the avrdude: ser_recv(): programmer is not responding error.
The trick is to hit the reset button on the board immediately before these three packets are sent. Then the program will be uploaded successfully.
I had the same problem – this is why I found this Question.
I only had to change the Processor from “ATmega328P” to “ATmega328P (Old Bootloader)”
Problem solved – at least for me.
Make sure that there is no input on the Tx/Rx pins. Then it will work.
There is some voodoo-talk in the answers around here among good ideas. Let's try to be a bit more real about what's happening and sum up the good stuff to check:
Basically, when that happens, it is a good idea to enable verbose mode for AVRDUDE, to get a better idea of what's happening. To do so, you only need to go in the preferences and check the verbose mode box. It's also a good idea to move away from the Arduino IDE, and launch a console to be more comfortable on reading AVRDUDE's output, that you'll get on clicking on the upload button.
What's important here to put 3 or 4 -v to the command call. Here's how looks like such AVRDUDE commands, with made up parameters as they are totally dependent on how the Arduino has been installed:
avrdude -v -v -v -v -C /path/to/avrdude.conf -patmega328 -P/dev/usbport -U flash:w:/path/to/firmware.hex
A good way to get the correct command line to use is to copy it from the verbose output of the Arduino IDE output log when verbosity has been enabled.
When you get avrdude: stk500_recv(): programmer is not responding, it basically means that something wrong is happening, before the flashing actually begins.
Basically you have to check (from hardware to software, low level to high level):
if the cable and/or connectors does not have microcuts;
if no solder points are short circuiting (i.e. touching something metallic around), that means:
if there is no short circuit on the PCB between Rx and Tx (usually pins 1 and 0);
if there is no contact with a metallic element below the board, or tiny bits between a component's legs (like the FTDI, the ATmega chip or any other);
if the ATmega chip is not out of power (GND/VCC shortcut or cut or VCC input being dead…);
if the 1 and 0 pins of the Arduino are not being used by some shield or custom design (/!\ does not apply to the Leonardo as it has independent USB handling);
if the USB to UART converter does not have a problem (FTDI on older Duemilanove or ATmega16U2 on newer Arduino Unos);
if the ATmega328 chip is fried or wrongly installed;
if the bootloader has been overwritten or is failing;
if the right baudrate is applied for entering the bootloader;
if the right settings are set for the target microcontroller and Board;
Usually the avrdude -v -v -v -v can help a lot find at which stage it is failing. Whether it can't make a USB connection at all (cable failing, USB/UART, PCB…), or it is a bootloader problem.
Update: I tried turning the onboard ATmega and fitting it in the other direction. Now, I encounter no problems uploading, but nothing happens afterwards. The onboard LED also does not seem to be blinking.
I'm afraid that if you reversed the position of the ATmega, and then it does not work, the fact that you placed the power source on digital pins may have burnt your chip.
Try to see if your board was selected correctly. Click on menu Tools --> Board and check if the correct board is select.
You can check if you have any jumper wires plugged into pin 0 and 1. Those pins are used for serial communication and plugged wires can prevent the code from being uploaded on the board.
If nothing is plugged, it might be a bug with AVRDUDE, you can try updating it.
I met this issue too, and I resolved it by re-installing USB serial driver. Pls see also:http://arduino.cc/en/Guide/Howto and http://www.ftdichip.com/Drivers/VCP.htm
Above error comes in 3 stages
If boot loader has been crashed
if you not selected proper port and proper board from IDE
If you communicating with other Serial port are connected.I.e GND and Tx pin are connected to other communicating device
I'm posting this because I didn't find this answer elsewhere.
All my Arduino nano chinese (CH340) clones had this problem after upgrading to the Arduino IDE to 1.8.9. What worked for me was to use a spare official Arduino Uno that I have to burn the bootloader on the faulty nanos using the ICSP headers on the nano. For this all I did was to follow the instructions here: chinese-clone-of-arduino-nano-with-chip-ch340g-how-to-fix-it. The ONLY thing I did differently was to always set the "Old Bootloader" option as said before in this thread. Other than that I completely followed the instruction on that link and saved my nanos from that annoying problem. I hope that this helps someone out there.
I had the same problem on my first trying of Arduino Uno.
My solution was quite simple. Just plug out then plug in the USB cable.
I solved the issue on OS X v10.10 (Yosemite) following these instructions:
FTDI chip and OS X 10.10
However the trick proposed by hoipolloi was a working temporary workaround, on this version too.
On Windows 7, I had this problem multiple times, each time with different error messages. Basically, the IDE is sending to the wrong port.
To fix this, simply go to menu Tools → Ports → [select the COM port that your board is on].
Make sure to double check your board's port:
Start Device Manager
Make sure your Arduino driver is listed under the port matching your IDE's port settings (mentioned above)
My board is listed under port COM1. If you want, you can simply change the port in the driver's advanced settings:
Thanks #hoipolloi for the right direction in finding the solution.
Anyway, I had to do a bit different steps to fix the issue.
In my case, the Arduino Uno had worked fine, but it suddenly stopped after some playing with sketches. I was receiving the stk500_recv(): programmer is not responding all the time and nothing worked. Then I paid attention that the LED 13 is always ON on my board. It looked like some hard looped sketch was running over and over on the board and was blocking any input to the board. Not sure, it's just my gues.
I tried clicking the RESET at all the possible moments without any luck and suddenly tried the following steps:
Unplug the board.
Click and hold RESET.
Plug it again.
Wait for a couple of seconds.
Release the RESET button.
After this I noticed the onboard 13 LED turned off for a second and then turned on again. It looked like there were a short reset window when the board is actually being reset. Then as in #hoipolloi's solution I caught the moment of "reset" right before the three packets are sent and that worked.
I hope this will help you to figure out the problem if none of other solutions works.
TIP. If you do not see the three Send: 0 [30] [20] lines when uploading the sketch in your console, do the following:
Click "Upload" in your Arduino IDE.
Look at the log window. You will be able to find a line like this:
E:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CE:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\Sergey\AppData\Local\Temp\build44ca75bc60fd83cc8ef41e35d4d83388.tmp/sketch_sep07a.ino.hex:i
Looks like it swallows line break or space symbols like here -CE:\Program Files.... It should be -C E:\Program Files. Copy this like into Notepad, add missing spaces to make the line this:
E:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -v -v -v -v -C "E:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -patmega328p -carduino -PCOM3 -b115200 -D -U flash:w:C:\Users\Sergey\AppData\Local\Temp\build44ca75bc60fd83cc8ef41e35d4d83388.tmp/sketch_sep07a.ino.hex:i
Add 4 -v instructions like I did above.
Open the Command Line, paste the command into it and run.
Now you will see much more verbose thanks to 4 -v arguments. Originally, Arduino Studio uses just one.
I have this problem on my Arduino running on Mac also. It happens on two of my Arduinos (A Arduino Uno and an Arduino Pro connected with FTDI).
For the Uno, I hook the cable up to my computer and press upload, and then start counting until the "TX" LED flashes. Then repeat the upload, but just before the TX LED flashes, hit the reset button, and the upload succeeds.
I later determined that changing the USB cable fixed this issue.
Please do the following checks:
1- No wires in the TX and RX of your arduino while uploading the code.
2- No soldered pins in each others.
3- If 1 and 2 are okey than you must reinstall the bootloader into your arduino using another arduino, you can search how to do that in youtube there plenty of videos talking about it.
If you are connecting your Arduino through a USB hub, try to connect it directly into one of the USB ports on the Mac instead.
That worked for me.
First, ensure that /dev/ttyUSB0 works. E.g. plug in mouse and check it works.
Second, try select other board. It is often that non-original boards do not recognized correctly under their names.
Third, try press reset button manually while uploading sketch. Probably automatic reset is broken.
I solved a problem in my case by downloading and installing old FDTM drivers from here.
Try to install FTDIUSBSerialDriver_10_4_10_5_10_6_10_7.mpkg, then re-start Arduino.
Just thought I'd point out that my brand new
Arduino Uno Rev3 board uses the following
LInux driver:
Device Drivers
|-USB Drivers
|-USB Modem (CDC ACM) support
This is known as the: CONFIG_USB_ACM: option in the most recent LInux 3.x kernel.
This device then comes up as: /dev/ttyACM0 or similar.
Have you got anything connected to the RESET pin on the Arduino?
I've encountered this issue with a graphic LCD which needed connecting to the RESET Pin. Disconnecting the jumper wire between the LCD and the RESET pin while uploading the code fixed it for me, all you'd have to do then is reconnect once the code has finished uploading.
I found the cause of this...
Changing my serial port to /dev/tty.usbmodem2131 fixed it. It turns out I was using the wrong serial port this whole time!
You can try:
Check in preferences.txt serial.debug_rate:
serial.debug_rate=9600
Else try to hit the reset button of your Arduino just when uploading.
Else try to select another card in the Arduino IDE menu Tools and then reselect your card in the list.
This combination of the above answers solved the problem for me:
performed the Java update:
sudo apt-get install default-jdk
then killed the Arduino IDE and restarted it
my correct board now showed up (Arduino Mega 2560, where before Mega 1280 was only option)
for the drivers, I did this:
sudo chmod a+rw /dev/serial/by-id/usb-Arduino__www.arduino.cc__(a bunch of numbers)
After that, my Arduino IDE shows /dev/ttyACM0 in the tools/serial port menu.
Now, everything works great!
Here is a solution that worked for me running on a MacBook Pro (desktop).
I was getting the same error and it turns out it's because I had the USB connected to a peripheral device (my monitor) rather than a USB on the PC itself. It stopped any errors right away and is a simple solution.
I tried to connect my servo to the Arduino 5V pin, but the processor and that is why I got this failure
avrdude: stk500_recv(): programmer is not responding
Solution: buy a new Arduino and external 5 V power supply for the servo.
Did you install/update the driver for the FTDI cable? (Step three on http://arduino.cc/en/Guide/Howto). Running the Arduino IDE from my Raspberry Pi worked fine without explicitly installing the drivers (either they were pre-installed or the Arduino IDE installer took care of it). On my Mac this was not the case and I had to install the cable drivers in addition to the IDE.
I just spent the last few hours on this same issue... Just go here "http://www.ftdichip.com/Drivers/VCP.htm", download the latest drivers and reboot. Should work just fine after that. I also downloaded a nightly of the Arduino software, but I don't hunk that made a difference.
Try to load a program without -b (the baud rate option). In ~/.arduino15/preferences.txt set build.verbose=true, when arduino.cc is not running. In the verbose output you will find the hex file which you should load from a console:
avrdude -v -v -v -v -C/usr/share/arduino/hardware/tools/avr/etc/avrdude.conf -patmega328p -carduino -P/dev/ttyUSB2 -D -Uflash:w:/tmp/build2314497724350388190.tmp/sketch_nov13b.cpp.hex:i
I just replace the chip 128 with the 328 version and from Decimile my board name was changed to Uno or Ethernet due to the new baud rate 115200.
In my case the problem was raised when I was trying to do some "weird" arithmetic expressions
eg (3.14/4)/5 or 3.15%2.55
So, I would suggest you to check all the arithmetic expressions in case some of them cannot be calculated by the Arduino.
Hope it helps.
In my case (Mini Pro), solution was so simple, not sure how I missed that.
I needed to crossover rx/tx wires.
Solution:
Arduino Rx pin goes to FTDI Tx pin.
Arduino Tx pin goes to FTDI Rx pin.

avrdude: stk500v2_ReceiveMessage(): timeout

This is the main error that I get when I try to run my ARDUINO program. The full list of errors is as follows:
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
My code is as follows:
int led=13;
void setup()
{
pinMode(13,OUTPUT);
}
void loop()
{
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
}
I have tried updating the drivers (they are fully updated) and downloading some programs. I have Windows 7 and my arduino is a MEGA 2560. It shows up in the Device Manager and all of my connections are correct. The green PWR light is on and so is the flashing L light. The RX and TX lights flash when I update. I have tried almost everything on the web. What is the problem?
Another possible reason for this error for the Mega 2560 is if your code has three exclamation marks in a row. Perhaps in a recently added string.
3 bang marks in a row causes the Mega 2560 bootloader to go into Monitor mode from which it can not finish programming.
"!!!" <--- breaks Mega 2560 bootloader.
To fix, unplug the Arduino USB to reset the COM port and then recompile with only two exclamation points or with spaces between or whatever. Then reconnect the Arduino and program as usual.
Yes, this bit me yesterday and today I tracked down the culprit. Here is a link with more information: http://forum.arduino.cc/index.php?topic=132595.0
The error message basically means that the programmer is unable to contact the bootloader on the device; the code you're trying to upload has no bearing on the problem.
What causes this can be numerous and varied, some possible issues:
UART communications
Blinking is happening, so hopefully you aren't using the wrong port. It might be worth checking again though, sometimes USB COM devices install on strange port numbers.
Connect TX to RX (and disconnect them from the AVR if possible) then open a terminal on the COM port, you should see characters echoed if you type them. If you don't, something is wrong up-stream of the chip, it could be the communications chip (I think the Arduino 2560 uses a secondary AVR instead of an FTDI for some reason, so that could be broken, either its software or hardware)
ATmega* bootloader
The AVR is not executing the bootloader for some reason. If the programmer is not resetting the micro before attempting to connect, this might be the reason. Try to reset the AVR (press and release the button) while the programmer is attempting to connect. Sometimes software that runs in a tight loop will prevent the bootloader from connecting.
Barring that, the fuses might have gotten messed up or the code erased. You would need to reflash the bootloader and proper fuses, again, see the appropriate info page for your device.
Arduino Mega 2560 only: ATmega8U/16U software
Might not be working and would need reprogramming. See the Programming section on the info page, you will need the firmware and Atmel-compatible DFU (device firmware update) software on your computer to reflash the target.
Hardware damage to the board, AVR(s), or FTDI chip
You're hosed; need a new chip.
Check this forum post for some more ideas.
I got this error because I didn't specify the correct programmer in the avrdude command line. You have to specify "-c arduino" if you are using an Arduino board.
This example command reads the status of the hfuse:
avrdude -c arduino -P /dev/ttyACM0 -p atmega328p -U hfuse:r:-:h
To my humble understanding, this error arises in different scenarios:
you have selected the wrong port or you haven't at all. go to tools > ports and select the com port with your Arduino connected to.
you have selected the wrong board. go to tools > board and look for the right board.
Do you have one of these Arduino replicas or you don't have the boot-loader installed on the microcontroller? I don't know the solution to this! if you know please edit my post and add the instructions.
(windows only) you don't have the right drivers installed. you need to update them manually.
sometimes when you have wires connected to the board this happens. you need to separate the board from any breadboard or wires you have installed and try uploading again. It seems pins 0 (RX) and 1 (TX), which can be used for serial communication, are problematic and better to be free while uploading the code.
Sometimes it happens randomly for no specific reason!
There are all kinds of solutions all over the internet, but sometimes hard to tell the difference between magic! Maybe the Arduino team should think of better compiler errors to help users differentiate between these different causes.
The same problem happened to me and none of the solutions above worked. What happened was that I was using an Arduino UNO and everything was fine, but when I bought an Arduino Mega 2560, no matter what sketch I tried to upload I got the error:
avrdude: stk500v2_ReceiveMessage(): timeout
And it was just on one of my windows computers and the other one was just ok out of the box.
Solution:
What solved my problem was to go to tools > boards > Boards Manager... and then on the top left of the opened windows select updatable in the Type section. Then select the items in the list and press update on the right.
I'm not sure if this will solve everyone's problem, but it at least solved mine.
Open Terminal and type:
$ sudo usermod -a -G dialout
(This command is optional)
$ **sudo chmod a+rw /dev/ttyACM0**
(This command must succeed)
This isn't really a fixing solution but it may help others. Unlike Nick had said for me it was due to code in my program. I have the mega ADK model. The issue was tied to a switch statement for processing and parsing the returned byte[] from the usb connection to the Android. Its very strange because it would compile perfectly every time but would fail as the OP had stated. I commented it out and it worked fine.
I was running this code from Arduino setup , got same error resolve after changing
serial port to COM13
GO TO Option
tool>> serial port>> COM132
If you use the ino command line:
ino upload
it can be because you use the arduino software at the same time, try to kill it.
I've connected to USB port directly in my laptop and timeout issue has been resolved.
Previously tried by port replicator, but it did not even recognized arduino, thus I chosen wrong port - resulting in timeout message.
So make sure that it is visible by your OS.
Ensure the serial monitor is not running and nothing is reading/writing dev/tty/S0 (or whichever port you're using), which may cause uploading interference.
I had the same problem, and in my case, the solution was updating the usb-serial driver using windows update on windows 10 device's manager. There was no need to download a especific driver, I just let windows update find a suitable driver.
I faced same problem. but Root cause of issue. Incorrect communication was set and thats why I occurred Communication timeout.
Solution: If you connected to laptop through USB port.
Change Port as USB. Please follow steps
Open Arduino-IDE
Go to Menu "Tools --> Port" and Select option "USB" { for me its showing as /dev/ttyUSB0 }
It working fine for me.
Something not yet mentioned is that this message also appears when the baudrate is not properly set... for Arduino, it is generally 115200.
My aurdino mega 2560 returned same error. It seems the problem exists in unofficial clones. The issue solved by pressing reset button just before uploading starts, as advertised in following video.
https://www.youtube.com/watch?v=tAzjO4v7oF4&list=LLDn5ewJDzz53IiwWmZTgQnQ&index=1

Resources