91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

HPM6750 測評 | 不寫一行代碼,兩分鐘實現WiFi聯網

先楫半導體HPMicro ? 2022-07-22 11:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、創(chuàng)建RT-Thread項目

開始本篇實驗前,需要搭建RT-Thread開發(fā)環(huán)境,具體可以參考:“快來看!先楫芯與RT-Thread碰出火花了”

使用RT-Thread Studio創(chuàng)建名為hpm_net_test的項目:

17ff981c-039c-11ed-9ade-dac502259ad0.png

二、為項目添加RW007支持

2.1 打開RT-Thread Settings

項目創(chuàng)建成功后,打開項目的RT-Thread Settings界面:

181b7168-039c-11ed-9ade-dac502259ad0.png

可以看到,默認情況下SPI驅動框架已經打開了。

BSP中的SPI1驅動也已經打開了:

18342528-039c-11ed-9ade-dac502259ad0.png

2.2 添加RW007軟件包

在RT-Thread Settings界面,通過點擊“添加軟件包”按鈕,會彈出RT-Thread Package Center界面:

184550a0-039c-11ed-9ade-dac502259ad0.png

在中間的搜索框中輸入RW007,回車,可以找到RW007驅動程序軟件包:

1855e9b0-039c-11ed-9ade-dac502259ad0.png

點擊界面“添加”按鈕,即可將RW007軟件包添加到當前項目的包配置中了,此時軟件包并沒有真正下載下來。點完添加按鈕后,界面回到了RT-Thread Settings,此時按Ctrl+S保存,則會開始下載。下載過程中,控制臺子窗口中可以看到一些日志輸出:

18726040-039c-11ed-9ade-dac502259ad0.png

稍等片刻,可以看到控制臺中間有“RW007 v2.0.1 is downloaded successfully.”輸出。此時rw007軟件包已經成功下載到當前項目中了,具體代碼位于packages子目錄下:

188dcf4c-039c-11ed-9ade-dac502259ad0.png

2.3 配置RW007驅動

在RT-Thread Settings界面,將鼠標移動到RW007組件上,會彈出懸浮菜單:

18a20502-039c-11ed-9ade-dac502259ad0.png

點擊懸浮菜單中的“配置項”,即可進入RW007軟件包的配置界面:

18b69058-039c-11ed-9ade-dac502259ad0.png

可以看到,默認有一個RW007 for stm32的配置,就是說RW007默認包含了STM32的驅動。


這里我們需要修改的就是這個example driver port配置項,點擊下拉菜單改為不使用示例驅動:

18d622f6-039c-11ed-9ade-dac502259ad0.png

選中后,記得Ctrl+S保存配置。

2.4 編譯、燒錄、運行項目

在RT-Thread Studio中按Ctrl+B快捷鍵或點擊“錘子”圖標,即可開始編譯項目。編譯完成后,可以看到控制臺輸出了RAM和Flash占用:

18efca8a-039c-11ed-9ade-dac502259ad0.png

此時,將開發(fā)板連接到PC,并使用串口助手或者其他終端工具,連接到新增的串口上。

再到RT-Thread Studio中,按Ctrl+Alt+D快捷鍵或點擊“下載”圖標即可進行燒錄(或者直接進行調試也可以)。


燒錄完成后,可以看到串口終端上有輸出:

19109bf2-039c-11ed-9ade-dac502259ad0.png

可以看到,輸出了RT-Thread版本信息和RW007模組的序列號以及固件版本信息。這里能夠看到RW007模組的固件版本信息,其實HPM6750芯片和RW007模組之間已經可以正常通信了。

三、WiFi測試

接下來,我們進行一些簡單的WiFi測試。

添加RW007組件后,默認會打開RT-Thread的WiFi驅動框架,而RT-Thread的WiFi驅動框架中同時帶有一個測試命令——wifi(對就是這么直接)。

我們可以在RT-Thread的msh交互環(huán)境中使用help查看當前已有哪些命令:

192272c8-039c-11ed-9ade-dac502259ad0.png

可以看到有一個wifi命令。


接下來我們查看wifi命令的使用方式:

19326886-039c-11ed-9ade-dac502259ad0.png

3.1 掃描測試


嘗試掃描周圍的WiFi熱點:

1946298e-039c-11ed-9ade-dac502259ad0.png

可以看到,成功掃描到了周圍的WiFi熱點。

3.2 連接測試


嘗試連接其中的一個熱點:

