凡亿教育 · 电子工程师实战教育品牌
嵌入式硬件培训:长沙/广州校区
|
课程咨询:15989478308(同微信)
免费领取课程大纲

两颗SPI器件共用MISO时的总线冲突

两颗SPI器件共用MISO时的总线冲突

SPI共用MISO本来是常规连接方式,前提是未被选中的从设备必须释放这根线。某些器件、电平转换电路或软件初始化状态会让MISO继续输出高低电平,从而引起总线冲突。

一块控制板接了两颗SPI器件,SCK和MOSI共用,片选各走各的,MISO也接在一起。单独焊一颗,读写没问题;两颗都焊上以后,偶尔读错,甚至某一颗完全不响应。

很多人第一反应是SPI时序不对。时序当然要查,但有一种更基础的情况容易漏掉:没有被选中的器件,是不是真的把MISO释放了?

01片选无效时的MISO状态

标准的多从设备SPI连接,主机只允许一个从设备在同一时刻驱动MISO,其余设备应处于高阻态。这样一根数据线才能轮流使用。

麻烦在于,不是所有叫作SPI的接口都按同一种方式实现。有些可编程从设备要在软件中明确切换MISO引脚方向;还有器件在上电复位、掉电或特殊工作模式下,输出状态与正常通信时不同。

如果其中一颗器件始终把MISO拉低,另一颗即使按协议返回了正确数据,MCU端也可能只读到低电平。反过来输出相互冲突时,还会出现额外电流和边沿异常。

02完整的片选切换时序

用逻辑分析仪抓SPI时,重点不只在时钟相位与数据采样点。最好把两个片选、SCK、MOSI和MISO放在同一组记录里,看从一颗器件切换到另一颗器件的过程。

可以做个简单对比:先让从设备A不选中,观察B通信;再断开A的MISO,看看B是否恢复。如果断开某一路后问题消失,总线占用或外部电路对线的影响就值得重点查。

示波器也有用。逻辑分析仪把电压直接判成0和1,有时看不到两颗输出互相较劲导致的中间电平、毛刺或缓慢边沿。两种工具看的是不同信息。

多从设备SPI连接示意,未选中的MISO必须满足高阻要求。

多从设备SPI连接示意,未选中的MISO必须满足高阻要求。

03电平转换器与MISO总线占用

如果SPI总线跨3.3V、1.8V或者其他电源域,MISO线上多出来的电平转换器可能改变三态行为。某些自动方向识别器件并不适合高速推挽SPI,具体要看芯片的数据手册和推荐拓扑。

还要查上电顺序。主机已经开始通信,但某颗从设备电源还没起来,其I/O钳位或接口结构是否会影响总线?这跟“两个片选不会同时有效”不是同一个问题。

对于片选由GPIO控制的方案,复位后的默认电平也得确认。片选线若在初始化之前短暂有效,可能让本不该输出的器件进入工作状态。

能用软件修的,先把片选切换时序、从设备输出使能和复位默认状态确认清楚。若器件本身不支持合适的MISO高阻状态,就要考虑外部三态缓冲器或多路复用器,而不是反复改SPI时钟分频。

如果问题来自电平转换方案,应按实际方向和速率重新选型。软件、器件和硬件连线三个层面都有可能,不能因为“SPI协议很简单”就默认PCB一定没问题。

这类问题的排查目标很明确:任意时刻,MISO到底由谁驱动?只要这个问题有答案,后续多数排查就不难展开。

真实SPI时序抓图,片选、时钟和数据线应放在一起检查。

真实SPI时序抓图,片选、时钟和数据线应放在一起检查。

声明:

本文由凡亿教育整理,转载请注明来源!

投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207



上一篇MOSFET关断的负压尖峰,不一定需要钳位 下一篇IQ幅度和相位只差一点,镜像抑制会变差多少?