arduino / ArduinoCore-samd

Arduino Core for SAMD21 CPU
GNU Lesser General Public License v2.1
472 stars 720 forks source link

USB hot-plug doesn't work on MKRZero? #409

Open KenLagoni opened 5 years ago

KenLagoni commented 5 years ago

Is this a bug in the Arduino USB code or am I doing something wrong?

The problem can very easily be recreated in a simple hello world sketch

With the latest Arduino installed (1.8.9): void loop() { // put your main code here, to run repeatedly: delay(1000); Serial.println("Hello World!"); }

Then:

  1. Upload the sketch.
  2. Open the COM port (I use Putty) and see the "Hello World" text.
  3. Power the MKRZero from external source (+5V on Vin).
  4. Disconnect USB cable to PC and close Putty terminal.
  5. Reconnect USB and open COM port (Again I use putty).
  6. Verify that the "Hello World" text is received.
  7. Try sending data to the Arduino by typing in the putty window. Step. 7 will result in the serial program "crashing" with the error: "Unable to write to serial device".

I first saw this problem in some application code (C#) I was writing, but then traced it all the way back to this simple test.

The Arduino serial monitor doesn’t report any problem, but it is clear (if the Arduino is set to loop back received data) that the data is not sent.

The only way I found to get out of this problem, is to power the hardware OFF and then ON Again (which is a no go for my application).

Perhaps the USB code is missing some sort of re-init when hot-plugged?

I will try and see if I can work around this with USB.detach / attach or something... but it would be nice to get this looked at by some more skilled programmers.

nima2007 commented 4 years ago

I am also experiencing this with a battery plugged into the battery port. My problem is that USB HID emulation doesn't work when the USB cable is replugged :(