195f900e-039c-11ed-9ade-dac502259ad0.png

然而,不幸的是,發(fā)生異常了。

不過,從這里的幾個warning打印信息可以看到,應該是因為tcpip線程棧溢出導致的。

3.3 調大tcpip線程棧大小


接下來,我們通過RT-Thread Settings修改tcpip線程棧的大小。

同樣,首先打開RTT Settings界面,鼠標指針放到LwIP組件圖標上:


197289b6-039c-11ed-9ade-dac502259ad0.png

打開配置項,找到RT_LWIP_TCPTHREAD_STACKSIZE配置項,并將其修改為4096:

19874748-039c-11ed-9ade-dac502259ad0.png

界面下方可以看到這個LwIP線程棧大小的配置項名稱為RT_LWIP_TCPTHREAD_STACKSIZE。至于這里為什么要改這個配置項,沒有在RT-Thread用過LwIP的同學可能會疑惑。其實,這里可以根據線程名“tcpip”,一路搜索代碼,首先可以找到創(chuàng)建名為tcpip線程的代碼位置,然后可以找到線程棧大小參數的來源。這里是搜索結果:

199e6900-039c-11ed-9ade-dac502259ad0.png

19a99bf4-039c-11ed-9ade-dac502259ad0.png

19bb72c0-039c-11ed-9ade-dac502259ad0.png

PS:因為默認使用的是lwip 2.0.3版本,所以這里只搜索了lwip-2.0.3的代碼。

3.4 重新測試

配置修改完成后,Ctrl+S保存,重新編譯項目、燒錄、運行,這次能夠成功連接WiFi熱點了:

19ce79ce-039c-11ed-9ade-dac502259ad0.png

可以看到,已經成功通過DHCP從熱點獲取到IP地址了。

四、網絡測試

4.1 RT-Thread網絡組件


前面提到,添加了RW007軟件包后,會開啟RT-Thread的WiFi驅動框架;同時,也會開啟系統(tǒng)中網絡協(xié)議相關的組件,主要包括套接字抽象層(SAL)、網絡接口層、輕量級TCP/IP堆棧(LwIP),如下圖所示。

19dff032-039c-11ed-9ade-dac502259ad0.png

其中,LwIP的默認版本用的是v2.0.3,也可以切換為其他版本(RT-Thread系統(tǒng)中同時提供了LwIP的好幾個版本可供選擇)。

4.2 RT-Thread網絡組件相關的命令

RT-Thread系統(tǒng)網絡相關組件打開后,將會向msh中注冊幾個命令用于測試,具體包括:ifconfig、ping、netstat、dns等,可以在help的輸出中找到:

19fe2cb4-039c-11ed-9ade-dac502259ad0.png

4.3 ping測試

有IP地址了,我們可以用ping命令測試一下能不能訪問baidu.com:

1a0bf902-039c-11ed-9ade-dac502259ad0.png

可以看到,能夠成功ping通baidu.com了。

使用baidu.com的域名能夠訪問,說明DNS整個流程都是OK的,同時網路協(xié)議也是沒問題的。

五、網絡帶寬測試

5.1 添加netutils軟件包

RT-Thread的netutils軟件包中提供了iperf命令,可以用于測試網絡帶寬;

和前面類似的方法,為項目添加netutils組件:

1a15ac54-039c-11ed-9ade-dac502259ad0.png

打開“配置項”后,打開iperf的配置項:

1a27edf6-039c-11ed-9ade-dac502259ad0.png

修改配置后,Ctrl+S保存。

重新編譯、燒錄、運行項目,help的輸出可以看到多了iperf命令。

5.2 iperf命令參數

在RT-Thread的msh中運行iperf,默認輸出幫助信息:

1a34503c-039c-11ed-9ade-dac502259ad0.png

可以看到iperf的命令參數使用方法。

需要注意:

1.RT-Thread的iperf命令實現中,對參數的順序有要求,如果使用過程中發(fā)現參數報錯,需要查看源碼定位原因;

2.RT-Thread的iperf不支持持續(xù)時間選項,一般是先啟動,后通過stop選項停止的方式控制測試時長;

5.3 PC端的iperf

PC端的iperf可以到iperf項目官網下載:https://iperf.fr/iperf-download.php

我使用的mobaxterm,里面自帶了iperf命令,所以就不單獨下載了:

  1. 1a48fc94-039c-11ed-9ade-dac502259ad0.png

5.4 進行iperf測試


進行iperf測試之前,需要注意:

1.最好用PC創(chuàng)建熱點,用無線路由器也行,但是需要確保信號強度足夠;

2.確保開發(fā)板和PC直線的距離不要太遠,否則WiFi信號較弱,測試的結果可能會偏小;

3.最好在WiFi熱點較少的環(huán)境下進行測試,否則測出的結果數據也會偏??;

下面進行測試,測試步驟如下:


在PC上,創(chuàng)建熱點,例如名為rtt,密碼為12345678

在PC上,啟動iperf服務端:iperf -s -p 5678

在PC上,使用ipconfig/ifconfig命令查看熱點的IP地址,例如我在Win10上創(chuàng)建的熱點,IP地址是:192.168.137.1

在開發(fā)板上,連接PC啟動熱點:wifi join rtt 12345678

5.在開發(fā)板上,查看IP地址是否已成功分配:ifconfig,另外,可以通過ping命令測試開發(fā)板和PC直接IP是否可達

6.在開發(fā)板上,啟動iperf客戶端:iperf -c 192.168.137.1 -p 5678

啟動后,可以通過ps命令查看正在運行的線程

7.一段時間后,在開發(fā)板上,停止iperf客戶端:iperf —stop

8.開發(fā)板上iperf停止后,PC端應該可以看到iperf的輸出;

開發(fā)板上整個過程的輸出如下:

1a5ed8fc-039c-11ed-9ade-dac502259ad0.png

PC端輸出:

1a6da990-039c-11ed-9ade-dac502259ad0.png

可以看到帶寬為7.45Mbps

5.5 iperf測試小結


實際上,影響WiFi帶寬測試結果數據的因素很多。我們這里,其中,起決定性的的主要由以下幾個方面:

RW007模組本身支持的最高WiFi傳輸速率;

RW007模組的SPI接口支持的最高工作頻率;

HPM6750 SPI接口最高支持的工作頻率;

熱點(PC或路由器)的WiFi最高傳輸速率;

各種環(huán)境因素,例如開發(fā)板和PC直接的距離、環(huán)境是否有其他熱點干擾等等;

六、業(yè)務代碼——socket測試


前面的ping測試、iperf測試使用的是系統(tǒng)已有組件或軟件包。除此之外,也可以通過socket連接網絡。這里以一個簡單的使用socket獲取baidu首頁為例(直接使用web_client軟件包也可以實現該功能):

#include #include #include #include #define DEFAULT_HOST "example.com"#define DEFAULT_PORT 80#define CONTENT_LENGTH "Content-Length:"#define HEADER_END_MARK "\\r\\n\\r\\n"uint32_t get_host_addr(const char *host){ uint32_t dest = 0; struct hostent *he; he = gethostbyname(host); if (he && he->h_addr_list && he->h_addr_list[0]) { dest = ((struct in_addr *)(he->h_addr_list[0]))->s_addr; } return dest;}#define close(fd) closesocket(fd)int fetch(int argc, char* argv[]){ char* host = DEFAULT_HOST; int port = DEFAULT_PORT; int sockfd = -1; int retval = 0; int recved = 0; int content_start = 0; int content_length = 0; struct sockaddr_in server_addr = {0}; static char request[256]; static char response[4096]; if (argc > 1) host = argv[1]; if (argc > 2) port = atoi(argv[2]); sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { rt_kprintf("create socket failed!\\n"); return -1; } rt_kprintf("create socket success!\\n"); rt_memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); server_addr.sin_addr.s_addr = get_host_addr(host); // IP轉為 “點分十進制” 格式 inet_ntop(AF_INET, &server_addr.sin_addr, response, sizeof(response)); rt_kprintf("server IP: %s\\n", response); rt_kprintf("connect to server...\\n"); retval = connect(sockfd, (const struct sockaddr *)&server_addr, sizeof(server_addr)); if (retval < 0) { rt_kprintf("connect failed!\\n"); close(sockfd); return -1; } rt_snprintf(request, sizeof(request), "GET / HTTP/1.1\\r\\n" "Host: %s\\r\\n" "User-Agent: curl/7.81.0\\r\\n" "Accept: */*\\r\\n" "\\r\\n", host); rt_kprintf("send request...\\n"); retval = send(sockfd, request, rt_strlen(request), 0); if (retval < 0) { rt_kprintf("send failed!\\n"); close(sockfd); return -1; } rt_kprintf("%d bytes sent\\n", retval); rt_kprintf("recv response...\\n"); recved = 0; while ((retval = recv(sockfd, &response[recved], sizeof(response) - recved, 0)) > 0) { if (content_length == 0) { char* content_length_pos = rt_strstr(response, CONTENT_LENGTH); if (content_length_pos) { content_length = atoi(content_length_pos + rt_strlen(CONTENT_LENGTH)); rt_kprintf("found %s %d!\\n", CONTENT_LENGTH, content_length); } } if (content_start == 0) { char* header_end = rt_strstr(response, HEADER_END_MARK); if (header_end) { content_start = header_end + rt_strlen(HEADER_END_MARK) - response; rt_kprintf("content_start: %d\\n", content_start); } } recved += retval; rt_kprintf("recved: %d %d %d\\n", recved, content_start, content_length); if (content_length && content_start && recved - content_start >= content_length) { rt_kprintf("fully recved!\\n"); break; } } response[recved] = '\\0'; rt_kprintf("==== Response Header ====:\\n"); for (int i = 0; i < content_start; i++) { rt_kprintf("%c", response[i]); } rt_kprintf("==== Response Content ====:\\n"); for (int i = content_start; i < recved; i++) { rt_kprintf("%c", response[i]); } if (retval < 0) { rt_kprintf("recv failed!\\n"); close(sockfd); return -1; } shutdown(sockfd, SHUT_RDWR); close(sockfd); return 0;}MSH_CMD_EXPORT(fetch, "fetch home page of a site");

