在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

BL808 RT-Thread Wi-Fi 驅動適配

RTThread物聯網操作系統 ? 來源:RT-Thread論壇「燕十三」 ? 作者:RT-Thread論壇「燕十 ? 2023-12-02 11:06 ? 次閱讀
BL808 WiFi 屬于 SOC 單芯片型無線 MCU,片上集成 WiFi 功能,移植 RT-Thread 過程中,需要使用 RT-Thread wlan 框架。RT-Thread wlan 框架是用于管理 Wi-Fi 驅動設備的框架,對下連接具體的 Wi-Fi 驅動,控制 Wi-Fi 的連接斷開、掃描等操作,對上為應用提供統一的 Wi-Fi 控制接口wlan 框架主要有 3 部分組成:
  • dev 驅動接口層:為 wlan 框架提供統一的接口調用。
  • manage 管理層:為用戶提供 Wi-Fi 掃描,鏈接,斷線重連等功能。
  • protocol 協議:負責處理 Wi-Fi 產生的數據流,如 lwip。
使用了 wlan 驅動框架之后,Wi-Fi 驅動只需要關注 Wi-Fi 的連接、斷開、掃描等動作,并通過 event 將相關動作告知 wlan 框架,由 wlan 框架根據收到的 event 管理 lwip。

1、使能 wlan 驅動

Linux 下 執行如下命令,并開啟 wlan 驅動。

1$scons--menuconfig
2RT-ThreadComponents--->
3DeviceDrivers--->
4[*]UsingWi-Fiframework--->

開啟 wlan 驅動后,默認會選中 lwip。

如 WiFi SOC 類芯片,原廠 SDK 中已經有線程管理 WiFi 數據收發,可關閉 lwip 中的 Rx thread 和 Tx thread,以節省系統資源。

1Network--->
2-*-LwIP:lightweightTCP/IPstack--->
3[*]NotuseRxthread
4[*]NotuseTxthread

2、wlan 驅動框架適配

初始化

通過 rt_wlan_dev_register() 注冊 STATION 和 AP 設備,并將 wlan 設備接口函數注冊進對應設備。

 1staticconststructrt_wlan_dev_opsops=
 2{
 3.wlan_init=drv_wlan_init,
 4.wlan_mode=drv_wlan_mode,
 5.wlan_scan=drv_wlan_scan,
 6.wlan_join=drv_wlan_join,
 7.wlan_softap=drv_wlan_softap,
 8.wlan_disconnect=drv_wlan_disconnect,
 9.wlan_ap_stop=drv_wlan_ap_stop,
10.wlan_ap_deauth=drv_wlan_ap_deauth,
11.wlan_scan_stop=drv_wlan_scan_stop,
12.wlan_get_rssi=drv_wlan_get_rssi,
13.wlan_set_powersave=drv_wlan_set_powersave,
14.wlan_get_powersave=drv_wlan_get_powersave,
15.wlan_cfg_promisc=drv_wlan_cfg_promisc,
16.wlan_cfg_filter=drv_wlan_cfg_filter,
17.wlan_cfg_mgnt_filter=drv_wlan_cfg_mgnt_filter,
18.wlan_set_channel=drv_wlan_set_channel,
19.wlan_get_channel=drv_wlan_get_channel,
20.wlan_set_country=drv_wlan_set_country,
21.wlan_get_country=drv_wlan_get_country,
22.wlan_set_mac=drv_wlan_set_mac,
23.wlan_get_mac=drv_wlan_get_mac,
24.wlan_recv=drv_wlan_recv,
25.wlan_send=drv_wlan_send,
26};
27intrt_hw_wifi_init(void)
28{
29rt_err_tret=RT_EOK;
30staticstructrt_wlan_devicewlan0;
31staticstructrt_wlan_devicewlan1;
32memset(&wifi_sta,0,sizeof(wifi_sta));
33ret=rt_wlan_dev_register(&wlan0,RT_WLAN_DEVICE_STA_NAME,&ops,0,&wifi_sta);
34wifi_sta.wlan=&wlan0;
35memset(&wifi_ap,0,sizeof(wifi_ap));
36ret|=rt_wlan_dev_register(&wlan1,RT_WLAN_DEVICE_AP_NAME,&ops,0,&wifi_ap);
37wifi_ap.wlan=&wlan1;
38returnret;
39}
40INIT_DEVICE_EXPORT(rt_hw_wifi_init);

