SPI接口,与串口接口相似,是单片机中最基本的两个通讯接口,都有T(发)、R(收), 不同的是SPI还有时钟与片选 。
我初入研发时,设计过一个SPI接口的通讯板,但无论怎么都通不上,公司里的前辈们也找不出来问题,无意中看了眼原理图,才发现MISO与MOSI接反了(可能前辈们没想到会犯这个低级的错误)。正确的接法是:
![]()
有的芯片没有标MOSI与MISO,而是SDO,SDI,而这里就要区分是主还是从了。主的SDO接从的SDI,主的SDI接从的SDO。
延伸
一、布线时,总长一般不超过10cm,有时要做源端匹配,阻抗匹配就不用做了,但匹配不好就......。
二、不同的从元件有不同的速率要求,曾以20MHz去读取SPI存储器,总是要读取两次才能正确,后来发现是速度太快了。
三、SPI也可以远距离传输的,只要解决了信号在线路上的延时所导致的时序匹配。在加强驱动能力的同时,要用另一路的SPI(即主设备要有2个SPI 口)的时钟将时序同步才可以。用200m的屏蔽双绞线试验过,10MHz 正常。
四、要注意SPI的4种模式,主从要一致。CPOL、CPHA要匹配。
五、调试方式:先主设备的MOSI与MISO短接起来,看能不能自发自收,要是可以就是SPI设置正确,要是不能,要下面的从设备肯定也不行,还是找找 程序上的错误吧。
最后
这是一个很基本的通讯接口,但也常常出错,以上是本人在研发之路这些年总结的SPI上的问题,以上问题都解决了,SPI口也就没有什么问题了,再不行就是从设备协议的问题了。
|