使用设备VID/PID打开usb串口
opening a usb-serial port using the device VID/PID
在Linux中usb-serial转换器通常显示为/dev目录下的一个节点:/dev/ttyusbx
要使用串行转换器,首先要打开它的端口,然后配置它等等。
port = open("/dev/ttyUSB0", O_RDWR);
如果您想使用串行设备(I2C或SPI), ftdi提供的设备(如FT4232或FT232h)可以用作普通UART端口或I2C/SPI。
对于i2c/spi操作,您必须使用单独的驱动程序-我使用开源libmpsse。这是一个你必须安装的库,所以它将与标准FTDI驱动程序并行工作,因为它是在标准FTDI驱动程序的基础上构建的。
所以现在,如果我想打开一个端口作为UART,我使用正常的打开函数(如上所述)。如果我想连接i2c/spi设备,我使用libmpsse open函数,该函数基于VID/PID打开端口:
struct mpsse_context *Open(int vid, int pid, enum modes mode, int freq, int endianess, int interface, const char *description, const char *serial)
现在的问题-我可以打开端口作为UART通过使用设备vid/pid而不是路径到它的开发模式?这一切都归结为ftdi函数调用,但我似乎找不到一个例子。
为什么我要这样做?我不需要知道节点路径。我应该能够只使用VID/PID和接口编号-这是灵活得多。
任何帮助都是感激的!
我最终找到了一个解决方案,所以我在这里发布给任何可能需要这个的人。
可以通过ftdi_usb_open_xxx()
函数打开串口。对我来说,ftdi_usb_open_desc_index
做到了;索引是有用的,如果你有多个相同类型的芯片连接。
则配置ftdi_set_baudrate
和ftdi_set_line_property
。和读写ftdi_read_data()
/ftdi_write_data()
。
下面是一个简短的例子:
struct ftdi_context ftdic;
// ftdilib initialization
if(ftdi_init(&ftdic) == 0)
{
ftdi_set_interface(&ftdic, IFACE_C);//this is where my serial device is connected
if(ftdi_usb_open_desc_index(&ftdic, vid, pid, NULL, NULL, 0) == 0)
{
printf("serial port openn");
if(ftdi_set_baudrate(&ftdic, 9600) < 0)
{
printf("baudrate incorrectn");
}
if(ftdi_set_line_property(&ftdic, BITS_8, STOP_BIT_1, NONE)<0)
{
printf("line settings incorrect");
}
for(;;)
{
unsigned char c;
ftdi_read_data(&ftdic, &c, 1);
printf("0x%2x ",c);
}
}
else
{
printf("could not open serial port n");
}
}
else
{
printf("init failedn");
}
这样,您似乎不必等待数据可用,因此您将不必处理阻塞端口
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 问:如何使用C++中的按钮从窗口打开窗口
- 无法打开.txt文件
- 如何打开并写入一个名称取自C++中字符串的文件
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 错误-我无法在VS2019中打开新的Qt项目
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- SFML RenderWindow打开窗口需要很长时间
- 使用 VID、PID、+SN 查找 USB 端口号
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- C++程序打开时立即运行的代码
- 在 C/C++ 中打开驻留在 "/sys/" 下的文件时出错
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 如何使用CImg打开图像?
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- 调试编译的服务器在数据库打开时崩溃
- 打开NetLink插座将使用相同的PID,然后绑定和创建失败
- 使用设备VID/PID打开usb串口