女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

第十二章 W55MH32 NetBIOS示例

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-07-24 09:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業控制中多樣化的連接需求,無論是與各類傳感器、執行器的通信,還是對復雜工業協議的支持,都能游刃有余,成為復雜工控領域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網關模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32L這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZO2iBiBmAe3DyAACpGc5mWX8613.png

第十二章 W55MH32 NetBIOS示例

本篇文章我們將詳細介紹如何在W55MH32芯片上面實現NetBIOS功能,并通過實戰例程,為大家講解如何通過名稱進行PING測試。

該例程用到的其他網絡協議,例如DHCP請參考相關章節。有關W55MH32的初始化過程,請參考Network Install章節,這里將不再贅述。

1 NetBIOS簡介

NetBIOS(Network Basic Input/Output System,網絡基本輸入輸出系統)主要用于數十臺計算機的小型局域網資源共享。NetBIOS是一種應用程序編程接口(API),應用于局域網程序中,為程序提供請求低級服務的統一的命令集,作用是給局域網提供網絡服務以及其他特殊功能。自誕生起,NetBIOS成為許多其他網絡應用程序的基礎。很多局域網都是在 NetBIOS的基礎上工作的。在 NetBIOS局域網環境下,計算機通過名字被系統識別。網絡中每臺計算機都有用不同方法編的永久性名稱。NetBIOS名稱用來在網絡上鑒別資源。程序可以用這些名稱開始和結束會話。每個程序都有獨特的NetBIOS名稱。每臺支持應用的網絡設備也有用戶定義或通過內部方法獲得的 NetBIOS站名。NetBIOS名稱能包含至多16位阿拉伯數字。在整個資源路由網絡里,字符組合是唯一的。在一臺使用 NetBIOS的網絡設備在網絡上能完全工作起來之前,網絡設備必須先登記 NetBIOS名稱。

2 NetBIOS特點

唯一命名規則:NetBIOS為網絡中的每個節點分配一個唯一的名稱,長度為16個字符。這一名稱在網絡中作為節點的標識,方便用戶和應用程序識別和訪問特定的資源。

動態注冊與解析:節點在接入網絡時,會動態地將其NetBIOS名稱注冊到網絡中。當一個節點需要與另一個節點通信時,它會通過名稱解析機制將NetBIOS名稱轉換為對應的以太網地址(MAC地址)。這種動態的注冊和解析過程使得網絡配置更加靈活,節點可以隨時加入或離開網絡,而無需復雜的手動配置。

面向連接(TCP)和無連接(UDP)通信均支持:它支持廣播和組播,支持三個分開的服務:名字、會話和數據報。

較好的兼容性好:該協議具有較好的兼容性,能夠與其他網絡協議(如TCP/IP)共存。在現代網絡環境中,雖然TCP/IP協議占據主導地位,但NetBIOS仍然可以在某些特定的應用場景中發揮作用,并且可以與基于TCP/IP的應用程序進行交互。

3 NetBIOS應用場景

W55MH32使用NetBIOS可以進行以下幾種應用:

設備名稱解析:在嵌入式系統中,許多設備(如物聯網設備、智能家居設備等)可能沒有配置復雜的DNS系統。通過NetBIOS名稱服務,設備可以使用簡單的名稱而不是復雜的IP地址進行通信。

網絡瀏覽服務:通過NetBIOS廣播或點對點查詢,嵌入式設備能夠在網絡資源管理器中顯示自身信息,使用戶能夠快速訪問設備。

4 NetBIOS的基本工作流程

NetBIOS主要提供以下三種服務:

NetBIOS名稱服務(Name Service):負責NetBIOS名稱注冊和解析(對應NBNS)。

NetBIOS數據報服務(Datagram Service):支持無連接的通信(UDP)。

NetBIOS會話服務(SessionService):支持面向連接的通信(TCP)。

NBNS是NetBIOS的一部分,專門負責實現NetBIOS名稱服務(Name Service)的功能。它的作用是將NetBIOS名稱解析為對應的IP地址。

PC端ping NetBIOS名稱的基本工作流程如下:

第一步:當PC端PING的是一個NetBIOS名稱時,首先會查詢自身的 NetBIOS遠程緩存名稱表中是否存在記錄,存在則將NetBIOS名稱替代為IP地址,不存在則PC端發出 NetBIOS廣播請求。

