多路SPI从设备连接方法

 2018-2-8 16:16:01     作者:刘乾坤    
文章标签:SPI

  SPI是串行外设接口(Serial Peripheral Interface)的缩写,SPI是高速的全双工同步通讯总线,英创公司的所有工控主板都提供了一路4线SPI总线接口,4线包括片选信号(SPI_CSn)、时钟信号(SPI_SCLK)、数据输入(SPI_MISO)和数据输出(SPI_MOSI)信号。


  SPI以主从方式工作,英创主板SPI接口工作在主模式,SPI_CSn是SPI从设备的使能控制信号,当从设备被SPI_CSn使能时,通过SPI总线对此设备的操作才有效,因此可以在同一条SPI总线上增加片选信号来连接多个SPI设备。


  一个简单的增加片选的方法是使用GPIO来模拟SPI_CSn信号,在每传输一个数据之前,将相应的GPIO置低(假设从设备片选信号为低有效),选中对应的SPI从设备,传输结束后再将GPIO置高。SPI总线的连接如下图:


多路SPI从设备连接方法.gif


  由于每传输一个字(8 - 32bits)都需要操作一次GPIO,所以使用GPIO模拟SPI片选的效率不高。同时这种方法不适用于SPI的DMA传输,仅适合数据量少、对传输速度要求不同的场合。


  当SPI采用DMA模式进行高速数据传输时,数据传输过程由硬件控制,片选信号也由SPI硬件直接产生输出,所以无法实现利用GPIO模拟SPI片选,此时可通过硬件电路来扩展SPI片选信号。下面是采用3 - 8译码器扩展8路SPI的原理示意图。在与一个SPI Slave通讯之前,先设置好参与译码的GPIO,然后直接调用SPI读写API函数,当SPI_CSn由驱动程序置低时,相应的YX输出低电平,当SPI_CSn为高时,所有的YX都输出高电平。在与同一SPI设备进行批量数据传输时,只需要设置一次GPIO,与使用GPIO直接模拟片选信号相比,效率大大提高了。


多路SPI从设备连接方法.gif


  英创工控主板的SPI接口可以支持60Mbps甚至更高的波特率,所以需要选择低延时的逻辑器件,同时英创工控的GPIO电平范围是0 - 3.3V,因此选择的器件也应该使用3.3V供电。上图所用的74LVC138A使用3.3V供电,而且输入与输出的延时小于3nS(Typ),满足SPI高速通讯的应用。最后附上74LVC138A的真值表如下:


多路SPI从设备连接方法.gif

文章标签:SPI