Windows 7: COM Port for Model 01 not showing up

My Arduino doesn’t show the keyboard in the Tools->Ports menu. https://i.imgur.com/hySfzZn.png
COM1 and COM3 are obviously wrong.

I’m on Windows7. I did install usb drivers during the arduino installation. Restarted the pc. Tried 3 different usb ports. Tried running Arduino in admin mode. No luck so far.

The keyboard is working though, I wrote this text with it.

Any help would be deeply appreciated.

Edit: also, if it helps anyhing: Windows failed installing the keyboard driver using the windows update mechanism. The keyboard shows up as “Other devices” in the Device Manager. Not sure if that’s why fails.

When you unplug the keyboard, do the “Port” menu’s entries change?

What version of the Arduino IDE are you using?

I don’t believe it should be the case, but there may be an obnoxious step where you have to ‘register’ our serial device to use the correct serial driver, because Windows.

http://zadig.akeo.ie/ is a tool I have used in the past for similar sorts of problems.

I’m using Arduino 1.8.5.

I tried unplugging the keyboard, the COM entries don’t change.

Your tool did install some kind of usb driver for the keyboard, and now it’s registered under “universal serial bus devices” instead of “other devices” in the device manager, however, it did not solve the problem.

I’ll try fixing this tomorrow.

So I’ve made a little progress. Using the Zadig tool that Jesse suggested, I managed to install the proper driver. The trick was to choose the right one. There are 4 different drivers available. Previously I chose the one it defaulted to, “WinUSB”. That didn’t work. Then I tried “USB Serial (CDC)”, and now the keyboard is showing up as “COM3 (Keyboardio Model 01)” in Arduino’s Tools->Port menu (and in the device manager too).

Trying to upload the firmware (holding down the prog key) fails though.

Sketch uses 18152 bytes (63%) of program storage space. Maximum is 28672 bytes.
Global variables use 1659 bytes (64%) of dynamic memory, leaving 901 bytes for local variables. Maximum is 2560 bytes.
Forcing reset using 1200bps open/close on port COM3
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
PORTS {COM1, COM3, } / {COM1, COM3, } => {}
Uploading using selected port: COM3
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -V -patmega32u4 -cavr109 -PCOM3 -b57600 -D -Uflash:w:C:\Users\UTC-BN~1\AppData\Local\Temp\arduino_build_634134/Model01-Firmware.ino.hex:i

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch

    System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

    Using Port                    : COM3
    Using Programmer              : avr109
    Overriding Baud Rate          : 57600

avrdude: ser_open(): can’t open device “\.\COM3”: The system cannot find the file specified.

avrdude done. Thank you.

Problem uploading to board. See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.

Following the troubleshooting link, there might have been potential for some help once, but it leads to a dead link (that “RunOnce” thing, whatever it is).

Edit: that somehow leads me to believe that it’s still a driver issue.

Edit2: I’ve gone through pretty much every google search result and the suggestion is always the same: “make sure you have the right board selected in arduino. make sure you have the right port selected in arduino (check your device manager for the COM number)”.

There is also this guy who says:

I had to physically reset my MEGA board before it would take the compile. My error was…
avrdude: ser_open(): can’t open device
and after I reset the code, it took it.

Would that make any sense for the Model01?

Edit3: don’t know if it’s any help, but here’s the debug info on the COM3 Model01:

Availability  Binary  Capabilities  CapabilityDescriptions  Caption                         ConfigManagerErrorCode  ConfigManagerUserConfig  CreationClassName  Description              DeviceID  ErrorCleared  ErrorDescription  InstallDate  LastErrorCode  MaxBaudRate  MaximumInputBufferSize  MaximumOutputBufferSize  MaxNumberControlled  Name                            OSAutoDiscovered  PNPDeviceID                                   PowerManagementCapabilities  PowerManagementSupported  ProtocolSupported  ProviderType  SettableBaudRate  SettableDataBits  SettableFlowControl  SettableParity  SettableParityCheck  SettableRLSD  SettableStopBits  Status  StatusInfo  Supports16BitMode  SupportsDTRDSR  SupportsElapsedTimeouts  SupportsIntTimeouts  SupportsParityCheck  SupportsRLSD  SupportsRTSCTS  SupportsSpecialCharacters  SupportsXOnXOff  SupportsXOnXOffSet  SystemCreationClassName  SystemName  TimeOfLastReset  
2                                                           Kommunikationsanschluss (COM1)  0                       FALSE                    Win32_SerialPort   Kommunikationsanschluss  COM1                                                                                                                                                     Kommunikationsanschluss (COM1)  TRUE              ACPI\PNP0501\0                                {1}                          FALSE                                                                                                                                                                                    OK                                                                                                                                                                                                                      Win32_ComputerSystem     bla                   
2             TRUE                                          Model 01 (Interface 0) (COM3)   0                       FALSE                    Win32_SerialPort   Model 01 (Interface 0)   COM3                                                                  115200       0                       0                                             Model 01 (Interface 0) (COM3)   TRUE              USB\VID_1209&PID_2301&MI_00\7&BC4F96A&0&0000  {1}                          FALSE                                        Modem Device  TRUE              TRUE              TRUE                 TRUE            TRUE                 TRUE          TRUE              OK      3           FALSE              TRUE            TRUE                     TRUE                 TRUE                 TRUE          FALSE           FALSE                      FALSE            FALSE               Win32_ComputerSystem    bla

