chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第十五章 W55MH32 SNMP示例

W55MH32 ? 來(lái)源:W55MH32 ? 作者:W55MH32 ? 2025-07-24 10:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)

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

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

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

此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。

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

若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問(wèn)官方網(wǎng)頁(yè):http://www.w5500.com/,我們期待與您共同探索W55MH32的無(wú)限可能。

wKgZO2iBiBmAe3DyAACpGc5mWX8613.png

第十五章 W55MH32 SNMP示例

本篇文章,我們將詳細(xì)介紹如何在W55MH32芯片上面實(shí)現(xiàn)SNMP功能。并通過(guò)實(shí)戰(zhàn)例程,為大家講解如何使用MIB Browser管理W55MH32。

該例程用到的其他網(wǎng)絡(luò)協(xié)議,例如DHCP,請(qǐng)參考相關(guān)章節(jié)。有關(guān)W55MH32的初始化過(guò)程,請(qǐng)參考NetworkInstall章節(jié),這里將不再贅述。

1 SNMP協(xié)議簡(jiǎn)介

SNMP(Simple Network Management Protocol,簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)是一種用于管理和監(jiān)控網(wǎng)絡(luò)設(shè)備的協(xié)議。它是應(yīng)用層協(xié)議,廣泛應(yīng)用于網(wǎng)絡(luò)設(shè)備(如路由器、交換機(jī)、服務(wù)器、打印機(jī)等)的管理和監(jiān)控。SNMP提供了機(jī)制以便網(wǎng)絡(luò)管理員可以監(jiān)控網(wǎng)絡(luò)性能、發(fā)現(xiàn)網(wǎng)絡(luò)問(wèn)題,并對(duì)設(shè)備進(jìn)行管理。

2 SNMP協(xié)議特點(diǎn)

簡(jiǎn)單性:設(shè)計(jì)輕量,便于實(shí)現(xiàn)和部署。

互操作性:提供標(biāo)準(zhǔn)化的設(shè)備管理方式,不同廠商的設(shè)備可以通過(guò)SNMP實(shí)現(xiàn)互通。

跨平臺(tái)支持:SNMP是一種開放的標(biāo)準(zhǔn)協(xié)議,被廣泛應(yīng)用于各種網(wǎng)絡(luò)設(shè)備和操作系統(tǒng)。

實(shí)時(shí)監(jiān)控:支持快速的數(shù)據(jù)采集和報(bào)警機(jī)制。

擴(kuò)展性:通過(guò)MIB支持不同設(shè)備的特定功能。

源效率:協(xié)議設(shè)計(jì)輕量,適合低帶寬和高延遲的網(wǎng)絡(luò)環(huán)境。

3應(yīng)用場(chǎng)景

接下來(lái),我們了解下在W55MH32上,可以使用SNMP協(xié)議完成哪些操作及應(yīng)用呢?

故障報(bào)警和日志管理:設(shè)備在檢測(cè)到異?;蚬收蠒r(shí),可以通過(guò) SNMP TRAP將報(bào)警信息發(fā)送到網(wǎng)絡(luò)管理系統(tǒng)。

工業(yè)自動(dòng)化和環(huán)境監(jiān)控:在工業(yè)自動(dòng)化和環(huán)境監(jiān)控中,W55MH32可通過(guò) SNMP匯報(bào)傳感器數(shù)據(jù)。

數(shù)據(jù)中心和機(jī)房管理:用于數(shù)據(jù)中心和機(jī)房中監(jiān)控服務(wù)器、交換機(jī)及其他網(wǎng)絡(luò)設(shè)備的狀態(tài)。

4使用MIB Browser管理W55MH32流程

