简介:这份资源是君正T31芯片的线路模组图示文档,面向从事嵌入式硬件设计、原理图评审与电路调试的工程师,以及需要基于T31做方案评估的开发者,帮助读者快速理清该SoC在QFN封装下的整体架构与外围连接关系。压缩包内为1个PDF文件,约239KB,篇幅精炼,可直接作为设计参考或评审依据查阅。文档围绕系统架构、电源管理、接口与存储几大板块展开:电源部分列明12V直流输入经多路DC-DC与LDO转换得到5V、3.3V、1.8V、0.8V等电压,并给出分压电阻计算示例与兼容型号,同时标注VCC_3V3最大2A、VCC_1V8为1A等电流限制;接口部分覆盖以太网控制器、调试UART、MIPI、I2C、SPI、GPIO以及相机、USB、WiFi与音频模块,并附滤波电容等无源器件标注。目前已有238人学习,适合在选型比对、供电设计与接口扩展时作为对照材料使用。
1. 拿到 T31 线路模组图示,先别急着找摄像头接口
多数人翻 T31 线路模组图示的第一反应,是直奔 Sensor 页和引脚定义,把中间那几页电源当作背景资料跳过。但真让一块板子跑不起来的,往往就是被跳过的那几页。整份图一共 8 页,封面、系统架构、电源、IO/NOR FLASH、滤波电容、Sensor、ETH/USB/AUDIO、版本记录,其中真正在讲“电”的占了将近一半,信号和外设被挤在 3 页里。这反映的是 SoC 模组设计的真实权重:一颗 QFN88 的芯片要在 88 个引脚里塞进十几个电源域、几十个去耦点和五级电压转换,任何一处判断失误,后面调试通的所有软件都白费。把电源和引脚复用的机制吃透,比记住某个接口的定义更有价值。
2. 电源树:12V 进来之后,为什么要拆成五路而不是一路到底
2.1 电压等级与电流预算的内在逻辑
图纸上 12V 从 CON4 的 1.25mm 座子进来,经过保险、TVS、共模电感和一批 100nF/10uF 之后,分成几条支路并行往下走。能直接看出四个主要开关电源输出点,加上若干 LDO,最终形成这样一张电源表:
| 输出轨 | 生成方式 | 限流/额定 | 主要去向 |
|---|---|---|---|
| VCC_12V | 外部直入 | — | 红外灯、云台电机类外设 |
| VCC_5V | DC-DC 降压 | 2A | 外设、USB、部分传感器供电 |
| VCC_3V3 | DC-DC 降压 | 2A | IO、PHY、WiFi 模组 |
| VCC_1V8 | DC-DC 降压 | 1A | DDR IO、传感器 DOVDD、多数 VDDIO |
| VCC_0V8 | DC-DC 降压 | 1A | 内核/DDR 主电源 |
| AVDD_2V8 | LDO | 300mA | 传感器模拟、CODEC、ADC |
为什么不能“12V 一路 LDO 到底”?因为线性稳压的耗散功率是 (Vin−Vout)×Iout。把 12V 直接降到 0.8V,就算只带 1A,管子上也要白白烧掉 11W 以上,SOT-23 或 DFN 的封装根本撑不住这个热。开关电源效率能到 85% 以上,代价是纹波和 EMI。所以整条电源树本质上是一道效率与噪声的数学题:大压差、大电流走开关,小压差、小电流、怕噪声的走线性。
保留 5V 这一路也不是随手加的。VCC_12V 给红外灯,是因为灯板电流大、对电压精度不敏感,直接 12V 串限流电阻最省成本;5V 则留给 USB 和那些只认 5V 的外设。删掉任何一路,都要在别处补回一个更贵、更难布板的方案。
2.2 反馈电阻:0.6V 基准怎么把输出“算”出来
四路开关电源用的都是同一套反馈结构:芯片内部一个 0.6V 基准,外部两个电阻分压后送回 FB 脚。公式不复杂:
VOUT = (1 + R1 / R2) × 0.6V图上直接把这四组算式标了出来,省掉了我按电阻码表反推的功夫:
- (1 + 200K/100K) × 0.6 = 1.8V
- (1 + 40.2K/120K) × 0.6 ≈ 0.8V
- (1 + 150K/33.2K) × 0.6 ≈ 3.31V
- (1 + 200K/27K) × 0.6 ≈ 5.04V
注意最后一组的数值——标称 5.0V,按照标称值算出来其实是 5.04V。它的实际去向是 5V 外设,这个偏高的结果落在常见 5V ±5% 的容差以内,因此可以接受。图上白纸黑字写着公式和结果,反而比某些只标“VOUT=5V”的图更可信,因为它把推导过程也留下了,改电阻的时候不至于靠猜。
想换一颗不同阻值的反馈电阻,手算容易出错,我一般直接用一段小脚本把 E96 序列里所有组合列出来,按误差排序:
# 在 E96 标准阻值里找最接近目标电压的分压组合 E96 = [1.00,1.02,1.05,1.07,1.10,1.13,1.15,1.18,1.21,1.24,1.27,1.30, 1.33,1.37,1.40,1.43,1.47,1.50,1.54,1.58,1.62,1.65,1.69,1.74, 1.78,1.82,1.87,1.91,1.96,2.00,2.05,2.10,2.15,2.21,2.26,2.32, 2.37,2.43,2.49,2.55,2.61,2.67,2.74,2.80,2.87,2.94,3.01,3.09, 3.16,3.24,3.32,3.40,3.48,3.57,3.65,3.74,3.83,3.92,4.02,4.12, 4.22,4.32,4.42,4.53,4.64,4.75,4.87,4.99,5.11,5.23,5.36,5.49, 5.62,5.76,5.90,6.04,6.19,6.34,6.49,6.65,6.81,6.98,7.15,7.32, 7.50,7.68,7.87,8.06,8.25,8.45,8.66,8.87,9.09,9.31,9.53,9.76] def find_divider(vref=0.6, vtarget=3.3, r1_range=(10, 220), r2_max=150): best = [] for d1 in range(1, 10): # R1 的十位系数,比如 1.5 -> 15K for e1 in E96: r1 = e1 * d1 * 10 if not (r1_range[0] <= r1 <= r1_range[1]): continue # 由目标电压反推 R2,再去 E96 里找最近的 ideal_r2 = r1 / (vtarget / vref - 1) for d2 in range(10, 200): for e2 in E96: r2 = e2 * d2 if r2 > r2_max * 1000: continue vout = (1 + r1 / r2) * vref err = abs(vout - vtarget) / vtarget best.append((err, r1, r2, vout)) best.sort(key=lambda x: x[0]) return best[:5] for err, r1, r2, vout in find_divider(vref=0.6, vtarget=3.3): print(f"R1={r1:>6.0f}Ω R2={r2:>6.0f}Ω VOUT={vout:.4f}V 误差={err*100:.3f}%")这段代码的关键在ideal_r2那一步:先按目标电压反推理论 R2,再在 E96 序列里找实际能买到的最接近值,最后把误差按百分比排序。之所以限定 R1 在 10K~220K、R2 不超过 150K,是因为反馈电阻的取值本身有边界——太小会让分压支路一直漏电,几十微安看着不多,但对低功耗待机是实打实的损耗;太大则会被 FB 脚的输入偏置电流和噪声干扰,让输出稳不住。图里从 27K 到 120K 的选择,正好落在几十 K 到一两百 K 之间,属于常见做法。
另外,1% 精度的电阻加起来的误差并不是简单相加。Vref 本身有精度,两个电阻各有 1% 公差,最坏情况下输出偏差能到 ±3% 左右。0.8V 那一路尤其要留意,分母 120K 比分子 40.2K 大得多,VOUT 对 R1 的变化反而更敏感,所以图上特意把 R1 标成 40.2K/1%、R2 标成 120K/1%,这不是随手写的。
2.3 电感与输出电容:2.2uH 和 4.7uH 是怎么定下来的
电感值不是看心情挑的。开关电源的电流纹波大致是:
ΔI = (Vin − Vout) × Vout / (Vin × L × fsw)按 12V 输入、2MHz 开关频率量级估算:3.3V 输出配 4.7uH,纹波电流约 0.25A;0.8V 输出配同款电感,纹波只有 0.08A 左右。纹波小意味着峰值电流低,电感不容易饱和,输出电容的压力也小。
真正要小心的是饱和电流。选电感时不能只看输出平均电流,得看峰值电流 Iout + ΔI/2。图上标的 2.2uH/1.3A-2016、4.7uH/1.4A-2520,后缀就是封装尺寸:2016 是 2.0×1.6mm,2520 是 2.5×2.0mm。封装越大,能承受的饱和电流和散热能力越强,但占板面积也越大。小封装电感配小电流支路,大封装配大电流支路,这种对应关系在图上标得明明白白。
输出电容这边,图里 22uF-1206、22uF-1206、10uF-0603 混着用。大容量的负责吸收负载瞬变,小容量的负责压高频纹波,容值差两个数量级不是浪费,而是分工。输入侧的 22uF/10uF 还要额外扛住开关瞬间的脉冲电流,1206 封装比 0603 更能承受纹波电流带来的发热,这也是选型的隐性约束。
3. 去耦电容:为什么“滤波电容”能单独占一整页
3.1 100nF 和 10uF 不是随便配对的
翻到 Filter-Capacitor 那一页,你会发现几乎全是电容符号,几十个 100nF、十几个 10uF、几个 4.7uF 和 1uF,每个电源脚旁边都挂着一对。这种“看似重复”的画法,背后是电容的阻抗-频率曲线:理想电容的阻抗随频率下降,但实际电容有等效串联电感 ESL,超过自谐振频率之后阻抗反而上升。
100nF 的 0402/0603 封装自谐振点大致在几十 MHz,10uF 则在一两 MHz。两个并在一起,低频段由大电容兜底,高频段由小电容接管,中间那段各自的自谐振峰还能互相填补。这就是“成对出现”的物理原因——不是冗余,是覆盖频段。
提示:并不同容值的电容也可能在某些频点产生并联谐振峰,阻抗反而抬高。布板时把最小容值放得离引脚最近,大容值稍远,是降低这个风险最直接的办法。
3.2 电源域清单:一个脚一颗电容的对应关系
T31 的电源引脚密度很高,光从引脚名就能数出这些域:
| 电源域 | 性质 | 去耦策略 |
|---|---|---|
| VDD_1 / VDD_2 / VDD_3 / VDD_4 / VDD_5 | 数字主电源 | 10uF + 100nF |
| VDDIO_0 / VDDIO_1 / VDDIO_2 / VDDIO_D | IO 电源 | 每域独立 100nF |
| VDDMEM / DDRVDD | DDR 存储 | 10uF + 100nF,靠近球位 |
| DDR_VREF | 参考电压 | 单独走线,不与其他域共用 |
| PLL_VDDHV / VDDIO_OSC | 时钟与 PLL | 100nF,尽量短 |
| CODEC_AVDD / ADC_AVDD / MIPI_AVD08/18 | 模拟 | 独立磁珠 + 100nF |
| USB_AVD33 / USB_AVD18 / AVDD_PHY | 接口模拟 | 独立磁珠 + 100nF |
| DDRPLL_AVD08 / AVD18 | DDR PLL | 独立磁珠 + 100nF |
规律很明显:数字域可以共享大电容,模拟域和 PLL 域必须各自独立、且经过磁珠隔离。原因在于 PLL 和 ADC 对电源上的任何一点低频抖动都极其敏感,把它和 DDR 的开关噪声接在同一段铜皮上,图像上就会出现说不清来源的噪声条纹。
3.3 磁珠隔离:1000Ω/250mA 看着不够,其实规则不同
图里反复出现1000ohm/250mA的 FB 元件,这是磁珠,不是普通电阻。1000Ω 指的是 100MHz 时的阻抗,250mA 是额定电流。有人第一眼会觉得别扭:AVDD_2V8 那路 LDO 标的是 300mA,磁珠只有 250mA,这不是超了吗?
这里的判断标准不是 LDO 的限流值,而是该电源域实际要吃的电流。传感器模拟部分、CODEC 的模拟前端,实际工作电流通常在几十毫安量级,250mA 的磁珠留有相当大的裕度。真正需要警惕的是把磁珠当成“万能滤波器”往大电流路径上塞——比如给 3.3V 主 IO 串一颗 250mA 磁珠,WiFi 模组一发射就掉压,这种翻车在现场太常见了。
注意:磁珠选型要看三个数——目标频段的阻抗、额定电流、直流电阻 DCR。DCR 大的磁珠会带来额外压降,低压大电流的路径上尤其不能忽视。
3.4 E-PAD 与地回流:第 89 个脚才是关键
QFN88 的封装在引脚编号里体现为E-PAD_VSS 89,也就是底部散热焊盘。这个焊盘既是散热通道,也是整个芯片的地回流主干。布板时焊盘上要打足够多的过孔接到地平面,过孔数量不够,地回流路径的等效电感就会变大,高速信号的回流路径被迫绕远,表现出来就是 MIPI 眼图变差、DDR 误码率上升这类问题。
去耦电容的地端回流也是一样的道理。电容一端接电源脚、一端接地,但“地”在哪、怎么回去,决定了这颗电容到底有没有起作用。电容地端打一个过孔就接到地平面的做法,在几十 MHz 以下是够的;到了几百 MHz,过孔电感就成了瓶颈。
4. 引脚复用与启动路径:88 个脚怎么同时装下 SFC、MIPI、DVP、RMII
4.1 引脚名里的斜杠,就是一张功能矩阵
看芯片引脚表,会发现引脚名长这样:
DVP_D11_SD5_UART2_RXD_MSC1_D3_PA11 PWM2_DRV_VBUS_SSI1_DT_PB27 GMAC_TXD0_MSC1_D2_I2S_ADC_LRCK_SLCD_D6_PB13一个引脚名里最多能挂五六个功能,用下划线分开,最后一段是 GPIO 分组编号(PA/PB/PC)。读法是从左往右:默认功能在最前,后面依次是复用功能,最后才是通用 IO。这种命名方式把“这个脚能干什么”全写在了名字里,比翻几十页复用表快得多。
| 分组 | 典型引脚 | 主要用途 |
|---|---|---|
| PA | PA06/PA07 | DVP 数据、UART1 调试串口 |
| PA | PA23/PA24/PA27/PA28 | SFC(SPI Flash 控制器)专用 |
| PA | PA12/PA13 | I2C0 / SMB0,传感器控制 |
| PB | PB00~PB05 | MSC0(SD 卡)、SSI |
| PB | PB06~PB16 | GMAC RMII 与 SLCD 复用 |
| PB | PB17/PB18 | PWM/SSI |
| PC | PC00 | BOOT_SEL0 |
值得注意的是 SFC 那四个脚(SFC_CE0、SFC_CLK、SFC_DT、SFC_DR)单独落在 PA23/24/27/28 上,没有和 SD 卡控制器混在一起。这是有意的设计:启动介质必须在最早期就可用,不能等任何软件配置,所以给它一段物理上独立、复用冲突最少的引脚。
4.2 启动介质:BOOT_SEL0 与内置 POR 的分工
图里 NOR FLASH 那部分画了一颗 8 脚 SPI NOR(GD25Q127 系列),CS、CLK、DO、DI 直接连到 SFC 的四个脚,另外还有 WP 和 HOLD 两个脚做上拉。旁边的注释写着1Mohm must be Mounted,同时注明R15 和 C26 can be NC,以及Use the built-in POR reset as default。
这三句话合起来,说的是一件事:复位和启动的默认路径要尽量少依赖外部元件。内置 POR 能在上电时自动产生复位脉冲,外部只需要一颗 1MΩ 电阻保证确定电平,不需要额外的复位芯片。少一颗器件,就少一个失效点,也少一份 BOM 成本。对于走量产品来说,这个取舍很清楚。
BOOT_SEL0 落在 PC00 上,上电时被采样决定从 SFC 启动还是走 USB 下载模式。这个脚在布板时必须保证上电瞬间电平是确定的,不能被旁边的外设拉偏——这是后面会讲的一条踩坑记录。
4.3 传感器的两套接口:DVP 12bit 与 MIPI 2-lane 共存
Sensor 页画的是 SC4335,4MP 级别,接口同时引出了 DVP 的 D0~D11、PCLK、HSYNC、VSYNC,以及 MIPI 的 DATAP0/N0、DATAP1/N1、CLKP/N。两套接口在芯片引脚上是复用的:DVP_D0~D5 和 MIPI_DATAN0/DATAP0/CLKN/CLKP/DATAN1/DATAP1 共用 24~29 号脚。
选哪种接口由软件配置决定,硬件上两套都留了位置。DVP 走的是并行口,12 根数据线加三根同步信号,布线占用大但时序直观;MIPI 走差分,两 lane 就够传 4MP,走线少但对阻抗和等长要求高。这颗传感器的 I2C 地址由 SID 脚决定,图上标注SID LOW: I2C Address = 0x30,也就是 SID 接地时地址是 0x30,和 I2C0 总线上的其他器件不冲突。
传感器的供电分了三路:AVDD 2.8V、DOVDD 1.8V、DVDD 1.5V,分别由 LDO 和主电源树供给。图上还标了具体的去耦组合,比如 A1 脚是 10uF+100nF、B5 脚是 4.7uF+100nF,哪个脚配多少电容写得清清楚楚,照着抄就不会错。
4.4 RMII 与 PHY 地址:那些决定“能不能认到网口”的细节
以太网部分用的是 RMII 模式,PHY 芯片(IP101G 系列)通过 50MHz 时钟、RXD0/RXD1、CRS_DV、TXEN、TXD0/TXD1 与 GMAC 相连。MDIO/MDC 是管理接口,用来读写 PHY 内部寄存器。
图上有一行小字很关键:PHY Address : 00000b。这个地址不是焊接固定的,而是由上电时采样 LED0/PHY_AD0、LED3/PHY_AD3 这几个复用脚的上下拉电平决定的。地址错了,MDIO 总线上就永远读不到 PHY,内核日志里表现为“找不到网卡”。旁边还有R50 6.19K/1%的 ISET 电阻,用来设定 PHY 内部偏置电流,这个阻值不能随便换,换了之后 MDI 差分对的驱动幅度就跑偏,长距离网线会掉包。
MDI 侧的四个差分对上一对 TVS(UDD32C03L01),外加 75Ω 端接电阻接到一个公共点,再通过 1000pF/2KV 的电容下地。这套网络的作用是把共模干扰泄放掉,同时不影响差模信号,PoE 供电场景下尤其不能省。
5. 排查清单:五条踩过的坑,每条都能对上图上的某个位置
5.1 电源与复位类
现象:上电后串口完全没输出,电流只有几毫安。原因:复位脚被外部电容拉得太久,或者 1MΩ 上拉电阻漏贴。内置 POR 虽然能自动复位,但前提是复位脚不能被外部元件死死按住。 解决:按图上标注,1MΩ 电阻必须贴,C26 选 NC;用示波器看复位脚的上升沿,确认在电源稳定后几毫秒内释放。
现象:图像上有缓慢滚动的横纹,换个电源适配器就没问题。原因:模拟电源用了开关电源直接供电,或者 AVDD_2V8 那路的磁珠被短路、去耦电容漏贴。 解决:核对 LDO 与磁珠的位置,AVDD 一路必须走线性稳压加磁珠;用示波器交流耦合量一下模拟域的纹波,正常应该在几毫伏量级。
现象:满载时 3.3V 掉到 3.0V 以下,WiFi 一发射就重启。原因:电感饱和电流选小了,或者反馈电阻取值让环路响应偏慢。 解决:按峰值电流而不是平均电流选电感,把纹波电流算进去;反馈电阻保持在几十 K 量级,不要为了省电盲目加大。
5.2 外设与信号类
现象:PHY 认不到,MDIO 读回来全是 0xFF。原因:PHY 地址被 LED 脚的上下拉配置错了,或者 MDC 频率超出 PHY 支持范围。 解决:按图核对 PHY_AD0~AD3 的上下拉组合,地址应为 00000b;同时确认 RMII 的 50MHz 时钟来源是 PHY 输出还是 SoC 输出,配反了同样读不到。
现象:传感器 I2C 无应答,换一颗传感器依然如此。原因:SID 脚没接地导致地址变成 0x31,或者 PWDN/RESET 时序不对,传感器一直处于掉电状态。 解决:量 SID 脚电平确认为低,确认 I2C0 上有上拉;上电顺序按 PWDN 释放→延时→RESET 释放的顺序走,不能颠倒。
6. 取舍:为什么这份图把“电”和“信号”分成两套画法
翻完这 8 页会发现一个有意思的结构:System Architecture 和 POWER SUPPLY 是“功能视角”,告诉你有哪些模块、需要几路电;Filter-Capacitor 和 IO/NOR FLASH 是“物理视角”,精确到每个脚挂多少电容、走哪根线。两套画法分开,不是因为排版方便,而是因为它们回答的是两个不同层面的问题——前者决定方案能不能成立,后者决定板子能不能一次点亮。
这种拆分带来的实际好处是验证路径清晰。拿到板子先量电压:12V 是否到位、四路开关电源输出对不对、LDO 输出有没有被拉死;再量纹波:模拟域是否干净、DDR 电源是否稳定;最后才看上电时序和启动。顺序反了,就很容易在软件里找硬件的问题,绕一大圈。
代价也很明显:信息被拆散之后,跨页的关联要靠人脑补。比如某个电源域在 POWER SUPPLY 页只出现一次,具体挂几颗电容要去 Filter-Capacitor 页找,而那个域又供给了 Sensor 页上的某个脚——三页之间来回跳,第一次看很容易漏。我的习惯是把电源域、引脚号、电容值抄成一张自己的对照表,抄的过程本身就是一次检查。
真正需要权衡的地方在于集成度与可调试性。这颗芯片把 DDR、PHY、CODEC 全集成进去了,外围元件数量大幅下降,但代价是一旦出问题,能下手的地方变少:DDR 时序调不了,PHY 寄存器能改的有限,只能靠电源和布板去保证。所以这份图在电源上给得特别细,本质上是在用外围的确定性,去换集成的不可调试性。想清楚这一点,再去看那些密密麻麻的 100nF,就不会觉得是在凑数了。
从那以后,我每次拿到一份带完整电源树的模组图,都会强制自己先按“电压等级→电流预算→反馈电阻→去耦位置”走一遍,哪怕这次只是改一个接口。走过的这几步,往往就是后面省下的几个通宵。希望帮到你。
本文还有配套的精品资源,点击获取