TX LED stays illuminated after power-up, cannot load bootloader or upload compiled sketches

Re: Nano cloners from various amazon sellers.

System: Windows 11 Home

Summary: Many boards I get don't work directly out of the box new. 4 out of 6 in this package. They always take them back and issue a credit but it's been a problem for over a year and a headache. What is going on with these boards? Is it possible my PC is intermittingly causing this?

Problem: After power up the LED blinks then TX light comes on preventing loading new bootloader or even upload compiled sketches. When loading a sketch LED blinks 8 times then TX light stays illuminated. When loading new bootloader LED blinks once then TX light stays illuminated.

Here is the error from trying to upload a sketch:

Arduino: 1.8.13 (Windows 10), TD: 1.53, Board: "Arduino Nano, ATmega328P"

C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\chris\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\chris\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\chris\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -vid-pid=0403_6001 -ide-version=10813 -build-path C:\Users\chris\AppData\Local\Temp\arduino_build_425683 -warnings=more -build-cache C:\Users\chris\AppData\Local\Temp\arduino_cache_931788 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avrdude.path=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avr-gcc.path=C:\Users\chris\AppData\Local\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=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -verbose C:\Users\chris\Documents\GOOOD SYSTEMS\Parts\Sensor\Software\QSeepromClear\QSeepromClear.ino

C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\chris\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\chris\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\chris\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -vid-pid=0403_6001 -ide-version=10813 -build-path C:\Users\chris\AppData\Local\Temp\arduino_build_425683 -warnings=more -build-cache C:\Users\chris\AppData\Local\Temp\arduino_cache_931788 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avrdude.path=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avr-gcc.path=C:\Users\chris\AppData\Local\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=C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -verbose C:\Users\chris\Documents\GOOOD SYSTEMS\Parts\Sensor\Software\QSeepromClear\QSeepromClear.ino

Using board 'nano' from platform in folder: C:\Users\chris\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Using core 'arduino' from platform in folder: C:\Users\chris\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Detecting libraries used...

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683\\sketch\\QSeepromClear.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

Alternatives for EEPROM.h: [EEPROM@2.0]

ResolveLibrary(EEPROM.h)

  -> candidates: [EEPROM@2.0]

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\EEPROM\\src" "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683\\sketch\\QSeepromClear.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE

Generating function prototypes...

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\EEPROM\\src" "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683\\sketch\\QSeepromClear.ino.cpp" -o "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683\\preproc\\ctags_target_for_gcc_minus_e.cpp" -DARDUINO_LIB_DISCOVERY_PHASE

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\builtin\\tools\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683\\preproc\\ctags_target_for_gcc_minus_e.cpp"

Compiling sketch...

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -Wall -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "-IC:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\libraries\\EEPROM\\src" "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683\\sketch\\QSeepromClear.ino.cpp" -o "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683\\sketch\\QSeepromClear.ino.cpp.o"

Compiling libraries...

Compiling library "EEPROM"

Compiling core...

Using precompiled core: C:\Users\chris\AppData\Local\Temp\arduino_cache_931788\core\core_arduino_avr_nano_cpu_atmega328_a2518db28f7ea45d1f60bee5bfc57867.a

Linking everything together...

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -Wall -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683/QSeepromClear.ino.elf" "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683\\sketch\\QSeepromClear.ino.cpp.o" "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683/..\\arduino_cache_931788\\core\\core_arduino_avr_nano_cpu_atmega328_a2518db28f7ea45d1f60bee5bfc57867.a" "-LC:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683" -lm

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683/QSeepromClear.ino.elf" "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683/QSeepromClear.ino.eep"

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683/QSeepromClear.ino.elf" "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683/QSeepromClear.ino.hex"

Using library EEPROM at version 2.0 in folder: C:\Users\chris\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\libraries\EEPROM 

"C:\\Users\\chris\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "C:\\Users\\chris\\AppData\\Local\\Temp\\arduino_build_425683/QSeepromClear.ino.elf"

Sketch uses 766 bytes (2%) of program storage space. Maximum is 30720 bytes.

Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.

C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega328p -carduino -PCOM19 -b115200 -D -Uflash:w:C:\Users\chris\AppData\Local\Temp\arduino_build_425683/QSeepromClear.ino.hex:i 



avrdude: Version 6.3-20190619

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         Copyright (c) 2007-2014 Joerg Wunsch



         System wide configuration file is "C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"



         Using Port                    : COM19

         Using Programmer              : arduino

         Overriding Baud Rate          : 115200

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00

avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00



avrdude done.  Thank you.



An error occurred while uploading the sketch

Invalid library found in C:\Users\chris\Documents\Arduino\libraries\ElegooTutorial-master: no headers files (.h) found in C:\Users\chris\Documents\Arduino\libraries\ElegooTutorial-master

Here is the error when loading bootloader:

Arduino: 1.8.13 (Windows 10), TD: 1.53, Board: "Arduino Nano, ATmega328P"

C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega328p -cusbasp -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0xFD:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m 



avrdude: Version 6.3-20190619

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         Copyright (c) 2007-2014 Joerg Wunsch



         System wide configuration file is "C:\Users\chris\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"



         Using Port                    : usb

         Using Programmer              : usbasp

         AVR Part                      : ATmega328P

         Chip Erase delay              : 9000 us

         PAGEL                         : PD7

         BS2                           : PC2

         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  3600  3600 0xff 0xff

           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff

           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00

           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00

           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00

           lock           0     0     0    0 no          1    0      0  4500  4500 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 : usbasp

         Description     : USBasp, http://www.fischl.de/usbasp/



