WIO Terminal Windows COM PORT problem finding (flacky)

Not sure what happened. I have Two WIO Terminals. Today (4 August 2020). Tried to upload sketch to one WIO Terminal and after about two weeks us no problem uploading two “COM Ports” show up. I pick one and it does not work, so I attempted to choose the other port.and it worked for a while/ After several port com switching, I could not pick a com port that worked.
I decided to try my other WIO Terminal and it only had one Com Port to chooses from and it worked. Does that mean one of my WIO Terminals is dying?

Both WIO Terminals were purchased at the same time. I followed the instructions when they first arrived to update the flash loader. Both went fine. I have been successfully using both for about two weeks.
Any ideas? Is there a fix or does it need to be replaced?

Hi @geschmierer

This could be the Windows drivers not installed properly, please update the Seeed ArduinoSAMD board library to the latest version (1.7.8), we have added the windows driver, so when you update the board library to the latest, it also installed the driver.

I had been running version 1.7.8 SAMD Boards. Apparently when I updated the "Arduino SAMD Boards (32-bits ARM Cortex-MO+) to version 1.8.7 it modified the USB drivers and allowed my wayward WIO Terminal to work for a short time. Now I am still having the same USB driver issue loosing connection during an upload with only one of my WIO Terminals! It also got really hot. Does the WIO Battery expansion with extra ports, add-on, cause that?
Should I down grade SAMD Board to 1.7.7 and re-install to 1.7.8? Any other ideas?

You mentioned the battery chassis, did you plug the usb here to upload program?

No, I placed the USB-C cable into the WIO Terminal *not the battery pack).

Okay, there should be no problem with the 1.7.8 core. So only one Wio Terminal is appearing? Can you try another PC if that’s possible?

Today (07 August 2020) steps taken:
Clean start on different computer
When I first plugged WIO Terminal (after installing board SAMD 1.7.8) recognized WIO Terminal.
Windows recognized WIO Terminal: Then Windows said setting up WIO Terminal, Device ready!
In IDE I chose the Port (only one in view) then began to compile sketch. Received error "couldn’t find a Board on the selected port. Check that you have the correct port selected. If it is correct, try pressing the board’s reset button after initializing the upload.
Then Windows gave error that the board malfunctioned.
Rebooted Windows 10 computer
The following events took place:
Setting up WIO Terminal
device ready

Inside Arduino IDE: COM5 port WIO Terminal available clicked on COM5, it then reverted to COM4 - Compile error.
I forced it back to COM5
Then Windows said setting up WIO Terminal, Device ready!
IDE sets to COM6!
Produced error - no device
Compiled at COM6
getting hot waiting for upload to finish, taking too long
ReSet WIO Terminal - COM6 no longer available
Clicked on COM5
Did USB beep and then gave error no device on COM6!
Getting hot.
Took battery pack off
Recomplied/upload using COM5 (only one available)
Upload stalled again -
WIO Terminal #1 no success.

Next used second WIO Terminal #2
setting up WIO Terminal - device is ready
COM3 appeared Compile/.upload
Successful upload FOr WIO Terminal #2!

Hi can you check the device manager on Windows to check the serial port. And maybe try sliding the power switch twice very quickly to enter bootloader mode to flash program.

Test Date: 10 August 2020
WIO Terminal #1:
USB Composite Device x3

These two show up when WIO Terminal was powered on:
This one shows up when sliding power twice quickly:
Once it disappeared after about 10+ seconds
Still getting hot to touch!
Then turned WIO Terminal #1 on “normally” and only the following port showed up:
(excluding the three existing devices)

WIO Terminal #2:
this port shows up:
Port_#0004.Hub_#0009(WIO Terminal #2 cool to the touch)

WIO Terminal #1 plugged back in:
Turned WIO Terminal #1 back on after #2’s test - #1 still hot
Tried to upload a sketch to #1 and get the same error no board found at COM(n), then
Opened Device Manager and found the following error/warning:
unknown USB device (Device descriptor request failed)


Did you try sliding the power switch quickly twice to enter bootloader mode? There should also be a USB drive name Arduino appeared.

Yes, Several times.
Today I got out an old laptop with Windows 10 which never had Arduino IDE on it.
This test was only using WIO TERMINAL #1 (one causing problems):
old W10 laptop no usb-3
installed Arduino ide for first time. (1.8.13)
plugged in wio terminal
nothing changed in device manager
Put in bootloader mode:
USB Composite Device (nothing else)
USB Mass Storage Device
show up
In Arduino IDE: COM 3 and COM5 (Seeeduino WIO Terminal)

