《Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx》由会员分享,可在线阅读,更多相关《Linux 下wifi 驱动开发—— SDIO接口WiFi驱动浅析.docx(16页珍藏版)》请在第壹文秘上搜索。
1、1.inux下wifi驱动开发(三)SDIO接口WiFi驱动浅析SDlO-Wifi极块是格I-SDIO接口的符合Wifi无废网络标准的微入式粒块,内JR无线网络协议IEEE802.11由议栈以及TCRlP办议栈.健济实现用户主平台数据通过SDKD:I到无线网络之间的整辄SDlCH!有恰轮救据快,兼存SD.MMC接I】琼特.点,对于SDlo接口的Wtn,首先,它是一个SdiO的卡的设符.然后典备了WiG的功健,所以,注册的时候还是先以sdi。的卡的设番去注册的.然后检测到卡之后就要蓼动他的VVifi功能了.iV.feHISdio的协议,通过发吩咐和致据束限制的.F面丸谕沾回Bi卜SDlO的相关学
2、同r一、S3。相关若破学向IW1、SDIOSDIo故名思义,就是SD的I/O技口(interface)的一照,不过这样说明可能还丁点抽像,更具体的说明.SDKl它是记忆卡的标准,但是现在也可以把SD家来插上-S外IB授口运用,这样的技术使aSDio.所以SDK)4号是朴相当用纯的技术,透过SO的l,O按却;fc连接外罂外Hb并只透过SD上的I,。数据接位与这些外IK传输数据.而I1.SD用会金倒也推出很完祭的SDIOstack浜动程序,使得SDIO外IH(我们称为SDIO卡的开发与应用变祖相当热门。现在已经有特别多的手机或是持装五都支拈SOlO的功能(SD杯准贩本就是针对mobiledevic
3、e而制定),而H很多SDIO外图也都放开发出来,让手机外接外阴更加荷洁,并且开发上更有弹性(不须要内建外围).目前常见的SDIO外IHSDK)卡)IfiWi-Ficard(无线网将卡-CMOSsensorcard(照相模块)GPScard GSM.lGPRSmodemcard BluetthcardSDK)的应用将是格来嵌入式系统4iR要的接【】技术之一,井Il也会取代HOTGPIO式的SPI接2、SDIOAikSDiO总线和USB总统类似.SDQ也有两端.其中一端是HOST端.W端足device端,全H的信部是由HOSTMI发送蛤咐HB先的,DeviceIt可以相互JaftC1.K信+H0$
4、T给OEVlCE的时神辅号,每个时钟周期传珀个吩附,CMD信明C向的俏叽C干传送CH和反应.DAT0-DAT3俏:四条用于传送的吹伽线.VDD俏号:电海伯号.VSS1.VSS2:电源地伯号.3、SDIOIMMUItS方法:K个定时检查或按中断检,使件:Ikuigpgio(日NTl8)用于SDk检测GPGlO为高电平G没行挂入SDKGPGlo为低电平固插入/SDK4,SDlO*附SDK)总我上都是HOST端发起为求,然后DEVICE瑞网底M求.Sdk)功由由6个字节织成.a-COmmand:用起先传输的吩的,是由HOST端发i?DEVICE端的.其中吩咐是通过CMD伯号线传送的.b-Respon
5、se:I-IDEVICE返回的HOST的吩怀作为CommandWll,也是通过CMD线传送的.C-Data:敬粼型双向的传送的.可以设列为1线校式.也可以设设为4找模式.数据是通过DATOQAT3倒当找传箱的.SDtO的毋次煤作蚓6由HOST在CMD及上发起一个CMD.对于有的CMD.DEVICE须要返回ReSPOnSe.仃的则不缴:要.对F读吩呐.首先HOSTADEVICE发送助时,紧接莉DEVICE会一回个援.号,此时.当HOST收到何府的烈r.;.会杉敬粼放在4位的数掂找上.在传送攻榭的同时会跟前茄CRC校验码.当链个读传送完毕后,HOST会野次发送个吩咐.通知DEVICE操作完毕.DE
6、VlCE同时会返网个啊应.对于写盼学计先HoST会向DEVICE发送物机J着DEVICE会i铀手倡号,此时.“1HOST收到M位的粗F信号后.会将IkM放在4(4的Kt掘我上.在传送数屈的同时会跟同芹CRC投S码.当隹个与传送完毕后.HoST会再次发送个吩咐.通知DEVICE操作完中.DEVlCE同时会这回个科应.二、SDI。接口现动前面讲到.SDlO接口的wi.首先.它是个sdi。的卡的设省.备了Wifi的功能,所以SDIOIirI的WiFi明动就是在所芈动外面套上了个SDlO郭动的外壳.SDIO期动仍I口符合七备罢动的分Ji与分JN星也役备出动层(wifi-各)I核心层(向上向下供应接口)
7、II:机郭动层(实现SDKD架动)卜面先分析SDlO按I1!Jh功的实现,R几个,Il变的数据拮构用了核心层。生机用动星的数据交换处现).1,lnclude1u11mc.host.hSIrUClmmCJTOSl用朱筠述卡JHiWittstructmmc_card用来描法卡structmmcdriver用来描述mmcf*jstructSdioJunc用来描述功能i2%Structmmc.host,ops用来描述F1制!S携作接【】出数功傕,用从把机以制器层向COrC层注册操作也致,从而将COrC层与具体的主机限制/隔肉.也就是说core要搽作主机限制毋,就用这个OPS当中给的函数指仔探作,不能留
8、/用具体上限制搭的沿11.HOST层杂动分析在前面的东列文章中1.inUXSOI:曲动开发(:)SO1:*:力分析HOSTRff具体阑逑,下面只淌洁回顾一下一些戒要函数处理1、MWHostXCtt这里.修整的是S3C24XX的HOSTlR功程序,1driversmmcosVs3cmci.cStaticStructPmfOrf1.drhfers3rTHlSJlaMXF,.prs$3cfici_p_ops,.ldtabic53oici_drlvcr_ids.p11eMSk_吟K,.一2务。,以门南合.renove_devexlt_p(s3crl-rerove),10.shutdo*11-s3ici
9、_shutdoMnt;1213. s3evkepdev)W.(XS./.16. structWKJXistr;17. me-w*c-alloc-hst(sizeof(structs3cnci-bost),4pdev-dev);,寸Tmh8t体18.19. /26. )21.22. 注仪中断杜卬汨软GaIcIrq%处教出也发AW引起的汴抑中的,23. r4qutjrq(host-1rq,(3cncl.lrq,DftIVERJUvirq-cdjHCrKi_irq_cd,IRQFJRlGGE氏RlSlNGIIRQFTKlGGERA1.Ilh6,WIVtRNAME.host)27.2Sfwcadd_h
10、ost(oc);/initialisehosthardware卜州coreii,host29. -dcvlco_ddd(&host-class_dcv);.(pm11nc-,dctcct-chngc(host,);34.35. SchedulcdelayedworkintheWCworkqueu国度H”工作队列/36. rfic_schcdulc_dclayed_iK)rk(ahostdctcct-delay);搜寻host-detected得到以下值息:drfvrsmm0,re,host.c)1. NIT-D1.AY1.0.M0RK(ah5t-detect,mc-rescan;2.3. mc
11、_bu$_put(hO5t);/drd从busM故它为,。找内川5.6. mWWmehn联濯岂古被占用,力加ECRUX黑段如被占用,爨么hocUlr-1;告用为。7. *殁如为1,那么幺在Glk(I)M环中调用schedule切拉出自上,与用r或器的蝶性先成之后,依freJrTNSQhxU)的叼蚁,含点落登记到净存认列&hsJM中的N他和MmMC点以黑衿的此阴根8. /9. nrc_clain_hst(hO5t);10. EJreS5_tryEhos1.r0xf.nin)t11.12. staticintrrrescan_try_freq(structmehosthot,IInSiKnedfr
12、eq)13(14. 315. OrdersmPortgK:proe$010,then$0,thenft*C/16. if(wc-attach-5dio(host)17. returne;18. if(!iwc_attach_$d(hott)19. return6;2.if(!wc_attach_mc(ho5t)21. return;22. 23)24.25. wc_attach_sdlo(structmsdiot:lI-26. -rwc_attdch_bu5(hott,&rfK_$dlo_op$);27.28. cdJ总筑卜的制动匹死,双柳始化rd”29. mrc_5dlo_lnit_card
13、(bost,hostocr,NU1.1.,);30. -ordEJaIIOC_crd(ho$t,NUll)jHt*cardrM,r,31. wc-5et.bus-node(host,WC_BU5OOt_PUSW1.1.);/i2TmebusIfJEC32.33. struct5dlo_func5dio-ur(SDI0-MAX-FUWCS);/SDXOfunctions(devices)34.35. u11card,11);36. funcsdio-alloc-unc(card);/tstructsdio-llounc(fn-IJ-fun.39.4.nmc_add_card(host-card);tf,dor?i!.Mc_bus_typcs,41.sdlo-ddunc(ho$t-card-dlo_fuc1J);杉WioH:0不:“fIWio_tHl1.tyKS总汴这里泵列斯数