Edit4: Arduino does seem to react to the keyboard when I upload something though. If I press and hold prog while uploading the hex file, it says

avrdude: ser_open(): can’t open device “\.\COM3”: The system cannot find the file specified.

If I don’t press prog however, it says

avrdude: ser_open(): can’t set com-state for “\.\COM3”

So clearly, there is something going on between the two.

I’m having this problem on both my desktop pc and my laptop with both computers running Windows7 64bit. I wonder how many people will encounter this problem when they try to flash their firmware under the same circumstances. The main problem seems to be that Windows can’t install a driver for the Model01 out of the box and the user having to fall back to methods like manual driver installation.

There is a significant lack of support for Windows in all of the guides and Readme.mds.

Running make flash gives me

C:/Users/droid/AppData/Local/Arduino15//packages/keyboardio/hardware/avr/1.19.0/libraries/Kaleidoscope/bin//kaleidoscope-builder: line 134: /usr/local/arduino/arduino-builder: No such file or directory

Has this been tested on Windows yet? If anybody had success flashing the firmware on Windows, please come forward.

1 Like

I use Windows for flashing, but really what I do is use the Linux build tools (through WSL, the Windows Subsystem for Linux) and then open the IDE only to do the flash part (WSL can’t see USB or COM devices). Maybe this solution is helpful for some, if you have Linux familiarity and a Windows 10 machine.

Yes. I have tested flashing on Windows. (I can’t remember off the top of my head if I tested Win 7 in the last round, but I definitely tested Win 8 and Win 10.)

I can (and will) install Windows 7 on a test machine in the next day or two if this hasn’t been sorted out by then.

What other ways are there to flash the firmware hex file on windows? Other than using the Arduino IDE/avrdude or Keyboardio’s Makefile, both of which don’t work for me. It’s not so easy beacuse the flashing software has to be configured to work with the Keyboardio keyboard, and there’s no documentation on how to do that afaik.

I tried going down the linux in a virtualbox route but with no luck (see that firmware in ubuntu thread).

Edit: is there any way I can make sure it’s not my keyboard or usb c cable that’s broken? Don’t have a spare cable atm unfortunately.

If you’re able to type, it’s not your USB cable. It’s also not likely to be your keyboard. There’s something up, either with Windows 7 in general or with your Windows 7 box in particular that’s causing the issue.

Both our Makefiles and the Arduino core use avrdude, which is the tool we’ve been using for everything. And until we get the com port issue sorted out, nothing else is likely to work :confused:

I’m building out a machine to run Windows 7. Given that it’s already 1 AM, my guess is I won’t have a working environment to debug it with until sometime tomorrow. Then, I should be able to get to the bottom of this relatively quickly.

Famous last words?

5 Likes

@rumpel: I’ve got good news and bad news. The good news is that I’ve built a Windows 7 box to replicate your issue and work to resolve it. The bad news is that I’ve replicated your issue. :wink:

It took about 8 reboots over about 6 hours, but now I’ve got something I can test on.

1 Like

I believe what we need to do is to put together an .inf file for Windows 7 (and possibly Windows 8) to associate our USB VID/PID with the right serial driver. This isn’t a game I’ve played before, but it’s something that looks doable.

EDIT: This is what we need to do: https://forum.arduino.cc/index.php?PHPSESSID=e42t2fhijp2ksh2q9vvr2v7po0&topic=415917.msg2869784#msg2869784

1 Like

Sorry. I think it takes an admin to break a subthread out into a new topic. I’ll do that now. I’m deep into trying to triage the Windows 7 issue @rumpel raised.

1 Like

I just went through the Windows 10 process, and COM3 was the only option the Arduino IDE gave me. When I pushed firmware at that port, it flashed the board.

Are you certain those ports were busy with other components?

1 Like

Absolutely sure. I also tried reassigning the keyboard to other unused COM ports, including port 1 (after freeing it up).

1 Like

@Jennigma - This is something Microsoft “fixed” in Windows, either in 8.1 or 10. For Windows 7, we need to provide a sort-of-custom serial port driver definition. I 100% confirm @rumpel’s issue and it’s near the top of my engineering priority list

@jesse I’m very glad to hear that! :slight_smile:

Excellent. I was surprised on Windows 10 to only see “COM3”, not the Keyboardio friendly name I’ve seen on the mac and linux installs I’ve done.

@rumpel, please know I meant absolutely no offense asking about the COM3 thing. Trust me, it took me a minute of reasoning my way through things to decide to pull the trigger on pushing firmware at an unlabeled port. I know that the firmware won’t push without hardware confirmation, and also more or less only set up this PC to test this process. (though it’s now also a good Steam gaming machine. :stuck_out_tongue: ) So I had nothing to lose, and every reason to assume it would be a harmless failure if it happened.

And believe me, I’ve gone through hours and days of fighting tech problems only to find out the issue was a bad cable, something not plugged in, or something not properly activated. I appreciate the people who tell me to check the plug and push the key. I hope you understand it was in that spirit that I asked!

At least part of that may be that Windows is using a generic driver.

1 Like