请选择 进入手机版 | 继续访问电脑版
查看: 656|回复: 1

[实战经验] 【实战经验】HID与音频冲突问题

[复制链接]
  • TA的每日心情
    开心
    2018-2-6 09:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    954

    主题

    3778

    帖子

    93

    好友

    Rank: 9Rank: 9Rank: 9

    管理员

    最后登录
    2018-2-22
    发表于 2016-11-18 16:30:51 | 显示全部楼层 |阅读模式
    前言
    Demo 程序中,HID 和 Audio 单独运行都不会有问题,把 HID 和 Audio 整合在一起,同进传送数据时,会出现Audio 不能传送数据的情况。

    根本原因

    基本情况:
                 1. 当增加HID 的传输频率时,这种情况更容易出现。
                 2. 当HID 包在帧开始时,不会出现这个问题。
    根本原因是相关的参考手册中描述的一个已知的问题。
                          35.13.8 Worst case response time
                          When the OTG_HS controller acts as a device, there is a worst case response time for any
                          tokens that follow an isochronous OUT. This worst case response time depends on the AHB
                          clock frequency.
                          The core registers are in the AHB domain, and the core does not accept another token
                          before updating these register values. The worst case is for any token following an
                          isochronous OUT, because for an isochronous transaction, there is no handshake and the
                          next token could come sooner. This worst case value is 7 PHY clocks when the AHB clock
                          is the same as the PHY clock. When the AHB clock is faster, this value is smaller.
                          If this worst case condition occurs, the core responds to bulk/interrupt tokens with a NAK
                          and drops isochronous and SETUP tokens. The host interprets this as a timeout condition
                          for SETUP and retries the SETUP packet. For isochronous transfers, the Incomplete
                          isochronous IN transfer interrupt (IISOIXFR) and Incomplete isochronous OUT transfer
                         interrupt (IISOOXFR) inform the application that isochronous IN/OUT packets were
                         dropped.
    因此,建议在帧开始的时候或帧结束前开始发送HID 数据包。


    解决方案:
                  1. 在帧开始的时候发送数据。
                  2. 在帧80%,85%,90%,95%时发送数据。通过设置
                  #define DCFG_FRAME_INTERVAL_80                        0
                  #define DCFG_FRAME_INTERVAL_85                        1
                  #define DCFG_FRAME_INTERVAL_90                        2
                  #define DCFG_FRAME_INTERVAL_95                        3  

                  USBx_DEVICE->DCFG |= DCFG_FRAME_INTERVAL_80;


                 RM0090
                  34.16.4 Device-mode registers
                  OTG_FS device configuration register (OTG_FS_DCFG)

                         Bits 12:11 PFIVL: Periodic frame interval
                         Indicates the time within a frame at which the application must be notified using
                         the end of
                         periodic frame interrupt. This can be used to determine if all the isochronous
                         traffic for that
                         frame is complete.
                         00: 80% of the frame interval
                         01: 85% of the frame interval
                         10: 90% of the frame interval
                         11: 95% of the frame interval



    HID与音频冲突问题.pdf (74.99 KB, 下载次数: 10)
    回复

    使用道具 举报

    该用户从未签到

    79

    主题

    3015

    帖子

    23

    好友

    Rank: 8Rank: 8

    STM32粉丝勋章ⅣSTM32粉丝勋章ⅢSTM32粉丝勋章ⅠSTM32粉丝勋章Ⅱ

    论坛元老

    最后登录
    2018-2-22
    发表于 2017-7-1 21:45:03 | 显示全部楼层
    这些实验的视频介绍比较重要
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    小黑屋|手机版|Archiver|意法半导体STM32/STM8技术社区

    GMT+8, 2018-2-22 20:54 , Processed in 0.204934 second(s), 12 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表