This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/WL1835MOD:CPU 频率调节和 HCI UART

Guru**** 2561860 points
Other Parts Discussed in Thread: TPS65217

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/726265/linux-wl1835mod-cpu-frequency-scaling-and-hci-uart

器件型号:WL1835MOD
主题中讨论的其他器件:TPS65217

工具/软件:Linux

大家好、

我们的产品使用带有"按需"调节器的 CPU 频率调节。 在大多数情况下、在更改 CPU 频率的同时流式传输音乐效果很好、但我们不时会遇到 HCI UART 链路问题。 在 CPU 频率发生变化后、主机似乎无法再与 BT 控制器通信。

可以通过 A2DP 播放音频并并行运行 cpu_scaling.sh 脚本(请参阅下面的链接)来重现此问题。 此脚本将 CPU 调节器设置为"userspace"并随机更改 CPU 频率、而不会产生任何额外的 CPU 负载。 将频率从 800MHz 切换到1GHz 也会触发该问题、这意味着它与 CPU 短缺无关、而与内核更改 CPU 频率时发生的冻结/锁定更相关。

HFILL:

禁用 BT 深度睡眠和 HCIL 后、当问题发生时、HCI 链路停止工作几百毫秒、但会在之后恢复。 我猜、对于 HFILL、BT 控制器将在主机更改其 CPU 频率时进入深度睡眠状态、因此主机缺少信息、无法再与 BT 控制器通信。 如果没有 HILL、数据包会延迟、从而导致中断、但通信仍然有效。

我无法使用电路板上的逻辑分析仪捕获 HCI 线路、这些线路位于无法访问的 PCB 层上。

UART 回送:

我进行了一些低级测试、试图在没有 BT 控制 器的情况下更轻松地隔离和重现问题(请参阅下面的 serial_loopback.py)。 要运行测试、您必须连接 UART TX/RX、使用正确的串行端口运行"../serial_loopback.py /dev/ttyO1 "并并行运行 cpu_scaling.sh。

test01_delay 显示没有问题,即使在更改频率时也会尊重基本延迟(至少为 time.sleep())。

test11_serial_loopback 显示、有时更改 CPU 频率时、UART 环回需要~750ms 完成(正常情况下为~10ms)。 使用 CONFIG_PRETER_ANULOY=y 重新编译内核将正常回送时间减少到几 ms、但~750ms 回送的问题仍然存在。

您能不能帮助理解为什么会发生这种750ms 的延迟? 您的电路板上是否有相同的行为? CPU 时钟和 UART 模块之间是否存在链接?

环境:

感谢你的帮助。