compiling Blink = stuck about 1/8th way
then put WIO in normal on mode:
Com3 and now Com4 (WIO)
device mgr now only USB composite device
compiling Blink = stuck about 1/8th way system very slow
it finally reached the point where the message sais "Couln’t find a Board on the selected PORT.
Still hot 109 to 121, degrees Faranheit!!. Other WIO #2 is NOT hot! Suggestion?

Now COM5 is WIO Terminal recompile and upload:
“No device found on COM5” progress about 1/8th finished!

Put in boot loader mode, selected port COM5 only option
“No device on COM5, error occurred while uploading sketch”
I was hoping that maybe by testing on a system with a NEW Arduino IDE it would rule out any issues from other installed boards. This WIO Terminal is just not cooperating and the temperature, “hot” cannot be good for electronics. I do not know what happened to WIO #1 as it worked when it first arrived!
To sum this problem up:
WIO #1 worked for about a week, then I had to to try twice to get it to stick with one PORT. Usually, compile/upload the first time failed then changed to the “new” port. Then it could never find a Board on any Port. Tried on 3 different systems. The system today had Arduino newly installed and only the WIO Terminal (SAMD) board and no additional libraries.
WIO #1 heats up to about 120 degrees Fahrenheit (tested with an AMES Infrared thermometer) could be a couple degrees off as I did not change the settings.

Hi seems like Wio Terminal #1 is strange, it should not be that hot, please could you unscrew and take the bare PCBA out and check which part of the Wio Terminal is actually getting the heat so we ca n better target the problems.

Take out the casing : https://wiki.seeedstudio.com/Software-SWD/#faq

The SAMD chip

The uploading part could be a small bug that we have just fixed, it happens more often to macOS, but we have fixed it here: https://github.com/Seeed-Studio/BOSSA/commit/4408114659289441cb67904618ae5f84123aef8e

This will be released very soon with the next SAMD core or you may compile yourself and replace.

What sort of program you have uploaded to Wio Terminal to have ~50 degree, we will try to reproduce it on our end. As in normal situations it should never be that hot(only if overclock)

I am only a hobbyist, I grew up with FORTRAN 4, in the early 70s! I have had occasion to use JavaScript, Python, VBA but I am not a professional programmer. I would classify myself as a tinkerer. I learn from example. That being said, I am enclosing the program that resides on both WIO #1 and WIO #2. I have no need to be overclocking. I am sure my code is not efficient.
Here is the code that resides on BOTH WIOs:
//tft.setRotation®; This code rotates the screen. 0=0 , 1=90, 2=180, 3=270
// tft.setFreeFont(FSSBO24)
// Where the letters mean:
// F = Free font
// M = Mono
// SS = Sans Serif (double S to distinguish is form serif fonts)
// S = Serif
// B = Bold
// O = Oblique (letter O not zero)
// I = Italic
// # = point size, either 9, 12, 18 or 24

#include <Wire.h>
#include"Free_Fonts.h" //include the header file
#include <SPI.h>
#include <Seeed_FS.h>
#define DEV SD
#include “SD/Seeed_SD.h”

//#include “SFUD/Seeed_SFUD.h”

#define SERIAL Serial
File root;


TFT_eSPI tft;

int state = 0;
int xpos = 6; //xpos = 6;
int ypos = 2; // ypos = 2;
int xPrtArea = xpos; // xpos currently 6
int yPrtArea = ypos+27;
int borderColor = TFT_WHITE;
int menuDelay = 2000; //Set Delay for Menu/Button presses
int i5sD = 0;
char* fileList[10]; //MAX of 10 members/Filenames
String fPick;
int iCount = 0;

