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/WL1837MOD:模块在卸载时挂起

Guru**** 1159980 points
Other Parts Discussed in Thread: WL1837MOD, TWL1200
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/611599/linux-wl1837mod-module-hangs-when-unloading

器件型号:WL1837MOD
主题中讨论的其他器件: TWL1200

工具/软件:Linux

我正在尝试让 WL1837MOD 在我们的电路板上工作。  我们仍在使用3.14内核(EZSDK 08.00.00.00)。  我已成功通过 element14 Cape 将驱动程序加载到 BeagleBone Black 上。

我已经在我们的板上加载了驱动程序、并相应地调整了 DTS 文件。  当我们的电路板启动时、它会检测到安装的 SDIO 卡、但似乎从未加载固件。  当我尝试运行 wlconf configure-device.sh 时、系统挂起(CPU 活动 LED 指示灯保持闪烁、但控制台不会返回提示)。  如果我尝试手动卸载 wlcore_SDIO、这也会导致相同的挂起。

BBB Cape 和我们的电路板之间的主要区别是:(1)我们使用的是 mmc3、(2) WLAN_EN 通过 GPIO 扩展器进行控制。

我想知道 MMC3上的 EDMA 是否可能导致问题?  我相信以下是 DTS 的相关内容。

vmmcsd_fixed:fixedregulator@0{
compatible ="reguler-fixed";
reguler-name ="vmmcsd_fixed";
reguler-min-microvolt =<3300000>;
reguler-max-microvolt =<3300000>;
};

wlan_en_reg:fixedregulator@1{
compatible ="reguler-fixed";
reguler-name ="wlan-en-regulator ";
reguler-min-microvolt =
<1800000>;gpulator -max-microvolt =<1800000>;
gpullpulator =<&gpuloex1 pullex1 9 0>;

};mmc3_mctrlup*





