0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第十五章 W55MH32 SNMP示例

W55MH32 来源:W55MH32 作者:W55MH32 2025-07-24 10:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单芯片解决方案,开启全新体验——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 SNMP示例

本篇文章,我们将详细介绍如何在W55MH32芯片上面实现SNMP功能。并通过实战例程,为大家讲解如何使用MIB Browser管理W55MH32。

该例程用到的其他网络协议,例如DHCP,请参考相关章节。有关W55MH32的初始化过程,请参考NetworkInstall章节,这里将不再赘述。

1 SNMP协议简介

SNMP(Simple Network Management Protocol,简单网络管理协议)是一种用于管理和监控网络设备的协议。它是应用层协议,广泛应用于网络设备(如路由器、交换机、服务器、打印机等)的管理和监控。SNMP提供了机制以便网络管理员可以监控网络性能、发现网络问题,并对设备进行管理。

2 SNMP协议特点

简单性:设计轻量,便于实现和部署。

互操作性:提供标准化的设备管理方式,不同厂商的设备可以通过SNMP实现互通。

跨平台支持:SNMP是一种开放的标准协议,被广泛应用于各种网络设备和操作系统

实时监控:支持快速的数据采集和报警机制。

扩展性:通过MIB支持不同设备的特定功能。

源效率:协议设计轻量,适合低带宽和高延迟的网络环境。

3应用场景

接下来,我们了解下在W55MH32上,可以使用SNMP协议完成哪些操作及应用呢?

故障报警和日志管理:设备在检测到异常或故障时,可以通过 SNMP TRAP将报警信息发送到网络管理系统。

工业自动化和环境监控:在工业自动化和环境监控中,W55MH32可通过 SNMP汇报传感器数据。

数据中心和机房管理:用于数据中心和机房中监控服务器、交换机及其他网络设备的状态。

4使用MIB Browser管理W55MH32流程

