No USB serial port with Daisy Patch in Windows

I got a Daisy Patch last week and I’m in the process of setting up my development environment. I’m using Windows 10 at the moment. I’ve got the toolchain setup and I’m able to compile projects and upload them to the Daisy. I’m trying to get the SD card working but I’m not having any luck.

I would like to debug the issue with serial prints, but unfortunately no COM ports show up in Windows when I connect the Daisy via USB. I’ve flashed the latest WinUSB driver to the Daisy.

How can I get the USB serial port working in Windows?

A bit of grepping led me to the GeneralFunctionTest example, which shows how to initialize the USB port:
hw.seed.usb_handle.Init(UsbHandle::FS_INTERNAL);

And this seems to be doing the right thing:
hw.seed.PrintLine("Ahoy-hoy");

Good enough for now. Although I wonder if I might not be better off using a USART directly. Does anyone know if any of the spare pins on the Daisy Patch are configured for serial?

Hi @miminashi

The built-in USB gets set up for printing by the normal hardware initialization. So you don’t need to do the hw.seed.usb_handle.Init(UsbHandle::FS_INTERNAL);

However, before you start printing you need to make a call to the StartLog function.

Since you’re using the Daisy Patch, that’ll be:

hw.seed.StartLog();

By default, this will start the log immediately, which can result in you missing messages if they’re happening right away (usually when debugging start-up stuff).

You can have the StartLog function wait until you’ve connected to the COM port by calling hw.seed.StartLog(true) instead.
This will stall your program execution until the connection has been made, and continue when it can successfully print over the COM port.

Once you’ve got that going, Windows should recognize the Daisy Seed Built-In and set it up automatically.

Hope that helps!

Thanks for the information, shensley. However, I absolutely need the hw.seed.usb_handle.Init() call, otherwise no COM ports are available in Windows. My main function is like this:

DaisyPatch hw;

int main(void)
{
    hw.Init();
    hw.seed.usb_handle.Init(UsbHandle::FS_INTERNAL);
    ...
}

Are you saying that DaisyPatch::Init() should initialize USB for printing? I see that DaisyPatch::Init() calls DaisySeed::Init() like you would expect, but in neither of those functions do I see anything pertaining to USB initialization. And I don’t see anything in System::Init() either.

Thanks for pointing out StartLog. I have a 5 second delay immediately after USB initialization to give me a chance to open the serial monitor, StartLog sounds much less fiddly.

However, I think I might still prefer a direct USART connection, so I can keep an always-on USB-serial adapter connected. Then there is no need to keep restarting the serial monitor each time I flash the Daisy. Are any of the available pins on the Daisy Patch configured for USART? Or are there instructions for how to do so?

Sorry for the confusion.

The StartLog is what calls the proper initialization for the USB port (it used to be in the DaisySeed Init a long time ago).

There are a number of pins available that can do simple UART (synchronous USART hasn’t been implemented yet).
The Daisy Seed datasheet lists the UART compatible pins.

The UART, and other comm. peripherals (i2c, SPI, etc.) all have a common initialization/use scheme of setting up a Config struct with your configuration details, and using that to initialize the peripheral.

Thanks for the datasheet. But it still leaves me wondering which pins are used for the peripherals on the Daisy Patch module, and which are free to be used for other things. I guess I could puzzle it out from the schematic, but it would be nice if there was a reference for the Patch.

It looks like all 40 pins are occupied on the Daisy Patch, so I guess direct UART is probably off the table without disabling some of the peripherals. I’ll just stick with USB serial. Thanks!

Oh! Sorry, I had forgotten that you were using the Daisy Patch.

Yeah, all of the pins are used up on that board.

Good idea for making a reference sheet for what pins are used on the breakout boards, though!
We’ll keep that in mind for newer boards (especially ones with free pins available).