第二步:當設備端接收到NetBIOS請求后,會檢查該請求中的名稱是否與自身的名稱相符。若相符,設備端會向請求端回復自身的IP地址。

第三步:PC端在收到設備端的響應后,會將該響應中包含的 IP地址和NetBIOS名稱建立映射關系存儲到 NetBIOS遠程緩存名稱表中。

第四步:PC端根據NetBIOS遠程緩存名稱表中的映射關系,將NetBIOS名稱替換成IP進行PING操作。

5 NetBIOS報文解析

NetBIOS(Network Basic Input/Output System)報文用于局域網內計算機的設備發現與名稱解析。它工作在會話層,通過UDP 137端口進行名稱服務,用于主機名與IP地址的映射;UDP 138端口用于數據報服務,支持無連接消息傳輸;TCP 139端口用于會話服務,支持面向連接的通信。

NetBIOS報文格式如下:

字節偏移 字段名稱 長度 (字節) 描述
0 Transaction ID 2 事務 ID,用于匹配請求和響應
2 Flags 2 標志位,表示報文類型和屬。
4 Questions 2 查詢的名稱數量
6 Answer RRs 2 回答記錄數,表示響應的記錄數量
8 Authority RRs 2 授權記錄數
10 Additional RRs 2 額外記錄數
12 Question Name 可變長度 查詢的 NetBIOS名稱,16字節編碼
可變 Question Type 2 查詢類型(如 0x20表示名稱查詢)
可變+2 Question Class 2 查詢類(如 IN = 0x01表示互聯網類)

字段解釋

1.Transaction ID (事務 ID):

用于標識請求與響應的唯一事務 ID,便于匹配查詢和應答報文。

2.Flags (標志位):

指示報文類型(請求/響應)。

包含廣播標志、操作碼及其他控制信息。

3.Questions (查詢數量):

表示當前查詢的名稱數量,通常為 1。

4.Answer RRs (回答記錄數):

表示響應中返回的資源記錄數。

5.Authority RRs (授權記錄數):

表示提供的授權名稱服務器記錄數。

6.Additional RRs (額外記錄數):

提供額外的附加信息,如 IP地址或其他補充數據。

7.Question Name (查詢名稱):

查詢的 NetBIOS名稱,經過特殊編碼,占用 16字節,末尾以 0x00結束。

8.Question Type (查詢類型):

指定查詢的類型,如 0x20表示 NetBIOS名稱查詢。

9.Question Class (查詢類):

指定查詢的類,0x01表示 IN(互聯網類查詢)。

報文示例

|報文解析|
NetBIOS Name Service
    Transaction ID: 0xa753    (唯一標識此查詢,用于匹配請求與響應)
    Flags: 0x0110, Opcode: Name query, Recursion desired, Broadcast   (表示這是一個廣播查詢請求)
    Questions: 1     (字段說明僅查詢一個設備名稱)
    Answer RRs: 0     (在響應報文中,該字段會顯示解析到的記錄數)
    Authority RRs: 0     (在響應報文中,用于指示哪些服務器可以授權回答該查詢)
    Additional RRs: 0   (在某些NetBIOS響應中可能用于攜帶更多解析信息)

|報文原文|
a7 54 01 10 00 01 00 00 00 00 00 00

6實現過程

接下來,我們看看如何在W55MH32上實現NetBIOS功能。

注意:測試實例需要PC端和W55MH32處于同一網段。

在主循環調用do_netbios()函數,如下所示:

while (1)
{
   do_netbios(SOCKET_ID);
}

do_netbios()函數需要傳入一個參數,該參數是socket號,do_netbios()函數如下:

