# -*- coding: utf-8 -*- """gen_kb.py - 生成 pinout_kb.json(V0.0 网表知识库)。 运行: & '.venv\\Scripts\\python.exe' tools/netlist_semantics/gen_kb.py 数据来源:V0.0.tel 实测 + docs/芯片手册 + AGENTS.md 硬件引脚表。 """ import json import os KB = { "_comment": "V0.0 网表知识库:instances=位号→器件, nets=网络→语义。引脚功能以【网名+本表】为准(KiCad 符号脚号为任意编号,非手册脚号)。", "instances": { "U1": {"mpn": "CH395F", "pkg": "QFN-32", "desc": "SPI 以太网控制器 (MAC+PHY);SPI2↔U17,MDI→T1"}, "U2": {"mpn": "RTL8305NBI-CG", "pkg": "QFN-48", "desc": "双口 10/100 以太网交换/PHY;驱动 J1/J2,经 T1 接 U1"}, "U3": {"mpn": "TPAFE5160", "pkg": "LQFP-64", "desc": "16 通道 16-bit ADC;8080/FSMC 并口↔U17"}, "U4": {"mpn": "B0303S", "pkg": "PWRM-TH", "desc": "3.3V→3.3V 隔离 DC-DC(通信域 C3.3V);实际 B0303S,封装误标 B0505S-1WR3(A2,V0.1 更正)"}, "U5": {"mpn": "WINGTAT 9001-15481C00A", "pkg": "CONN-TH 48P", "desc": "48P 子板插座(继电器/告警/ADC/串口/时钟)"}, "U6": {"mpn": "LDO (SOT-223)", "pkg": "SOT-223-4", "desc": "5V→G3.3V LDO(通信 3.3V 域)"}, "U7": {"mpn": "LDO (SOT-223)", "pkg": "SOT-223-4", "desc": "5V→3.3V LDO(主 3.3V 域)"}, "U8": {"mpn": "FOC-817SC-F", "pkg": "SMD-4", "desc": "光耦;隔离 ST_DIR4→DIR4(485 方向控制)"}, "U9": {"mpn": "CA-IS3722HS", "pkg": "SOIC-8", "desc": "双通道数字隔离器;隔离 ST_UART1 → 232 ch1"}, "U10": {"mpn": "CA-IS3722HS", "pkg": "SOIC-8", "desc": "双通道数字隔离器;隔离 ST_UART3 → 232 ch3"}, "U11": {"mpn": "CA-IS3722HS", "pkg": "SOIC-8", "desc": "双通道数字隔离器;隔离 ST_UART4 → RS485"}, "U12": {"mpn": "SuperESD (CDSOT23)", "pkg": "SOT-23-3", "desc": "ESD 保护;RS485 A/B 线"}, "U13": {"mpn": "TPT3232E", "pkg": "SOP-16", "desc": "双路 RS232 电平转换收发器(驱动 RS232_TX1/RX1/TX3/RX3 → CN1/U14)"}, "U14": {"mpn": "C2836689", "pkg": "RJ45-TH", "desc": "RJ45 座(232/CLOCK/CF 通信口,非以太网)"}, "U15": {"mpn": "TP8485E-SR", "pkg": "SOIC-8", "desc": "RS-485 收发器"}, "U16": {"mpn": "SD2506API-G", "pkg": "DIP-6", "desc": "时钟/RTC 芯片(I2C: SD_SDA/SD_SCL)"}, "U17": {"mpn": "STM32F407ZGT6", "pkg": "LQFP-144", "desc": "主 MCU (Cortex-M4 @168MHz)"}, "U18": {"mpn": "AIP74LVC16245TA48", "pkg": "TSSOP-48", "desc": "16 位总线收发器(U17 ↔ 子板 U5)"}, "U19": {"mpn": "GD5F2GQ5UE", "pkg": "WSON-8", "desc": "2Gbit SPI NAND Flash"}, "U20": {"mpn": "钽电容", "pkg": "CAP-TH", "desc": "电源滤波 (GND/PGND)"}, "U21": {"mpn": "钽电容", "pkg": "CAP-TH", "desc": "电源滤波 (GND/PGND)"}, "U22": {"mpn": "钽电容", "pkg": "CAP-TH", "desc": "电源滤波 (CGND/PGND)"}, "J1": {"mpn": "HR911105A", "pkg": "RJ45-TH", "desc": "RJ45+网络变压器一体(端口 A)"}, "J2": {"mpn": "HR911105A", "pkg": "RJ45-TH", "desc": "RJ45+网络变压器一体(端口 B)"}, "H1": {"mpn": "16P 排针", "pkg": "HDR-TH", "desc": "LCD 8080 并口(板外屏)"}, "H2": {"mpn": "3P 排针", "pkg": "HDR-TH", "desc": "SWD 调试(SWDIO/SWCLK/GND)"}, "CN1": {"mpn": "JL15 端子", "pkg": "CONN-TH", "desc": "通信端子(RS485 A/B + RS232 1/3)"}, "X1": {"mpn": "晶振", "pkg": "CRYSTAL-4P", "desc": "→ U2 RTL8305 (RXI/RXO)"}, "X2": {"mpn": "晶振", "pkg": "CRYSTAL-4P", "desc": "→ U1 CH395F (XI/XO)"}, "X3": {"mpn": "晶振", "pkg": "CRYSTAL-4P", "desc": "→ U17 pin23/24(网未命名,推测 HSE 8MHz)"}, "T1": {"mpn": "H1102NLT", "pkg": "XFMR-SMD", "desc": "网络变压器(U1 CH395F ↔ U2 RTL8305)"}, "L1": {"mpn": "磁珠/电感", "pkg": "L0603", "desc": "5V→AVCC 滤波"}, "L2": {"mpn": "磁珠/电感", "pkg": "L0603", "desc": "AGND↔GND 连接"}, "L3": {"mpn": "磁珠/电感", "pkg": "L1206", "desc": "VDD50↔5V"}, "L4": {"mpn": "磁珠/电感", "pkg": "L1206", "desc": "G3.3V 滤波"}, "L6": {"mpn": "磁珠/电感", "pkg": "L0603", "desc": "3.3V→STM_VDDA 滤波"}, "D1": {"mpn": "肖特基/钳位二极管", "pkg": "SMB", "desc": "G3.3V 保护"}, "D2": {"mpn": "肖特基/钳位二极管", "pkg": "SMB", "desc": "3.3V 保护"}, "D3": {"mpn": "ESD 二极管", "pkg": "SMB", "desc": "RS232_RX3 保护"}, "D4": {"mpn": "ESD 二极管", "pkg": "SMB", "desc": "RS232_TX3 保护"}, "D5": {"mpn": "ESD 二极管", "pkg": "SMB", "desc": "RS232_TX1 保护"}, "D6": {"mpn": "ESD 二极管", "pkg": "SMB", "desc": "RS232_RX1 保护"}, "Q1": {"mpn": "MOSFET/三极管", "pkg": "SOT-23", "desc": "LED 驱动"}, }, "nets": { "GND": {"func": "主数字地"}, "AGND": {"func": "模拟地(ADC/模拟域)"}, "PGND": {"func": "电源/网络地(RJ45 屏蔽)"}, "CGND": {"func": "通信地(隔离侧)"}, "3.3V": {"func": "3.3V 主电源"}, "5V": {"func": "5V 电源(输入)"}, "C3.3V": {"func": "3.3V(通信/隔离侧)"}, "G3.3V": {"func": "3.3V(U6 LDO 输出,通信域)"}, "AVCC": {"func": "模拟 3.3V(ADC 供电,经 L1)"}, "AVDDL": {"func": "PHY 电源(U2 RTL8305)"}, "STM_VDDA": {"func": "STM32 模拟电源 VDDA(经 L6)"}, "VDD50": {"func": "5V(子板/USB 域,经 L3)"}, "XI": {"func": "晶振输入", "note": "X2→U1 CH395F"}, "XO": {"func": "晶振输出", "note": "X2→U1 CH395F"}, "RXI": {"func": "晶振输入", "note": "X1→U2 RTL8305"}, "RXO": {"func": "晶振输出", "note": "X1→U2 RTL8305"}, "CLOCK": {"func": "时钟(子板/232)", "note": "→U5 C8 / U14 pin7"}, "HRST": {"func": "ADC 复位", "note": "U3 reset,经 R16/C31"}, "GD_SCLK": {"func": "SPI1_SCK", "gpio": "PB3", "note": "→U19 SCK"}, "GD_SO": {"func": "SPI1_MISO", "gpio": "PB4", "note": "U19 SO←"}, "GD_SI": {"func": "SPI1_MOSI", "gpio": "PB5", "note": "→U19 SI"}, "GD_CS": {"func": "SPI1_NSS", "gpio": "PE0", "note": "→U19 CS"}, "GD_HOLD": {"func": "HOLD", "gpio": "PE1", "note": "→U19 HOLD"}, "GD_WP": {"func": "写保护", "gpio": "PB8", "note": "→U19 WP"}, "SPI1_SOMI": {"func": "SPI1 MOSI(子板侧)", "note": "经 U18 16245→子板;GPIO 待核"}, "SPI1_SIMO": {"func": "SPI1 MISO(子板侧)", "note": "经 U18 16245←子板;GPIO 待核"}, "CH395F_SCS": {"func": "SPI2_NSS", "gpio": "PB12"}, "CH395F_SCK": {"func": "SPI2_SCK", "gpio": "PB13"}, "CH395F_SDO": {"func": "SPI2_MISO", "gpio": "PB14"}, "CH395F_SDI": {"func": "SPI2_MOSI", "gpio": "PB15"}, "SD_SDA": {"func": "I2C SDA", "note": "→U16 SD2506"}, "SD_SCL": {"func": "I2C SCL", "note": "→U16 SD2506"}, "ST_TX0": {"func": "USART ch0 TX", "note": "→子板 (U5 A10)"}, "ST_RX0": {"func": "USART ch0 RX", "note": "←子板 (U5 B10)"}, "ST_TX1": {"func": "USART ch1 TX", "note": "→U9 隔离→232 ch1"}, "ST_RX1": {"func": "USART ch1 RX", "note": "←U9 隔离←232 ch1"}, "ST_TX2": {"func": "USART ch2 TX", "note": "→子板 (U5 C7)"}, "ST_RX2": {"func": "USART ch2 RX", "note": "←子板 (U5 C6)"}, "ST_TX3": {"func": "USART ch3 TX", "note": "→U10 隔离→232 ch3"}, "ST_RX3": {"func": "USART ch3 RX", "note": "←U10 隔离←232 ch3"}, "ST_TX4": {"func": "UART5_TX(485)", "gpio": "PC12", "note": "→U11 隔离"}, "ST_RX4": {"func": "UART5_RX(485)", "gpio": "PD2", "note": "←U11 隔离"}, "ST_DIR4": {"func": "485 方向 DE", "gpio": "PD0", "note": "→U8 光耦"}, "TX4": {"func": "485 TX(隔离后)", "note": "U11→U15"}, "RX4": {"func": "485 RX(隔离后)", "note": "U15→U11"}, "DIR4": {"func": "485 方向(隔离后)", "note": "U8→U15"}, "RS485_A": {"func": "485 A 线", "note": "U15→U12 ESD→CN1"}, "RS485_B": {"func": "485 B 线", "note": "U15→U12 ESD→CN1"}, "TX1": {"func": "232 ch1 TX(隔离后)", "note": "U9→U13"}, "RX1": {"func": "232 ch1 RX(隔离后)", "note": "U13→U9"}, "TX3": {"func": "232 ch3 TX(隔离后)", "note": "U10→U13"}, "RX3": {"func": "232 ch3 RX(隔离后)", "note": "U13→U10"}, "RS232_TX1": {"func": "232 ch1 总线", "note": "U13→CN1/U14"}, "RS232_RX1": {"func": "232 ch1 总线", "note": "CN1/U14→U13"}, "RS232_TX3": {"func": "232 ch3 总线", "note": "U13→CN1/U14"}, "RS232_RX3": {"func": "232 ch3 总线", "note": "CN1/U14→U13"}, "LCD_DB0": {"func": "8080 数据 D0", "note": "U17 FSMC→H1"}, "LCD_DB1": {"func": "8080 数据 D1", "note": "U17 FSMC→H1"}, "LCD_DB2": {"func": "8080 数据 D2", "note": "U17 FSMC→H1"}, "LCD_DB3": {"func": "8080 数据 D3", "note": "U17 FSMC→H1"}, "LCD_DB4": {"func": "8080 数据 D4", "note": "U17 FSMC→H1"}, "LCD_DB5": {"func": "8080 数据 D5", "note": "U17 FSMC→H1"}, "LCD_DB6": {"func": "8080 数据 D6", "note": "U17 FSMC→H1"}, "LCD_DB7": {"func": "8080 数据 D7", "note": "U17 FSMC→H1"}, "LCD_CS": {"func": "片选", "note": "U17→H1"}, "LCD_CD": {"func": "数据/命令 (ALE)", "note": "U17→H1"}, "LCD_RD": {"func": "读", "note": "U17→H1"}, "LCD_WR": {"func": "写", "note": "U17→H1"}, "LCD_RST": {"func": "复位", "note": "U17→H1"}, "LCD_BK": {"func": "背光", "note": "U17→H1"}, "TP_RD": {"func": "读控制 (FSMC)", "gpio": "PD3"}, "TP_CONVST": {"func": "转换启动", "gpio": "PD4"}, "TP_BUSY": {"func": "忙", "gpio": "PD7"}, "TP_OS0": {"func": "输出选择 OS0"}, "TP_OS1": {"func": "输出选择 OS1"}, "TP_OS2": {"func": "输出选择 OS2"}, "TP_FRSTDATA": {"func": "首数据", "note": "经 R24"}, "DB0": {"func": "FSMC 数据 D0", "gpio": "PG0", "note": "U17↔U3"}, "DB1": {"func": "FSMC 数据 D1", "gpio": "PG1"}, "DB2": {"func": "FSMC 数据 D2", "gpio": "PG2"}, "DB3": {"func": "FSMC 数据 D3", "gpio": "PG3"}, "DB4": {"func": "FSMC 数据 D4", "gpio": "PG4"}, "DB5": {"func": "FSMC 数据 D5", "gpio": "PG5"}, "DB6": {"func": "FSMC 数据 D6", "gpio": "PG6"}, "DB7": {"func": "FSMC 数据 D7", "gpio": "PG7"}, "DB8": {"func": "FSMC 数据 D8", "gpio": "PG8"}, "DB9": {"func": "FSMC 数据 D9", "gpio": "PG9"}, "DB10": {"func": "FSMC 数据 D10", "gpio": "PG10"}, "DB11": {"func": "FSMC 数据 D11", "gpio": "PG11"}, "DB12": {"func": "FSMC 数据 D12", "gpio": "PG12"}, "DB13": {"func": "FSMC 数据 D13", "gpio": "PG13"}, "DB14": {"func": "FSMC 数据 D14", "gpio": "PG14"}, "DB15": {"func": "FSMC 数据 D15", "gpio": "PG15"}, "AIN1": {"func": "子板模拟输入→ADC1"}, "AIN2": {"func": "子板模拟输入→ADC2"}, "AIN3": {"func": "子板模拟输入→ADC3"}, "AIN4": {"func": "子板模拟输入→ADC4"}, "AIN5": {"func": "子板模拟输入→ADC5"}, "AIN6": {"func": "子板模拟输入→ADC6"}, "AIN7": {"func": "子板模拟输入→ADC7"}, "AIN8": {"func": "子板模拟输入→ADC8"}, "AIN9": {"func": "子板模拟输入→ADC9"}, "AIN10": {"func": "子板模拟输入→ADC10"}, "AIN11": {"func": "子板模拟输入→ADC11"}, "AIN12": {"func": "子板模拟输入→ADC12"}, "AIN13": {"func": "子板模拟输入→ADC13"}, "AIN14": {"func": "子板模拟输入→ADC14"}, "AIN15": {"func": "子板模拟输入→ADC15"}, "ADC1": {"func": "TPAFE5160 通道1"}, "ADC2": {"func": "TPAFE5160 通道2"}, "ADC3": {"func": "TPAFE5160 通道3"}, "ADC4": {"func": "TPAFE5160 通道4"}, "ADC5": {"func": "TPAFE5160 通道5"}, "ADC6": {"func": "TPAFE5160 通道6"}, "ADC7": {"func": "TPAFE5160 通道7"}, "ADC8": {"func": "TPAFE5160 通道8"}, "ADC9": {"func": "STM32 ADC 通道9"}, "ADC10": {"func": "STM32 ADC 通道10"}, "ADC11": {"func": "STM32 ADC 通道11"}, "ADC12": {"func": "STM32 ADC 通道12"}, "ADC13": {"func": "STM32 ADC 通道13"}, "ADC14": {"func": "STM32 ADC 通道14"}, "ADC15": {"func": "STM32 ADC 通道15"}, "ADC16": {"func": "STM32 ADC 通道16"}, "ADC17": {"func": "STM32 ADC 通道17"}, "ADC1_GND": {"func": "ADC 通道1 地"}, "ADC2_GND": {"func": "ADC 通道2 地"}, "ADC3_GND": {"func": "ADC 通道3 地"}, "ADC4_GND": {"func": "ADC 通道4 地"}, "ADC5_GND": {"func": "ADC 通道5 地"}, "ADC6_GND": {"func": "ADC 通道6 地"}, "ADC7_GND": {"func": "ADC 通道7 地"}, "ADC8_GND": {"func": "ADC 通道8 地"}, "KEY1": {"func": "按键1", "note": "上拉 3.3V"}, "KEY2": {"func": "按键2", "note": "上拉 3.3V"}, "KEY3": {"func": "按键3", "note": "上拉 3.3V"}, "KEY4": {"func": "按键4", "note": "上拉 3.3V"}, "KEY5": {"func": "按键5", "note": "上拉 3.3V"}, "KEY6": {"func": "按键6", "note": "上拉 3.3V"}, "KEY7": {"func": "按键7", "note": "上拉 3.3V"}, "KEY8": {"func": "按键8", "note": "上拉 3.3V"}, "EXTKI1": {"func": "外部按键输入1", "note": "U5→U18→U17"}, "EXTKI2": {"func": "外部按键输入2", "note": "U5→U18→U17"}, "EXTKI3": {"func": "外部按键输入3", "note": "U5→U18→U17"}, "EXTKO1": {"func": "外部按键输出1", "note": "U17→U18→U5"}, "EXTKO2": {"func": "外部按键输出2", "note": "U17→U18→U5"}, "EXTKO3": {"func": "外部按键输出3", "note": "U17→U18→U5"}, "HT_A23": {"func": "子板信号 HT"}, "HT_A26": {"func": "子板信号 HT"}, "HT_C25": {"func": "子板信号 HT"}, "HT_C26": {"func": "子板信号 HT"}, "HT_C27": {"func": "子板信号 HT"}, "CLZ_LED": {"func": "子板状态 LED(闭锁)"}, "ERT_LED": {"func": "子板状态 LED"}, "TRIP_LED": {"func": "子板状态 LED(跳闸)"}, "RUN_LED": {"func": "子板状态 LED(运行)"}, "RELAY_STO": {"func": "继电器控制", "note": "U17→U18→U5"}, "H16": {"func": "子板信号"}, "V15": {"func": "子板信号"}, "J3": {"func": "子板信号"}, "F3": {"func": "子板信号"}, "K3": {"func": "子板信号"}, "RAS": {"func": "FSMC RAS(子板侧)"}, "DQM0": {"func": "FSMC DQM0(子板侧)"}, "DQM1": {"func": "FSMC DQM1(子板侧)"}, "WAIT1": {"func": "FSMC WAIT(子板侧)"}, "SDCKE": {"func": "FSMC CKE(子板侧)"}, "ST_IN_C3": {"func": "子板输入"}, "ST_IN_D4": {"func": "子板输入"}, "ST_IN_E4": {"func": "子板输入"}, "CF_P": {"func": "CF 通信 P", "note": "U5→U14/CN1"}, "CF_Q": {"func": "CF 通信 Q", "note": "U5→U14/CN1"}, "V_ZL1": {"func": "电压测量1→ADC16"}, "V_ZL2": {"func": "电压测量2→ADC17"}, "R16": {"func": "子板信号"}, "SWCLK": {"func": "SWD 时钟", "note": "U17→H2"}, "SWDIO": {"func": "SWD 数据", "note": "U17↔H2"}, "NRST": {"func": "复位", "note": "U17/U1,经 R40/SW1"}, "LED1": {"func": "板级 LED1", "gpio": "PC4", "note": "低有效;顺序按 AGENTS.md 待核"}, "LED2": {"func": "板级 LED2", "gpio": "PC5", "note": "低有效"}, "LED3": {"func": "板级 LED3", "gpio": "PB1", "note": "低有效"}, "LED4": {"func": "板级 LED4", "gpio": "PB2", "note": "低有效"}, "LED5": {"func": "板级 LED5", "gpio": "PF11", "note": "低有效"}, "LED6": {"func": "板级 LED6", "gpio": "PF12", "note": "低有效"}, "PBLED": {"func": "PHY 活动 LED", "note": "U2→R2→LED"}, "DIS_EEE": {"func": "显示/EEE 指示", "note": "U2→R6→LED1"}, "INT": {"func": "CH395F 中断", "note": "U1→U17"}, "RX_P": {"func": "MDI 差分(U2↔T1)"}, "RX_N": {"func": "MDI 差分(U2↔T1)"}, "TX_P": {"func": "MDI 差分(U2↔T1)"}, "TX_N": {"func": "MDI 差分(U2↔T1)"}, "RXA_P": {"func": "端口A MDI(U2↔J1)"}, "RXA_N": {"func": "端口A MDI(U2↔J1)"}, "TXA_P": {"func": "端口A MDI(U2↔J1)"}, "TXA_N": {"func": "端口A MDI(U2↔J1)"}, "RXB_P": {"func": "端口B MDI(U2↔J2)"}, "RXB_N": {"func": "端口B MDI(U2↔J2)"}, "TXB_P": {"func": "端口B MDI(U2↔J2)"}, "TXB_N": {"func": "端口B MDI(U2↔J2)"}, }, } if __name__ == "__main__": out = os.path.join(os.path.dirname(os.path.abspath(__file__)), "pinout_kb.json") with open(out, "w", encoding="utf-8", newline="\n") as f: json.dump(KB, f, ensure_ascii=False, indent=1) f.write("\n") print("written: %s (instances=%d, nets=%d)" % ( out, len(KB["instances"]), len(KB["nets"])))