- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Linux 中,USB 串口转换器通常显示为/dev 目录中的一个节点:/dev/ttyUSBx。
要使用串口转换器首先要打开端口,然后进行配置等等。
port = open("/dev/ttyUSB0", O_RDWR);
如果您想使用串行设备(I2C 或 SPI),ftdi 提供的设备(如 FT4232 或 FT232h)可用作普通 UART 端口或 i2c/spi。
对于 i2c/spi 操作,您必须使用单独的驱动程序 - 我使用开源 libmpsse .这是一个您必须安装的库,因此它将与标准 FTDI 驱动程序并行工作,因为它是在该库之上构建的。
所以现在,如果我想打开一个端口作为 UART,我可以使用正常的打开功能(如上所述)。如果我想连接一个 i2c/spi 设备,我使用 libmpsse 打开功能,它根据 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)
现在的问题 - 我可以使用设备 vid/pid 而不是它的开发模式路径将端口打开为 UART 吗?这一切都归结为 ftdi 函数调用,但我似乎找不到示例。
为什么我需要这样做?我不想知道节点路径。我应该能够仅使用 VID/PID 和接口(interface)编号 - 它更加灵活。
感谢任何帮助!
最佳答案
我最终找到了解决方案,所以我发布给可能需要它的任何人。
您可以使用 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 open\n");
if(ftdi_set_baudrate(&ftdic, 9600) < 0)
{
printf("baudrate incorrect\n");
}
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 failed\n");
}
这样您似乎不必等待数据可用,因此您不必处理阻塞端口。
关于c++ - 使用设备 VID/PID 打开 USB 串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31314977/
当运行这段代码时,它会以默认大小打开窗口: View [ text "window open with default size" ] 如果 a 明确给出一个大小,它将打开一个具有该大小的窗口
我无意中发现了这一点,只是想确保这不是 Rebol 设计中的一个小故障。我有以下代码,似乎成功捕获了 VID 环境中的所有程序错误。 view layout [ across l
我想重新设计REBOL2的VID中的模态对话框,比如alert, request/ok等,让它们更贴合其余部分的主题我的申请。我发现执行此操作的唯一方法是包含我自己的 request 函数的更改版本,
我正在寻找的是从内核模块中检查实时 USB 磁盘序列号的命令。 在内核中,lsusb 将不起作用。 TMI 条款:我正在为客户开发实时 USB 设备,这将是我们版权保护的当前部分。 最佳答案 您的程序
我想在上传时将 wmv 转换为 mp4、webm 和 ogv。有没有办法在代码隐藏中实现 miro 视频转换器或类似的东西? 我用的是ACT的AsyncUpload aspx 页面 fun
我有一个错误 test: line 16: syntax error near unexpected token `done' test: line 16: ` done
我正在编写一个 Ruby gem,它将通过 USB 通过串行方式与设备通信。我需要处理几种不同的通信格式,格式是使用 PID/VID 值的组合确定的。 我希望 gem 是跨平台的 (Linux/Mac
如果我插入一个设备,比如 /dev/ttyUSB0,我想根据它的 VID:PID(通过 lsusb 找到)得到数字 0 ),我怎么能在 C++ Linux 中做到这一点?我有这段代码可以找到一台打印机
我正在创建一个基于 AVR 微 Controller 的硬件 MIDI 设备。 我已经能够成功指定使用 MIDI USB 类,因此我的设备无需安装任何其他驱动程序即可运行。我也设置了它,因此我的设备具
请考虑这个简单的 rebol2 代码来说明我的问题: REBOL [] a: make face [ offset: 0x0 color: yellow size: 20x20
2015 年 ImageNet 大规模视觉识别挑战赛 (ILSVRC2015) 使用新数据集引入了一项称为视频对象检测 (VID) 的任务。 所以我去 ILSVER2015 网站并尝试查找数据集。 h
正在探索 drupal 6.15, 我要做数据库迁移,普通数据库到 drupal 数据库, 什么是 drupal cms 中 node_revision 表中的 vid 字段, 我认为 vid 不是词
我正在学习linux内核和驱动程序,只是一个新手。我想编写一个“驱动程序”,它可以获取任何 USB 设备的 PID/VID,然后将这些数字打印到内核日志中。 据我所知,USB HCI 会从连接的 US
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve
在 Linux 中,USB 串口转换器通常显示为/dev 目录中的一个节点:/dev/ttyUSBx。 要使用串口转换器首先要打开端口,然后进行配置等等。 port = open("/dev/ttyU
我正在 Linux 中进行智能卡项目,我正在使用 Alcor 9563 智能卡读卡器,我使用 ccid/pcsc ,但 Linux 无法识别读卡器: 如何在 Linux 中使用 vid/pid 添加此
当使用 SetupDiGetDeviceInterfaceDetail 检索与连接的 USB 设备相关的 SP_DEVICE_INTERFACE_DETAIL_DATA 时,将返回一个名为 Devic
我想向由 VID 和 PID 标识的特定 USB 设备发送弹出命令。我可以通过使用 SetupDiEnumDeviceInfo() 和 SetupDiGetDeviceRegistryProperty
在 Windows 设备管理器中,我可以查找连接到系统的每个 USB 设备的 VID 和 PID。使用此信息查找设备供应商的好方法是什么? 我的动机是我想向我的用户部署一个应用程序,该应用程序将识别连
我正在开发一个社区视频网站(Wordpress 主干网),该网站将允许用户简单地提交一个链接并拥有该网站上的所有信息。我的主要部分正在工作(过滤视频 ID 并将值植入 Javascript 函数中以获
我是一名优秀的程序员,十分优秀!