這是一段使用裸socket實現的簡單HTTP客戶端,依次進行了請求發(fā)送、回復接收和回復解析的過程,測試結果:

1a7732f8-039c-11ed-9ade-dac502259ad0.png

七、原理簡介


以上操作,我們沒有任何底層驅動相關代碼,就實現了通過HPM6750EVKMINI開發(fā)板的RW007 WiFi模組實現聯網功能。這是因為我們基于RT-Thread的項目中,從底到上已經有了:

HPM6750EVKIMNI BSP中包含了SPI驅動(libraries/drivers/drv_spi.c文件);

默認打開了spi1的編譯配置;

HPM6750EVKIMNI BSP中包含了網卡初始化代碼(board/rw007_port.c文件);

向系統(tǒng)注冊了啟動時自動執(zhí)行的wifi_spi_device_init函數;

wifi_spi_device_init函數內部會調用rw007軟件包中的rt_hw_wifi_init函數;

RW007軟件包,包含RW007模組的驅動代碼;

底層使用SPI驅動實現主控和RW007模組之間的通訊;

上層向RT-Thread系統(tǒng)注冊WLAN設備(rt_hw_wifi_init函數內部會調用rt_wlan_dev_register函數);

RT-Thread的WiFi(也叫WLAN)驅動框架;

對下連接具體的 WIFI 驅動,控制 WIFI 的連接斷開,掃描等操作。

對上承載不同的應用,為應用提供 WIFI 控制,事件,數據導流等操作,為上層提供統(tǒng)一的 WIFI 控制接口。

RT-Thread的Socket抽象層(SAL),統(tǒng)一幾種不同的socket實現;

RT-Thread的TCP/IP協(xié)議棧(LwIP),具體的TCP/IP協(xié)議實現;