下載并安裝MIB Browser(鏈接:https://www.ireasoning.com/download/mibfree/setup.exe)

創(chuàng)建分支

打開安裝目錄下 mibs文件夾,找到 RFC1213-MIB文件,右鍵使用記事本打開,上方路徑欄可以尋找路徑。

wKgZPGiBnH6AHRNIAAB1ylJXnac624.png

在snmp后添加一個(gè)新分支,命名為User

wKgZO2iBnH6AEPLGAAAzD4BH7bY036.png

添加葉子節(jié)點(diǎn)(功能)

在分支后方繼續(xù)添加功能代碼

wKgZPGiBnH6ARrzrAABn1M1ZbfY698.png

葉子節(jié)點(diǎn)格式如下:

setLED OBJECT-TYPE 添加一個(gè)新葉子節(jié)點(diǎn),命名為 setLED

SYNTAX INTEGER { enabled(1),disabled(0) }設(shè)置數(shù)據(jù)類型

ACCESS read-write設(shè)置讀寫權(quán)限

DESCRIPTION 注釋

::= { User 1 }葉子所在分支,與葉子編號(hào)

添加完畢后保存并退出

添加完成后,MIB Browser軟件如下所示:

wKgZPGiBnH6ARrzrAABn1M1ZbfY698.png

代碼適配功能

測(cè)試

5 SNMP架構(gòu)組成

SNMP架構(gòu)包括以下三個(gè)主要部分:

管理站(Manager):運(yùn)行SNMP管理軟件,用于發(fā)送請(qǐng)求和接收設(shè)備信息。通過(guò)命令操作網(wǎng)絡(luò)設(shè)備,執(zhí)行配置或監(jiān)控任務(wù)。

代理(Agent):安裝在受管理設(shè)備上的軟件,負(fù)責(zé)將設(shè)備的狀態(tài)信息存儲(chǔ)在MIB中,并響應(yīng)來(lái)自管理站的查詢。能動(dòng)地發(fā)送陷阱(Trap)以報(bào)告事件。

管理信息庫(kù)(MIB):定義設(shè)備的可管理參數(shù)及其數(shù)據(jù)結(jié)構(gòu)MIB通常以樹狀結(jié)構(gòu)組織,每個(gè)節(jié)點(diǎn)代表一個(gè)管理對(duì)象,具有唯一的對(duì)象標(biāo)識(shí)符(OID)。

協(xié)議(SNMP協(xié)議本身):負(fù)責(zé)管理站和代理之間的通信,支持基本操作如獲取、設(shè)置和通知。

6 OID詳解

簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)的OID(對(duì)象標(biāo)識(shí)符)是一個(gè)用于唯一標(biāo)識(shí)網(wǎng)絡(luò)設(shè)備上管理信息庫(kù)(MIB)中對(duì)象的標(biāo)識(shí)符。OID是一種分層的命名方案,允許管理員查詢和設(shè)置網(wǎng)絡(luò)設(shè)備上的各種參數(shù)。

下面是OID的詳解:

OID結(jié)構(gòu)

OID由一系列整數(shù)組成,這些整數(shù)通過(guò)點(diǎn)號(hào)(.)分隔,形成了一個(gè)層次結(jié)構(gòu)。例如:

1.3.6.1.2.1.1.1.0

在這個(gè)結(jié)構(gòu)中,每個(gè)數(shù)字都代表一個(gè)組織或節(jié)點(diǎn)在層次結(jié)構(gòu)中的位置。

OID層次解釋

1:表示ISO(國(guó)際標(biāo)準(zhǔn)化組織)

3:表示org(組織)

6:指定IETF(互聯(lián)網(wǎng)工程任務(wù)組)作為組織

1:表示IETF管理的MIB(管理信息庫(kù))

后續(xù)的數(shù)字則進(jìn)一步定義了特定的MIB模塊、對(duì)象類型、實(shí)例等信息。

常見的OID前綴

1.3.6.1.2.1:這是最常用的OID前綴,通常簡(jiǎn)寫為.iso.org.dod.internet.mgmt.mib-2,它指的是IETF定義的MIB-2。

具體OID示例

1.3.6.1.2.1.1.1.0:這是sysDescr的OID,用于獲取系統(tǒng)描述。

1.3.6.1.2.1.1.2.0:這是sysObjectID的OID,用于獲取系統(tǒng)對(duì)象標(biāo)識(shí)符。

1.3.6.1.2.1.1.3.0:這是sysUpTime的OID,用于獲取系統(tǒng)正常運(yùn)行時(shí)間。

如何使用OID

查詢:使用SNMPGET請(qǐng)求,可以查詢特定OID的值。

設(shè)置:使用SNMPSET請(qǐng)求,可以修改特定OID的值(需要設(shè)備支持)。

遍歷:使用SNMPWALK請(qǐng)求,可以遍歷一個(gè)OID下的所有子節(jié)點(diǎn)。

注意事項(xiàng)

OID的具體值和結(jié)構(gòu)可能會(huì)隨著網(wǎng)絡(luò)設(shè)備的不同而有所不同。在使用OID之前,最好查閱相應(yīng)設(shè)備的MIB文檔,以了解其支持的具體OID及其功能。OID是SNMP管理中不可或缺的部分,通過(guò)OID,網(wǎng)絡(luò)管理員可以進(jìn)行監(jiān)控網(wǎng)絡(luò)狀態(tài)、配置網(wǎng)絡(luò)設(shè)備、接收警報(bào)通知等操作。理解和掌握OID對(duì)于網(wǎng)絡(luò)管理和故障排除非常重要。

7 SNMP報(bào)文格式

SNMP報(bào)文基于ASN.1(Abstract Syntax Notation One)編碼規(guī)則,通常使用BER(Basic Encoding Rules)進(jìn)行傳輸。以下是SNMP報(bào)文的基本格式和關(guān)鍵字段,本例程中使用的是SNMPv1版本,以下對(duì)SNMPv1進(jìn)行講解,而對(duì)于其他版本的報(bào)文格式,由于篇幅有限,這里將不再進(jìn)行講解,感興趣的朋友可自行查閱資料進(jìn)行學(xué)習(xí)。

SNMP報(bào)文結(jié)構(gòu)

