- 论坛徽章:
- 0
|
今天终于有了一点进展。主要内容如下:
1.sdio 基本寄存器可以读取。目前基本完成rca的读取、数据位宽的设置、iopoart的使能。主要遇到的问题如下:
(1)现象描述:从昨天开始可以读取sdio card rca的读取。但是当读取数据位宽相关寄存器时等一系列寄存器时发现读出数据总是零。写入非零值读出还是零。
(2)解决方法:
1)首先定位cm52的发送格式是否正确。卡片在init发送cmd52进行复位。当去掉此过程,发现其后对卡操作均会失败。说明cmd52发送复位命令有成功生效;
2)在fleya的指导下,发现自己犯了一个严重的错误:在成功读取rca后,没有执行cmd7对卡片进行选取,就直接读取其他寄存器。在加上cmd7后读取寄存器正常。
2.sdio数据在读写时发现当不关电源只对s3c6410的开发板进行复位(注意不是断电),就会发现init卡片就会没有响应。
(1)此种情况一种可能是,当sdio card已经激活(获取rca)后,对s3c6410复位,init流程里发送cmd5获取卡片支持的工作电压范围时,发送的rca为0,而卡片已经被获取过rca,所以不会响应。
(2)如果获取rca值后保存起来,当s3c6410复位后,直接读取该值作为rca值,这样就不会报错。这个想法看起来好像合理,但是却有几个极大的漏洞。其中当重新开机时,先前用过的rca早已失效,应该按照正常的流程,在获取rca前,发送的命令cmd5中用到rca为0。
(3)从侧面看:当开发板复位后,外设应该重新初始化及sdio设备reset,更加安全的做法可以硬件复位外设,这样就可以避免软件复位失效带来的麻烦。但是如何对sdio 设备:wifi模块ut_wifi_c进行硬件呢?
(4)步骤如下:
1)首先我检查硬件原理图,发现wifi模块上有RESETn及PDn。RESETn肯定是复位了,查了下datasheet,要激活卡片PDn必须被拉低。这两pin分别对应了6410上gpg10/11。
2)初始化卡片前,配置gpg10/11为输出,并且按照需要的电平及时序方式输出。
3)重复按板子上的reset,sdio读取正常。
3.所以正常操纵sdio设备的基本流程应该是:
(1)配置相关引脚,对sdio硬件reset(如果有的话,嘎嘎);
(2)配置sdio控制相关引脚;
(3)初始化sdio时钟,中断等;
(4)发送cmd52及参数复位sdio;
(5)发送cmd5获取支持的工作电压,再回写。等待卡片就绪;
(6)获取cmd3获取rca;
(7)cmd7 + rca,切换卡片至传输模式;
(8)读取数据。。。。。。
问题:
1.从目前手头的资料来分析,尚没有找到可行操纵wifi模块的方法。只知道大概的原理。看来明天要跟老方和小敏子细细的研究下了。。。。 |
|