CLK信號(hào):HOST給DEVICE的 時(shí)鐘信號(hào),每個(gè)時(shí)鐘周期傳輸一個(gè)命令或數(shù)據(jù)位 。
CMD信號(hào):命令在 CMD 線上串行傳輸,是雙向半雙工的(命令從主機(jī)到從卡,而命令的響應(yīng)是從卡發(fā)送到主機(jī))。
DAT0-DAT3 信號(hào):四條用于快速傳送數(shù)據(jù)的數(shù)據(jù)線,由CLK同步的信號(hào)。 ?1、設(shè)備驅(qū)動(dòng)的注冊(cè)與匹配
[Drivers/net/wireless/libertas/if_sdio.c]
/* sdio function device driver*/
struct sdio_driver {
char *name; //設(shè)備名
const struct sdio_device_id *id_table; //設(shè)備驅(qū)動(dòng)ID
int (*probe)(struct sdio_func *, const struct sdio_device_id *);//匹配函數(shù)
void (*remove)(struct sdio_func *);
struct device_driver drv;
};
數(shù)據(jù)的接收,通過(guò)中斷的方式來(lái)解決
網(wǎng)絡(luò)設(shè)備接收數(shù)據(jù)的主要方法是由中斷引發(fā)設(shè)備的中斷處理函數(shù),中斷處理函數(shù)推斷中斷的類(lèi)型,假設(shè)為接收中斷。則讀取接收到的數(shù)據(jù)。分配sk_buff數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)緩沖區(qū)。并將接收的數(shù)據(jù)拷貝到數(shù)據(jù)緩存區(qū)。并調(diào)用netif_rx()函數(shù)將sk_buff傳遞給上層協(xié)議。
搜索if_sdio_interrupt,可知道它是在if_sdio.c文件里if_sdio_probe()函數(shù)中sdio_claim_irq(func, if_sdio_interrupt) ,func->irq_handler = if_sdio_interrupt。當(dāng)s3cmci_irq中斷處理函數(shù)的S3C2410_SDIIMSK_sdioIRQ 中斷被觸發(fā)時(shí)將調(diào)用if_sdio_interrupt()函數(shù),進(jìn)行接收數(shù)據(jù)。
static void if_sdio_interrupt(struct sdio_func *func)
數(shù)據(jù)發(fā)送維護(hù)了網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),是比較重要的調(diào)試接口,可以由此獲得全部的輸出數(shù)據(jù)信息。
//IP層通過(guò)dev_queue_xmit()將數(shù)據(jù)交給網(wǎng)絡(luò)設(shè)備協(xié)議接口層,網(wǎng)絡(luò)接口層通過(guò)netdevice中的注冊(cè)函數(shù)的數(shù)據(jù)發(fā)送函數(shù)int dev_queue_xmit(struct sk_buff *skb)
移除函數(shù)當(dāng)sdio卡拔除時(shí)。驅(qū)動(dòng)會(huì)調(diào)用該函數(shù)。完畢對(duì)應(yīng)操作。
拔除后,首先是管腳電平發(fā)生變化,從而觸發(fā)管腳中斷,程序由此得到消息,執(zhí)行了釋放函數(shù)
如釋放占有的資源。禁止func功能函數(shù)。釋放host。
if_sdio_remove(struct sdio_func *func)
---->lbs_stop_card(card->priv);
lbs_remove_card(card->priv);
---->kthread_stop(priv->main_thread); //終止內(nèi)核線程
lbs_free_adapter(priv);
lbs_cfg_free(priv);
free_netdev(dev);
flush_workqueue(card->workqueue); //刷新工作隊(duì)列
destroy_workqueue(card->workqueue);
sdio_claim_host(func);
sdio_release_irq(func);
sdio_disable_func(func);
sdio_release_host(func);
本文介紹了基于SDIO接口協(xié)議的WiFi模塊,簡(jiǎn)單闡述了SDIO總線通信原理,列舉了設(shè)備驅(qū)動(dòng)的注冊(cè)、匹配中使用到的重點(diǎn)接口函數(shù)的作用,包含數(shù)據(jù)接收,發(fā)送,以及資源的釋放。讓用戶在一些設(shè)備上使用SDIO接口協(xié)議開(kāi)發(fā)時(shí),更清晰方便的了解其工作原理和重點(diǎn)接口函數(shù)的使用,幫助用戶提升開(kāi)發(fā)效率。
更多熱點(diǎn)文章閱讀- 粵港澳大灣區(qū)國(guó)際人工智能與機(jī)器人高峰會(huì)2022重磅來(lái)襲!
- 搜電充電:創(chuàng)新“服務(wù)卡片”,讓即時(shí)充電更便捷
- ArkUI框架,更懂程序員的UI信息語(yǔ)法
- 全球首個(gè)港口全面數(shù)字孿生技術(shù)底座“津鴻”系統(tǒng)發(fā)布
-
一個(gè)在線閱讀OpenHarmony全量代碼的網(wǎng)站
提示:本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請(qǐng)注明以上來(lái)源。如需社區(qū)合作及入群交流,請(qǐng)?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。
原文標(biāo)題:基于SDIO協(xié)議的WiFi模塊實(shí)現(xiàn)指南
文章出處:【微信公眾號(hào):電子發(fā)燒友開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
電子發(fā)燒友
+關(guān)注
關(guān)注
33文章
552瀏覽量
33019 -
開(kāi)源社區(qū)
+關(guān)注
關(guān)注
0文章
94瀏覽量
462
原文標(biāo)題:基于SDIO協(xié)議的WiFi模塊實(shí)現(xiàn)指南
文章出處:【微信號(hào):HarmonyOS_Community,微信公眾號(hào):電子發(fā)燒友開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論