.. zephyr:code-sample:: usb-cdc-acm :name: USB CDC-ACM :relevant-api: usbd_api _usb_device_core_api Use USB CDC-ACM driver to implement a serial port echo.
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 :zephyr_file:`samples/subsys/usb/cdc_acm` in the Zephyr project tree.
This project requires an USB device driver, which is available for multiple boards supported in Zephyr.
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: reel_board :goals: flash :compact:
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:
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:
Wait for DTR
Open a serial port emulator, for example minicom and attach it to detected CDC ACM device:
minicom --device /dev/ttyACM1
The app should respond on serial output with:
DTR set, start test
Baudrate detected: 115200
And on ttyACM device, provided by zephyr USB device stack:
Send characters to the UART device
Characters read:
The characters entered in serial port emulator will be echoed back.
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 board to inform ModemManager to skip the CDC ACM device. For this example, it would look like this:
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.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。