【问题标题】:Reinstate Virtual Com Port after using libftdi on FT232RL在 FT232RL 上使用 libftdi 后恢复虚拟 Com 端口
【发布时间】:2021-07-02 00:32:24
【问题描述】:

我正在尝试使用 libftdi 来切换 ft232rl 上的一些引脚,然后使用常规的虚拟 Com 端口 (/dev/ttyUSB0)。我有一个微控制器(LPC1114)连接到 FT232RL 进行编程。要使其进入 ISP 模式,必须将其复位并保持一条线为低电平,并且要在编程后执行代码,必须将其复位。我正在尝试使用 ft232 自动执行此操作。我已经让 libftdi 正常工作,并且可以正确切换引脚,但是一旦程序完成,VCP 就从 /dev 中消失了。即使使用 libftdi 示例程序,我也必须在物理上拔下并重新插入 USB 电缆,这完全违背了目的。

TL;DR:在 bitbang 模式下使用 libftdi 后,有没有办法在不拔掉电缆的情况下取回 /dev/ttyUSB0。

【问题讨论】:

  • 很想知道你是否弄明白了。您可以尝试使用来自另一个端口的引脚进行位敲击,以使 uart 端口不会掉线。另一个常见的做法是使用 dtr 或 cts,手动调整它们,而不是将其退出 uart 模式。

标签: linux serial-port microcontroller ftdi


【解决方案1】:

LibFTDI 似乎在后台使用 LibUSB。

您可以尝试使用 LibUSB 中的 libusb_attach_kernel_driver 函数来恢复 /dev/ttyUSBx 功能。

【讨论】:

    【解决方案2】:

    是的,使用 libftdi 后,可以使用 libusb 和 libusb_attach_kernel_driver 函数重新连接原始驱动程序。 见原回答:FTDI kernel driver after using libftdi

    
    #define DEVICE_VID 0x0403
    #define DEVICE_PID 0x6015
    
    int libftdireset() {
      libusb_context * context = NULL;
      libusb_device_handle * dev_handle = NULL;
      int rc = 0;
      rc = libusb_init( &context);
    
      dev_handle = libusb_open_device_with_vid_pid(context, DEVICE_VID, DEVICE_PID);
      /*Check if kenel driver attached*/
      if (libusb_kernel_driver_active(dev_handle, 0)) {
        rc = libusb_detach_kernel_driver(dev_handle, 0); // detach driver
      }
      libusb_reset_device(dev_handle);
      libusb_attach_kernel_driver(dev_handle, 0);
      libusb_close(dev_handle);
      libusb_exit(context);
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 2012-07-27
      • 1970-01-01
      • 2021-01-28
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多