void showBorders() {
//bC == border Color
tft.drawLine(0,0,320,0,borderColor); //drawing a black line from (0,0) to (0,320) Top Horizantal
tft.drawLine(0,238,320,238,borderColor); //Bottom horizantal line
tft.drawLine(0,0,0,240,borderColor); //Left Vertical Barely visible must tilt screen to see all the way to the left
tft.drawLine(2,0,2,240,borderColor); //Left Hand Vertical line
tft.drawLine(318,0,318,240,borderColor); //Vertical line Right hand side, cannot push further right to 320

void setup() {
//Initialise SD card
while (1);
showBorders(); //Show Border and Heading
//tft.setFreeFont(FSSBO24); //FS12 or FS9 == FreeFont Serif 9pt
//Define Header Text

tft.setFreeFont(FS12); //12pt Text for Header
tft.setCursor(xpos, ypos); //For Header Text
tft.drawString(“Header Text here”, xpos, ypos, GFXFF);

pinMode(WIO_5S_UP, INPUT_PULLUP); //Cursor Up
pinMode(WIO_5S_DOWN, INPUT_PULLUP); //Cursor Down
pinMode(WIO_5S_LEFT, INPUT_PULLUP); //Up Directory/ Folder
pinMode(WIO_5S_RIGHT, INPUT_PULLUP); //Down Directory/ Floder
pinMode(WIO_5S_PRESS, INPUT_PULLUP); //Select File

SERIAL.print(“Initializing SD card…”);

while (!DEV.begin(104000000UL)) {
SERIAL.println(“Card Mount Failed”);
while (!DEV.begin(SDCARD_SS_PIN,SDCARD_SPI,4000000UL)) {
SERIAL.println(“Card Mount Failed”);
SERIAL.println(“initialization done.”);

//listDir(DEV, "/", 0);




  • Visible Rectangle Boundary

  • (0,0) to (0,320) TOP Line

  • (0,238) to (320,238) BOTTOM Line

  • (2,0) to (2,240) LEFT Vertical Line

  • (318,0) to (318,240) RIGHT Vertical Line


  • (0,25) to (315,25) 25 pixels from Top

  • HEADER TEXT 12pt fits between TOP two HORIZANTAL Lines


  • BODY TEXT: 9pt

  • BODY TEXT Position: (2,29) (2,(2+27))
    void loop() {
    // defined above: xpos = 6; ypos = 2;
    if (digitalRead(WIO_KEY_A) == LOW) {
    state = 1;
    //showBorders(TFT_WHITE); //See setup
    playTone(1915, 500);
    tft.setFreeFont(FS12); //12pt Text for Header
    tft.setCursor(xpos, ypos); //For Header Text
    tft.drawString("Listing directory: ", xpos, ypos, GFXFF);

    tft.drawString(“WIO_KEY_A-Pressed”, xPrtArea, yPrtArea, GFXFF);

    tft.drawString(" ", xPrtArea, yPrtArea, GFXFF);
    tft.setCursor(xPrtArea, yPrtArea);
    listDir(DEV, “/”, 3);
    else if (digitalRead(WIO_KEY_B) == LOW) {
    playTone(1700, 500);
    tft.drawString("WIO_KEY_B-Pressed ", xpos, ypos+27, GFXFF);
    // “123456789A123456789B123456789C1”
    else if (digitalRead(WIO_KEY_C) == LOW) {
    state = 3;
    playTone(1519, 500);
    tft.setFreeFont(FS9); //31 Characters fit between the 2 vertical boundary lines
    tft.drawString("WIO_KEY_C-Pressed ", xpos, ypos+27, GFXFF);
    // “123456789A123456789B123456789C1”

    }else if (digitalRead(WIO_5S_UP) == LOW) {
    state = 4;
    playTone(1432, 500);

    tft.setFreeFont(FS12); //12pt Text for Header
    tft.setCursor(xpos, ypos); //For Header Text
    tft.drawString(“WIO_5S_UP: Pick File”, xpos, ypos, GFXFF);
    // “123456789A123456789B123456789C1”
    i5sD = i5sD + 1; //how many times the UP is pressed
    // == how many times to move file pick cursor DOWN
    if (i5sD < 0) { //Keep cursor between “1” and the total number of Files
    i5sD = 1;
    if (i5sD > iCount) { // set to last file
    i5sD = iCount;
    //iCount = iCount + 1;

    //tft.drawString("WIO_5S_DWN-Pressed ", xpos, ypos+27, GFXFF);
    // “123456789A123456789B123456789C1”
    //Start Cursor at default starting position: xPrtArea = xpos; 6 AND yPrtArea = ypos+27;
    xPrtArea = xpos; // ==6
    yPrtArea = ypos+27; //Start at top of printable area

    int i = 251; //len of color
    tft.writeColor(TFT_BLACK, i);

    delay(menuDelay); //

    tft.writeColor(TFT_GREEN, i);

    } //End press UP

    else if (digitalRead(WIO_5S_DOWN) == LOW) { //****** DOWN
    state = 5;
    i5sD = i5sD + 1; //how many times the DOWN is pressed
    // == how many times to move file pick cursor DOWN
    if (i5sD < 0) { //Keep cursor between “1” and the total number of Files
    i5sD = 1;
    if (i5sD > iCount) { // set to last file
    i5sD = iCount;
    //tft.drawLine(0,238,320,238,borderColor); //Bottom horizantal line
    tft.drawString("i5sD:= " + String(i5sD), 2, 228, GFXFF);
    //iCount = iCount + 1;

    tft.setFreeFont(FS12); //12pt Text for Header
    tft.setCursor(xpos, ypos); //For Header Text
    tft.drawString(“WIO_5S_DWN: Pick File”, xpos, ypos, GFXFF);
    playTone(1275, 500);
    //tft.drawString("WIO_5S_DWN-Pressed ", xpos, ypos+27, GFXFF);
    // “123456789A123456789B123456789C1”
    //Start Cursor at default starting position: xPrtArea = xpos; 6 AND yPrtArea = ypos+27;
    xPrtArea = xpos; // ==6
    yPrtArea = ypos+27; //Start at top of printable area

    int i = 251; //len of color
    tft.writeColor(TFT_BLACK, i);

    delay(menuDelay); //

    tft.writeColor(TFT_GREEN, i);
    else if (digitalRead(WIO_5S_LEFT) == LOW) {
    state = 6;
    playTone(1136, 500);
    tft.drawString("WIO_5S_L-Pressed ", xpos, ypos+27, GFXFF);
    // “123456789A123456789B123456789C1”
    else if (digitalRead(WIO_5S_RIGHT) == LOW) {
    state = 7;
    playTone(1014, 500);
    tft.drawString("WIO_5S_R-Pressed ", xpos, ypos+27, GFXFF);
    // “123456789A123456789B123456789C1”
    else if (digitalRead(WIO_5S_PRESS) == LOW) { //Selection Button
    state = 8;
    playTone(956, 500);
    tft.drawString("WIO_5S_B-Pressed ", xpos, ypos+27, GFXFF);
    // “123456789A123456789B123456789C1”
    String fPick = fileList[i5sD]; //Store file name chosen

void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(BUZZER_PIN, LOW);
} //End PlayTone

void listDir(fs::FS& fs, const char* dirname, uint8_t levels) {
//Main Header is at Location (6,2)
//Set Cursor within the printable area

String myDir;   //Note: File name includes Directory name
String myFile;
//stringOne.trim();Remove white space
SERIAL.print("Listing directory: ");

//             "123456789A123456789B123456789C1"
//tft.drawString("                               ", xPrtArea, yPrtArea, GFXFF);
//tft.drawString("Dir:=" + String(dirname), xPrtArea, yPrtArea, GFXFF); 

File root = fs.open(dirname);
if (!root) {
    SERIAL.println("Failed to open directory");
    tft.println("Failed to open directory"); 
    //tft.drawString("Failed to open directory", xPrtArea, yPrtArea, GFXFF);    
if (!root.isDirectory()) {
    SERIAL.println("Not a directory");

File file = root.openNextFile();
while (file) {
    if (file.isDirectory()) {
        SERIAL.print("  DIR : ");
        myDir = file.name();  //   myDir Filename includes DIR so no need to print this out

        if (levels) {
            listDir(fs, file.name(), levels - 1);

    } else {
        SERIAL.print("  FILE: ");
        SERIAL.print("  SIZE: ");
        iCount++;       //iCount = iCount + 1;   //Count each found File
        myFile = file.name();                     //   myFile
        //String sFileName = String(file.name());
        char* temp = file.name();   //sFileName;
        String sFileName = String(temp);   //char* fileList[10];  //MAX of 10 members or Filenames
        sFileName.toCharArray(temp, sFileName.length()+1); //inString, converted it back to char array for it to be stored in char* plantList
        fileList[iCount] = strdup(temp);
        //could free up memory for each
        // free(fileList[iCount]);

        //myFile = myFile.trim();  does not work
        //Remove "/System Volume Information"
        //if ( sFileName.substring(1,6) == "/System") {          // Volume Information") {
        //if(sFileName.indexOf("/System") >= 0) {                  //This works
        if (sFileName.indexOf("/System") >= 0) { 
            //Skip the volume information

else {
tft.drawString(" ", xPrtArea, yPrtArea, GFXFF);
tft.drawString(“F:=” + sFileName, xPrtArea, yPrtArea, GFXFF);
yPrtArea = yPrtArea+21;

    file = root.openNextFile();

} //End listDir


Yes, it doesn’t seem to take that much work to produce this much heat, so this example runs fine on Wio Terminal #2 but #1 not good?

The program is on both and they run. I just cannot make any updates on WIO #1, which gets immediately hot when I turn it on. I do not have any more Raspberry Pi heat sinks to put on the chip either.

I am new to WIO Terminal. However I have been following this tutorial

to download my trained model onto WIO Terminal board. However compiling and uploading the sketch the WIO Terminal board gets disconnected from the system and Arduino IDE says "Board not found COMX port).

On checking the Device Manager, I found that the board is no longer being recognized
Unknown USB Device (Device Descriptor Request Failed).

On resetting the board by pressing down the side button twice, the board gets recognized again.

Trying to recompile the sketch and uploading results in the same error.

Stuck in a loop.

Tried the solutions suggested earlier in this post. However no hope as such.

Any help would be appreciated.