libftdi1学习笔记 2 - 串口

目录

1. 设置波特率

2. 设置数据位/停止位/校验方式/断开类型

3. 发送数据

3.1 设置块大小

3.2 发送

4. 接收数据

4.1 设置块大小

4.2 接收

5. 设置延迟时间


打开ftdi USB设备后就可以配置串口参数并进行通信。FTDI设备默认是串口的模式。

1. 设置波特率

int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate)

参数说明:

  • ftdi - 上下文对象
  • baudrate - 串口的波特率

返回值说明:

  • 0 - 表示设置OK
  • -1 - 该波特率不支持
  • -2 - 设置波特率失败
  • -3 - USB设备无效

参考例程:

    ret = ftdi_set_baudrate(ftdi, 115200);
    if(ret < 0)
    {
        printf("Set Baudrate Fail: %d\n", ret);
        ftdi_usb_close(ftdi);
        ftdi_list_free(&devlist);
        ftdi_free(ftdi);
        return EXIT_FAILURE;
    }

2. 设置数据位/停止位/校验方式/断开类型

int ftdi_set_line_property2(struct ftdi_context *ftdi, enum ftdi_bits_type bits,
                                enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity,
                                enum ftdi_break_type break_type)

参数说明:

  • ftdi - 上下文对象
  • bits - 数据位大小
enum ftdi_bits_type { BITS_7=7, BITS_8=8 };
  • sbit - 停止位大小
enum ftdi_stopbits_type { STOP_BIT_1=0, STOP_BIT_15=1, STOP_BIT_2=2 };
  • parity - 校验方式
enum ftdi_parity_type { NONE=0, ODD=1, EVEN=2, MARK=3, SPACE=4 };
  • break_type - 断开类型
enum ftdi_break_type { BREAK_OFF=0, BREAK_ON=1 };

返回值说明:

  • 0 - 表示设置OK
  • -1 - 设置失败
  • -2 - USB设备无效

参考例程:

    ret = ftdi_set_line_property2(ftdi, BITS_8, STOP_BIT_1, NONE, BREAK_OFF);
    if(ret < 0)
    {
        printf("Set Line Property Fail: %d\n", ret);
        ftdi_usb_close(ftdi);
        ftdi_list_free(&devlist);
        ftdi_free(ftdi);
        return EXIT_FAILURE;
    }

3. 发送数据

3.1 设置块大小

设置发送数据时一次USB通讯的大小。

int ftdi_write_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize)

参数说明:

  • ftdi - 上下文对象
  • chunksize - 块大小,默认是4KB,这个值的范围为64 - 64KB,而且必须是64的整数倍。

可以通过函数ftdi_write_data_get_chunksize获取当前的设定。

int ftdi_write_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize)

3.2 发送

int ftdi_write_data(struct ftdi_context *ftdi, const unsigned char *buf, int size)

返回值说明:

  • -666 - USB设备无效
  • < 0 - 发送失败
  • > 0 - 成功发送的数据长度

参考例程:

    unsigned char wrData[] = "Serial Data\n";
    ret = ftdi_write_data(ftdi, wrData, sizeof(wrData));
    if(ret != sizeof(wrData))
    {
        printf("Write Data Fail: %d\n", ret);
        ftdi_usb_close(ftdi);
        ftdi_list_free(&devlist);
        ftdi_free(ftdi);
        return EXIT_FAILURE;
    }

4. 接收数据

4.1 设置块大小

功能类似发送数据时的设置块大小。

int ftdi_read_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize)

4.2 接收

int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size)

返回值说明:

  • -666 - USB设备无效
  • < 0 - 接收失败
  • > 0 - 成功接收到的数据长度

参考例程(把TxD和RxD短路,然后新增加#include <unistd.h>):

    ret = 0;
    unsigned char rdData[128];
    while(ret < sizeof(wrData))
    {
        usleep(1 * 1000);
        int num = ftdi_read_data(ftdi, rdData + ret, 128 - ret);
        if(num <= 0)
            break;
        ret += num;
    }
    rdData[ret + 1] = 0;
    printf("Read Data: %s\n", rdData);

运行结果:

libftdi-example$ sudo ./libftdi1-example 
version:1.5.0, 1.5
Number of FTDI devices found: 1
Manufacturer: FTDI, Description: FT4232H MiniModule, Serial: FT8NZV77

Open device OK: 0
Read Data: Serial Data

5. 设置延迟时间

延迟时间(latency timer)用于设置USB通讯的间隔时间,这个值越小,USB通讯越频繁,一般建议最小2ms。

int ftdi_set_latency_timer(struct ftdi_context *ftdi, unsigned char latency)

参数说明:

  • ftdi - 上下文对象
  • latency - 延迟时间,有效值范围1-255

返回值说明:

  • 0 - 设置成功
  • -1 - 延迟时间参数无效
  • -2 - 无法设置延迟时间
  • -3 - USB设备无效

可以通过ftdi_get_latency_timer获取当前的配置值。

参考例程:

    unsigned char latency;
    ftdi_get_latency_timer(ftdi, &latency);
    printf("Current Latency Setting: %d\n", latency);
    ftdi_set_latency_timer(ftdi, 1);
    ftdi_get_latency_timer(ftdi, &latency);
    printf("New Latency Setting: %d\n", latency);

运行结果:

libftdi-example$ sudo ./libftdi1-example 
version:1.5.0, 1.5
Number of FTDI devices found: 1
Manufacturer: FTDI, Description: FT4232H MiniModule, Serial: FT8NZV77

Open device OK: 0
Read Data: Serial Data

Current Latency Setting: 16
New Latency Setting: 1

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值