下载并安装MIB Browser(链接:https://www.ireasoning.com/download/mibfree/setup.exe)

创建分支

打开安装目录下 mibs文件夹,找到 RFC1213-MIB文件,右键使用记事本打开,上方路径栏可以寻找路径。

wKgZPGiBnH6AHRNIAAB1ylJXnac624.png

在snmp后添加一个新分支,命名为User

wKgZO2iBnH6AEPLGAAAzD4BH7bY036.png

添加叶子节点(功能)

在分支后方继续添加功能代码

wKgZPGiBnH6ARrzrAABn1M1ZbfY698.png

叶子节点格式如下:

setLED OBJECT-TYPE 添加一个新叶子节点,命名为 setLED

SYNTAX INTEGER { enabled(1),disabled(0) }设置数据类型

ACCESS read-write设置读写权限

DESCRIPTION 注释

::= { User 1 }叶子所在分支,与叶子编号

添加完毕后保存并退出

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

wKgZPGiBnH6ARrzrAABn1M1ZbfY698.png

代码适配功能

测试

5 SNMP架构组成

SNMP架构包括以下三个主要部分:

管理站(Manager):运行SNMP管理软件,用于发送请求和接收设备信息。通过命令操作网络设备,执行配置或监控任务。

代理(Agent):安装在受管理设备上的软件,负责将设备的状态信息存储在MIB中,并响应来自管理站的查询。能动地发送陷阱(Trap)以报告事件。

管理信息库(MIB):定义设备的可管理参数及其数据结构MIB通常以树状结构组织,每个节点代表一个管理对象,具有唯一的对象标识符(OID)。

协议(SNMP协议本身):负责管理站和代理之间的通信,支持基本操作如获取、设置和通知。

6 OID详解

简单网络管理协议(SNMP)的OID(对象标识符)是一个用于唯一标识网络设备上管理信息库(MIB)中对象的标识符。OID是一种分层的命名方案,允许管理员查询和设置网络设备上的各种参数。

下面是OID的详解:

OID结构

OID由一系列整数组成,这些整数通过点号(.)分隔,形成了一个层次结构。例如:

1.3.6.1.2.1.1.1.0

在这个结构中,每个数字都代表一个组织或节点在层次结构中的位置。

OID层次解释

1:表示ISO(国际标准化组织)

3:表示org(组织)

6:指定IETF(互联网工程任务组)作为组织

1:表示IETF管理的MIB(管理信息库)

后续的数字则进一步定义了特定的MIB模块、对象类型、实例等信息。

常见的OID前缀

1.3.6.1.2.1:这是最常用的OID前缀,通常简写为.iso.org.dod.internet.mgmt.mib-2,它指的是IETF定义的MIB-2。

具体OID示例

1.3.6.1.2.1.1.1.0:这是sysDescr的OID,用于获取系统描述。

1.3.6.1.2.1.1.2.0:这是sysObjectID的OID,用于获取系统对象标识符。

1.3.6.1.2.1.1.3.0:这是sysUpTime的OID,用于获取系统正常运行时间。

如何使用OID

查询:使用SNMPGET请求,可以查询特定OID的值。

设置:使用SNMPSET请求,可以修改特定OID的值(需要设备支持)。

遍历:使用SNMPWALK请求,可以遍历一个OID下的所有子节点。

注意事项

OID的具体值和结构可能会随着网络设备的不同而有所不同。在使用OID之前,最好查阅相应设备的MIB文档,以了解其支持的具体OID及其功能。OID是SNMP管理中不可或缺的部分,通过OID,网络管理员可以进行监控网络状态、配置网络设备、接收警报通知等操作。理解和掌握OID对于网络管理和故障排除非常重要。

7 SNMP报文格式

SNMP报文基于ASN.1(Abstract Syntax Notation One)编码规则,通常使用BER(Basic Encoding Rules)进行传输。以下是SNMP报文的基本格式和关键字段,本例程中使用的是SNMPv1版本,以下对SNMPv1进行讲解,而对于其他版本的报文格式,由于篇幅有限,这里将不再进行讲解,感兴趣的朋友可自行查阅资料进行学习。

SNMP报文结构

字段名称 类型 描述
Message 序列(Sequence) 整个 SNMP消息的容器,包含以下字段。
Version 整数(Integer) SNMP协议版本号,0表示 SNMPv1。
Community 字符串(Octet String) 社区字符串,用于身份验证,如 public或 private。
PDU类型 标记(Tag, Context-Specific) 表示操作类型,如:GET(0xA0)、GET-NEXT(0xA1)、SET(0xA3)、TRAP(0xA4)。
Request ID 整数(Integer) 请求的唯一标识,用于匹配请求和响应。
Error Status 整数(Integer) 错误状态,取值范围为:0(noError)、1(tooBig)、2(noSuchName)等。
Error Index 整数(Integer) 错误索引,指示变量绑定列表中出错的变量位置(从 1开始计数)。
Variable Bindings 序列(Sequence of VarBinds) 变量绑定列表,每个绑定包含一个 OID和对应的值。
- OID 对象标识符(OID) 被管理对象的标识符,如 1.3.6.1.2.1.1.1.0表示系统描述(sysDescr)。
- Value 可变类型(Null, Integer, String等) OID对应的值,可能为空值(GET请求)或具体数据(响应或 SET请求)。

报文字段详解

1. Message(消息整体)

这是 SNMP消息的最外层结构,是一个序列(Sequence),包含以下三个部分:

Version(版本号)
此字段定义 SNMP协议的版本号,用一个整数表示:

0表示 SNMPv1。

1表示 SNMPv2c。

3表示 SNMPv3。
该字段是解析报文的基础,不同版本的报文格式存在差异。

Community(社区字符串)
社区字符串是 SNMPv1和 SNMPv2c的一种简单身份验证机制,用于限制对管理对象的访问权限。它是一个字符串(Octet String),常见的值包括:

public:表示只读访问权限。

private:表示读写访问权限。

PDU(协议数据单元)类型
PDU定义了操作类型,通过一个标记值(Tag, Context-Specific)来区分:

0xA0:GET请求,用于获取管理对象的值。

0xA1:GET-NEXT请求,用于获取下一个对象的值。

0xA3:SET请求,用于设置管理对象的值。

0xA4:TRAP,用于代理向管理站报告事件。

2. Request ID(请求 ID)

请求 ID是一个整数,用于唯一标识一个请求。它由发起方生成,并在响应中携带相同的 ID。通过此字段,接收方可以将响应与对应的请求进行匹配。如果响应中的请求 ID不一致,则表明响应与请求无关。

3. Error Status(错误状态)

此字段用整数表示请求的执行状态:

0:noError,表示请求执行成功,没有错误。

1:tooBig,请求的响应数据超出接收方的最大允许大小。

2:noSuchName,请求中指定的 OID不存在。

3:badValue,请求中的值非法或不支持。

4:readOnly,请求试图修改只读对象。

5:genErr,发生了通用错误,具体原因未明确。

4. Error Index(错误索引)

如果 Error Status的值不为 0,此字段指示变量绑定列表中出错的变量位置(从 1开始计数)。如果没有错误,此字段的值为 0。

5. Variable Bindings(变量绑定列表)

变量绑定列表是 SNMP报文的核心部分,包含一个或多个变量绑定(VarBind)。每个变量绑定由以下两部分组成:

OID(对象标识符)
OID是管理对象的唯一标识符,用点分十进制表示。例如:

1.3.6.1.2.1.1.1.0:表示 sysDescr,系统描述。

1.3.6.1.2.1.1.5.0:表示 sysName,系统名称。

Value(值)
OID的值根据请求类型不同可能为以下几种:

在 GET请求中,值通常为空(Null)。

在 GET-RESPONSE报文中,值为具体数据,例如整型(Integer32)、字符串(Octet String)等。

在 SET请求中,值是要设置的新值。

SNMP报文解析

MIB Browser向W55MH32发送LED设置报文:

|报文解析|
Simple Network Management Protocol (简单网络管理协议(SNMP报文))
   version: version-1 (0) (使用的 SNMP协议版本,值为 0表示 SNMPv1)
   community: public (社区字符串为 "public",通常表示只读权限)
   data: set-request (3) (PDU 类型为 SET-REQUEST,表示设置管理对象的值)
       set-request
           request-id: 1479407980 (请求的唯一标识符,用于匹配请求和响应)
           error-status: noError (0) (错误状态为 noError (0),表示没有错误发生)
           error-index: 0 (错误索引为 0,表示变量绑定列表中没有错误对象)
           variable-bindings: 1 item (变量绑定列表中包含 1个变量)
                1.3.6.1.2.1.12.1.0: 1 (OID为 1.3.6.1.2.1.12.1.0,设置的值为 1)
                    Object Name: 1.3.6.1.2.1.12.1.0 (iso.3.6.1.2.1.12.1.0) (OID 对应的完整名称)
                    Value (Integer32): 1 (设置的值为整数类型,值为 1)
   [Response In: 237] (表示该请求的响应报文序号为 237)

|报文原文|
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响应报文:

|报文解析|
Simple Network Management Protocol
   version: version-1 (0) (版本号:SNMPv1(值为 0))
   community: public (社区字符串:"public",用于身份验证)
   data: get-response (2) (数据类型:GET-RESPONSE(值为 2),表示这是一个响应报文)
       get-response (GET-RESPONSE 数据部分)
           request-id: 1479407980 (请求 ID:1479407980,用于匹配请求和响应)
           error-status: noError (0) (错误状态:noError(值为 0),表示没有错误)
           error-index: 0 (错误索引:0,表示没有发生错误的变量索引)
           variable-bindings: 1 item (变量绑定:包含 1个变量)
                1.3.6.1.2.1.12.1.0: 1 (变量绑定内容)
                    Object Name: 1.3.6.1.2.1.12.1.0 (iso.3.6.1.2.1.12.1.0) (对象标识符(OID))
                    Value (Integer32): 1 (OID对应的值,类型为 Integer32,值为 1)
   [Response To: 236] (对请求 ID 236的响应)
   [Time: 0.023844000 seconds] 响应耗时:0.023844秒)

