SSD_FUART流控使用参考


1. Fuart流控流程


1.1. HW连接


1.2. 参数说明

  • RTS

    Require To Send,发送请求,为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。

  • CTS

    Clear To Send,发送允许,为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。


1.3. 流控制方式

如果本端处理数据流(接收对方数据),将RTS置为低电平; 对方设备CTS脚是低电平,则可以发送数据。

如果本端不处理数据流(不接收对方数据),将RTS置为高电平; 对方设备CTS脚是高电平,则停止发送数据, 等待CTS的脚位变化。


1.4. 注意事项

  1. 确认pin脚配置Fuart

    kernel\arch\arm\boot\dts\infinity2m-ssc011a-s01a-padmux-display.dtsi :

    <PAD_FUART_RX PINMUX_FOR_FUART_MODE_1 MDRV_PUSE_FUART_RX>,  
    <PAD_FUART_TX PINMUX_FOR_FUART_MODE_1 MDRV_PUSE_FUART_TX>,  
    <PAD_FUART_CTS PINMUX_FOR_FUART_MODE_1 MDRV_PUSE_FUART_CTS>,  
    <PAD_FUART_RTS PINMUX_FOR_FUART_MODE_1 MDRV_PUSE_FUART_RTS>,
    

    kernel\arch\arm\boot\dts\infinity2m-ssc011a-s01a-padmux-display.dtsi :

    fuart: uart2@1F220400 {
        compatible = "sstar,uart";
        reg = <0x1F220400 0x100>, <0x1F220600 0x100>;
        interrupts = <GIC_SPI INT_IRQ_FUART IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI INT_IRQ_URDMA IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&CLK_fuart>;
        dma = <0>;
        sctp_enable = <1>;//rts cts enable is 1
        //pad = <PAD_FUART_RX>;//fuart mode2
        pad = <PAD_FUART_CTS>;//fuart mode 1
        tolerance = <2>;
        status = "ok";
    };
    
  2. 确认软件使能cts/rts,如果没有使能cts/rts功能 ,他们默认值为高电平状态。

  3. 如果要保证ssd20x处于可接受状态,使用命令:cat /dev/ttyS2 &  ,如果没有一直开启ttyS2的设备,那么Fuart的中断状态会自动清除。获取register[101e 2]==0x0000;正常为0x0005。


2. 接RS485芯片,半双工通信流程

  1. 连接方法

    RS485属于master-salver模式,同时mater作为发起端,salver应答端。网络中同时只有一台在发送数据,其他设备属于监听状态。

    主要流程如下, 所有行为需要等待master端的通知。

    Host/Master给RS485芯片发送数据时,先把R/D拉高, 发送完毕后,将R/D 拉低,Host/Master进入监听状态,等待slaver应答。

  2. app层使用方法

    struct serial_rs485 rs485conf;
    
    memset(&rs485conf,0,sizeof(rs485conf));
    
    rs485conf.padding[0] = 17;   //用来控制slaver收发的gpio index
    rs485conf.delay_rts_after_send = 2000;  //发送完最后一个字节需要的delay,单位:us
    rs485conf.flags |= SER_RS485_RTS_ON_SEND; //发送前拉高gpio,打开SER_RS485_RTS_AFTER_SEND指的是发送后拉高
    rs485conf.flags |= SER_RS485_ENABLED; // 使能本串口485模式,默认禁用
    ioctl(iHandle, TIOCSRS485, &rs485conf);
    

485pin.c