/**
*@brief  Execute the NetBIOS name resolver
*@param  socket number
*@return no
*/
void do_netbios(uint8_t sn)
{
   unsigned char state;
   unsigned int  len;
   state = getSn_SR(sn);
   switch (state)
   {
   case SOCK_UDP:
       if ((len = getSn_RX_RSR(sn)) > 0)
       {
           unsigned char     rem_ip_addr[4];
           uint16_t          rem_udp_port;
           char              netbios_name[NETBIOS_NAME_LEN + 1];
           NETBIOS_HDR      *netbios_hdr;
           NETBIOS_NAME_HDR *netbios_name_hdr;
           len = recvfrom(sn, (unsigned char *)&netbios_rx_buf, len, rem_ip_addr, &rem_udp_port);
           printf("rem_ip_addr=%d.%d.%d.%d:%drn", rem_ip_addr[0], rem_ip_addr[1], rem_ip_addr[2], rem_ip_addr[3], rem_udp_port);
           netbios_hdr      = (NETBIOS_HDR *)netbios_rx_buf;
           netbios_name_hdr = (NETBIOS_NAME_HDR *)(netbios_hdr + 1);
           // If the packet is a NetBIOS query packet
           if (((netbios_hdr->flags & ntohs(NETB_HFLAG_OPCODE)) == ntohs(NETB_HFLAG_OPCODE_NAME_QUERY)) && ((netbios_hdr->flags & ntohs(NETB_HFLAG_RESPONSE)) == 0) && (netbios_hdr->questions == ntohs(1)))
           {
               printf("netbios name query questionrn");
               // Decode the NetBIOS package
               netbios_name_decoding((char *)(netbios_name_hdr->encname), netbios_name, sizeof(netbios_name));
               printf("name is %srn", netbios_name);
               // If the query is made against the native Netbios
               if (strcmp(netbios_name, NETBIOS_W55MH32_NAME) == 0)
               {
                   uint8_t       ip_addr[4];
                   NETBIOS_RESP *resp = (NETBIOS_RESP *)netbios_tx_buf;
                   // Handle the header of the NetBIOS response packet
                   resp->resp_hdr.trans_id      = netbios_hdr->trans_id;
                   resp->resp_hdr.flags         = htons(NETB_HFLAG_RESPONSE | NETB_HFLAG_OPCODE_NAME_QUERY | NETB_HFLAG_AUTHORATIVE | NETB_HFLAG_RECURS_DESIRED);
                   resp->resp_hdr.questions     = 0;
                   resp->resp_hdr.answerRRs     = htons(1);
                   resp->resp_hdr.authorityRRs  = 0;
                   resp->resp_hdr.additionalRRs = 0;
                   // Process the header data of the NetBIOS response packet
                   memcpy(resp->resp_name.encname, netbios_name_hdr->encname, sizeof(netbios_name_hdr->encname));
                   resp->resp_name.nametype = netbios_name_hdr->nametype;
                   resp->resp_name.type     = netbios_name_hdr->type;
                   resp->resp_name.cls      = netbios_name_hdr->cls;
                   resp->resp_name.ttl      = htonl(NETBIOS_NAME_TTL);
                   resp->resp_name.datalen  = htons(sizeof(resp->resp_name.flags) + sizeof(resp->resp_name.addr));
                   resp->resp_name.flags    = htons(NETB_NFLAG_NODETYPE_BNODE);
                   getSIPR(ip_addr);
                   memcpy(resp->resp_name.addr, ip_addr, 4);
                   // Send a response packet
                   sendto(sn, (unsigned char *)resp, sizeof(NETBIOS_RESP), rem_ip_addr, rem_udp_port);
                   printf("send responsern");
               }
           }
       }
       break;
   case SOCK_CLOSED:
       close(sn);
       socket(sn, Sn_MR_UDP, NETBIOS_PORT, 0);
       break;
   default:
       break;
   }
}

進入do_netbios()函數會執行一個UDP協議的狀態機,當收到消息后,首先會判斷是否為NetBIOS報文,如果為NetBIOS報文則會進入netbios_name_decoding()函數解析NetBIOS名稱,當名稱與W55MH32的NetBIOS名稱一致時,則返回響應報文。

netbios_name_decoding()函數如下:

static int netbios_name_decoding(char *name_enc, char *name_dec, int name_dec_len)
{
 char *pname;
 char  cname;
 char  cnbname;
 int   index = 0;
 // Decode the name of the former NetBIOS
 pname = name_enc;
 for (;;)
 {
     /* Every two characters of the first level-encoded name
   * turn into one character in the decoded name. */
     cname = *pname;
     if (cname == '')
         break; // no more characters
     if (cname == '.')
         break; // scope ID follows
     if (cname < 'A' || cname > 'Z')
     {
         // Not legal.
         return -1;
     }
     cname   -= 'A';
     cnbname  = cname  'Z')
     {
         // Not legal.
         return -1;
     }
     cname   -= 'A';
     cnbname |= cname;
     pname++;
     // Do we have room to store the character?
     if (index < NETBIOS_NAME_LEN)
     {
         // Yes - store the character.
         name_dec[index++] = (cnbname != ' ' ? cnbname : '');
     }
 }
 return 0;
}