-Julien

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Julien、

    我将首先尝试在 BeagleboneBlack 上重现此问题。 我会随时向您发布。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Julien、

    我无法使用 TI 内核 ti2017.01完成 BBB 电路板上的测试、在 Processor SDK 4.0.0.4中、由于第84行中的断言故障、serial_loopback.py 在数百次迭代中始终失败。

    但我可以使用 TI 内核 ti2017.06成功运行测试。 尽管我必须取消注释第82行、以增加小延迟。 下面附加的日志显示最大延迟仅为正常延迟的3倍、不显示750ms 问题。 我还附加了内核配置供您参考。

    您是否可以测试 Processor SDK v4.3.0.5内核?

    e2e.ti.com/.../ti2017.06.log

    e2e.ti.com/.../_5F00_config.gz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bin、

    感谢你的帮助。 您是对的、在某些板上、您必须取消对第82行上睡眠的注释。

    将您的内核配置与我们的配置进行比较、我注意到我们错误地设置了 CONFIG_PRERTER_NONE。 在以下配置中、行为与电路板上的行为相同:UART 环回测试中的最大延迟约为正常延迟的3倍(~20ms)。
    # CONFIG_PREMT_NONE 未设置
    CONFIG_PRETER=y、
    CONFIG_PRETER_COUNT=y
    CONFIG_Hz_250=y
    CONFIG_Hz=250

    问题是、我们仍然存在 BT UART 问题。 修复低级测试似乎不足以完全解决真正的问题。

    当通过 A2DP 播放音乐并并行运行 cpu_scaling.sh 脚本时、我们仍会观察到(大约10分钟或更短时间后):
    -启用 HILL 后,当问题发生时,链路断开。
    -禁用 BT 深度睡眠和 HCIL 后、当问题发生时、HCI 链路停止工作几百毫秒、但会在之后恢复。

    您是否有具有 WL18xx 的电路板、以在更改 CPU 频率时验证 HFILL 协议是否能够与非实时内核正常配合使用?

    请注意、

    -Julien
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Julien、

    在检查 SDK v4.0.0.4内核上测试失败的原因时、我注意到该内核中的8250驱动程序有一个错误、该错误已在较新的内核中修复。 您能否应用以下补丁来查看它是否会影响您的 BT 用例?

    e2e.ti.com/.../0001_2D00_serial_2D00_8250_2D00_8250_5F00_omap_2D00_Fix_2D00_race_2D00_b_2D00_w_2D00_dma_2D00_completion_2D00_an.patch.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    箱、

    我应用了8250驱动程序的补丁、但它无法解决问题。 行为是相同的。

    HFILL 协议是在用户速度下实现的、不是吗? 您认为这可能是一个问题吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Julien、

    抱歉、我对 BT 堆栈不了解多少、我想您必须从用户空间应用程序调试问题到内核、以了解为何链路断开。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Julien、

    我建议您首先使用最新的 Processor SDK v5.0进行测试、它具有更新的用户空间库和内核。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题是我无法访问 HCI/HCILL 驱动程序的源代码。 它附带 BT 堆栈、作为 Bluetopia/TI 提供的二进制文件。

    您是否有内部联系人可以帮助解决此问题、或者谁可以共享此部分代码?

    同时、我将尝试升级到最新的 SDK。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Julien、

    您是否在最新的 SDK 上进行过测试?
    我将尝试弄清楚 TI 的哪个团队负责 BT 堆栈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bin、

    我尚未使用最新的 SDK 进行测试。 在迁移到新 SDK 之前、我需要完成一些任务。
    同时、如果您发现谁可以帮助调试 HILL、我可以帮助他们重现问题。

    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Julien、

    处理器 SDK 中是否包含 HILL 驱动程序、或者是否包含在 TI 单独提供的软件包中? 如果是后者、您可以共享下载链接吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bin、

    HILL 驱动程序是 Bluetopia 协议栈的一部分、您可以通过以下链接在"TI Bluetooth Linux Add-on for AM335x EVM、AM437x EVM 和 BeagleBone with WL18xx and CC256x"下下载该驱动程序。

    我想 HFILL 驱动程序在 libBTPS.a 库中:

    objdump -t lib/BluetopiaPM/ Bluetopia/lib/libBTPS.a | grep HCILL
    HFILL.o:    文件格式 ELF32 -小
    00000000 l   df * abs* 00000000 hcill.c
    00000000 l    O .rodata       00000004 HFILL_Message
    000000b0 g    F .text 00000098 HFILL_Initialize
    00000148 g    F .text 00000058 HFILL_Shutdown
    000001a0 g    F .text 00000064 HFILL_reconfigure
    00000204 g    F .text 00000038 HFILL_Resynchronize
    0000023c g    F .text 0000011c HFILL_TransmitBytes
    00000358 g    F .text 0000013c HFILL_ReceiveBytes
    00000000 l    O .rodata       00000018 HILL_Protocol_Information


    请注意、我们未使用 Bluetopia PM (守护程序/客户端架构)、我们的应用程序直接链接 Bluetopia 库。

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想知道 AM33x 在空闲期间是进入深度睡眠状态还是进入高延迟 C 状态。 您可以检查一下系统中允许哪些 C 状态并禁用它们、以便尝试一下吗?

    Echo 1 >/sys/devices/system/cpu/cpu0/cpuidle/state0/disable
    Echo 1 >/sys/devices/system/cpu/cpu0/cpuidle/state1/disable


    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Hari、

    感谢您的建议、但在我们的系统中、cputlead 已禁用(请参阅下面的)。

    在接下来的几天里、我将花一些时间升级到 SDK5、看看它是否有用。

    编号
    # CPU 频率缩放
    编号
    CONFIG_CPU_FREQ=y
    CONFIG_CPU_FREQ_GOV_ATTR_SET=y
    CONFIG_CPU_FREQ_GOV_common=y
    CONFIG_CPU_FREQ_STAT=y
    CONFIG_CPU_FREQ_STAT_Details=y
    未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_performance
    未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE
    CONFIG_CPU_FREQ_DEFAULT_GOV_userspace=y
    未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_OnDemand
    未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSTICATION
    CONFIG_CPU_FREQ_GOV_performance=y
    CONFIG_CPU_FREQ_GOV_POWERSAVe=y
    CONFIG_CPU_FREQ_GOV_userspace=y
    CONFIG_CPU_FREQ_GOV_OnDemand=y
    CONFIG_CPU_FREQ_GOV_保守= y
    CONFIG_generic_cpufreq_cpu0=y

    编号
    #个 CPU 频率调节驱动器
    编号
    CONFIG_cpufreq_DT=y
    CONFIG_cpufreq_DT_PLATDEV=y
    未设置# CONFIG_ARM_Kirkwood_cpufreq
    未设置# CONFIG_ARM_OMAP2PLUS_cpufreq
    CONFIG_ARM_TI_cpufreq=y
    未设置# CONFIG_QorIQ_cpufreq

    编号
    # CPU 空闲
    编号
    未设置# CONFIG_CPU_IDLE
    未设置# CONFIG_ARCH_Needs CPU_IDLE_CON耦 合

    编号
    #内核功能
    编号
    未设置# CONFIG_SMP
    CONFIG_FASE_ARM_ARCH_TIMER=y
    # CONFIG_VMSPLIT_3G 未设置
    CONFIG_VMSPLIT_2G=y
    # CONFIG_VMSPLIT_1G 未设置
    CONFIG_PAGE_OFFSET=0x8000000
    CONFIG_ARM_PSCI=y
    CONFIG_ARCH_NR_GPIO=0
    未设置# CONFIG_PRETER_NONE
    未设置# CONFIG_PRETER_INVUATION
    CONFIG_PRETER=y
    CONFIG_PRETER_COUNT=y
    CONFIG_Hz_FIXED=0
    未设置# CONFIG_Hz_100
    未设置# CONFIG_Hz_200
    CONFIG_Hz_250=y
    未设置# CONFIG_Hz_300
    未设置# CONFIG_Hz_500
    未设置# CONFIG_Hz_1000
    CONFIG_Hz=250
    CONFIG_SCHED_HRTICK = y
    未设置# CONFIG_Thumb2_kernel
    CONFIG_AEABI = y
    未设置# CONFIG_OABI
    CONFIG_ARCH_HAS_ING_MEMORYMODEL=y
    # CONFIG_ARCH_SPARSEMEM_DEFAULT 未被置位
    未设置# CONFIG_ARCH_SELECT_MEMORY_MODEL
    CONFIG_VALH_ARCH_PFN_VALLE=y
    CONFIG_HIGHMEM = y
    未设置# CONFIG_HIGHPTE
    未设置# CONFIG_HW_PERF_Events
    CONFIG_ARCH_WIT_General_HUGETLB=y
    CONFIG_FLAATMEM=y
    CONFIG_FLACT_NODE_MEM_MAP=y
    CONFIG_have _MEMBLOCK = y
    CONFIG_NO_BOOTMEM=y
    未设置# CONFIG_WASE_BOOTMEM_INFO_node
    CONFIG_PAGEFLAGS_EXPANDE=y
    CONFIG_SPLIT_PTLOCK_CPU=4
    未设置# CONFIG_COMPACTION
    未设置# CONFIG_PHYS_ADDR_T_64位
    CONFIG_ZARE_DMA_FLAG = 0
    CONFIG_BUBON=y
    未设置# CONFIG_KSM
    CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
    未设置# CONFIG_Cross_MEMORY_Attach
    CONFIG_need_per_cpu_km=y
    # CONFIG_CLEANCACHE 未设置
    未设置# CONFIG_CMA
    # CONFIG_ZBUD 未设置
    # CONFIG_ZSMALLOC 未设置
    CONFIG_FORCE_MAX_ZONEORDER=12
    CONFIG_ENCEL_TRAC=y
    CONFIG_UACCESS_带 memcpy=y
    未设置# CONFIG_SECCOMP
    CONFIG_swiotlb=y
    CONFIG_IOMMU_helper=y
    未设置# CONFIG_XEN