avrdude: auto set sck period (because given equals null)

avrdude: warning: cannot set sck period. please check for usbasp firmware update.

Error while burning bootloader.

avrdude: AVR device initialized and ready to accept instructions



Reading | ################################################## | 100% 0.00s



avrdude: Device signature = 0x1e9516 (probably m328pb)

avrdude: Expected signature for ATmega328P is 1E 95 0F

         Double check chip, or use -F to override this check.



avrdude done.  Thank you.

Thank You in advance!

Although your error message is different, this thread

outlines a solution relevant to W11 machines and the CH34x series used for USB on the Nano Classic clones. Maybe try the solution in post #12 and see?

Most clones use the old bootloader. So you can try that option for a normal upload first.

The more worrying part is the TX LED that stays on. That indicates in my opinion that the serial-to-usb converter (the chip at the bottom of the board) is not functioning properly; which chip is it?

I see for some people MiniCore has seemed to solve the issue it is built for the Atmega328pb chip try to install it and if you get a different error post it here.

And don't order semiconductors or chips from china. They like to put cheap stuff in and switch out the label and flash a bootloader onto them.

I am concerned about the TX light being illuminated. You can brick an arduino very easily. If you dont select the right board type and upload the sketch you can brick it and you need to entirely replace the bootloader but you can't because of the underlying problem that you have the Atmega328pb not Atmega328p.

Well spotted !!

Very well explained!!

Now, I want to know who the seller is, and what other features might be hidden on the board! A PB could be a nice upgrade to my Nano systems.

1 Like

That sounds like a serial flood to me. Something was uploaded that kept sending data to the serial port faster then it could send it hence it locked up in a loop. Try this:
Take these steps:

Power off the board completely
Remove the USB cable
Hold down the Reset button
keep it held down (or, run a jumper wire from the RESET pin to the GND pin).
Still holding down Reset reconnect the USB cable.
Start uploading a sketch that does not have this problem (I use the Blink sketch).
When you see the Receive light blink, release the Reset button
Change your code and add a delay(3000), or more in setup(). This allows easy recovery from a serial flood.
Note: I have seen this happen several times when I flood the serial output. An indication is the TX light is stuck on.
You may have to repeat several times.

1 Like

Yeah but when you press the reset button his LED is flashing and the TX light turns off. So yeah but the main problem seems to be that he is using the PB chip. His bootloader is working. I have never seen a serial flood before so I don't know. And plus I think it came out of the box like that. I don't really think that manufacturers would upload some corrupted code to their arduinos before they ship them

That is exactly what a serial flood will do. When you press the reset the processor stops and the Tx led turns off. When releasing it it goes back to the code and gets into that loop again. You have to gain control before it can get to that loop.

If I were to take a guess the source is reselling returned boards.

Check this link:

Regardless of where you buy them Seventy-five percent of the world's chip manufacturing comes out of Asia, per the report, and China is positioned to become the largest chip producer by 2030.

For this to happen they need to produce good product. I personally have never had a problem with a chip from china but I have with some US chips (they were assembled in china).

What is the difference between an inexpensive and cheap chip.

I have not had any problems with them. I use them for non automotive applications or other high temperature applications. The biggest thing I have seen is they may have been rejected at final assembly because the markings are not very readable but they always functioned properly.

1 Like

I didn't know about that for serial flooding. And about china exporting the most chips I know about that but I am talking getting something from like aliexpress for semiconductors I would rather go with Mouser or something like that. Get it from a trusted source.

1 Like

Wow thanks for all the help/input!

First I should clarify an error I made about how many times the light blinked:

That was by chance when connecting via USB vs USBASP v3.1 bootloader.

I did the test suggest by gilshultz on 6 boards (3 that blinked once and 3 that blinked 8 times...then TX illuminated) and I was able to upload code via 'old bootloader'. The boards seem to function fine but it would not let me bootload new or old bootloaders.

These are all new boards so nothing overloaded them previously.

I Verified they are the Atmega328PB. I have 45 of the 'one blinkers' and 12 of the '8-blinkers' that are stuck with TX illuminated. 6 of the 'one blinkers' had a number on the bottom chip (CH340C / 205695D39) and the rest were blank. By using gilshultz method above they can be saved running on the old bootloader. Unfortunately the project these are used for require the newer bootloader because the startup time is to slow with the old bootloaders. I have over 40 more Nanos (Atmega328P) from the past 2 years that never had the TX problem but they also are useless for this project because they won't let me load the newer bootloader.

I can do the above suggestions by camsysca and azur123123 above but thought I should share this data first as they will be more time consuming.

Thank You!

Now that it's clear the problem is with a PB-based board, you can ignore my suggestion, I think.

Please, though, who's the seller of the PB-based boards?

Mine steps are the same as gilshultz's. Glad to hear that you managed to recover them from the serial flood! atmega328pb is not the same as atmega328p so you can't upload the bootloader from the 328p to a 328pb. I think MiniCore has the new bootloader that you are looking for so I strongly suggest you try MiniCore.

1 Like

It has the new Urboot bootloader which is far better than those old slow bootloaders.

1 Like