Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++用LIUSB总线发送数据(使用RS 232)_C++_Serial Communication_Libusb 1.0 - Fatal编程技术网

C++用LIUSB总线发送数据(使用RS 232)

C++用LIUSB总线发送数据(使用RS 232),c++,serial-communication,libusb-1.0,C++,Serial Communication,Libusb 1.0,我将199 151 2 3 3 7 63 173 174块发送到串行端口并获得成功。 但当我使用libusb时,什么都没有发生。没有错误或什么也没有发生 以下是如何将数据发送到串行RS 232: unsigned char data[9]; //filling data RS232_cputs(comportNumber, &data[0], 9); //success 下面是我如何将数据发送到usb的 //endPointAdressIn = 2; //timeout = 0; f

我将199 151 2 3 3 7 63 173 174块发送到串行端口并获得成功。 但当我使用libusb时,什么都没有发生。没有错误或什么也没有发生

以下是如何将数据发送到串行RS 232:

unsigned char data[9];
//filling data
RS232_cputs(comportNumber, &data[0], 9); //success
下面是我如何将数据发送到usb的

//endPointAdressIn = 2;
//timeout = 0;

for( int i = 0; i < 9; i++ )
{
     libusb_bulk_transfer(deviceHandle, endPointAdressIn , data, 3, &actual, timeout);
}
usb和串行RS之间有协议差异吗?如果我发送相同的数据串行和usb,我不能成功吗

我发现了类似的东西:

transferredData[0]=0x02;
transferredData[1]=0x01;

for( int i = 0; i < 9; i++ )
{
    transferredData[2] = data[i];

    return_value = libusb_bulk_transfer(deviceHandle, endPointAdressIn , transferredData, 3, &actual, 0);        
}
当他们把数据发送到串口时,一个字符一个字符地发送。当我发送序列号时,我也这样做。但他们将相同的数据发送到usb,并为每个数据添加两个字符: 对于199 151 2 3 7 63 173 174数据,他们正在发送 2 1 199 2 1 151 2 1 2 2 1 3 2 1 3 2 1 7 2 1 6 2 1 3 2 1 173 21174

是的,我也试过这样做:

transferredData[0]=0x02;
transferredData[1]=0x01;

for( int i = 0; i < 9; i++ )
{
    transferredData[2] = data[i];

    return_value = libusb_bulk_transfer(deviceHandle, endPointAdressIn , transferredData, 3, &actual, 0);        
}
我已经为我的每个数据成员添加了2,1,我这样发送它。而且什么也没发生。我的硬件没有错误或什么都没有


那么我做错了什么呢?

当您通过串行方式发送数据时,它会按原样发送到其他终端设备

当您通过libusb_bulk_传输发送到usb设备时,您的数据就是发送到连接到计算机的设备的数据。与usb设备的交互协议非常具体。设备对接收到的数据做什么取决于设备的固件。如果它是标准的,比如大容量存储、usb音频、HID设备或usb串行适配器,那么这些协议都在usb上的规范中


您不需要libusb,除非您必须直接与连接的设备交互,例如在嵌入式平台上或与不受支持的设备交互,或者您正在开发此类支持。操作系统通常通过特定的内核模块提供抽象层,以便与USB连接的输入、存储或串行设备进行交互。

当您通过串行设备发送数据时,数据将按原样发送到其他终端设备

当您通过libusb_bulk_传输发送到usb设备时,您的数据就是发送到连接到计算机的设备的数据。与usb设备的交互协议非常具体。设备对接收到的数据做什么取决于设备的固件。如果它是标准的,比如大容量存储、usb音频、HID设备或usb串行适配器,那么这些协议都在usb上的规范中

您不需要libusb,除非您必须直接与连接的设备交互,例如在嵌入式平台上或与不受支持的设备交互,或者您正在开发此类支持。操作系统通常通过特定的内核模块提供抽象层,以与USB连接的输入、存储或串行设备交互。

USB设备在其固件中实现USB设备类虚拟COM端口USB串行设备实现USB CDC ACM设备类。操作系统加载适合设备类的驱动程序/内核模块,即linux为虚拟com端口加载usb串行,源代码在

因此,内核模块在内部使用大容量传输,但其方式与USB到串行设备USB CDC ACM设备类的设备固件兼容

usb设备并不实现所有可能的功能设备类,有些设备类实现多个设备类,在这种情况下,可以通过usb接口在功能之间切换,即智能手机实现大容量存储、PTP、MTP、CDC RNDIS栓系等

当您尝试通过CDC ACM设备写入批量传输时,您需要1。自动加载的操作系统驱动程序/内核模块出现问题,至少要卸载它2。设备固件出现问题,因为批量传输必须符合设备固件

您可以选择设备上的端点并向其写入批量传输。但是,如果您不知道设备固件对批量传输的作用,那么这不是很合理,这就是标准化USB设备类存在的原因

或者简言之,在没有内核模块的情况下,或者至少在不了解设备固件的情况下,使用裸USB设备是非常困难的

USB是一个复杂的协议,RS-232/串行相对容易,因为USB非常多变,通用可以连接各种设备:相机、智能手机、打印机、大容量存储。。。这种可变性带来了复杂性

由于usb协议的复杂性,没有运行固件的微控制器的usb设备是不存在的

USB协议的一个很好的总结是,USB设备在其固件中实现USB设备类虚拟COM端口USB串行设备实现USB CDC ACM设备类。操作系统加载适合设备类的驱动程序/内核模块,即linux为虚拟com端口加载usb串行,源代码在

因此,内核模块在内部使用大容量传输,但其方式与USB到串行设备USB CDC ACM设备类的设备固件兼容

usb设备不能实现所有可能的功能 ice类,一些实现了多个设备类,在这种情况下,可以通过usb接口在功能之间切换,即智能手机实现大容量存储、PTP、MTP、CDC RNDIS栓系等

当您尝试通过CDC ACM设备写入批量传输时,您需要1。自动加载的操作系统驱动程序/内核模块出现问题,至少要卸载它2。设备固件出现问题,因为批量传输必须符合设备固件

您可以选择设备上的端点并向其写入批量传输。但是,如果您不知道设备固件对批量传输的作用,那么这不是很合理,这就是标准化USB设备类存在的原因

或者简言之,在没有内核模块的情况下,或者至少在不了解设备固件的情况下,使用裸USB设备是非常困难的

USB是一个复杂的协议,RS-232/串行相对容易,因为USB非常多变,通用可以连接各种设备:相机、智能手机、打印机、大容量存储。。。这种可变性带来了复杂性

由于usb协议的复杂性,没有运行固件的微控制器的usb设备是不存在的


有关USB协议的详细信息,请参见

Up!虽然当我们谈论串行协议时,我们通常也包括RS-422和485,后者不能说太容易…@ralf htp经过一些研究,多亏了你的启发,我才对usb串行通信有了更多的了解。过了一段时间,我联系了嵌入式程序员,他说我们需要升级固件。在那之后,我用同样的代码成功了。谢谢,先生。请继续了解详情!虽然当我们谈论串行协议时,我们通常也包括RS-422和485,后者不能说太容易…@ralf htp经过一些研究,多亏了你的启发,我才对usb串行通信有了更多的了解。过了一段时间,我联系了嵌入式程序员,他说我们需要升级固件。在那之后,我用同样的代码成功了。谢谢,先生。