104 lines
2.8 KiB
ReStructuredText
104 lines
2.8 KiB
ReStructuredText
.. _usb_cdc-acm:
|
|
|
|
USB CDC ACM Sample Application
|
|
####################################
|
|
|
|
Overview
|
|
********
|
|
|
|
This sample app demonstrates use of a USB Communication Device Class (CDC)
|
|
Abstract Control Model (ACM) driver provided by the Zephyr project.
|
|
Received data from the serial port is echoed back to the same port
|
|
provided by this driver.
|
|
This sample can be found under :file:`samples/subsys/usb/cdc_acm` in the
|
|
Zephyr project tree.
|
|
|
|
Requirements
|
|
************
|
|
|
|
This project requires an USB device driver,
|
|
which is available for Intel Quark* SE SoC based boards like
|
|
:ref:`arduino_101`.
|
|
For the Arduino 101 board you need a USB to 3.3V TTL serial cable.
|
|
Connect it to UART1 as described in
|
|
:ref:`Connecting Serial Output section <arduino_101>`.
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
Arduino 101
|
|
===========
|
|
|
|
To see the console output of the app, open a serial port emulator and
|
|
attach it to the USB to TTL Serial cable. Build and flash the project:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/subsys/usb/cdc_acm
|
|
:board: arduino_101
|
|
:goals: flash
|
|
:compact:
|
|
|
|
See :ref:`Flashing the x86 Application Core section <arduino_101>` for details.
|
|
|
|
Running
|
|
=======
|
|
|
|
Plug the board into a host device, for example, a PC running Linux.
|
|
The board will be detected as shown by the Linux dmesg command:
|
|
|
|
.. code-block:: console
|
|
|
|
usb 9-1: new full-speed USB device number 112 using uhci_hcd
|
|
usb 9-1: New USB device found, idVendor=8086, idProduct=f8a1
|
|
usb 9-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
|
|
usb 9-1: Product: CDC-ACM
|
|
usb 9-1: Manufacturer: Intel
|
|
usb 9-1: SerialNumber: 00.01
|
|
cdc_acm 9-1:1.0: ttyACM1: USB ACM device
|
|
|
|
The app prints on serial output (UART1), used for the console:
|
|
|
|
.. code-block:: console
|
|
|
|
Wait for DTR
|
|
|
|
Open a serial port emulator, for example minicom
|
|
and attach it to detected CDC ACM device:
|
|
|
|
.. code-block:: console
|
|
|
|
minicom --device /dev/ttyACM1
|
|
|
|
The app should respond on serial output with:
|
|
|
|
.. code-block:: console
|
|
|
|
DTR set, start test
|
|
Baudrate detected: 115200
|
|
|
|
And on ttyACM device, provided by zephyr USB device stack:
|
|
|
|
.. code-block:: console
|
|
|
|
Send characters to the UART device
|
|
Characters read:
|
|
|
|
The characters entered in serial port emulator will be echoed back.
|
|
|
|
Troubleshooting
|
|
===============
|
|
|
|
If the ModemManager runs on your operating system, it will try
|
|
to access the CDC ACM device and maybe you can see several characters
|
|
including "AT" on the terminal attached to the CDC ACM device.
|
|
You can add or extend the udev rule for your Arduino 101 to inform
|
|
ModemManager to skip the CDC ACM device.
|
|
For this example, it would look like this:
|
|
|
|
.. code-block:: none
|
|
|
|
ATTRS{idVendor}=="8086" ATTRS{idProduct}=="f8a1", ENV{ID_MM_DEVICE_IGNORE}="1"
|
|
|
|
You can use
|
|
``/lib/udev/rules.d/77-mm-usb-device-blacklist.rules`` as reference.
|