打印
[信息]

【实战经验】SPI 接口发片选信号导致死机

[复制链接]
2764|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-17 14:32 编辑

SPI 接口发片选信号导致死机

问题:
该问题由某客户提出。据其工程师描述:其产品设计中,使用了 STM32F103VDT6 器件。该器件的 SPI2 通信接口外接一个 EEPROM,如下图所示。 在其进行软件调试时,发现当程序发起对 EEPROM 的读写 时会导致 STM32 死机。用示波器进一步观测,发现 STM32 只发出了片选信号(/CS),没有 SPI 时 钟送出。于是断定 STM32 送出片选信号(/CS)之后,未及做实质的数据传输,即已死机,缘由不详。



调研:
检测相关电路的设计,包括电源、地、复位电路、时钟电路、BOOT 模式处理等,未见异常。重新核对 该 SPI 接口对外连接,确认如图。修改软件,去除对片上其它的外设的操作,只对该 SPI 接口进行 通信测试。结果显示,该接口可以正常通信。将原程序中的代码逐步加入测试程序。在将与 I2C2 相 关代码加入后,问题重现。详细检查程序中对 I2C2 接口的设置与驱动,发现其程序对 I2C2 接口启用 了 SMBus 模式,而 SMBA 信号恰与 SPI2 的片选信号(/CS)位于同一管脚。

结论:
当程序通过 SPI2 接口访问 EEPROM 时,片选信号(/CS)意外的触发了 I2C2 的 SMBA 信号,于是 I2C2 发出中断请求,进而程序跳入相关的中断处理程序。而该中断处理程序并未对这一事件做任何处 理,所以中断请求得不到清除,从而无法退出该中断处理程序,STM32 表现出死机状。

处理:
对 I2C2 不启用 SMBus 模式,而使其工作在 I2C 模式,问题得以解决。

建议:
该问题属于典型的管脚资源分配冲突问题,同类问题在实际应用中出现频率较高。对于 STM32 系列 MCU 来说,其管脚多数为多功能复用管脚,所以在分配时管脚一定要仔细斟酌,认真检查。

更多实战经验请看: 【ST MCU实战经验汇总贴】

沙发
643757107| | 2015-7-22 21:31 | 只看该作者
对 I2C2 不启用 SMBus 模式,而使其工作在 I2C 模式,问题得以解决

使用特权

评论回复
板凳
643757107| | 2015-7-22 21:32 | 只看该作者
楼主的经验很棒,让我受益匪浅

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17099

帖子

287

粉丝