簡體   English   中英

使用設備VID / PID打開USB串行端口

[英]opening a usb-serial port using the device VID/PID

在Linux中,USB串行轉換器通常在/ dev目錄:/ dev / ttyUSBx中顯示為一個節點。

要使用串行轉換器,第一步是打開端口,然后進行配置,依此類推。

port = open("/dev/ttyUSB0", O_RDWR);

如果要使用串行設備(I2C或SPI),則ftdi提供了可以用作普通UART端口或i2c / spi的設備(如FT4232或FT232h)。

對於i2c / spi操作,您必須使用單獨的驅動程序-我使用開源libmpsse 這是您必須安裝的庫,因此它基於此庫而與標准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)  

現在要問的問題-我可以使用設備vid / pid代替其開發模式的路徑來將端口作為UART打開嗎? 全部歸結為ftdi函數調用,但我似乎找不到一個示例。

為什么我需要這樣做? 我不想知道節點路徑。 我應該能夠只使用VID / PID和接口號-靈活得多。

任何幫助表示贊賞!

我最終找到了一個解決方案,所以我為可能需要此服務的任何人發布信息。

您可以使用ftdi_usb_open_xxx()函數之一打開串行端口。 對我來說, ftdi_usb_open_desc_index 如果您連接了多個相同類型的芯片,則index很有用。

然后,使用ftdi_set_baudrateftdi_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");
    }

這樣,您似乎不必等待數據可用,因此您不必處理阻塞端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM