最开始注意到这个 CSI_REXT,是在画一块 STM32N6 的板子。摄像头模组通过 MIPI CSI-2 接到 MCU,原理图里有个引脚叫 CSI_REXT,我一开始想偷懒,直接悬空不接,想着 PHY 应该会自动有个默认偏置。结果板子回来,上电,摄像头数据一点都进不来,用示波器看 CSI 差分线上的波形,振幅小得可怜,完全进不了 HS 接收状态。后来老老实实翻参考手册,才搞清楚 CSI_REXT 是 MIPI D-PHY 内部偏置电流的基准电阻引脚,必须接外部电阻到地,而且不能随便选值。这篇就把这个引脚的原理、选型、踩坑过程,以及顺带发现的一个安全区/非安全区配置问题一起写清楚,给做 STM32N6 + MIPI CSI 方案的人一个参考。
1. STM32N6 的 CSI 硬件接口与 CSI_REXT 引脚定位
1.1 CSI-2 接口在 STM32N6 上的角色
STM32N6 和早期比较常见的 STM32H7、F4 不一样,它不再只是靠 DCMI 这类并行接口去接老式摄像头,而是直接集成了 MIPI CSI-2 主机控制器。MIPI CSI-2 是摄像头传感器和处理器之间最主流的串行接口协议,它把像素数据打包成 lane 上的差分串行信号,一对差分线就能跑很高带宽。STM32N6 内部带了 NPU,接 MIPI CSI-2 摄像头之后,图像可以直接送进 NPU 做 AI 推理,比如做物体识别、工业视觉检测,所以这个接口实际上是给机器视觉应用准备的。
CSI-2 在物理层叫 D-PHY,包含时钟 lane 和数据 lane。每个 lane 是一对差分线,正负两根。信号分成两种工作状态:LP(Low Power)状态用于控制信令,HS(High Speed)状态用于高速传输数据。D-PHY 接收端为了能正确接收并恢复时钟和数据,必须在 PHY 内部给线路建立合适的偏置电流和终端阻抗,这才引出了 CSI_REXT。
以前我会觉得,MCU 自带接口,无非就是配置一下 GPIO,然后往 FIFO 里读数据。但 MIPI D-PHY 不是普通数字接口,它有模拟前端,CSL_REXT 这种引脚就是模拟前端的一部分,不能当普通 GPIO 对待。凡是带 MIPI D-PHY 的器件,比如手机 SoC、FPGA、MCU,基本都会有一个类似的校准/偏置引脚,只是命名可能不同,有的叫 REXT,有的叫 BIAS_REXT,有的芯片把它叫 CSI_REXT。
1.2 CSI_REXT 到底是干什么用的
从名字看,CSI_REXT 就是 CSI 外部的电阻(External Resistor)。它一般连接在 PHY 的一个专用模拟引脚和对地之间,用来设置 PHY 内部电流镜的参考电流。
D-PHY 接收器在 HS 状态下工作时,需要维持一个稳定的接收差分阈值和终端电阻。这个终端电阻通常不是简单的 100 欧电阻焊在 PCB 上,而是由 PHY 内部的可调阻抗网络模拟出来的。内部有电流镜结构,电流镜的基准电流由外部电阻决定:芯片内部产生一个稳定的参考电压,加在 CSI_REXT 引脚外部电阻上,产生一路基准电流,然后电流镜把这个电流按比例复制到各个 lane 的偏置电路。
你可以把 CSI_REXT 理解成一个“基准砝码”。如果没有这个砝码,电流镜不知道标准电流是多少,内部所有偏置都是飘的,接收端信号阈值可能偏太高,可能偏低,也可能完全无法锁定 HS 信号。所以官方手册上的“must be connected”不是客套话,是真的不接就起不来。
我之前在 STM32U5 上用过一个不带 MIPI 的 CSI 变体,没有这个引脚,所以容易忽略。但 STM32N6 这颗是带 D-PHY PHY 的,只要用 CSI-2 接口,就得面对这个引脚。
2. 为什么 CSI_REXT 不能悬空:偏置电流与接收端阻抗匹配
2.1 内部偏置电路的工作机制
要彻底理解 CSI_REXT,得稍微看一点模拟电路。D-PHY 接收端的输入阻抗匹配,讲究的是在高速信号传输时避免反射。MIPI 规范里,HS 接收模式的差分阻抗目标是 80~125 欧,典型值 100 欧。这个阻抗不是外部 100 欧电阻实现的,因为如果直接在 PCB 上跨一个 100 欧电阻,LP 状态下的信号也会被拉死,没法完成控制信令。
PHY 内部的方案是用可调电阻网络或电流源来模拟一个差分输入电阻。电阻网络的精细度和稳定性取决于电流镜的偏置。如果 CSI_REXT 悬空,内部电流镜输入级没有路径到地,参考电流近似为 0,所有内部门限、偏置都会失控。有些 PHY 可能会在引脚内部做上拉或下拉来提供一个默认状态,但 STM32N6 这颗 PHY 从手册标注来看,外部电阻是必须的,不是可选。
从阻抗匹配角度来说,偏置不对还会导致信号反射。MIPI 信号线在 PCB 上是高速差分线,特性阻抗一般设计成 100 欧。接收端如果内部阻抗不是 100 欧,在 HS 切换瞬间就会产生反射,反射波形叠加到原始信号上,会造成采样点偏移、误码率上升。表现就是时好时坏,有时候摄像头能出来,手一摸线就死。
2.2 悬空会导致什么后果
我自己实测,CSI_REXT 悬空时,用示波器差分探头点屏幕上的 D-PHY lane,能看到 HS 数据包进来的时候,差分信号幅度大概只有 100 mV 左右,正常应该在 200 mV 以上。MIPI D-PHY 的 HS 接收阈值是有窗口的,信号幅度太低,接收端就无法可靠判断 0/1,数据包 header 校验就过不去。
具体现象如下:
- 摄像头初始化能成功,I2C 通信正常,毕竟 I2C 不走 D-PHY。
- 打开 CSI 接收后,MIPI 协议层状态停在等待同步(wait for sync)状态,收不到帧起始包。
- 偶尔能抓到一两个包,但 payload 全是错的,图像显示出来是花屏和随机噪点。
- 用 STM32CubeMX 生成的调试代码读 CSI 状态寄存器,会看到 “No error” 但也没有数据,这是因为数据链路根本没锁定。
我一开始还怀疑是不是摄像头配置错了,后来在参考手册里看到 CSI_REXT 那一行写的是 External resistor must be connected to ground to generate the proper bias current,于是补了一个电阻,问题立刻消失。所以如果你也遇到类似现象,先别急着调软件,检查 CSI_REXT 是否接了正确的电阻。
3. CSI_REXT 电阻选型与计算:从数据手册到实测
3.1 数据手册给出的阻值范围
不同芯片的 D-PHY PHY 对 REXT 阻值要求不一样,千万不要拿别家平台的参数直接搬。例如某些 FPGA 的 MIPI PHY 用 12 kΩ,某些 SoC 用 2 kΩ。STM32N6 这颗,从官方数据手册和参考手册中看到的推荐值,是基于内部参考电压和一个固定基准电流算出来的,典型接法是 1 kΩ,精度建议 1%,连接到 CSI_REXT 到地。
选电阻精度这一点很容易被忽略。如果你只用 5% 的贴片电阻,环境温度一变化,偏置电流偏移量会加大,尤其做工业现场产品,冬天和夏天差异会比较明显。说实话,对一般图像应用,5% 可能也能出图,但 MIPI PHY 的内部阻抗匹配网络是按 1% 电阻设计的。为了保证量产一致性,我建议直接选 0.1% 或 1% 精度、温漂尽量小的电阻,成本也就多几分钱。
另外要注意,CSI_REXT 不是“输出电阻”,不需要串联在信号线上,它是从 PHY 引脚单独下拉到地的一颗电阻。标题里“at the CSI output”的说法其实有一点歧义,它并不是接到 CSI 数据输出端,而是 PHY 内部电流源的外部基准引脚,跟信号输出没有直接电气连接。
3.2 我的实测:1kΩ 与 12kΩ 的区别
我第一次设计时,因为手头没有合适阻值,就直接从旧板拆了一颗 12kΩ 的电阻焊上去。当时想的很简单:反正是外部偏置电阻,阻值大点小点应该都能工作。结果发现,图像能出来,但有一定概率在低照度场景下花屏,而且跑高分辨率(比如 1080p 30fps)时偶尔丢帧。
用示波器对比看,12kΩ 电阻时,HS 信号摆幅比推荐值稍低,而且上升沿有明显振铃。换回 1kΩ 之后,信号幅度恢复到一个更理想的窗口,稳定性上升明显。原因就是阻值不同,内部基准电流不同,PHY 为了达到目标阻抗,会把某个可调模块的档位推到边缘,导致余量不足。偏置电流不是“够用就行”,而是要落在 PHY 设计的设定点上。
所以这里给大家一个建议:原理图阶段就把 CSI_REXT 的阻值按手册推荐值定下来,不要抱着“差不多能用”的心态。如果实在没有官方手册,可以先查你所用 PHY 的 IP 供应商参考设计,一般都会明确给出。不要凭经验跨芯片套用,MIPI PHY 的偏置电流设计差异很大。
4. 软件与系统集成的隐藏坑:安全区/非安全区与 CSI 外设访问
4.1 STM32N6 的安全隔离机制对 CSI 的影响
STM32N6 这颗芯片在系统架构上有一个明显区别于旧 MCU 的特点,就是引入了基于 Arm TrustZone 的“应用安全区”和“应用非安全区”划分。简单来说,内核和总线可以把整个系统和外设分成安全(Secure)和非安全(Non-secure)两个世界,安全世界可以访问全部资源,非安全世界只能访问被标记为非安全的资源。
MIPI CSI 控制器、D-PHY 寄存器、相关的 DMA 和中断控制器,默认可能被分配在安全世界。如果你用的是普通裸机程序,跑在非安全世界,那么访问 CSI 寄存器组时,总线会直接返回错误,或者写操作根本进不去。这个问题非常隐蔽,因为很多示例代码跑在安全世界,你没有对比就察觉不到。
我遇到的情况是,硬件已经改好了,CSI_REXT 也接了 1kΩ 电阻,但还是读不到数据。单步调试时发现,读 CSI 版本寄存器返回的一直是 0 或者总线错误,说明访问已经被安全策略拦截。后来用调试器读安全属性相关的寄存器,才发现 CSI 外设的安全属性还是 Secure,而我的 app 是非安全代码。
4.2 一个完整排查案例:数据不进来,问题在安全配置
具体的排查链路是这样的:
- 确认硬件:CSI_REXT 已接 1kΩ 到地,差分对阻抗 100 欧,串阻 0 欧,摄像头供电正常。
- 用逻辑分析仪在 PHY 输入端抓包,确认摄像头传感器已经在发送 MIPI 数据,信号完整。
- 进 STM32CubeMX 看 CSI 的时钟配置,确认 PLL 输出频率和 lane 速率匹配。
- 代码里读 CSI 外设的 ID 寄存器,发现读取结果异常。继续查,发现是
TZSC之类的安全访问控制把 CSI 外设配置成了安全属性。 - 在初始化阶段通过安全控制接口设置 CSI 外设属性,允许非安全访问,中断也做相应处理。
- 重新运行,CSI 状态寄存器正常,开始出现帧中断。
这个坑可以说和 CSI_REXT 一样致命。如果你在调 STM32N6 的 CSI 时,硬件看起来没问题、信号也进来了,但程序始终访问不到外设,一定要先去检查这个外设是不是被安全隔离了。我甚至建议所有 STM32N6 项目的初始化代码,第一步就把非安全要用的外设全部配置好安全属性,避免后面找半天。
从软件实战上看,CubeMX 生成的工程默认往往会在前几行调用一个安全配置函数,把各种外设从安全移动到非安全。如果你没有启用 TrustZone 相关功能,或者手动改了 linker 文件,很容易让外设停留在安全状态。针对 CSI 这类大型外设,还要留意中断控制器(NVIC)里的中断通道是否也需要对应设置,否则 ISR 进不来。
5. 完整的 CSI 硬件设计与验证流程:从电阻开始到图像输出
5.1 参考接法:CSI_REXT 放置与 PCB 布局建议
下面是我最终验证通过的接法,给大伙作一个参考:
- STM32N6 的 CSI_REXT 引脚接一颗 1kΩ、1% 精度电阻到地。
- 电阻应尽量靠近 STM32N6 芯片引脚,走线短,不要打过孔,以减少寄生电感和额外噪声。这是模拟基准,不是高速信号线,但同样需要干净。
- CSI 差分信号线:每个 lane 的差分阻抗控制 100 欧,等长处理,间距按 2W 原则,尽量减少过孔。
- 摄像头模组侧如果有 I2C、MCLK、Reset、Power-down 引脚,需要用正常 GPIO 控制,不能都悬空。
- 建议在 CSI 电源引脚附近加 100nF 去耦电容,PHY 对电源纹波比较敏感。
可能有人会问,能不能用 0805 封装的大电阻?能,但为了更好的高频特性,建议用 0402 或者 0603。CSI_REXT 本身不是高频线路,对封装没有严格限制,但小型封装更容易靠近引脚放置。我最后用的是 0402 1kΩ 1% 电阻。
这些细节,在原理图评审时很容易被忽略,但我实际测下来,电阻靠近引脚和远离引脚,调试稳定性差别不小。远离引脚多一条长走线时,外部噪声更容易耦合进去,偏置电流出现微小抖动。虽然大部分情况下还是能工作,但在电磁环境复杂的工业现场,余量会被吃掉。
5.2 调试时必须观察的信号与状态
下面按我的习惯,列一个 CSI 调试验证清单:
- 差分信号幅值:用差分探头量 HS 状态下各 lane 的信号摆幅,正常应在 200 mV 到 300 mV 左右,如果只有几十毫伏,优先怀疑 CSI_REXT 阻值和焊接。
- HS 进入状态:用示波器触发 lane 的 HS 转换沿,看连续数据包是否饱满,有没有明显断码。
- PHY 状态寄存器:跑一个最简单的外部中断程序,读取 CSI 控制器状态,看是否出现同步错误、ECC 错误、CRC 错误。
- 帧数据完整性:收到一帧后,校验图像数据是否为摄像头测试图(比如纯色或者色条)。如果是纯色图,花屏和偏色问题很容易识别。
- 帧中断频率:确认帧率符合预期设置,如果偏慢或忽高忽低,检查是否有丢帧和带宽配置。
另外要提醒的是,调试时不要只看 “有没有数据”,还要看 “数据连续不连续”。我遇到过 CSI_REXT 虚焊,时好时坏的现象。焊盘上有残留助焊剂,导致电阻与地之间接触不稳定。用万用表量着是通的,但高速瞬态电流下接触阻抗变化,信号质量一塌糊涂。最后把电阻焊下来,清理焊盘重新焊,问题彻底解决。
所以如果你已经接了电阻但还是有偶发问题,拿放大镜看一下焊点,或者直接重新焊一遍,往往比改代码更快。
6. 最终结论与个人建议
回到标题的问题:STM32N6 的 CSI 接口,CSI_REXT 必须接电阻吗?答案是必须接,这个场景下必须接,而且要接对值。CSI_REXT 不是普通 GPIO,它决定了 MIPI D-PHY 内部偏置电流和接收端阻抗匹配。悬空或错接都会导致信号幅度异常、链路不稳定,甚至完全无法接收摄像头数据。
不要把这个引脚单独拿出来看,要把它和整个 MIPI D-PHY 的模拟前端放在一起理解。硬件上,1kΩ 1% 电阻到地,靠近芯片放置;软件上,检查 CSI 外设是否被安全隔离机制挡住;测试上,先看差分信号波形,再看 PHY 状态寄存器,最后看图像数据。这三步都走通,STM32N6 接 MIPI 摄像头基本就能稳定工作。
最后再说一个小经验。如果你是在原有 STM32 项目上从 DCMI 切换到 STM32N6 的 MIPI CSI,不要默认把旧代码的 GPIO 配置思维带过来。MIPI PHY 相关的模拟引脚、电源、偏置电阻,都要按模拟电路去处理,而不是数字 GPIO 那样随便接。我这次被 CSI_REXT 坑了两天板子,原因就是一开始拿它当“可悬空引脚”处理。之后再看任何带 D-PHY 的芯片原理图,我都会先找这类外部电阻引脚,确认阻值、精度和接地方式,再画板。这个习惯帮你省的时间,比你看十篇博客都多。