字段名稱 類型 描述
Message 序列(Sequence) 整個(gè) SNMP消息的容器,包含以下字段。
Version 整數(shù)(Integer) SNMP協(xié)議版本號(hào),0表示 SNMPv1。
Community 字符串(Octet String) 社區(qū)字符串,用于身份驗(yàn)證,如 public或 private。
PDU類型 標(biāo)記(Tag, Context-Specific) 表示操作類型,如:GET(0xA0)、GET-NEXT(0xA1)、SET(0xA3)、TRAP(0xA4)。
Request ID 整數(shù)(Integer) 請(qǐng)求的唯一標(biāo)識(shí),用于匹配請(qǐng)求和響應(yīng)。
Error Status 整數(shù)(Integer) 錯(cuò)誤狀態(tài),取值范圍為:0(noError)、1(tooBig)、2(noSuchName)等。
Error Index 整數(shù)(Integer) 錯(cuò)誤索引,指示變量綁定列表中出錯(cuò)的變量位置(從 1開始計(jì)數(shù))。
Variable Bindings 序列(Sequence of VarBinds) 變量綁定列表,每個(gè)綁定包含一個(gè) OID和對(duì)應(yīng)的值。
- OID 對(duì)象標(biāo)識(shí)符(OID) 被管理對(duì)象的標(biāo)識(shí)符,如 1.3.6.1.2.1.1.1.0表示系統(tǒng)描述(sysDescr)。
- Value 可變類型(Null, Integer, String等) OID對(duì)應(yīng)的值,可能為空值(GET請(qǐng)求)或具體數(shù)據(jù)(響應(yīng)或 SET請(qǐng)求)。

報(bào)文字段詳解

1. Message(消息整體)

這是 SNMP消息的最外層結(jié)構(gòu),是一個(gè)序列(Sequence),包含以下三個(gè)部分:

Version(版本號(hào))
此字段定義 SNMP協(xié)議的版本號(hào),用一個(gè)整數(shù)表示:

0表示 SNMPv1。

1表示 SNMPv2c。

3表示 SNMPv3。
該字段是解析報(bào)文的基礎(chǔ),不同版本的報(bào)文格式存在差異。

Community(社區(qū)字符串)
社區(qū)字符串是 SNMPv1和 SNMPv2c的一種簡(jiǎn)單身份驗(yàn)證機(jī)制,用于限制對(duì)管理對(duì)象的訪問(wèn)權(quán)限。它是一個(gè)字符串(Octet String),常見的值包括:

public:表示只讀訪問(wèn)權(quán)限。

private:表示讀寫訪問(wèn)權(quán)限。

PDU(協(xié)議數(shù)據(jù)單元)類型
PDU定義了操作類型,通過(guò)一個(gè)標(biāo)記值(Tag, Context-Specific)來(lái)區(qū)分:

0xA0:GET請(qǐng)求,用于獲取管理對(duì)象的值。

0xA1:GET-NEXT請(qǐng)求,用于獲取下一個(gè)對(duì)象的值。

0xA3:SET請(qǐng)求,用于設(shè)置管理對(duì)象的值。

0xA4:TRAP,用于代理向管理站報(bào)告事件。

2. Request ID(請(qǐng)求 ID)

請(qǐng)求 ID是一個(gè)整數(shù),用于唯一標(biāo)識(shí)一個(gè)請(qǐng)求。它由發(fā)起方生成,并在響應(yīng)中攜帶相同的 ID。通過(guò)此字段,接收方可以將響應(yīng)與對(duì)應(yīng)的請(qǐng)求進(jìn)行匹配。如果響應(yīng)中的請(qǐng)求 ID不一致,則表明響應(yīng)與請(qǐng)求無(wú)關(guān)。

3. Error Status(錯(cuò)誤狀態(tài))

此字段用整數(shù)表示請(qǐng)求的執(zhí)行狀態(tài):

0:noError,表示請(qǐng)求執(zhí)行成功,沒(méi)有錯(cuò)誤。

1:tooBig,請(qǐng)求的響應(yīng)數(shù)據(jù)超出接收方的最大允許大小。

2:noSuchName,請(qǐng)求中指定的 OID不存在。

3:badValue,請(qǐng)求中的值非法或不支持。

4:readOnly,請(qǐng)求試圖修改只讀對(duì)象。

5:genErr,發(fā)生了通用錯(cuò)誤,具體原因未明確。

4. Error Index(錯(cuò)誤索引)

如果 Error Status的值不為 0,此字段指示變量綁定列表中出錯(cuò)的變量位置(從 1開始計(jì)數(shù))。如果沒(méi)有錯(cuò)誤,此字段的值為 0。

5. Variable Bindings(變量綁定列表)

變量綁定列表是 SNMP報(bào)文的核心部分,包含一個(gè)或多個(gè)變量綁定(VarBind)。每個(gè)變量綁定由以下兩部分組成:

OID(對(duì)象標(biāo)識(shí)符)
OID是管理對(duì)象的唯一標(biāo)識(shí)符,用點(diǎn)分十進(jìn)制表示。例如:

1.3.6.1.2.1.1.1.0:表示 sysDescr,系統(tǒng)描述。

1.3.6.1.2.1.1.5.0:表示 sysName,系統(tǒng)名稱。

Value(值)
OID的值根據(jù)請(qǐng)求類型不同可能為以下幾種:

在 GET請(qǐng)求中,值通常為空(Null)。

