2. 解析SFF-8472基页中的连接器类型

任务说明

本案例需要从SFF-8472数字诊断监控接口的基页(Base Page)A0h地址空间中,解析出连接器类型字段(Byte 2,Bits 6:4),并按照SFF-8472规范将其映射为具体的连接器名称。输入为符合规范的256字节EEPROM基页数据(以十六进制数组形式提供),输出为连接器类型的枚举名称及对应代码值。

规范依据

SFF-8472基页中,地址A0h的Byte 2高三位(Bit 7为保留位,Bit 6:4为连接器类型)编码如下:

代码(Bit 6:4)连接器类型
000未知/未指定
001SC
010FC(双工)
011FC(单工)
100LC
101MU
110RJ-45
111无分离连接器(如Pigtail)

代码实现


#include <stdio.h>
#include <stdint.h>

// 连接器类型名称表,索引对应Bit6:4的值(0~7)
static const char* connector_names[] = {
    "Unknown/Unspecified",  // 000
    "SC",                   // 001
    "FC (Duplex)",          // 010
    "FC (Simplex)",         // 011
    "LC",                   // 100
    "MU",                   // 101
    "RJ-45",                // 110
    "No Separable Connector"// 111
};

// 解析基页Byte2中的连接器类型
// 参数: base_page 指向256字节基页数据的指针
// 返回: 连接器类型代码(0~7)
uint8_t parse_connector_type(const uint8_t* base_page) {
    uint8_t byte2 = base_page[2];       // 读取Byte 2
    return (byte2 >> 4) & 0x07;        // 提取Bit6:4
}

// 获取连接器类型名称
const char* get_connector_name(uint8_t code) {
    if (code > 7) return "Invalid";
    return connector_names[code];
}

int main() {
    // 示例基页数据(仅列出Byte0~Byte3,其余字节填充0)
    // Byte2 = 0x42 → 二进制0100 0010 → Bit6:4 = 100 → LC连接器
    uint8_t base_page[256] = {0};
    base_page[0] = 0x03;  // 标识符: SFP
    base_page[1] = 0x04;  // 外部接口: 未指定
    base_page[2] = 0x42;  // 连接器类型: LC (100)
    base_page[3] = 0x00;  // 收发器编码

    uint8_t code = parse_connector_type(base_page);
    printf("连接器类型代码: %u (0x%X)\n", code, code);
    printf("连接器类型名称: %s\n", get_connector_name(code));

    // 验证: 修改Byte2为0x62 → Bit6:4 = 110 → RJ-45
    base_page[2] = 0x62;
    code = parse_connector_type(base_page);
    printf("\n修改后连接器类型代码: %u (0x%X)\n", code, code);
    printf("修改后连接器类型名称: %s\n", get_connector_name(code));

    return 0;
}

编译与运行


gcc -o connector_parser connector_parser.c
./connector_parser

预期输出


连接器类型代码: 4 (0x4)
连接器类型名称: LC

修改后连接器类型代码: 6 (0x6)
修改后连接器类型名称: RJ-45

验证方法

1. 编译并运行上述程序,观察输出是否与预期输出一致。
2. 修改base_page[2]的值为不同字节(如0x22对应代码001→SC,0x72对应代码111→No Separable Connector),重新编译运行,检查输出名称是否与规范表匹配。
3. 判定标准:程序正确提取Bit6:4字段,且所有8种代码值均能映射到正确的连接器名称;当代码超出0~7范围时返回"Invalid"。

SFF-8472 基页 Byte 2 连接器类型字段解析 Byte 2 位布局: Bit 7 Bit 6:4 连接器类型 Bit 3:0 保留 本案例解析目标 其他字段 解析流程: 读取 base_page[2] 右移4位 & 0x07 (byte2 >> 4) & 0x07 查表映射名称 connector_names[code] 示例: Byte2 = 0x42 → 二进制 0100 0010 → Bit6:4 = 100 → LC 连接器

判定标准

程序输出与预期输出完全一致,且修改Byte2值后能正确反映对应连接器类型,即判定本案例实现通过。该解析函数可直接嵌入光模块固件或上位机诊断工具中,用于读取SFF-8472兼容模块的物理连接器信息。