SPI与UART、I2C常被称为单片机开发三大基本通信模块(几乎是个MCU,都少不了这三个通信外设),足以说明这三个通信模块被使用的频率有多高了,呵呵。而这三个通信模块优劣势不同,应用场合也不太一样,SPI一般用在需要短距离高速通信应用,比如高速ADC、SD卡接口、WIFI接口(大部分使用更快的SDIO接口)等等,毕竟动辄几十M的波特率还是另外两个通信接口拍马也赶不上的,而且SPI的时序、接口和结构都比较简单(一个Timer,一个shifter就可以构造一个SPI),所以其还是非常受广大单片机开发者的欢迎的。
说到这里,我得提一提Kinetis K系列的DSPI了,最开始以为DSPI只是比传统的SPI多了几个FIFO罢了,后来无论在自己测试时还是客户实际使用过程中还是发现有些需要注意的地方的,本篇博客我只提其中一点,即K系列的DSPI的外部接口。以Kinetis K10为例,其DSPI接口如下:
<img id="aimg_Ju838" class="zoom" height="342" file="http://files.chinaaet.com/images/blog/2015/06/15/4077335266753.png" border="0" alt="" />
从上图中可以看到其与传统SPI接口还是有些不同的,具体需要注意的几点我简单highlight出来仅供参考:
1. 我们可以看到熟悉的片选PCS和时钟SCK管脚,却看不到MISO和MOSI这两个管脚了,取而代之的是SIN和SOUT,从其方向扇出可以看到SIN只能做输入而SOUT只能做输出;
2. K10的DSPI可以配置成Master或者Slave模式(主从切换),也就是说当DSPI做主时,SIN->MISO,SOUT->MOSI,做从机时SIN->MOSI,SOUT->MISO,这点在硬件设计时需要尤为注意;
3. DSPI的几个SPI模块最多可以支持6个片选PCS[0:5],具体使用哪个片选,除了需要使能相应的管脚复用功能的话,在其每次发送时可以配置选择哪个PCS(通过寄存器选择),也就是说DSPI做主时,一个SPI模块最多可以挂6个从机;
4. 当把DSPI做slave从机时,只有PCS0才能作为片选信号,这与做主时不一样,这点也需要特别注意;
5. SIN和SOUT的单方向属性带来一个问题,即如果是两个单片机做SPI通信,而且两者需要做在线做主从切换,但是hardware上SIN和SOUT却已经fixed了,那该怎么办呢?放心飞思卡尔帮我们想好了,其专门留了两个管脚可以实现SIN和SOUT切换,即通过管脚复用寄存器来配置复用选项来实现MISO和MOSI的切换,如下图PTE1和PTE3这两个管脚。
<img id="aimg_Ej9u5" class="zoom" height="337" file="http://files.chinaaet.com/images/blog/2015/06/15/4077339477238.png" border="0" alt="" />
好了,说到这了,继续火车上博客的感觉,这feel倍爽,哈哈。
—————————————————————————————————————— |