通过自定义 C++ 应用程序从 uClinux 2.6.17 接口/访问基于 STM32 的板

问题描述

这可能是一个很难且非常具体的问题。我必须将 2 个嵌入式硬件连接在一起,并从我的自定义 C++ 应用程序交换数据。一块板基于 STM32,并使用 cdc-acm 串行 USB 和同时 USB hid 接口。另一个(主要单元)是基于 uClinux 2.6.17 的嵌入式设备。我看到并且可以在 PC Win10 下使用 STM32 板没有问题。

在我将基于 STM32 的开发板插入主机后到目前为止我得到了什么:

短信:


usb 1-1.2:找到新的 USB 设备,idvendor=16c0,idProduct=27d9

usb 1-1.2:新的 USB 设备字符串:Mfr=1、Product=2、SerialNumber=3

usb 1-1.2:产品:USB 按钮

usb 1-1.2:制造商:Sinftech ltd.

usb 1-1.2:序列号:1

usb 1-1.2:uevent

usb 1-1.2:usb_probe_device

usb 1-1.2:从 1 个选项中选择的配置 #1

usb 1-1.2: 添加 1-1.2:1.0 (config #1,interface 0)

usb 1-1.2:1.0: uevent

usb 1-1.2: 添加 1-1.2:1.1 (config #1,interface 1)

usb 1-1.2:1.1: uevent

usbhid 1-1.2:1.1:usb_probe_interface

usbhid 1-1.2:1.1:usb_probe_interface - 得到 id

generic-usb 0003:16C0:27D9.0003:输入、hiddev 和 hidraw 均未声明

usb 1-1.2: 添加 1-1.2:1.2 (config #1,interface 2)

usb 1-1.2:1.2: uevent

usb 1-1.2: 添加 1-1.2:1.3 (config #1,interface 3)

usb 1-1.2:1.3: uevent

drivers/usb/core/inode.c:创建文件“006”

集线器 1-1:1.0:状态 7 端口 2 chg 0000 evt 0004


$ cat /proc/bus/usb/devices

T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1

B: Alloc= 0/800 us ( 0%),#Int= 1,#Iso= 0

D:Ver= 2.00 Cls=09(hub) Sub=00 Prot=01 MxPS=64 #Cfgs= 1

P:vendor=1d6b ProdID=0002 Rev= 2.06

S:制造商=uClinux 2.6.29 ehci_hcd

S:产品=飞思卡尔片上 EHCI 主机控制器

S: SerialNumber=fsl-ehci.0

C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA

I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 2

D:Ver= 2.00 Cls=09(hub) Sub=00 Prot=00 MxPS=64 #Cfgs= 1

P:供应商=04cc ProdID=1520 Rev= 2.00

C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA

I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub

E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms

T: Bus=01 Lev=02 Prnt=04 Port=01 Cnt=01 Dev#= 6 Spd=12 MxCh= 0

D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1

P:vendor=16c0 ProdID=27d9 Rev= 1.00

S:制造商=Sinftech ltd.

S:产品=USB 按钮

S:序列号=1

C:* #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=100mA

A: FirstIf#= 2 IfCount= 2 Cls=02(comm.) Sub=02 Prot=00

I:* If#= 0 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=125ms

I:* If#= 2 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=00 Driver=(none)

E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=128ms

I:* If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)

E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms

E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms $

/proc/devices 没有新路径;

不过貌似usbhid驱动已经设置好了。

cdc-acm 也有问题。 我确实运行了 modprobe cdc-acm。 然后: modprobe g_serial use_acm=1 全部执行正常。 cat /rpoc/devices 现在给了我新的路径 第166话 正如主机的硬件开发人员告诉我我的 /dev/ 是静态的,所以我必须 现在创建我自己的路径: mknod /tmp/myusb c 166 0 一切都很好,但这不起作用: echo "123\r" > /tmp/myusb 错误 - /tmp/myusb 无法创建

dmesg 新信息: usbcore:注册新的接口驱动 cdc_acm cdc_acm:v0.26:用于 USB 调制解调器和 ISDN 适配器的 USB 抽象控制模型驱动程序 ** 825 ** u_serial.c 调用 tty_register_driver g_serial gadget:Gadget Serial v2.4 g_serial 小工具:g_serial 就绪 fsl-usb2-udc:绑定到驱动程序 g_serial $

我尝试类似: echo "123\r" > /dev/ACM0 或 ACM1,2,3 或 ttyUSB0 并且总是有错误 - 无法创建。

==============

我的第一个问题是 - 如何从我的 C++ 代码访问设备的 usbhid?

我的第二个问题是 - 如果有任何想法可能会在尝试获取串行路径时遗漏

连接到驱动程序。

抱歉格式化 - 到目前为止,我一直在努力处理粗体和从 linux 控制台复制的文本。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)