在 GET-RESPONSE報(bào)文中,值為具體數(shù)據(jù),例如整型(Integer32)、字符串(Octet String)等。

在 SET請(qǐng)求中,值是要設(shè)置的新值。

SNMP報(bào)文解析

MIB Browser向W55MH32發(fā)送LED設(shè)置報(bào)文:

|報(bào)文解析|
Simple Network Management Protocol (簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP報(bào)文))
   version: version-1 (0) (使用的 SNMP協(xié)議版本,值為 0表示 SNMPv1)
   community: public (社區(qū)字符串為 "public",通常表示只讀權(quán)限)
   data: set-request (3) (PDU 類型為 SET-REQUEST,表示設(shè)置管理對(duì)象的值)
       set-request
           request-id: 1479407980 (請(qǐng)求的唯一標(biāo)識(shí)符,用于匹配請(qǐng)求和響應(yīng))
           error-status: noError (0) (錯(cuò)誤狀態(tài)為 noError (0),表示沒(méi)有錯(cuò)誤發(fā)生)
           error-index: 0 (錯(cuò)誤索引為 0,表示變量綁定列表中沒(méi)有錯(cuò)誤對(duì)象)
           variable-bindings: 1 item (變量綁定列表中包含 1個(gè)變量)
                1.3.6.1.2.1.12.1.0: 1 (OID為 1.3.6.1.2.1.12.1.0,設(shè)置的值為 1)
                    Object Name: 1.3.6.1.2.1.12.1.0 (iso.3.6.1.2.1.12.1.0) (OID 對(duì)應(yīng)的完整名稱)
                    Value (Integer32): 1 (設(shè)置的值為整數(shù)類型,值為 1)
   [Response In: 237] (表示該請(qǐng)求的響應(yīng)報(bào)文序號(hào)為 237)

|報(bào)文原文|
30 2a 02 01 00 04 06 70 75 62 6c 69 63 a3 1d 02 04 58 2d f9 6c 02 01 00 02 01 00 30 0f 30 0d 06 08 2b 06 01 02 01 0c 01 00 02 01 01

W55MH32響應(yīng)報(bào)文:

|報(bào)文解析|
Simple Network Management Protocol
   version: version-1 (0) (版本號(hào):SNMPv1(值為 0))
   community: public (社區(qū)字符串:"public",用于身份驗(yàn)證)
   data: get-response (2) (數(shù)據(jù)類型:GET-RESPONSE(值為 2),表示這是一個(gè)響應(yīng)報(bào)文)
       get-response (GET-RESPONSE 數(shù)據(jù)部分)
           request-id: 1479407980 (請(qǐng)求 ID:1479407980,用于匹配請(qǐng)求和響應(yīng))
           error-status: noError (0) (錯(cuò)誤狀態(tài):noError(值為 0),表示沒(méi)有錯(cuò)誤)
           error-index: 0 (錯(cuò)誤索引:0,表示沒(méi)有發(fā)生錯(cuò)誤的變量索引)
           variable-bindings: 1 item (變量綁定:包含 1個(gè)變量)
                1.3.6.1.2.1.12.1.0: 1 (變量綁定內(nèi)容)
                    Object Name: 1.3.6.1.2.1.12.1.0 (iso.3.6.1.2.1.12.1.0) (對(duì)象標(biāo)識(shí)符(OID))
                    Value (Integer32): 1 (OID對(duì)應(yīng)的值,類型為 Integer32,值為 1)
   [Response To: 236] (對(duì)請(qǐng)求 ID 236的響應(yīng))
   [Time: 0.023844000 seconds] 響應(yīng)耗時(shí):0.023844秒)

|報(bào)文原文|
30 2a 02 01 00 04 06 70 75 62 6c 69 63 a2 1d 02 04 58 2d f9 6c 02 01 00 02 01 00 30 0f 30 0d 06 08 2b 06 01 02 01 0c 01 00 02 01 01

8實(shí)現(xiàn)過(guò)程

接下來(lái),我們看看如何在代碼上適配MIB Browser上添加的功能。

注意:測(cè)試實(shí)例需要PC端和W55MH32處于同一網(wǎng)段。

步驟1:初始化LED并注冊(cè)到SNMP中

user_led_init();
user_led_control_init(get_user_led_status, set_user_led_status);

步驟2:注冊(cè)snmp定時(shí)器

/**
 * @brief  1ms timer IRQ Handler
 * @param  none
 * @return none
 */
void TIM3_IRQHandler(void)
{
    static uint32_t tim3_1ms_count = 0;
    static uint8_t tim3_10ms_count = 0;

    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
    {
        tim3_1ms_count++;
        tim3_10ms_count++;

        // 1000ms(1秒)定時(shí)處理DHCP
        if (tim3_1ms_count >= 1000)
        {
            DHCP_time_handler();
            tim3_1ms_count = 0;
        }

        // 10ms定時(shí)處理SNMP
        if (tim3_10ms_count >= 10)
        {
            SNMP_time_handler();
            tim3_10ms_count = 0;
        }

        // 清除中斷標(biāo)志位
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
    }
}