啟動設備

在 main.c 中 加入 rt_wlan_set_mode 分別設置 STATION 和 AP 模式。

1intmain(void)
2{
3rt_kprintf("Hello,RISC-V!
");
4/*setwifiworkmode*/
5rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME,RT_WLAN_STATION);
6rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME,RT_WLAN_AP);
7return0;
8}

接口實現

在 STATION 模式下,至少需要實現連接路由器 drv_wlan_join() 和斷開路由器 drv_wlan_disconnect() 這 2 個函數。

在 AP 模式下,至少要實現 AP 開啟 drv_wlan_softap 和 AP 關閉 drv_wlan_ap_stop() 這 2個函數。

這 4 個函數可以按照芯片 SDK 上的接口對應實現即可。

event 管理

在實現以上接口用,需要在 Wi-Fi 觸發對應事件后,通過 event 通知 wlan 驅動框架。

在 STATION 模式下,當連接路由器成功后,通過 rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_CONNECT, RT_NULL) 函數通知 wlan 框架 station 已經連接路由成功。當斷開路由器后,通過 rt_wlan_dev_indicate_event_handle(wifi_sta.wlan, RT_WLAN_DEV_EVT_DISCONNECT, RT_NULL) 函數通過 wlan 框架 station 已經斷開路由器。

wlan 框架在收到 RT_WLAN_DEV_EVT_CONNECT 時間后會通過 dhcp 服務獲取 IP。

在 AP 模式下,開啟軟 AP 成功后,通過 rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_START, RT_NULL) 函數通知 wlan 框架 AP 模式開啟成功。關閉軟 AP 成功后,通過 rt_wlan_dev_indicate_event_handle(wifi_ap.wlan, RT_WLAN_DEV_EVT_AP_STOP, RT_NULL) 函數通知 wlan 框架軟 AP 關閉。

wlan 框架在收到 RT_WLAN_DEV_EVT_AP_START 時間后會開啟 DHCP_SERVER 服務。

采用了 RT-Thread wlan 驅動框架后,芯片 SDK 只需要負責管理 WiFi 相關的連接服務,而不需要管理 lwip 協議棧,

數據收發

上面說到 wlan 框架在收到對應的 evnet 后,負責啟動 lwip 中的對應服務。

  • wlan 框架通過 drv_wlan_send() 函數將需要發送的網絡數據包發輸出去。針對WiFi 而言,需要通過判斷設備是 station 還是 ap 后,將對應的數據包發送給 WiFi 。

1staticintdrv_wlan_send(structrt_wlan_device*wlan,void*buff,intlen)
2{
3if(wlan->user_data==&wifi_sta)
4bl_wifi_tx(0,(structpbuf*)buff);
5else
6bl_wifi_tx(1,(structpbuf*)buff);
7returnRT_EOK;
8}
  • WiFi 設備接收到數據后,通過 rt_wlan_dev_report_data() 函數,將數據傳遞給 wlan 框架,wlan 框架會進一步通過 lwip 做進一步處理。

1intbl_wifi_rx(uint8_tidx,structpbuf*p)
2{
3rt_err_tret=RT_EOK;
4if(idx==0)
5ret=rt_wlan_dev_report_data(wifi_sta.wlan,p,p->tot_len);
6else
7ret=rt_wlan_dev_report_data(wifi_ap.wlan,p,p->tot_len);
8returnret;
9}

其他必須實現的接口

  • mac相關

主要實現 mac 地址讀取和寫入。

