This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Question about the USB CDC ACM Example

Hi, before buying the PCA10056 kit, I have some questions about the USB CDC ACM example.

  1. I'm new to the USB CDC ACM.

At the Infocenter, it says that

This example shows how to use the CDC ACM USB class, commonly known as Virtual COM port.
The port can be opened and closed just like a traditional serial port.
Using a terminal emulator, for example putty,
send test data from the host computer to the development kit. LED 3 will blink.

COM

Does this mean that the nRF52840 can transfer or receive UART data without adding extra UART-USB ICs like FT232R?

If I use the USB CDC ACM example, can I read or write after I open the port from PuTTY just like using the UART example?

  1. When reading the sdk_config.h file, I couldn't find what pins are used for this example.

In the case of nRF52832-QFAA, the NFC1 and 2 pins were fixed to pin 11 and 12.

What about the nRF52840 and what pins are used for this example?

Is it the UART0 module used for the example, since it is enabled in the header file, and use pin 13 and 14?

Also, can I use any pins, except the power pins, to configure it as an USB related pins using PPI?

USB

  1. Currently, I believe this example uses the USB connector that is connected the J-Link MCU, the Atmel MCU.

However, when creating a custom PCB which is related to Li-PO USB charging such as the BQ25010, I won't populate the J-Link MCU.

D+-

In this case, how should I configure my schematic wirings to connect the nRF52840's pins directly to the USB connector (D+/D-) when supplying 3.3 volts to the nRF52840?

  1. If I want to send a file, a 16KB mp3 file for instance, from the desktop to the nRF52840 MCU and write that data to the flash memory, should I use the CDC ACM example, or something else?

-Best Regards, MANGO

  • Torbjørn,

    I was eventually able to get it to enumerate as a com port but with an error.
    Seemingly changing the APP_USBD_PID to 0x520D the device would allow a removable drive to show up, with no COM port. 
    But with APP_USBD_PID 0x520F it would enumerate a COM port with error: "This device cannot start. (Code 10)" and a secondary 'Other device': nRF52 USB MSC Demo that does not mount as a drive. Photo attached.

    Maybe that's a clue, but I fail to understand how the Product ID would change this behaviour unless the underlying drivers are changing this behaviour. 

    Thank you for the input, looking forward to hearing back from a developer,
    Jeff

  • Hi Jeff

    Sorry for the slow response, I was out in vacation for the last couple of weeks. 

    I tried adding the MSC class to the CDC example (rather than the opposite), but I still have similar issues. I will ask the developer to have a look at my code and see if he can spot the problem, and get back to you.  

    Best regards
    Torbjørn

  • Hi again

    Apparently the problem with my example was a conflict with the interfaces. By changing the interface assigned to the MSC class from 0 to 2 I was able to get it to work:

    DZ122153_190305_usbd_cdc_acm.zip

    Can you please give my example a try and see if it enumerates successfully both the comport and the MSC drives?

    There is a local git repo in the zip, so you can see the changes I have made from the original example. 

    Best regards
    Torbjørn

  • Torbjørn,

    Your thorough response is well worth the wait! :) 

    I was able to run the project you provided. It seems to show up as a COM port and USB MSC as expected. However, I had issues actually trying to use the file storage part of the application. The drive successfully mounted but I wasn't able to write files or open it the drive. 

    It may have been an issue on my side but, when I tried to implement the interface change you listed on my project previously posted, I came across the same results.

    I would be very curious if that portion works on your end.

    Thank you for your extended help,
    Jeff

  • Hi Jeff

    Thanks for the patience and the kind words ;)

    To save some time I didn't copy in all the fatfs functionality from the MSC example when I set up the project. I only copied the basic USB configuration and setup. This is probably the reason why you can't properly use the drives. 

    If you compare the main.c file to that of the usbd_msc example you will see that it runs some fatfs initialization code before the USB is initialized:

    if (fatfs_init())
    {
        fatfs_ls();
        fatfs_file_create();
    }

    Also, there are various function triggered by button presses for doing things like creating new files or listing the existing ones. 

    Please try to copy in this code from the example and see if it works as expected. If you are having issues with it just let me know, and I will take a look myself. 

    Best regards
    Torbjørn

Related