我們需要10ms調(diào)用一次SNMP_time_handler()函數(shù),方便SNMP進(jìn)行超時(shí)處理。

步驟3:添加功能函數(shù)

在snmp_custom.c文件中的snmpData結(jié)構(gòu)體變量中,添加功能函數(shù):

c

運(yùn)行

dataEntryType snmpData[] =
{
    // System MIB
    // SysDescr Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 1, 0}, SNMPDTYPE_OCTET_STRING,  30, {"WIZnet Embedded SNMP Agent"}, NULL, NULL},

    // SysObjectID Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 2, 0}, SNMPDTYPE_OBJ_ID,   8, {"x2bx06x01x02x01x01x02x00"}, NULL, NULL},

    // SysUptime Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 3, 0}, SNMPDTYPE_TIME_TICKS,   0, {""}, currentUptime, NULL},

    // sysContact Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 4, 0}, SNMPDTYPE_OCTET_STRING,  30, {"http://www.wizwiki.net/forum"}, NULL, NULL},

    // sysName Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 5, 0}, SNMPDTYPE_OCTET_STRING,  30, {"http://www.wiznet.co.kr"}, NULL, NULL},

    // Location Entry
    {  8, {0x2b, 6, 1, 2, 1, 1, 6, 0}, SNMPDTYPE_OCTET_STRING,  30, {"4F Humax Village"}, NULL, NULL},

    // SysServices
    {  8, {0x2b, 6, 1, 2, 1, 1, 7, 0}, SNMPDTYPE_INTEGER,   4, {""}, NULL, NULL},

    {  8, {0x2b, 6, 1, 2, 1, 12, 2, 0}, SNMPDTYPE_OCTET_STRING,  30, {""}, get_LEDStatus_UserLED, NULL},

    {  8, {0x2b, 6, 1, 2, 1, 12, 1, 0}, SNMPDTYPE_INTEGER,   4, {""}, NULL, set_LEDStatus_UserLED},

    // OID Test #1 (long-length OID example, 19865)
    {0x0a, {0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0x9b, 0x19, 0x01, 0x00}, SNMPDTYPE_OCTET_STRING,  30, {"long-length OID Test #1"}, NULL, NULL},

    // OID Test #2 (long-length OID example, 22210)
    {0x0a, {0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0xad, 0x42, 0x01, 0x00}, SNMPDTYPE_OCTET_STRING,  35, {"long-length OID Test #2"}, NULL, NULL},

    // OID Test #2: SysObjectID Entry
    {0x0a, {0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0xad, 0x42, 0x02, 0x00}, SNMPDTYPE_OBJ_ID, 0x0a, {"x2bx06x01x04x01x81xadx42x02x00"}, NULL, NULL},
};

結(jié)構(gòu)體變量snmpData的結(jié)構(gòu)體dataEntryType定義如下所示:

typedef struct {
    uint8_t oidlen;                  // OID長(zhǎng)度
    uint8_t oid[MAX_OID];            // OID數(shù)組(對(duì)象標(biāo)識(shí)符)
    uint8_t dataType;                // 數(shù)據(jù)類型(對(duì)應(yīng)SNMP數(shù)據(jù)類型)
    uint8_t dataLen;                 // 數(shù)據(jù)長(zhǎng)度
    union {
        uint8_t octetstring[MAX_STRING];  // 字符串類型數(shù)據(jù)
        uint32_t intval;                  // 整數(shù)類型數(shù)據(jù)
    } u;                             // 數(shù)據(jù)聯(lián)合體(存儲(chǔ)不同類型的數(shù)據(jù))
    void (*getfunction)(void *, uint8_t *);  // 獲取數(shù)據(jù)的回調(diào)函數(shù)
    void (*setfunction)(int32_t);            // 設(shè)置數(shù)據(jù)的回調(diào)函數(shù)
} dataEntryType;

步驟4:初始化snmp協(xié)議