|报文原文|
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实现过程

接下来,我们看看如何在代码上适配MIB Browser上添加的功能。

注意:测试实例需要PC端和W55MH32处于同一网段。

步骤1:初始化LED并注册到SNMP中

user_led_init();
user_led_control_init(get_user_led_status, set_user_led_status);

步骤2:注册snmp定时器

/**
 * @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秒)定时处理DHCP
        if (tim3_1ms_count >= 1000)
        {
            DHCP_time_handler();
            tim3_1ms_count = 0;
        }

        // 10ms定时处理SNMP
        if (tim3_10ms_count >= 10)
        {
            SNMP_time_handler();
            tim3_10ms_count = 0;
        }

        // 清除中断标志位
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
    }
}

我们需要10ms调用一次SNMP_time_handler()函数,方便SNMP进行超时处理。

步骤3:添加功能函数

在snmp_custom.c文件中的snmpData结构体变量中,添加功能函数:

c

运行

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},
};

结构体变量snmpData的结构体dataEntryType定义如下所示:

typedef struct {
    uint8_t oidlen;                  // OID长度
    uint8_t oid[MAX_OID];            // OID数组(对象标识符)
    uint8_t dataType;                // 数据类型(对应SNMP数据类型)
    uint8_t dataLen;                 // 数据长度
    union {
        uint8_t octetstring[MAX_STRING];  // 字符串类型数据
        uint32_t intval;                  // 整数类型数据
    } u;                             // 数据联合体(存储不同类型的数据)
    void (*getfunction)(void *, uint8_t *);  // 获取数据的回调函数
    void (*setfunction)(int32_t);            // 设置数据的回调函数
} dataEntryType;

步骤4:初始化snmp协议

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 编号是否合法
    if ((SOCK_SNMP_AGENT > _WIZCHIP_SOCK_NUM_) || (SOCK_SNMP_TRAP > _WIZCHIP_SOCK_NUM_))
    {
        return;
    }

    startTime = getSNMPTimeTick();  // 记录启动时间(单位:10ms)
    initTable();                    // 初始化 OID 条目值

    initial_Trap(managerIP, agentIP);  // 初始化 Trap 相关配置

    /*
    // 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!!!");   // 添加字符串数据
        trap_oid2.u.intval = 123456;  // 添加整数值

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

        // 企业特定 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号,管理IP地址,请求IP地址等参数注册进去,并且记录开始时间。如果想使用Trap主动上报,可以参考注释中的示例代码。

步骤5:在主循环中运行snmpd_run()函数

snmpdrun()函数代码如下:

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

    uint8_t svr_addr[6];
    uint16_t svr_port;

    // 检查 socket 编号合法性
    if (SOCK_SNMP_AGENT > _WIZCHIP_SOCK_NUM_)
    {
        return -99;
    }

    // 根据 socket 状态进行处理
    switch (getSn_SR(SOCK_SNMP_AGENT))
    {
        case SOCK_UDP:
            // 检查接收缓冲区是否有数据
            if ((len = getSn_RX_RSR(SOCK_SNMP_AGENT)) > 0)
            {
                // 接收 UDP 数据
                request_msg.len = recvfrom(SOCK_SNMP_AGENT, request_msg.buffer, len, svr_addr, &svr_port);
            }
            else
            {
                request_msg.len = 0;
            }

            // 处理接收到的请求数据
            if (request_msg.len > 0)
            {
#ifdef _SNMP_DEBUG_
                dumpCode((void *)"rn[Request]rn", (void *)"rn", request_msg.buffer, request_msg.len);
#endif
                // 初始化请求和响应消息
                request_msg.index = 0;
                response_msg.index = 0;
                errorStatus = errorIndex = 0;
                memset(response_msg.buffer, 0x00, MAX_SNMPMSG_LEN);

                // 解析 SNMP 请求并发送响应
                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:
            // 创建 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()函数会执行一个UDP状态机,当收到SNMP管理的消息后会执行解析以及回复操作。

9运行结果

烧录例程运行后,首先可以看到打印了PHY链路检测和DHCP获取网络信息,然后是运行SNMP程序:

wKgZPGiBnH-Af8ufAABkTNVbjiY519.png

打开MIB Borwser,输入W55MH32的地址,然后依次点击system分支下的各个节点,获取到的结果与代码定义相同:

wKgZPGiBnH-AVFmeAAC0J56B1B4923.png

再找到User分支下的setLED指令,右键指令,点击set,类型选择integer,Value填 1,点击OK:

wKgZPGiBnH-AA8B6AACKGaCTpEo008.png

getLED指令,右键指令,点击get,即可读出LED状态:

wKgZO2iBnH-AST2cAACwLfob3AQ849.png

10总结

本文讲解了如何在 W55MH32芯片上实现 SNMP功能,通过实战例程展示了使用 MIB Browser管理 W55MH32的具体过程,涵盖在 MIB Browser中创建分支、添加叶子节点,以及在代码中适配功能等关键步骤。文章详细介绍了 SNMP协议的概念、特点、应用场景、架构组成、OID详解和报文格式,帮助读者理解其在网络设备管理和监控中的重要作用。

下一篇文章将聚焦 PING命令,解析其测试网络连通性的原理及在网络故障排查中的应用,同时讲解如何在W55MH32上使用 PING命令进行网络诊断,敬请期待!

WIZnet是一家无晶圆厂半导体公司,成立于 1998年。产品包括互联网处理器 iMCU™,它采用 TOE(TCP/IP卸载引擎)技术,基于独特的专利全硬连线 TCP/IP。iMCU™面向各种应用中的嵌入式互联网设备。

WIZnet在全球拥有 70多家分销商,在香港、韩国、美国设有办事处,提供技术支持和产品营销。

香港办事处管理的区域包括:澳大利亚、印度、土耳其、亚洲(韩国和日本除外)。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    41

    文章

    5923

    浏览量

    179530
  • SNMP
    +关注

    关注

    0

    文章

    93

    浏览量

    30574
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    第十五章 DAC (上篇)

    文章介绍了基于W55MH32的DAC(数字/模拟转换器)上篇内容,其为12位转换器,有2通道,支持8/12位模式、DMA等,具噪声和三角波生成等功能,还介绍了DAC_OutAudio例程的配置与验证。
    的头像 发表于 05-28 15:07 1109次阅读
    <b class='flag-5'>第十五章</b> DAC (上篇)

    第十五章 DAC (下篇)

    本篇文章为第十五章DAC(下篇),介绍三个例程:DAC_OutDMASineWave用DMA输出正弦波,DAC_OutNoiseWave输出噪声波,DAC_OutTriangleWave生成三角波,均有初始化、波形配置及串口调试功能。
    的头像 发表于 05-28 15:39 956次阅读
    <b class='flag-5'>第十五章</b> DAC (下篇)

    【正点原子FPGA连载】第十五章 窗口门狗(WWDG)实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    【正点原子FPGA连载】第十五章 窗口门狗(WWDG)实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
    发表于 12-05 11:21 12次下载
    【正点原子FPGA连载】<b class='flag-5'>第十五章</b> 窗口门狗(WWDG)实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    第二 W55MH32 DHCP示例

    本文介绍 DHCP 协议,包括其在 IP 网络自动分配参数的功能、便捷配置等特点、工作原理、报文格式和应用场景。通过 W55MH32 实战例程展示动态获取网络地址信息过程,含注册定时器中断、启用模式和获取信息等步骤,烧录后可完成检测与信息打印,PC 端能 PING 通设备。
    的头像 发表于 07-24 09:02 581次阅读
    第二<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 647次阅读
    第五<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 640次阅读
    第九<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 851次阅读
    <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 1003次阅读
    <b class='flag-5'>第十</b>一章 <b class='flag-5'>W55MH32</b> SMTP<b class='flag-5'>示例</b>

    第十二章 W55MH32 NetBIOS示例

    本文讲解了如何在 W55MH32 芯片上实现 NetBIOS 功能,通过实战例程展示了利用 NetBIOS 进行名称 PING 测试的具体过程,包括 NetBIOS 功能的调用、请求处理、名称解析
    的头像 发表于 07-24 09:58 561次阅读
    <b class='flag-5'>第十二章</b> <b class='flag-5'>W55MH32</b> NetBIOS<b class='flag-5'>示例</b>

    第十四章 W55MH32 TFTP示例

    本文讲解了如何在 W55MH32 芯片上实现 TFTP 协议,通过实战例程详细展示了使用 TFTP 客户端模式从服务器获取文本文件的过程,涵盖 TFTP 初始化、发送读请求、运行协议并处理结果等核心
    的头像 发表于 07-24 10:37 630次阅读
    <b class='flag-5'>第十</b>四章 <b class='flag-5'>W55MH32</b> TFTP<b class='flag-5'>示例</b>

    第十六章 W55MH32 PING示例

    本文讲解了如何在 W55MH32 芯片上通过 IPRAW 模式实现 ICMP 协议中的 PING 命令,以进行网络连通性测试,通过实战例程展示了从发送 PING 请求、接收并解析回复到统计结果的完整
    的头像 发表于 07-24 11:41 501次阅读
    <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 640次阅读
    <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 449次阅读
    <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 个 socket 实现 TCP 服务器模式,让多个客户端连接进行数据回环测试,通过实战例程展示了从初始化 socket 到监听端口、处理客户端连接
    的头像 发表于 07-24 16:10 738次阅读
    第二<b class='flag-5'>十五章</b> <b class='flag-5'>W55MH32</b> TCP_Server_Multi_Socket<b class='flag-5'>示例</b>

    第二十六章 W55MH32 上位机搜索和配置示例

    本文讲解了如何在 W55MH32 芯片上实现上位机搜索和配置功能,通过实战例程展示了使用开源上位机配置工具 SmartConfigTool 搜索局域网中的 W55MH32 并进行网络地址配置的过程
    的头像 发表于 07-24 16:13 589次阅读
    第二十六章 <b class='flag-5'>W55MH32</b> 上位机搜索和配置<b class='flag-5'>示例</b>