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.

am335x sdio wifi

Other Parts Discussed in Thread: AM3352

hi :

我们使用AM335X上用RTL8723BS的WIFI,现在碰到个问题,ifconfig -a发现没有wlan0设备,调试驱动发现一直卡在sdio_readl函数中,mmc_wait_for_req这个函数一直没有返回值,我问了下模块供应商,他们说在WIFI上电的时候需要一个rescan函数。这个需要找平台厂家,我想请教下,ti平台下,类似功能的函数叫什么函数名?

下面的是SUNXI平台的函数例子

int platform_wifi_power_on(void)
{
int ret = 0;
#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
unsigned int mod_sel = mmc_pm_get_mod_type();
#endif // CONFIG_MMC_SUNXI_POWER_CONTROL


printk("[huzz]%s:%s\n",__func__,__FILE__);
#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
if (mod_sel == SUNXI_SDIO_WIFI_NUM_RTL8189ES) {
rtl8189es_sdio_powerup();
sunximmc_rescan_card(SDIOID, 1);
printk("[rtl8189es] %s: power up, rescan card.\n", __FUNCTION__);
} else {
ret = -1;
printk("[rtl8189es] %s: mod_sel = %d is incorrect.\n", __FUNCTION__, mod_sel);
}
#endif // CONFIG_MMC_SUNXI_POWER_CONTROL

return ret;
}

  • 参考以下link:

    http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/127565.aspx

  • hi:

        现在的情况是/sys/bus/sdio/devices下已经有mmc1设备了,但是ifconfig -a没有wlan0。WIFI的上电也OK了。经过调试,发现wifi的probe函数没有执行完,卡在mmc_wait_for_req,在这个函数不往下跑了。

  • 这个函数有进去看卡在哪里了么?是不是DMA传输没有完成?

  • hi:

        周工,从调试来看,好像是CMD53命令没有完成。发送CMD53的时候,卡在mmc_wait_for_req_done函数的wait_for_completion函数中。

  • 那就是SDIO wifi没有回复。

    你的SDIO wifi需要SD 卡那种scan的过程么?如果不需要可以把这部分精简掉。

  • 周工:

          应该是需要的,我在帖子的第一楼想问的就是这个rescan函数。我想请教下,SDK-PROCESSOR-3.02有没有类似的rescan函数?

    我问厂家,厂家是这么回复我的。

    根据你发来的log,应该是在软件里面没有rescan,可参考platform_ARM_SUNnI_sdio.c

            

           rescan的代码需要找处理器的平台厂商要!

           有rescan的kernel的log参考如下:

          

  • AM335x的接口是支持SD V3.01协议的,整个rescan SD卡的过程,请参考AM335x TRM的Figure 18-35和Figure 18-36。

    你的SDIO wifi支持什么样的协议?

  • 数据手册里这么些的。Complies with SDIO 1.1/2.0/3.0 for WLAN with clock rate up to 100MHz (DDR50)

    具体的rescan代码可否给个样例?

    还有您说的rescan过程的图示,在TRM文档中,图18-35和图18-36是寄存器的说明。

    PS:rescan的操作具体是指什么?比如通常SD卡插入的时候,是不是会自动rescan?

    我刚才做了个测试,开机的时候不加载WIFI驱动,开机后才加载WIFI驱动,并把dts中的ti,non-removable去掉。这样当我手动Insmod 8723bs的时候是不是就相当于一次插入卡的操作?会不会自动rescan?实验结果和开机自动加载模块的结果一样,卡在CMD53命令。测量示波器,发现整个启动过程中,SD_D0上也没发现数据,只有SD_CLK和SD_CMD有数据。

  • 你看的是哪版的TRM,下一个最新的看下,可能标号不一样,寄存器描述之前就是scan流程。

    数据线上没有数据的话,就是因为AM3352发出cmd以后,wifi没有给response导致的,你问问厂家支持不支持cmd53这个command。

  • 周工,您好,抱歉现在才回复。和厂家邮件通讯太没效率了。

        今天我和厂家那边沟通,他们确认说支持CMD53命令。他们硬件给出的建议是SDIO的6个线上是否必须要用到3.3v上拉,他说他们以前碰到的项目不需要这个上拉,请教下

    1.SDIO的3.3V上拉是必须的吗?

    2.CMD53没有应答还有其他原因导致吗?

    谢谢。

  • 这个上拉是由SDIO外设决定的,如果wifi厂家说不需要,可以去掉试试。

    你可以用示波器观察下cmd上的波形,看看cmd53发出去以后有没有response。

  • hi 周工:

         现在WIFI可以正常工作了,不需要rescan操作,之前的CMD53无应答,我在修改dts文件的mmc3的DMA channel之后,可以正常工作了,导致到底什么原因没弄明白,帮忙分析一下,谢谢。

       修改后的dts中的mmc3如下:

    &mmc3 {
    /* these are on the crossbar and are outlined in the
    xbar-event-map element */
    dmas = <&edma_xbar 12 0 1
    &edma_xbar 13 0 2>;
    dma-names = "tx", "rx";
    status = "okay";
    vmmc-supply = <&vmmcsd_fixed>;
    /*vmmc-supply = <&wlan_en_reg>;*/
    bus-width = <4>;
    pinctrl-names = "default";
    pinctrl-0 = <&mmc2_pins_default>;
    ti,non-removable;
    ti,needs-special-hs-handling;
    cap-power-off-card;
    keep-power-in-suspend;
    no-1-8-v;
    #address-cells = <1>;
    #size-cells = <0>;
    rtl8723bs_wifi: rtl8723bs_wifi@0 {
    compatible = "ti,rtl8723bs";
    reg = <2>;
    /* interrupt-parent = <&gpio3>;
    interrupts = <17 IRQ_TYPE_LEVEL_HIGH>;*/
    };
    };

    修改前的mmc3配置

    &mmc3 {
     /* these are on the crossbar and are outlined in the
     xbar-event-map element */
     dmas = <&edma 12 0 
     &edma 13 0>;
     dma-names = "tx", "rx";
     status = "okay";
     vmmc-supply = <&vmmcsd_fixed>;
     /*vmmc-supply = <&wlan_en_reg>;*/
     bus-width = <4>;
     pinctrl-names = "default";
     pinctrl-0 = <&mmc2_pins_default>;
     ti,non-removable;
     ti,needs-special-hs-handling;
     cap-power-off-card;
     keep-power-in-suspend;
     no-1-8-v;
     #address-cells = <1>;
     #size-cells = <0>;
     rtl8723bs_wifi: rtl8723bs_wifi@0 {
     compatible = "ti,rtl8723bs";
     reg = <2>;
    /* interrupt-parent = <&gpio3>;
     interrupts = <17 IRQ_TYPE_LEVEL_HIGH>;*/
    -};

  • 您好!请问你们的wifi模块,连接路由器速度可以到多少啊?