ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

STM32N6的CSI_REXT必须接电阻?D-PHY偏置与安全区配置解析

STM32N6的CSI_REXT必须接电阻?D-PHY偏置与安全区配置解析 最开始注意到这个 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 是一对差分线正负两根。信号分成两种工作状态LPLow Power状态用于控制信令HSHigh 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 的芯片原理图我都会先找这类外部电阻引脚确认阻值、精度和接地方式再画板。这个习惯帮你省的时间比你看十篇博客都多。
返回列表