void snmpd_init(uint8_t *managerIP, uint8_t *agentIP, uint8_t sn_agent, uint8_t sn_trap)
{
#ifdef _SNMP_DEBUG_
    printf("rn - SNMP : Start SNMP Agent Daemonrn");
#endif

    SOCK_SNMP_AGENT = sn_agent;
    SOCK_SNMP_TRAP = sn_trap;

    // 檢查 socket 編號(hào)是否合法
    if ((SOCK_SNMP_AGENT > _WIZCHIP_SOCK_NUM_) || (SOCK_SNMP_TRAP > _WIZCHIP_SOCK_NUM_))
    {
        return;
    }

    startTime = getSNMPTimeTick();  // 記錄啟動(dòng)時(shí)間(單位:10ms)
    initTable();                    // 初始化 OID 條目值

    initial_Trap(managerIP, agentIP);  // 初始化 Trap 相關(guān)配置

    /*
    // SNMP Trap 示例代碼
    {
        dataEntryType enterprise_oid = {
            0x0a, 
            {0x2b, 0x06, 0x01, 0x04, 0x01, 0x81, 0x9b, 0x19, 0x01, 0x00},
            SNMPDTYPE_OBJ_ID, 
            0x0a, 
            {"x2bx06x01x04x01x81x9bx19x10x00"},
            NULL, 
            NULL
        };

        dataEntryType trap_oid1 = {
            8, 
            {0x2b, 6, 1, 4, 1, 0, 11, 0}, 
            SNMPDTYPE_OCTET_STRING, 
            30, 
            {""}, 
            NULL, 
            NULL
        };

        dataEntryType trap_oid2 = {
            8, 
            {0x2b, 6, 1, 4, 1, 0, 12, 0}, 
            SNMPDTYPE_INTEGER, 
            4, 
            {""}, 
            NULL, 
            NULL
        };

        strcpy((char *)trap_oid1.u.octetstring, "Alert!!!");   // 添加字符串?dāng)?shù)據(jù)
        trap_oid2.u.intval = 123456;  // 添加整數(shù)值

        // 通用 Trap: warmStart
        snmp_sendTrap((void *)"192.168.0.214", (void *)"192.168.0.112", (void *)"public", 
                      enterprise_oid, SNMPTRAP_WARMSTART, 0, 0);

        // 企業(yè)特定 Trap
        snmp_sendTrap((void *)"192.168.0.214", (void *)"192.168.0.112", (void *)"public", 
                      enterprise_oid, 6, 0, 2, &trap_oid1, &trap_oid2);
    }
    */
}

這一步,主要是將使用的socket號(hào),管理IP地址,請(qǐng)求IP地址等參數(shù)注冊(cè)進(jìn)去,并且記錄開始時(shí)間。如果想使用Trap主動(dòng)上報(bào),可以參考注釋中的示例代碼。

步驟5:在主循環(huán)中運(yùn)行snmpd_run()函數(shù)

snmpdrun()函數(shù)代碼如下:

int32_t snmpd_run(void)
{
    int32_t ret;
    int32_t len = 0;

    uint8_t svr_addr[6];
    uint16_t svr_port;

    // 檢查 socket 編號(hào)合法性
    if (SOCK_SNMP_AGENT > _WIZCHIP_SOCK_NUM_)
    {
        return -99;
    }

    // 根據(jù) socket 狀態(tài)進(jìn)行處理
    switch (getSn_SR(SOCK_SNMP_AGENT))
    {
        case SOCK_UDP:
            // 檢查接收緩沖區(qū)是否有數(shù)據(jù)
            if ((len = getSn_RX_RSR(SOCK_SNMP_AGENT)) > 0)
            {
                // 接收 UDP 數(shù)據(jù)
                request_msg.len = recvfrom(SOCK_SNMP_AGENT, request_msg.buffer, len, svr_addr, &svr_port);
            }
            else
            {
                request_msg.len = 0;
            }

            // 處理接收到的請(qǐng)求數(shù)據(jù)
            if (request_msg.len > 0)
            {
#ifdef _SNMP_DEBUG_
                dumpCode((void *)"rn[Request]rn", (void *)"rn", request_msg.buffer, request_msg.len);
#endif
                // 初始化請(qǐng)求和響應(yīng)消息
                request_msg.index = 0;
                response_msg.index = 0;
                errorStatus = errorIndex = 0;
                memset(response_msg.buffer, 0x00, MAX_SNMPMSG_LEN);

                // 解析 SNMP 請(qǐng)求并發(fā)送響應(yīng)
                if (parseSNMPMessage() != -1)
                {
                    sendto(SOCK_SNMP_AGENT, response_msg.buffer, response_msg.index, svr_addr, svr_port);
                }

#ifdef _SNMP_DEBUG_
                dumpCode((void *)"rn[Response]rn", (void *)"rn", response_msg.buffer, response_msg.index);
#endif
            }
            break;

        case SOCK_CLOSED:
            // 創(chuàng)建 UDP  socket
            if ((ret = socket(SOCK_SNMP_AGENT, Sn_MR_UDP, PORT_SNMP_AGENT, 0x00)) != SOCK_SNMP_AGENT)
            {
                return ret;
            }
#ifdef _SNMP_DEBUG_
            printf(" - [%d] UDP Socket for SNMP Agent, port [%d]rn", SOCK_SNMP_AGENT, PORT_SNMP_AGENT);
#endif
            break;

        default:
            break;
    }

    return 1;
}

snmpd_run()函數(shù)會(huì)執(zhí)行一個(gè)UDP狀態(tài)機(jī),當(dāng)收到SNMP管理的消息后會(huì)執(zhí)行解析以及回復(fù)操作。

9運(yùn)行結(jié)果

燒錄例程運(yùn)行后,首先可以看到打印了PHY鏈路檢測(cè)和DHCP獲取網(wǎng)絡(luò)信息,然后是運(yùn)行SNMP程序:

wKgZPGiBnH-Af8ufAABkTNVbjiY519.png

打開MIB Borwser,輸入W55MH32的地址,然后依次點(diǎn)擊system分支下的各個(gè)節(jié)點(diǎn),獲取到的結(jié)果與代碼定義相同:

wKgZPGiBnH-AVFmeAAC0J56B1B4923.png