7運行結果

燒錄例程運行后,首先進行了PHY鏈路檢測,然后是通過DHCP獲取網絡地址并打印網絡地址信息,最后程序開始持續接收和響應 NetBIOS請求。如下圖所示:

wKgZO2iBkjuAWTEdAACWtBnZLgQ673.pngwKgZO2iBkjuAIn23AABYQ7T6nA8103.png

8總結

本文講解了如何在 W55MH32芯片上實現 NetBIOS功能,通過實戰例程展示了利用 NetBIOS進行名稱 PING測試的具體過程,包括 NetBIOS功能的調用、請求處理、名稱解析和響應發送等關鍵步驟。文章詳細介紹了 NetBIOS的概念、特點、應用場景、基本工作流程和報文解析,幫助讀者理解其在小型局域網資源共享和設備通信中的重要作用。

下一篇文章將聚焦 UPnP,解析其核心原理及在網絡設備互聯互通中的應用,同時講解如何在相關設備上實現 UPnP功能,敬請期待!

WIZnet是一家無晶圓廠半導體公司,成立于 1998年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU?面向各種應用中的嵌入式互聯網設備。

WIZnet在全球擁有 70多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

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

    關注

    41

    文章

    5684

    瀏覽量

    176251
  • 物聯網
    +關注

    關注

    2931

    文章

    46306

    瀏覽量

    393450
  • NETBIOS
    +關注

    關注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    數據采集光盤實例第六第十二章

    數據采集光盤實例第六第十二章
    發表于 06-28 21:17

    明德揚視頻分享點撥FPGA課程---第十二章??學習自檢方法

    第十二章學習自檢方法1. 波形對比方法http://yunpan.cn/cjZTiDA9pY56x訪問密碼 c359
    發表于 11-13 11:01

    第十二章 SysTick——系統定時器

    本章介紹了W55MH32的SysTick系統定時器,它是24位遞減計數器,含4個寄存器,可配置定時、中斷,用于產生時基 等。
    的頭像 發表于 05-22 17:16 ?497次閱讀
    <b class='flag-5'>第十二章</b> SysTick——系統定時器

    第二 W55MH32 DHCP示例

    本文介紹 DHCP?協議,包括其在 IP?網絡自動分配參數的功能、便捷配置等特點、工作原理、報文格式和應用場景。通過 W55MH32?實戰例程展示動態獲取網絡地址信息過程,含注冊定時器中斷、啟用模式和獲取信息等步驟,燒錄后可完成檢測與信息打印,PC?端能 PING?通設備。
    的頭像 發表于 07-24 09:02 ?152次閱讀
    第二<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> DHCP<b class='flag-5'>示例</b>

    第五 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實現 UDP?通信及數據回環測試的方法。闡述了 UDP?協議的概念、特點、應用場景、報文傳輸流程和報文結構,展示了實現過程,借助網絡調試工具完成測試。
    的頭像 發表于 07-24 09:13 ?94次閱讀
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

    本文介紹了在 W55MH32?芯片上實現 HTTP Server?功能,并通過瀏覽器修改其網絡地址信息的方法。闡述了 HTTP?協議的概念、特點、應用場景、工作流程、請求方法、響應內容,以及 Web?頁面構成和交互方式。展示了在W55MH32上實現的過程。
    的頭像 發表于 07-24 09:35 ?125次閱讀
    第九<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP Server<b class='flag-5'>示例</b>

    第十章 W55MH32 SNTP示例

    本文講解了如何在W55MH32芯片上實現SNTP授時功能,通過實例詳細展示了從SNTP服務器同步時間的實現流程,包括時間請求、響應解析和本地時間校準等核心步驟。文章還對SNTP的應用場景進行了分析,幫助讀者理解其在時間同步中的實際應用價值。
    的頭像 發表于 07-24 09:43 ?158次閱讀
    <b class='flag-5'>第十章</b> <b class='flag-5'>W55MH32</b> SNTP<b class='flag-5'>示例</b>

    第十一章 W55MH32 SMTP示例

    本文講解了如何在 W55MH32?芯片上實現 SMTP?協議,通過實例詳細展示了在該芯片上使用 SMTP?協議發送電子郵件的實現流程,包括 SMTP?發送內容初始化、使用 DNS?協議解析 SMTP
    的頭像 發表于 07-24 09:49 ?131次閱讀
    <b class='flag-5'>第十</b>一章 <b class='flag-5'>W55MH32</b> SMTP<b class='flag-5'>示例</b>

    第十四章 W55MH32 TFTP示例

    本文講解了如何在 W55MH32?芯片上實現 TFTP?協議,通過實戰例程詳細展示了使用 TFTP?客戶端模式從服務器獲取文本文件的過程,涵蓋 TFTP?初始化、發送讀請求、運行協議并處理結果等核心
    的頭像 發表于 07-24 10:37 ?141次閱讀
    <b class='flag-5'>第十</b>四章 <b class='flag-5'>W55MH32</b> TFTP<b class='flag-5'>示例</b>

    第十五章 W55MH32 SNMP示例

    本文講解了如何在 W55MH32?芯片上實現 SNMP?功能,通過實戰例程展示了使用 MIB Browser?管理 W55MH32?的具體過程,涵蓋在 MIB Browser?中創建分支、添加葉子
    的頭像 發表于 07-24 10:43 ?150次閱讀
    <b class='flag-5'>第十五章</b> <b class='flag-5'>W55MH32</b> SNMP<b class='flag-5'>示例</b>

    第十六章 W55MH32 PING示例

    本文講解了如何在 W55MH32?芯片上通過 IPRAW?模式實現 ICMP?協議中的 PING?命令,以進行網絡連通性測試,通過實戰例程展示了從發送 PING?請求、接收并解析回復到統計結果的完整
    的頭像 發表于 07-24 11:41 ?63次閱讀
    <b class='flag-5'>第十</b>六章 <b class='flag-5'>W55MH32</b> PING<b class='flag-5'>示例</b>

    第十七章 W55MH32 ARP示例

    文講解了如何在 W55MH32?芯片上通過 MAC RAW?模式實現 ARP?協議,將 IP?地址解析為 MAC?地址,通過實戰例程展示了從發送 ARP?請求到接收并處理響應的完整過程。文章詳細介紹
    的頭像 發表于 07-24 11:49 ?158次閱讀
    <b class='flag-5'>第十七章</b> <b class='flag-5'>W55MH32</b> ARP<b class='flag-5'>示例</b>

    第十八章 W55MH32 FTP_Server示例

    本文講解了如何在 W55MH32?芯片上實現 FTP?協議的服務器模式,通過實戰例程展示了使用 W55MH32?作為 FTP?服務器與 PC?端進行文件傳輸、目錄操作等功能的過程,涵蓋獲取網絡配置
    的頭像 發表于 07-24 11:55 ?55次閱讀
    <b class='flag-5'>第十</b>八章 <b class='flag-5'>W55MH32</b> FTP_Server<b class='flag-5'>示例</b>

    第二十二章 W55MH32 MQTT&amp;Aliyun示例

    本文講解了如何在 W55MH32?芯片上實現 MQTT?協議并連接阿里云平臺,通過實戰例程展示了從準備工作、連接配置到消息訂閱、發布及接收處理的完整過程。文章詳細介紹了 MQTT?協議的概念、特點
    的頭像 發表于 07-24 14:17 ?153次閱讀
    第二<b class='flag-5'>十二章</b> <b class='flag-5'>W55MH32</b> MQTT&amp;Aliyun<b class='flag-5'>示例</b>

    第三十 W55MH32 HTTP_Server&amp;NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實現 HTTP_Server?與 NetBIOS?功能,并通過 NetBIOS?訪問 HTTP?服務器網頁內容,通過實戰例程展示了在主循環中并行處理 HTTP?與
    的頭像 發表于 07-24 16:21 ?125次閱讀
    第三十<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP_Server&amp;<b class='flag-5'>NetBIOS</b><b class='flag-5'>示例</b>