修复 P1-7:MAC 写入顺序改为 INIT_CH395 之前

- 手册 §9.2.1:SET_MAC(步骤①) 必须先于 INIT_CH395(步骤⑤);SET_MAC 写
  芯片 EEPROM,INIT 从中加载 MAC——原顺序反了则本次上电 MAC 不生效
  (回落芯片内置/上次值),UI 显示与设备在线身份不符
- net_socket.c net_init():SET_MAC 移到 ch395f_init() 之前(对齐步骤①)
- ch395f.c:四个 SET(MAC/IP/GWIP/MASK)限定条件注释由"芯片已初始化"
  订正为"必须在 ch395f_init() 之前调用"
- net_socket.h / BSD_Socket_API_函数调用关系.md:同步顺序描述
- CH395F_Trap_Records.md:新增 Trap 24 沉淀根因与修复
- 待处理内容.md:P1-7 销项(§1/§2 阶段 A/§3.1/§4);阶段 A 清空后重编号
- 验证:Keil 构建 0 错 0 警;pre-commit 17/17 全通过
This commit is contained in:
2026-10-04 23:07:00 +08:00
parent 72c0bd2f7c
commit de1b50efe9
6 changed files with 67 additions and 46 deletions
+9 -6
View File
@@ -281,6 +281,15 @@ static bool s_mac_is_zero(const uint8_t *p_mac) {
ch395f_set_keepalive_intvl(NET_KEEPALIVE_INTVL_MS); /* 5 秒探测一次*/
ch395f_set_keepalive_cnt(NET_KEEPALIVE_CNT); /* 最多探 3 次*/
/* 设置 MAC(手册 §9.2.1 步骤①:SET_MAC 必须在 INIT_CH395 之前——SET_MAC 写芯片
* EEPROM,而 INIT_CH395 会初始化/加载 MAC;顺序反了则本次上电芯片仍用旧 MAC,
* UI 配置的 MAC 不生效(回落芯片内置/上次值),设备在线身份与 UI 显示不符。
* P1-7,2026-10-04);NULL 或全零 = 保持芯片内置 MAC,不下发;
* 写 EEPROM,每上电重放同值幂等 */
if (mac != NULL && s_mac_is_zero(mac) == false) {
ch395f_set_mac_addr((uint8_t *)mac);
}
/* 设置网络参数(必须在 INIT_CH395 之前调用 */
if (ip != NULL) {
uint8_t ip_arr[4];
@@ -307,12 +316,6 @@ static bool s_mac_is_zero(const uint8_t *p_mac) {
return NET_ERR_RETURN_1(NET_ERR);
}
/* 设置 MAC(须在协议栈初始化之后,限定条件"芯片已初始化";写芯片 EEPROM,
* 每上电重放同值幂等);NULL 或全零 = 保持芯片内置 MAC */
if (mac != NULL && s_mac_is_zero(mac) == false) {
ch395f_set_mac_addr((uint8_t *)mac);
}
/* 多 Socket 模式:为 Socket 0~7 各分配独立收发缓冲(必须在 OPEN_SOCKET 之前) */
/* 手册(§5.45):48 块 × 512B = 24KB;上电芯片默认仅给 Socket 0~3 分配(接收 8 / 发送 4 块) */
/* Socket 4~7 为 NULL,用到 8 个 Socket 必须重分配;单 Socket 块数为固定布局(ch395f.h,2026-09-22 起与 MSS 解耦) */
+3 -3
View File
@@ -68,9 +68,9 @@ typedef struct {
* mac - MAC 地址(6 字节,低字节在前),NULL 或全零使用芯片内置
* 返回值:0 成功,-1 失败
* 限定条件:SPI2 已正确初始化
* 函数说明:必须在所有网络操作之前调用;mac 非空且非全零时于协议栈
* 初始化成功后设置(ch395f_set_mac_addr 写芯片 EEPROM,
* 每上电重放同值幂等)
* 函数说明:必须在所有网络操作之前调用;mac 非空且非全零时在协议栈初始化
* (CMD_INIT_CH395)之前下发(手册 §9.2.1 步骤①:SET_MAC 写芯片 EEPROM,
* INIT_CH395 加载 MAC——顺序反了则本次上电不生效,回落芯片内置/上次值)
*/
int net_init(const char *ip, const char *mask, const char *gateway, const uint8_t *mac);