SDIO WIFI模块调试的问题

来源:互联网 发布:二叉树的结点算法公式 编辑:程序博客网 时间:2024/06/04 19:49

        上周开始,在我们的AM3358开发板上调试WIFI模块,模块是RTL8189ES。当底层使用CMD53命令读时,会出现CRC校验错误。这个问题的原因是连接SDIO模块的线太长了,把连接线弄短就好了。

        以下内容纯属吐槽,解决问题的话只看上边就可以了。

       刚开始厂商给了一个RTL8189FS的驱动,编译过后怎么都不能正确驱动设备,看驱动里对应的设备号是F179,而我们这个设备出来的设备号是8179。没办法,后来发邮件,让他给重发了一个驱动rtl8189ES的。这个驱动可以识别并驱动设备,但是加载过程中系统就死了,还是有问题。

       我以为系统死了,那就是驱动的问题,于是开始调试驱动。发现RTL8189驱动在调用sd_read32时死了,而这个函数是进入到了SDIO核心层提供的API;想来想去核心层应该不会出什么问题,它也是调用主板上的MMC HOST驱动。

        在MMC HOST驱动的源文件drivers\mmc\host\omap_hsmmc.c中,我加入了很多的打印语句。从这里可以看到系统在死机之前已经给MMC发了很多的指令,只有在发CMD53时才会死机,发送CMD52没有问题。于是查看SDIO的spesification:CMD52命令传数据只用到了CLK和CM两条线,HOST向下发Command和DEVICE的Response数据都是通过CMD线进传的;CMD53命令就不一样了,除了Command和Response是通过CMD线传的,数据是通过DAT[0:3]传的。我又在驱动里加入了打印MMC寄存器状态的代码,MMC的状态有问题,CRC错误,还是数据线上的CRC16错误了。我想是不是因为传输速度太高了,各数据线之间有干扰?于是把时钟从50M改成400k,还是不能解决问题。

        既然是底层的问题那就要用逻辑分析仪了。刚开始把探针接到靠近MMC控制器的一端,抓到数据后发现,DAT0的数据要比DATA[1:3]的数据早半个时钟周周期;再把探针接到靠近WIFI模块的地方,发现四条线上的数据是对齐的,好神奇!找到其中的DAT0,对其数据进行分析,发现CRC校验确实错了,而且总的数据还少了一个起始位。这个WIFI芯片也有好多的厂商在用,不可能这么渣。那会不会是我们飞的线太长了呢?我们飞的这个线有10CM,再加上主板上的线长度,得有15CM还多。于是想到把WIFI模块和主板上的引用用一个更短的线接上了,再次初始化,居然通过了。

      到这时候差点一口老血吐出来,居然是因为飞的线太长了!估计可能是因为SDIO并行传输时干扰太大,或是时钟线太长的延迟问题。

     注意,调试SDIO时,飞线不要太长,可能会出CRC检验错误的,反正我是没有百度到结果。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手指关节杵肿了怎么办 骨关节退行性变怎么办 疼风脚趾肿了怎么办 痛风脚右侧肿了怎么办 痛风引起的脚肿怎么办 老人腰闪了该怎么办 腰闪了站不起来怎么办 又怕冷又爱上火怎么办 肝上多发小囊肿怎么办 5岁宝宝咳嗽厉害怎么办 5岁宝宝咳嗽有痰怎么办 生川乌外贴中毒怎么办 7个月宝宝流鼻涕怎么办 脸上皮肤毛孔粗大有黑头怎么办 嗓子长了个囊肿怎么办 食管胃粘膜异位怎么办 狗狗肿瘤破了怎么办 婴儿胃食道反流怎么办 小儿胃食道反流怎么办 放疗后咳嗽痰多怎么办 胃息肉是恶性的怎么办 老是胃疼,胃胀怎么办 吃完饭之后胃胀怎么办 胃痛胃胀怎么办能缓解 胃胀不消化怎么办快速解决 便秘肛裂了好痛怎么办 胃消化慢还便秘怎么办 11个月婴儿便秘怎么办 80多岁老人便秘怎么办 狗狗便秘拉不出来怎么办 2个月幼犬便秘怎么办 狗狗便秘怎么办吃什么 痔疮又痛又痒怎么办 痔疮肉球特别痒怎么办 长了个小痔疮怎么办 产后4天没大便怎么办 7个月孕妇痔疮怎么办 运动完恶心想吐怎么办 跑步后恶心想吐怎么办 肠子不蠕动严重便秘怎么办 怀孕八个月严重便秘怎么办