默认值0x74_mc3 (mc3)/mc2)/mc2 mctrin_mc2 (mc2)*默认值/mc3)* mc2 (mc2)/mc2 mctrlpull_mc2)*/mc3 (mc2)/mc3 pullu_mc3 (mc2)*默认值/mc2)* mc2 (mc3)/mc3 pullu_mc3 pullu_mc3
(PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_WPN.GPIO0_31 *
/ 0x78 (PIN_INPUT_PULLUP | MUX_MODE3)/* GPMC_BEN1.mmc2_DAT3 *
0x88 (PIN_INPUT_PULLUP | MUX_MODE3)/* 0xMC_MMC_PULLUM_3*

(0xMC_M0_MMC_PUT_M0_MOCHRESD*)





*= 0xMC_PULLUM3*/0xMC_MOCK_PULLUM0_MOCn *(0xMC_MOCK_PULLUM_3*)*/0xMC_MOCK_PULLUM_PULLUM3*(0xMC_M0_MOCK_PUT_MODEx */0xMC_MOCK_PULLUM0_M3*)*/0xMC_MOCK_PULLUM_PULLUM0_M3*(0xMC_MODEx */0xMC_MODEx 引脚=
(PIN_INPUT_PULLUX | MUX_MODE7)/* GPMC_A3.mmc2_DAT2 */
0x74 (PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_WPN.GPIO0_31 *
/ 0x78 (PIN_INPUT_PULLUX | MUX_MODE7)/* 0xMC_MCLCULLUM_7*


(0xMC_MCLCK_PULLUX)/0xMC_M8_M0_CK_INPUBLDCx *(PIN_M0_M0_M0_MOCx *


)*)*(PIN_MMC_MOCK_MOCK_PULLUX *)*/MMCK_PULLUM8_MOCK_PULLUX *(PIN_MOCK_PULLUM0_M pinmux_WLAN_PINS_DEFAULT{
pinctrl-single、PINS =<
0x1e4 (PIN_INPUT_PULLUP | MUX_MODE7)/* emu0.GPIO3_7 - WLAN_IRQ */
>;
};

WLAN_PIN_SLEEP:pinmux_WLAN_PIN_SLEEP{
pincti-single-single、GPIO3 - WLAN_IRQ_3*






= 0x3*/ EDRQ_3*(在输入上)<x_MOUQ_3*引脚= 0x24_3*引脚2*引脚= 0x3*引脚0_EQ_EDRM0_IN_IN_MOUDIM = 0x7;/EQ_MOUQ_MOUQ_3*引脚3*引脚3*引脚

};

&mmc3{
status ="确定";
VMMC-supply =<&wlan_en_reg>;
bus-width =<4>;
pinctrl-names ="默认值"、"睡眠";
pinctrl-0 =<&mmc3_PINS_DEFAULT &wlan_PINS_DEFAULT>;
pinctrl-1 =<&mmc3_PINS_SLEEP &wlan_PINs_SLEEP>;
ti、不可拆卸;
ti、需要特殊 hs-handling;
cap 断电卡;
保持通电暂停;

DMA =<&EDMA 12
&EDMA 13>;
dma-names ="TX"、"Rx";

#address-cells =<1>;
#size-cells =<0>;
wlcore:wlcore@0{
compatible ="ti、wl1835";
reg =<2>;
interrupt-parent =<&GPIO3>;
interrupts =<7 IRQ_TYPEE_EDGE_RISING >;
};
}; 

并在引导期间获取以下行:

[1.723307] mmc2:排队未知 CIS tuple 0x91 (3字节)
[1.723880] mmc2:地址0001处的新高速 SDIO 卡

[8.117841] wl18xx_driver wl18xx.0.auto:直接固件加载失败,错误-2

[8.125866] wl18xx_driver wl18xx.0.auto:返回到用户帮助程序
[8.153316] wlcore:错误无法获取配置二进制 ti-connectivity/wl18xx-conf.bin:-2
[8.162638] wlcore:警告恢复为默认配置

有什么想法会导致模块卸载挂起?

BTW、wl127x 使用旧版3.2内核处理此硬件(相同的物理 SDIO 接口)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,我们已将您的查询指派给 WiFi 专家。 我们将很快回来。

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

    谢谢、期待收到回复。

    我阻止了模块自动加载、以检查一些事项。  首先我检查的是 wlan_en_regulator 引脚在加载 wlcore_sdio.ko 模块之前处于低电平。  加载模块后、它会变为高电平。  但是、在卸载同一模块时、wlan_en_reg 引脚永远不会变为低电平。

    此外、在查看其他代码源时、我将 DMA 设置更改为:

    EDMA{(&E)
    /*需要在 HSMMC2 (mmc3)上获取 DMA */
    TI、EDMA-Xbar-event-map =/bits/16 <1 12.
    2 13>;
    };

    但我会得到相同的行为、所以我猜不是这样。  同时、我将介绍 MMC 调试功能。

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

    我设法将一些探针连接到 WLAN_IRQ 和 WLAN_EN 线路。  我注意到 BeagleBone Black 上的 WLAN_IRQ 在 WLAN_EN 之后不久脉冲为高电平(我假设这与固件加载相关)、但 WLAN_EN 在初始化后恢复为低电平、直到发出 ifconfig wlan0。

    在我的板上、我看到 WLAN_EN 变为高电平、但我从未看到 WLAN_IRQ 脉冲为高电平。  此外、我从未看到 WLAN_EN 返回到低电平状态。  这可能是问题的根源、但我不确定它是否与硬件相关。  我可能需要尝试获取更多样片。

    已附加来自 reference.e2e.ti.com/.../mmc2_5F00_log.txt MMC2的日志

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    WAN_IRQ 需要上拉电阻器还是推挽电阻器? 我要求的原因是它连接到 GPIO3_7、如果 GPIO3_7连接到 wl127x 或 wl18xx、CPU 将不会启动。 为了解决该问题、我们在线路中放置了一个100k 串联电阻器。 我们没有遇到 wl127x 的问题、但这并不意味着 wl18xx 不会。

    我已经看到了不同的设计设置。 有些具有 INPUT_PULLUP、有些仅具有 WLAN_IRQ 输入、因此我不确定要求。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否共享包含 wl18xx 相关器件节点的.dts 文件?

    似乎根据您的日志、模块确实在引导时作为 SDIO 模块被检测到、而问题在加载 wl18xx 相关模块时出现。

    此时、您会收到 SDIO 错误、就像之前未复位模块(WLAN_ENAINSing 未变为低电平)一样。

    此致、

    Eyal 再发生器

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

    已连接当前的 DTS (已将扩展名更改为 txt)。  在此过程中、我修改了电路板以在 GPIO0_7上提供 WLAN_EN、而不是 GPIO 扩展器。  不过、根据我的测试结果、 GPIO 扩展器中的 WLAN_EN 的工作方式似乎相同、但不管怎样、WLAN 模块侧的 WLAN_IRQ 都不会变为高电平。

    我们使用 TWL1200作为电平转换器。

    e2e.ti.com/.../htouch_2D00_hda430.txt

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

    我注意到、在 BeagleBone Black 上、WLAN_EN 在引导加载过程(加电和 u-boot)中处于高电平。  而在我们的电路板上、它会保持低电平、直到内核接管。  正常运行是否需要这种电压?  我想我会尝试找出答案。

    BBB:

    定制:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 IRQ 线路上添加了一个上拉电阻器并调整了 u-boot 以使用内部上拉电阻器将 WLAN_EN 引脚设置为高电平。 WLAN_EN 在启动期间看起来像 BeagleBone、但 IRQ 仍然不会变为高电平。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否查看了以下有关 wl18xx 电平转换的应用手册?:

    我对您使用过的那种比通常使用的那种更熟悉。

    也是如此。 我是.dts 文件、您将 WLAN_IRQ 引脚设置为"PIN_INPUT_INPUT"。 通常情况下、它应该为"PIN_INPUT_PULLUG"或类似的值。

    这是否是拼写错误?

    此外、我建议将其设置为"IRQ_TYPE_EDGE_FALLING"而不是上升并查看它是否进行了任何更改。

    此致、

    Eyal