从零开始SPI
对于像我这种只听过嵌入式,却从来没有做过嵌入式的小白来说,SPI就是我职业生涯的开始。可能昨天我还不知道通信协议,底层驱动是什么,时钟有什么用,但从今天起,我好像还是什么都不知道。。。。。
1.简单概括SPI
SPI 是英语Serial Peripheral interface的缩写,中文名叫串行外围设备接口。这些都不用记,只需要知道他是一种通讯协议就行。再简单一点理解,SPI就是四根线,全双工。
1.全双工:就是输入和输出同时进行,发一个数据就要收一个数据,可以理解为环形传输。 2.四根线:时钟(SCK),输出(MOSI),输入(MISO),片选(CS/SS)。
其中MOSI:M:Master,O:Output,S:Slave,I:Input(当然也不光四根线,还要接电源,还有共地)
当SPI Master想读/写Slave时,它首先拉低Slave对应的SS线(SS是低电平有效),接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,Master把信号发到MOSI实现“写”,同时可对MISO采样而实现“读”,这就到了SPI最最最重要的一个地方,SPI时序!!!!!!!
2.SPI时序
当前面的你都已经记住了(看过一遍),那接下来就可以搞时序了,可以说SPI最重要的地方就是他的时序。一般来讲,谈到时序,肯定是先甩一张图上来,看图说话,但是对于小白来说,图不一定能看明白,所以有一个细节,SPI一共就四种模式,实在不行就把四个都试一次。
但是我还是要浅讲一下,如图所示:
CPOL = 0 : 空闲时SCK为低电平 CPOL = 1 : 空闲时SCK为高电平 CPHA = 0 : 数据在第一个(奇数)边沿被采样 CPHA = 1 : 数据在第二个(偶数)边沿被采样
只需要记住这些就可以了,大多数时候SPI要求Master和Slave保持时序上的一致。
3.SPI速率
这个是我在做整个项目中总结出来的经验之谈,很多人在配置SPI的时候根本不注意他的速率,要么是默认的,要么没有设置,对于Slave而言,他的SPI能力可能没有主控Master的那么强,所以往往需要降低主控的最高串行时钟,例如主频在168M的STM32F407,在和ICM20602通信时,就需要设置32分频,将频率降低到5.25MHZ再进行通信。 很多时候SPI无法通信,可能就是频率过高或者过低导致的,建议留心一下。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
现在是不是就觉得SPI好像还没有那么难,理解起来也不费劲啊,那既然你有这样的错觉,让我们进入项目实战一下吧。。。
|