再找到User分支下的setLED指令,右鍵指令,點(diǎn)擊set,類型選擇integer,Value填 1,點(diǎn)擊OK:

wKgZPGiBnH-AA8B6AACKGaCTpEo008.png

getLED指令,右鍵指令,點(diǎn)擊get,即可讀出LED狀態(tài):

wKgZO2iBnH-AST2cAACwLfob3AQ849.png

10總結(jié)

本文講解了如何在 W55MH32芯片上實(shí)現(xiàn) SNMP功能,通過(guò)實(shí)戰(zhàn)例程展示了使用 MIB Browser管理 W55MH32的具體過(guò)程,涵蓋在 MIB Browser中創(chuàng)建分支、添加葉子節(jié)點(diǎn),以及在代碼中適配功能等關(guān)鍵步驟。文章詳細(xì)介紹了 SNMP協(xié)議的概念、特點(diǎn)、應(yīng)用場(chǎng)景、架構(gòu)組成、OID詳解和報(bào)文格式,幫助讀者理解其在網(wǎng)絡(luò)設(shè)備管理和監(jiān)控中的重要作用。

下一篇文章將聚焦 PING命令,解析其測(cè)試網(wǎng)絡(luò)連通性的原理及在網(wǎng)絡(luò)故障排查中的應(yīng)用,同時(shí)講解如何在W55MH32上使用 PING命令進(jìn)行網(wǎng)絡(luò)診斷,敬請(qǐng)期待!

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

