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 | 未知/未指定 |
| 001 | SC |
| 010 | FC(双工) |
| 011 | FC(单工) |
| 100 | LC |
| 101 | MU |
| 110 | RJ-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"。
判定标准
程序输出与预期输出完全一致,且修改Byte2值后能正确反映对应连接器类型,即判定本案例实现通过。该解析函数可直接嵌入光模块固件或上位机诊断工具中,用于读取SFF-8472兼容模块的物理连接器信息。