[MID project] Daily Report from Lasting
本帖最后由 lasting007 于 2010-03-07 22:51 编辑
1.搭建、测试s3c6410开发环境。此部分在项目准备阶段比较重要。执行状况如下:
(1)编译项目开发需要的必要工具如:toolchain及lablin等。目前已在wm2440上测试通过;
(2)编译并调试linux内核至wm2440,已经通过;
(3)fix g-bios中commandline的build函数,使kernel可以从nfs正常挂在rootfs;
(4)后续还要在s3c6410上构建和测试。
2.熟悉SDIO SPEC,还在进行中;
3.搜集802.11协议规范,为项目开发作准备。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
今天主要熟悉sdio协议。进展不是很大。初级目标是可以读取sdio wireless的cid,但是还没有完成。
在这里将我的理解和疑惑跟大家share一下。请高手指教。
1.sdio设备与sd memory设备初始化流程对比:
(1)sd memory的初始化流程:
1)cmd0 //reset sdcard;
2)cmd8 //version2.0检查工作电压是否兼容;
3)acmd41//等待sdcard就绪;
4)cmd2 //读取cid;
5)cmd3 //get rca;
(2)sdio设备初始化流程:
1)cmd52 //reset io;
2)cmd5 //等同于sd mem中的acmd41;
3)cmd3 //get rca;
2.sdio中的操作通过cmd52+ioport实现,具体细节还没有完全弄清楚。明天继续努力!
明天的任务:
1.弄清楚sdio设备的操作方式。
2.能够在2440上读取sdio设备的信息。
本帖最后由 lasting007 于 2010-03-10 00:53 编辑
今天主要在集中在sdio的init及控制方式。
1.sdio中比较重要的command52/53命令,通过操作参数对应的位域来完成对io的读写控制。
cmd52完成对应的寄存器操作,参数主要位域及功能:
(1)r/w //命令读写功能选择
(2)function num //功能选择,决定于cia
(3)raw //写命令后自动执行读取命令
(4)register addr //对应寄存器的地址
(5)writedata //数据写数据位
cmd53数据传输执行,支持对数据的“块”操作:
(1)r/w //命令读写功能选择
(2)function num //功能选择
(3)block mode //1为读写操作最小单位为block,0为字节模式
(4)op code //读写后地址是否递增
(5)register addr //对应寄存器地址
(6)byte/block //byte模式下,为传输数据的字节数;block模式下,为传输的block数,“0”代表不限块数
2.sdio card的cia及组成:
(1)Card commom control register(CCCR) //提供对卡的复位、中断、设置、信息读取等功能
(2)Function basic register(FBR) //此部分功能尚不明了,得实际测过
(3)Card information struct(CIS) //卡片信息
3.小组内讨论wifi驱动的方案及分工。小敏子,跟老方已经有了初步的构思。偶也要加快节奏了。
今天在2440上写了对sdio wireless的init流程,但是手头没有现成的sdio设备。只能移植到6410上,使用6410开发板上的wifi模块,此部分还在移植中。很惭愧,项目开始时,没有注意分析手头的资源,以后要引以为戒啊。基本明白了,sdio的控制方式,datasheet还要实际验证,接下来要看在6410上执行了。
对不起大家,没赶在晚上12点前完成目标。以后会加倍努力
今天主要在s3c6410开发板上,g-biso中对wifi模组wm-mr-09进行初始化,并读取其rca,已经完成。
1.6410上sdio的初始化流程,根据电路图知道wifi模组通过sd ch1连接至6410,故对ch1 sdc初始化如下:
(1)设置sdc时钟。
(2)设置对应GPIO。
(3)设置sd控制器并使能,按照sd标准,延时74个sd时钟周期以上。
(4)发送cmd52及对应的参数,reset sdio card。
(5) 发送cmd5,获取ocr。这里需要等待sdio card回应。
(6) 再次通过cmd5,设置ocr。循环等待sdio card回应。
(7) 发送cmd3获取rca。
此流程已实际验证,可以在6410 sd ch1正确获取wm-mr-09的rca。
2.遇到的问题。
(1)现象描述:当sdio 4)~6)做过后,若只reset 6410,再次作4)~6)步,步骤5)就会超时,但是获取rca可以成功。每次断电后4)~6)步骤又可以正常工作。
(2)原因猜想:开发板复位后,只是对6410进行复位,而wifi模块并未复位,所以出现此情况。有两种的可能:
1)sdio card本身有此问题;
2)cmd52的复位命令未被正确执行。
此两种原因,均有可能。但是还未实际验证。其他原因尚不明了啊。但是从项目进度来看的话,此部分优先级不是很高。不过我会继续追查。
3.明天的任务:
(1)目前可以完对sdio设备rca的获取。接下来应该进一步的对其命令控制流程进行进一步的验证,打通硬件操作这一关节。
(2)如何控制wifi模组,是通过读写怎样格式的数据才能让wifi模组工作,现在心里还没谱啊。明天要和小敏子、老方讨论讨论啊。这部分比较难啊!
今天,俺又晚了,抱歉啊。。。。。
1.今天主要测试了下sdio CIA数据的读取;
2.理解wifi模块与s3c6410联合工作的原理;
3.在6410上移植dm9000至2.6.33内核中;
尚待解决的问题:
1.目前基本了解sdio控制器访问流程。但是关于wifi模组的资料还不完全,暂时还不能进行实质性的测试。明天,主要要对sdio部分抽象出读写的api函数。
2.继续所及关于wifi sdio特殊功能寄存器方面的资料。
落后大家了,要努力啊!
今天终于有了一点进展。主要内容如下:
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模块的方法。只知道大概的原理。看来明天要跟老方和小敏子细细的研究下了。。。。
今天主要理了下手头的工作:
1.尽快整理关于SDIO的API,编译项目组的其他部分可以同时进行。
2.组内讨论了,尽快找到88w8686的firmware。目前还没有清楚的明白88w8686的控制方式。
3.项目进行到这里感觉很艰难,我必须突破。。。。
本帖最后由 lasting007 于 2010-03-15 03:43 编辑
今天,主要在g-bios中完成抽象一个简单的sdio设备子系统。参考了g-biso和内核nand子系统。
(1)sdio card具体的卡片抽象主要成员
1)rca
2)sdio cntl(匹配的sdio controller)
(2)sdio host
1)proble/register .etc
2) send_cmd/read/write .etc
2)sdio card list(匹配的sdio card列表)
(3)sdio api
1)open/close
2)read/write/ioctrl
语言表达不够清晰,框图容易理解。画了半天感觉还没完全表达自己的意思,今天太累了只能画成这样了。结构如图:
sdio.jpg (738.56 KB, 下载次数: 6)
下载附件
2010-03-15 03:37 上传
执行状况:
(1)目前子系统架构基本完成。
(2)api中ioctrl还没实现。
(3)读写单个寄存器完成。
(4)block读写还未完成。
完成部分,已经测试通过。
明天任务:
(1)支持按block读写,该部分还需要讨论。因为cmd53批量读写时提供地址自加和非自加两种功能。这样的话肯定要根据寄存器的特性分类支持。总之,读写简单,考虑到合理性比较难。
(2) 又回到老大难的问题:wifi模组的操控方式。虽然有思路,但是还只是猜想。还要找到资料来应证自己的想法。这个还要继续讨论。
(3) 找到88w8686的firmware及操控方式。这个资料不好找啊。得靠小敏子跟老方了。
困了,睡了。
哦这是2010/03/14 daily report
DONE:
1.分析wm-g-mr-09电路及其datasheet。找出该模块sdio工作模式和firmware启动方式;
2.详读sdio cmd53及cia部分。
TODO:
1.sdio子系统中添加数据block读取功能;
2.获取88w8686 firmware;
3.分析88w8686的控制流程;
4.sdio子系统中支持中断等;
Done:
(1)小组内讨论,并制定了详细的项目规划与分工。
(2)在g-biso中模拟发送firmware至sdio设备,还在调试。
Todo:
(1)完成发送firmware至sdio设备。
(2)协助组内完成load firmware至内存。
(3)组内添加wifi驱动至内核。