嵌入式硬件篇—OpenMV的硬件流和软件流


文章目录

  • 前言
  • 一、硬件流控制(Hardware Flow Control)
  • 1. 基本原理
  • RTS
  • CTS
  • 2. OpenMV中的实现
  • • 硬件要求
  • • 代码配置
  • • 工作流程
  • 二、软件流控制(Software Flow Control)
  • 1. 基本原理
  • XON
  • XOFF
  • 2. OpenMV中的实现
  • • 代码配置
  • • 工作流程
  • 三、硬件流控制 vs 软件流控制对比
  • 四、在OpenMV中的综合应用示例
  • 五、注意事项
  • 1. 硬件兼容性
  • 2. 波特率匹配
  • 3. 缓冲区管理
  • 4. 抗干扰设计
  • 六、总结
  • 总结

  • 前言

    本文仅仅简单介绍了OpenMV中的硬件流和软件流。


    一、硬件流控制(Hardware Flow Control)

    1. 基本原理

    硬件流控制通过额外的物理信号线(RTS和CTS)动态控制数据流确保发送方和接收方的缓冲区不会溢出

    RTS

    • RTS(Request to Send):由接收方控制。当接收方缓冲区空闲时,RTS为低电平(允许发送);当缓冲区接近满载时,RTS为高电平(暂停发送)。

    CTS

    • CTS(Clear to Send):由发送方控制。发送方仅在CTS为低电平时发送数据。

    2. OpenMV中的实现

    • 硬件要求

    ◦ OpenMV Cam型号需支持硬件流控制(如OpenMV Cam H7 Plus)。
    ◦ 串口线必须包含RTS和CTS引脚(如USB转TTL模块需支持)。

    • 代码配置

    import pyb
    #初始化UART3,波特率115200,启用RTS和CTS硬件流控制
    uart = pyb.UART(3, 115200, flow=pyb.UART.RTS | pyb.UART.CTS)
    

    • 工作流程

    1. 发送方检查CTS信号,若为低电平则发送数据。
    2. 接收方根据缓冲区状态控制RTS信号。
    3. 优点
      高可靠性:实时信号控制,避免数据丢失。
      • 适合高速通信:支持高波特率(如921600 bps)。
      无额外数据开销:不占用数据带宽。
    4. 缺点
      • 硬件依赖:需要支持RTS/CTS的硬件和连接线
      • 布线复杂:需正确连接RTS和CTS信号线。
    5. 典型应用场景
      高速数据传输(如图像、视频流)。
      长距离通信(抗干扰能力强)。
      多设备共享总线时的协调。

    二、软件流控制(Software Flow Control)

    1. 基本原理

    软件流控制通过特殊字符(XON/XOFF)动态控制数据流,无需物理信号线。

    XON

    • XON(ASCII 17,0x11):接收方发送XON,表示可以继续接收数据。

    XOFF

    • XOFF(ASCII 19,0x13):接收方发送XOFF,表示暂停发送数据。

    2. OpenMV中的实现

    • 代码配置

    import pyb
    #初始化UART3,波特率115200,启用软件流控制(XON/XOFF)
    uart = pyb.UART(3, 115200, flow=pyb.UART.XONXOFF)
    

    • 工作流程

    1. 接收方缓冲区快满时,发送XOFF字符给发送方。
    2. 发送方收到XOFF后暂停发送。
    3. 接收方缓冲区有空闲时,发送XON恢复传输。
    4. 优点
      • 无需硬件支持:仅需数据线(TX/RX),适合简单设备
      • 灵活配置:适用于硬件资源有限的场景
    5. 缺点
      带宽占用:XON/XOFF字符占用数据传输带宽。
      延迟风险:字符传输和处理可能引入延迟。
      可靠性较低:字符丢失或误识别可能导致通信中断。
    6. 典型应用场景
      低速通信(如传感器数据采集)。
      硬件连接受限(仅需TX/RX线)。
      临时调试或原型开发

    三、硬件流控制 vs 软件流控制对比

    硬件流控制与软件流控制的对比

    四、在OpenMV中的综合应用示例

    1. 硬件流控制实现高速图像传输
    import sensor,pyb
    
    #初始化摄像头
    sensor.reset()
    sensor.set_pixformat(sensor.RGB565)
    sensor.set_framesize(sensor.QVGA)
    
    #配置UART3(硬件流控制)
    uart = pyb.UART(3, 921600, flow=pyb.UART.RTS | pyb.UART.CTS)
    
    while True:
        img = sensor.snapshot()
        img_bytes = img.compress(quality=50).to_bytes()  # 压缩图像数据
        # 分块发送(每块128字节)
        for i in range(0, len(img_bytes), 128):
            uart.write(img_bytes[i:i+128])
    
    1. 软件流控制实现传感器数据采集
    import pyb
    
    uart = pyb.UART(3, 9600, flow=pyb.UART.XONXOFF)  # 启用软件流控制
    
    while True:
        if uart.any():
            data = uart.read(uart.any())
            # 处理接收数据
            if data == b'XOFF':
                print("Paused by receiver")
            elif data == b'XON':
                print("Resumed by receiver")
            else:
                print("Received:", data)
    

    五、注意事项

    1. 硬件兼容性

    ◦ 使用硬件流控制前,确认OpenMV和外部设备均支持RTS/CTS
    ◦ 错误连接RTS/CTS线会导致通信失败。

    2. 波特率匹配

    ◦ 发送端和接收端的波特率、流控制模式必须一致。

    3. 缓冲区管理

    ◦ 即使启用流控制,仍需通过uart.any()和分块传输优化缓冲区使用。

    4. 抗干扰设计

    ◦ 长距离通信中,硬件流控制需配合屏蔽线使用,软件流控制需增加校验机制。

    六、总结

    • 硬件流控制:通过RTS/CTS信号实现高可靠、高速通信,适合工业级应用。
    • 软件流控制:通过XON/XOFF字符实现灵活的低速通信,适合资源受限场景。
    • 选择建议:
    ◦ 优先使用硬件流控制(高速、可靠场景)。
    ◦ 仅在硬件不支持时使用软件流控制(低速、简单场景)。
    通过合理选择流控制方式,可显著提升OpenMV在复杂环境中的通信稳定性和效率。


    总结

    以上就是今天要讲的内容,本文仅仅简单介绍了OpenMV中的硬件流和软件流。

    作者:Ronin-Lotus

    物联沃分享整理
    物联沃-IOTWORD物联网 » 嵌入式硬件篇—OpenMV的硬件流和软件流

    发表回复