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:Wl18xx Linux SDIO 时钟速度和模式

Guru**** 2560390 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/708022/linux-wl1835mod-wl18xx-linux-sdio-clock-speed-and-mode

器件型号:WL1835MOD
Thread 中讨论的其他器件:WL1835

工具/软件:Linux

大家好、wl1805/wl1835模块支持的时钟速度列表吗? 和其他模式?

我希望将 Linux 驱动程序移植到定制板。 内核版本为4.6.37-ti-r47。 SDIO 模式和速度由`mMC/core/SDIO.c`中的`mMC_SDIO_INIT_CARD ()`函数设置:

/*
切换到高速(如果支持)。
//
err = SDIO_ENABLE_hs (card);
if (err > 0)
MMC_SET_时序(card->host、MMC_timing_SD_HS);
否则(err)
转至 REMOVE;

//
*更改为卡的最大速度。
*/
MMC_SET_CLOCK (HOST、MMC_SDIO_GET_max_CLOCK (CARD));

/*
切换到更宽的总线(如果支持)。
*/
err = SDIO_ENABLE_4bit_BUS (card);
如果(err)
转到删除;

这段代码依次调用`mMC/core/core.c`中的`mMC_SET_IOS()`函数、并将时钟设置为25MHz (4位宽度)、如以下日志所示:

mmc2:时钟25000000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度4计时0

现在的问题是块写入工作、但不读取。 我正在研究降低 SDIO 速度、并探讨其他可能适合总线上可能降低的信号质量的模式。

我已经尝试在上面的代码中注释掉`mmc_set_clock()`。 因此、总线将以400kHz 的频率运行、而不是切换到25MHz。 结果仍然相同。 wl18xx 模块是否支持低于25MHz 的任何速度或仅支持列表中的某些值?

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

    要限制 SDIO 时钟速度、只需在.dts 文件中使用以下命令:

    elixir.bootlin.com/.../mmc.txt

    添加:
    最大频率=<20000000>;

    存储到您的板级器件树文件中的 MMC 节点。

    当然、您也可以尝试较低的值、而不是上面的20Mhz。

    此致、
    Eyal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对此进行了任何更新?
    我们应该保持开放吗?
    BR、
    Eyal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Eyal、

    我尝试了你的建议,但它不起作用。 由于定制板、问题可能出在主机侧驱动器中。 我想找出解决方法、但尚未找到。

    但是、我的问题不是关于该驱动程序。 我询问模块硬件支持哪些 SDIO 速度。 或者、我们是否需要在下载到模块之前配置固件? 我们在文档中的某个位置阅读了52MHz 最大时钟速率。 0到52MHz 之间的任何速度都可以工作,例如1MHz 应该可以,1.2MHz 也可以,... ? 或者只有几个预定义的速度可以正常工作?

    到目前为止、我们还没有弄清楚如何更改主机驱动程序、以便 SDIO 能够以400kHz 或25MHz 以外的速度运行。 一旦我们确定了这一点、问题是要设置其他哪些速度、以便已知 wl18xx 硬件可以使用。

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

    理论上、任何速度都可以工作。
    我个人使用了1MHz、8MHz、10MHz、25MHz 等 SDIO、方法是使用上述我建议的设置。

    您的主机处理器是什么? 内核正在使用哪个驱动程序?

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

    了解1MHz、8MHz、10MHz、25MHz 能为您提供帮助、这将帮助我们避免第二次猜测!

    我们使用的处理器是一些供应商提供的基于 ARM 的新处理器。 如果我们遇到任何进一步的问题、我们肯定会在稍后要求您提供更多帮助。

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

    只需注意处理器 SOC 上的 SDIO 时钟速度:SDIO 时钟只能设置为400k 或25M、或列表中的一些其他速度、这是一个设计限制。 列表中没有400k 到25M 之间的速度。 当设置为另一个速度时、例如10M、Linux 内核驱动程序会将其舍入。 这就是通过更改器件树参数无法正常工作的原因。