WIZnet在全球擁有 70多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。

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

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    41

    文章

    5862

    瀏覽量

    178545
  • SNMP
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    第十五章 DAC (上篇)

    文章介紹了基于W55MH32的DAC(數(shù)字/模擬轉(zhuǎn)換器)上篇內(nèi)容,其為12位轉(zhuǎn)換器,有2通道,支持8/12位模式、DMA等,具噪聲和三角波生成等功能,還介紹了DAC_OutAudio例程的配置與驗(yàn)證。
    的頭像 發(fā)表于 05-28 15:07 ?863次閱讀
    <b class='flag-5'>第十五章</b> DAC (上篇)

    第十五章 DAC (下篇)

    本篇文章為第十五章DAC(下篇),介紹三個(gè)例程:DAC_OutDMASineWave用DMA輸出正弦波,DAC_OutNoiseWave輸出噪聲波,DAC_OutTriangleWave生成三角波,均有初始化、波形配置及串口調(diào)試功能。
    的頭像 發(fā)表于 05-28 15:39 ?781次閱讀
    <b class='flag-5'>第十五章</b> DAC (下篇)

    【正點(diǎn)原子FPGA連載】第十五章 窗口門狗(WWDG)實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開發(fā)指南_V2.1

    【正點(diǎn)原子FPGA連載】第十五章 窗口門狗(WWDG)實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開發(fā)指南_V2.1
    發(fā)表于 12-05 11:21 ?12次下載
    【正點(diǎn)原子FPGA連載】<b class='flag-5'>第十五章</b> 窗口門狗(WWDG)實(shí)驗(yàn) -摘自【正點(diǎn)原子】新起點(diǎn)之FPGA開發(fā)指南_V2.1

    第二 W55MH32 DHCP示例

    本文介紹 DHCP?協(xié)議,包括其在 IP?網(wǎng)絡(luò)自動(dòng)分配參數(shù)的功能、便捷配置等特點(diǎn)、工作原理、報(bào)文格式和應(yīng)用場(chǎng)景。通過(guò) W55MH32?實(shí)戰(zhàn)例程展示動(dòng)態(tài)獲取網(wǎng)絡(luò)地址信息過(guò)程,含注冊(cè)定時(shí)器中斷、啟用模式和獲取信息等步驟,燒錄后可完成檢測(cè)與信息打印,PC?端能 PING?通設(shè)備。
    的頭像 發(fā)表于 07-24 09:02 ?442次閱讀
    第二<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> DHCP<b class='flag-5'>示例</b>

    第五 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實(shí)現(xiàn) UDP?通信及數(shù)據(jù)回環(huán)測(cè)試的方法。闡述了 UDP?協(xié)議的概念、特點(diǎn)、應(yīng)用場(chǎng)景、報(bào)文傳輸流程和報(bào)文結(jié)構(gòu),展示了實(shí)現(xiàn)過(guò)程,借助網(wǎng)絡(luò)調(diào)試工具完成測(cè)試。
    的頭像 發(fā)表于 07-24 09:13 ?431次閱讀
    第五<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> UDP<b class='flag-5'>示例</b>

    第九 W55MH32 HTTP Server示例

    本文介紹了在 W55MH32?芯片上實(shí)現(xiàn) HTTP Server?功能,并通過(guò)瀏覽器修改其網(wǎng)絡(luò)地址信息的方法。闡述了 HTTP?協(xié)議的概念、特點(diǎn)、應(yīng)用場(chǎng)景、工作流程、請(qǐng)求方法、響應(yīng)內(nèi)容,以及 Web?頁(yè)面構(gòu)成和交互方式。展示了在W55MH32上實(shí)現(xiàn)的過(guò)程。
    的頭像 發(fā)表于 07-24 09:35 ?416次閱讀
    第九<b class='flag-5'>章</b> <b class='flag-5'>W55MH32</b> HTTP Server<b class='flag-5'>示例</b>

    第十章 W55MH32 SNTP示例

    本文講解了如何在W55MH32芯片上實(shí)現(xiàn)SNTP授時(shí)功能,通過(guò)實(shí)例詳細(xì)展示了從SNTP服務(wù)器同步時(shí)間的實(shí)現(xiàn)流程,包括時(shí)間請(qǐng)求、響應(yīng)解析和本地時(shí)間校準(zhǔn)等核心步驟。文章還對(duì)SNTP的應(yīng)用場(chǎng)景進(jìn)行了分析,幫助讀者理解其在時(shí)間同步中的實(shí)際應(yīng)用價(jià)值。
    的頭像 發(fā)表于 07-24 09:43 ?566次閱讀
    <b class='flag-5'>第十章</b> <b class='flag-5'>W55MH32</b> SNTP<b class='flag-5'>示例</b>

    第十一章 W55MH32 SMTP示例

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

    第十二章 W55MH32 NetBIOS示例

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn) NetBIOS?功能,通過(guò)實(shí)戰(zhàn)例程展示了利用 NetBIOS?進(jìn)行名稱 PING?測(cè)試的具體過(guò)程,包括 NetBIOS?功能的調(diào)用、請(qǐng)求處理、名稱解析
    的頭像 發(fā)表于 07-24 09:58 ?422次閱讀
    <b class='flag-5'>第十二章</b> <b class='flag-5'>W55MH32</b> NetBIOS<b class='flag-5'>示例</b>

    第十四章 W55MH32 TFTP示例

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn) TFTP?協(xié)議,通過(guò)實(shí)戰(zhàn)例程詳細(xì)展示了使用 TFTP?客戶端模式從服務(wù)器獲取文本文件的過(guò)程,涵蓋 TFTP?初始化、發(fā)送讀請(qǐng)求、運(yùn)行協(xié)議并處理結(jié)果等核心
    的頭像 發(fā)表于 07-24 10:37 ?433次閱讀
    <b class='flag-5'>第十</b>四章 <b class='flag-5'>W55MH32</b> TFTP<b class='flag-5'>示例</b>

    第十六章 W55MH32 PING示例

    本文講解了如何在 W55MH32?芯片上通過(guò) IPRAW?模式實(shí)現(xiàn) ICMP?協(xié)議中的 PING?命令,以進(jìn)行網(wǎng)絡(luò)連通性測(cè)試,通過(guò)實(shí)戰(zhàn)例程展示了從發(fā)送 PING?請(qǐng)求、接收并解析回復(fù)到統(tǒng)計(jì)結(jié)果的完整
    的頭像 發(fā)表于 07-24 11:41 ?331次閱讀
    <b class='flag-5'>第十</b>六章 <b class='flag-5'>W55MH32</b> PING<b class='flag-5'>示例</b>

    第十七章 W55MH32 ARP示例

    文講解了如何在 W55MH32?芯片上通過(guò) MAC RAW?模式實(shí)現(xiàn) ARP?協(xié)議,將 IP?地址解析為 MAC?地址,通過(guò)實(shí)戰(zhàn)例程展示了從發(fā)送 ARP?請(qǐng)求到接收并處理響應(yīng)的完整過(guò)程。文章詳細(xì)介紹
    的頭像 發(fā)表于 07-24 11:49 ?402次閱讀
    <b class='flag-5'>第十七章</b> <b class='flag-5'>W55MH32</b> ARP<b class='flag-5'>示例</b>

    第十八章 W55MH32 FTP_Server示例

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

    第二十五章 W55MH32 TCP_Server_Multi_Socket示例

    本文講解了如何在 W55MH32?芯片上使用 8?個(gè) socket?實(shí)現(xiàn) TCP?服務(wù)器模式,讓多個(gè)客戶端連接進(jìn)行數(shù)據(jù)回環(huán)測(cè)試,通過(guò)實(shí)戰(zhàn)例程展示了從初始化 socket?到監(jiān)聽端口、處理客戶端連接
    的頭像 發(fā)表于 07-24 16:10 ?429次閱讀
    第二<b class='flag-5'>十五章</b> <b class='flag-5'>W55MH32</b> TCP_Server_Multi_Socket<b class='flag-5'>示例</b>

    第二十六章 W55MH32?上位機(jī)搜索和配置示例

    本文講解了如何在 W55MH32?芯片上實(shí)現(xiàn)上位機(jī)搜索和配置功能,通過(guò)實(shí)戰(zhàn)例程展示了使用開源上位機(jī)配置工具 SmartConfigTool?搜索局域網(wǎng)中的 W55MH32?并進(jìn)行網(wǎng)絡(luò)地址配置的過(guò)程
    的頭像 發(fā)表于 07-24 16:13 ?417次閱讀
    第二十六章 <b class='flag-5'>W55MH32</b>?上位機(jī)搜索和配置<b class='flag-5'>示例</b>