1staticrt_err_tdrv_wlan_set_mac(structrt_wlan_device*wlan,rt_uint8_tmac[])
2{
3wifi_mgmr_sta_mac_set(mac);
4returnRT_EOK;
1staticrt_err_tdrv_wlan_get_mac(structrt_wlan_device*wlan,rt_uint8_tmac[])
2{
3wifi_mgmr_sta_mac_get(mac);
4returnRT_EOK;
5}
  • Wi-Fi scan

 1staticrt_err_tdrv_wlan_scan(structrt_wlan_device*wlan,structrt_scan_info*scan_info)
 2{
 3intchannel_input_num=0;
 4uint8_tchannel_input[MAX_FIXED_CHANNELS_LIMIT]={0};
 5constchar*ssid=NULL;
 6uint8_tbssid[6]={0xff,0xff,0xff,0xff,0xff,0xff};
 7uint8_tscan_mode=SCAN_ACTIVE;
 8uint32_tduration_scan_us=0;
 9if(scan_info!=NULL&&scan_info->ssid.len>0)
10{
11ssid=scan_info->ssid.val;
12}
13if(wifi_mgmr_scan_adv(wlan,wifi_scan_complete_callback,channel_input,channel_input_num,bssid,ssid,scan_mode,duration_scan_us)!=0)
14return-RT_ERROR;
15returnRT_EOK;
16}

BL808 WiFi 屬于 SOC 單芯片型無線 MCU,片上集成 WiFi 功能,移植 RT-Thread 過程中,需要使用 RT-Thread wlan 框架。

本文為RT-Thread論壇用戶「燕十三」的原創文章,再次感謝


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1852

    瀏覽量

    85685
  • WIFI
    +關注

    關注

    81

    文章

    5310

    瀏覽量

    204935
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40419

原文標題:BL808 RT-Thread Wi-Fi 驅動適配

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Wi-Fi 4到Wi-Fi 7:網速飆升40倍的無線革命

    1 Wi-Fi技術的快速發展 每一代新的Wi-Fi協議發布,都會帶來更高的無線速率。 ? 從Wi-Fi 4到Wi-Fi 7:無線網絡技術顯著提升,實現了網速的巨大飛躍。 ? ?
    的頭像 發表于 12-09 10:10 ?436次閱讀
    從<b class='flag-5'>Wi-Fi</b> 4到<b class='flag-5'>Wi-Fi</b> 7:網速飆升40倍的無線革命

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash
    的頭像 發表于 11-21 01:05 ?435次閱讀
    【S32K146 <b class='flag-5'>RT-Thread</b>】之 使用SFUD組件<b class='flag-5'>驅動</b>spi flash

    RT-Thread上CAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅動移植,并正常啟動
    的頭像 發表于 11-13 01:03 ?1408次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實踐

    【S32K146 RT-thread】之 SPI驅動適配

    概述RT-Thread對SPI總線的驅動,抽象出了spibus的設備驅動,我們基于S32K146的硬件學習spibus設備驅動
    的頭像 發表于 11-01 08:11 ?604次閱讀
    【S32K146 <b class='flag-5'>RT-thread</b>】之 SPI<b class='flag-5'>驅動</b><b class='flag-5'>適配</b>

    2024 RT-Thread全球巡回 線下培訓火熱來襲!

    親愛的RT-Thread社區成員們:我們非常高興地宣布,2024年RT-Thread全球開發者線下培訓即將拉開帷幕!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發的絕佳機會。
    的頭像 發表于 08-07 08:35 ?1508次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓火熱來襲!

    【好書推薦】RT-Thread設備驅動開發指南

    近年來國內芯片產業和物聯網產業的快速崛起,行業發展迫切需要更多人才,尤其需要掌握嵌入式操作系統等底層技術的人才。隨著RT-Thread被更廣泛地應用于行業中,開發者對嵌入式驅動開發的需求越來越
    的頭像 發表于 08-01 08:35 ?744次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅動</b>開發指南

    RT-Thread Wi-Fi Host Driver (WHD)

    概述WHD是一個獨立的嵌入式Wi-Fi主機驅動程序,它提供了一組與英飛凌WLAN芯片交互的api。WHD是一個獨立的固件產品,可以很容易地移植到任何嵌入式軟件環境,包括流行的物聯網框架。因此,WHD包含了RTOS和TCP/IP網絡抽象層的鉤
    的頭像 發表于 07-02 08:35 ?557次閱讀
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Wi-Fi</b> Host Driver (WHD)

    6月6日杭州站RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    6月6日下午我們將在杭州舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發表于 05-28 08:35 ?490次閱讀
    6月6日杭州站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月25日北京站RT-Thread線下workshop,探索RT-Thread混合部署新模式

    4月25日,下午我們將在北京舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發表于 04-16 08:35 ?471次閱讀
    4月25日北京站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式

    4月10日深圳場RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深嵌入式軟件工程師農曉明老師為您講
    的頭像 發表于 03-27 11:36 ?893次閱讀
    4月10日深圳場<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月10日深圳場RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發表于 03-27 08:34 ?585次閱讀
    4月10日深圳場<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    恩智浦半導體正式加入RT-Thread全球合作伙伴計劃!

    前不久,恩智浦半導體正式加入RT-Thread全球合作伙伴計劃,成為RT-Thread高級會員合作伙伴。同時,RT-Thread現已成為恩智浦注冊合作伙伴(RT-Thread| 簡介合
    的頭像 發表于 03-14 10:40 ?682次閱讀
    恩智浦半導體正式加入<b class='flag-5'>RT-Thread</b>全球合作伙伴計劃!

    RT-Thread驅動開發指南進階篇-動手驅動先楫未適配的外設LCD

    經過上一篇的《《RT-Thread設備驅動開發指南》基礎篇--以先楫bsp的hwtimer設備為例》闡述,可以大致了解到RT-thread設備驅動開發的方法步驟,開發指南中的進階篇外設
    的頭像 發表于 02-25 11:04 ?2836次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>驅動</b>開發指南進階篇-動手<b class='flag-5'>驅動</b>先楫未<b class='flag-5'>適配</b>的外設LCD

    RT-Thread設備驅動開發指南》基礎篇--以先楫bsp的hwtimer設備為例

    一、概述(一)RT-Thread設備驅動RT-Thread設備驅動開發指南》書籍是RT-thread官方出品撰寫,系統講解
    的頭像 發表于 02-24 08:16 ?1872次閱讀
    《<b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅動</b>開發指南》基礎篇--以先楫bsp的hwtimer設備為例

    RT-Thread設備驅動開發指南基礎篇—以先楫bsp的hwtimer設備為例

    RT-Thread設備驅動開發指南》書籍是RT-thread官方出品撰寫,系統講解RT-thread IO設備驅動開發方法,從三方面進行講解
    的頭像 發表于 02-20 16:01 ?1836次閱讀
    <b class='flag-5'>RT-Thread</b>設備<b class='flag-5'>驅動</b>開發指南基礎篇—以先楫bsp的hwtimer設備為例
    主站蜘蛛池模板: 国产主播在线播放 | 最色成人网| 欧美性生活网址 | 色视频在线观看完整免费版 | 亚洲一区二区中文 | 欧美性69 | 在线观看你懂的网址 | 毛片在线播放网站 | 深夜视频在线免费观看 | 俺来也俺来也天天夜夜视频 | 亚洲狠狠色丁香婷婷综合 | 日日做夜夜爽夜夜爽 | 神马午夜影视 | 婷婷在线观看香蕉五月天 | 97人摸人人澡人人人超一碰 | 人人插人人爽 | 五月天婷婷网亚洲综合在线 | 四虎电影免费观看网站 | 美女一级毛片免费观看 | 看全色黄大色大片免费久久 | 在线观看视频一区 | 亚洲综合一区二区 | 韩国成人毛片aaa黄 韩国床戏合集三小时hd中字 | 日韩欧美印度一级毛片 | 午夜欧美| 亚洲卡一卡2卡三卡4卡国色 | 欧美一区二区精品 | 午夜福利毛片 | 就操成人网 | 黄色毛片免费网站 | 九九99久久精品午夜剧场免费 | 四虎在线免费视频 | 1000又爽又黄禁片在线久 | 主人扒开腿揉捏花蒂调教cfh | 欧美jizzhd精品欧美4k | 在线免费观看一级毛片 | 看全黄大片狐狸视频在线观看 | 欧美资源在线观看 | 亚洲婷婷六月 | 高清不卡一区 | 日韩午夜在线视频不卡片 |