1.. zephyr:code-sample:: usb-cdc-acm 2 :name: USB CDC-ACM 3 :relevant-api: usbd_api _usb_device_core_api uart_interface 4 5 Use USB CDC-ACM driver to implement a serial port echo. 6 7Overview 8******** 9 10This sample app demonstrates use of a USB Communication Device Class (CDC) 11Abstract Control Model (ACM) driver provided by the Zephyr project. 12Received data from the serial port is echoed back to the same port 13provided by this driver. 14This sample can be found under :zephyr_file:`samples/subsys/usb/cdc_acm` in the 15Zephyr project tree. 16 17Requirements 18************ 19 20This project requires an USB device driver, which is available for multiple 21boards supported in Zephyr. 22 23Building and Running 24******************** 25 26Reel Board 27=========== 28 29To see the console output of the app, open a serial port emulator and 30attach it to the USB to TTL Serial cable. Build and flash the project: 31 32.. zephyr-app-commands:: 33 :zephyr-app: samples/subsys/usb/cdc_acm 34 :board: reel_board 35 :goals: flash 36 :compact: 37 38Running 39======= 40 41Plug the board into a host device, for example, a PC running Linux. 42The board will be detected as shown by the Linux dmesg command: 43 44.. code-block:: console 45 46 usb 9-1: new full-speed USB device number 112 using uhci_hcd 47 usb 9-1: New USB device found, idVendor=8086, idProduct=f8a1 48 usb 9-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 49 usb 9-1: Product: CDC-ACM 50 usb 9-1: Manufacturer: Intel 51 usb 9-1: SerialNumber: 00.01 52 cdc_acm 9-1:1.0: ttyACM1: USB ACM device 53 54The app prints on serial output (UART1), used for the console: 55 56.. code-block:: console 57 58 Wait for DTR 59 60Open a serial port emulator, for example minicom 61and attach it to detected CDC ACM device: 62 63.. code-block:: console 64 65 minicom --device /dev/ttyACM1 66 67The app should respond on serial output with: 68 69.. code-block:: console 70 71 DTR set, start test 72 Baudrate detected: 115200 73 74And on ttyACM device, provided by zephyr USB device stack: 75 76.. code-block:: console 77 78 Send characters to the UART device 79 Characters read: 80 81The characters entered in serial port emulator will be echoed back. 82 83Troubleshooting 84=============== 85 86If the ModemManager runs on your operating system, it will try 87to access the CDC ACM device and maybe you can see several characters 88including "AT" on the terminal attached to the CDC ACM device. 89You can add or extend the udev rule for your board to inform 90ModemManager to skip the CDC ACM device. 91For this example, it would look like this: 92 93.. code-block:: none 94 95 ATTRS{idVendor}=="8086" ATTRS{idProduct}=="f8a1", ENV{ID_MM_DEVICE_IGNORE}="1" 96 97You can use 98``/lib/udev/rules.d/77-mm-usb-device-blacklist.rules`` as reference. 99