(文章摘選自RTT @xusiwei1236)

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

    關注

    82

    文章

    5512

    瀏覽量

    213658
  • RTThread
    +關注

    關注

    8

    文章

    132

    瀏覽量

    42733
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    hpm6750 個板載網卡+usbcdc_ecm網卡,多次調用ftp,切換網卡后,報錯

    hpm6750 個板載網卡+usbcdc_ecm網卡,多次調用ftp,多次切換網線后,出現報錯pbuf_free:p-&gt;ref&gt;0;有時候出現[E
    發(fā)表于 01-19 16:05

    法本電子一行蒞臨華為參觀交流

    1月8日,法本董事長Alen、法本電子CEO Sam率代表團一行前往華為坂田基地,開展“法本走進華為”專題交流活動,共話合作新機遇。
    的頭像 發(fā)表于 01-10 14:38 ?863次閱讀

    程序員最常見謊言

    :你5天可以做完么?開發(fā)人員:可以! 24就改一行代碼,不會影響其他東西的,沒事的。 25“這個兩分鐘就可以修復的!” 26這不是 Bug,這是你電腦問題!重啟下再看看? 27這個功能
    發(fā)表于 12-10 08:24

    韓國交通部部長一行參訪小馬智

    10月17日,韓國國土交通部部長金潤德一行抵達北京亦莊參觀小馬智,并試乘了無人駕駛Robotaxi。小馬智副總裁高天帶隊接待了代表團一行。隨團參訪成員包括韓國國土交通部移動出行與汽
    的頭像 發(fā)表于 10-24 16:59 ?1469次閱讀

    廣西政府領導一行到訪西井科技

    近日,廣西壯族自治區(qū)人民政府副秘書長,自治區(qū)大數據發(fā)展局黨組書記、局長趙志剛一行到訪西井科技上海總部。
    的頭像 發(fā)表于 07-26 15:30 ?1193次閱讀

    使用 CYW4373,啟動后立即進行校準,并且每兩分鐘進行次校準,怎么操作?

    我已確認校準時電流值處于最大值。 使用 CYW4373,啟動后立即進行校準,并且每兩分鐘進行次校準。 何時使用 CYW55573 進行校準?
    發(fā)表于 07-17 06:16

    上海雷克薩斯一行到訪中汽中心

    近日,雷克薩斯(上海)新能源有限公司(以下簡稱“上海雷克薩斯”)總經理加藤武郎一行到訪中汽中心,與中汽中心黨委副書記王曉杉進行了座談交流。
    的頭像 發(fā)表于 06-13 15:18 ?1055次閱讀

    中汽中心一行到訪理想汽車

    近日,中汽中心副總經理周華一行赴理想汽車走訪交流,受到理想汽車總裁馬東輝等領導的熱情接待。
    的頭像 發(fā)表于 06-11 13:45 ?804次閱讀

    奇瑞汽車一行到訪中汽中心

    近日,奇瑞汽車股份有限公司(以下簡稱“奇瑞汽車”)執(zhí)行副總裁、汽車工程技術研發(fā)總院院長高新華一行到訪中汽中心,與中汽中心黨委委員、副總經理李洧就下步深化合作進行了深入交流。
    的頭像 發(fā)表于 05-29 17:31 ?935次閱讀

    臨港集團一行到訪中汽中心

    近日,上海臨港經濟發(fā)展(集團)有限公司(以下簡稱“臨港集團”)黨委委員、副總裁孫萌一行到訪中汽中心,與中汽中心副總經理龔進峰進行了座談交流。
    的頭像 發(fā)表于 05-28 16:48 ?856次閱讀

    京東集團一行到訪中汽中心

    近日,京東集團股份有限公司(以下簡稱“京東集團”)副總裁、京東零售自有品牌業(yè)務總裁湯恒晟一行到訪中汽中心,與中汽中心黨委委員、副總經理周華進行了座談交流。
    的頭像 發(fā)表于 05-23 14:32 ?794次閱讀

    浙江大學師生一行蒞臨行芯科技參觀交流

    日前,浙江大學竺可楨學院師生一行來到杭州芯科技有限公司參觀交流。
    的頭像 發(fā)表于 05-06 10:28 ?1074次閱讀

    重磅更新 | 先楫半導體HPM_SDK v1.9.0 發(fā)布

    版本更新概況[New]增加HPM6P00系列MCU以及hpm6p00evk支持[New]增加了開發(fā)板已知問題說明[Update]將全系列開發(fā)板VCore電壓調節(jié)至1.275V,HPM6750系列開發(fā)板主頻設成816MHz,
    的頭像 發(fā)表于 04-02 08:31 ?1110次閱讀
    重磅更新 | 先楫半導體<b class='flag-5'>HPM</b>_SDK v1.9.0 發(fā)布

    兩分鐘帶你了解多功能標準源

    有人還在為校準各種儀器頭疼?現在臺設備搞定所有!今天帶你快速解鎖儀器界的“全能選手”——多功能標準源,以致遠儀器的ZMC6520為例,揭秘它的超能力!什么是標準源標準源就是儀器的“標尺”,就像天平
    的頭像 發(fā)表于 04-01 11:37 ?1078次閱讀
    <b class='flag-5'>兩分鐘</b>帶你了解多功能標準源

    越南副總理一行到訪商湯科技

    近日,越南副總理阮志勇率代表團一行到訪商湯。深圳商湯總經理李廷波主介紹、商湯科技首席人力資源官張春娟及商湯科技聯合創(chuàng)始人、元蘿卜智能科技有限公司總裁馬堃等陪同熱情接待考察團一行。
    的頭像 發(fā)表于 03-24 10:01 ?1064次閱讀