本帖最后由 小恩GG 于 2022-3-28 17:06 编辑
LPC:SPI片选信号配置方法 SPI是 串行外设接口(Serial Peripheral Interface)的缩写,是一种高速全双工同步 通信总线。在MCUXPresso SDK路径driver_examples/spi 里可以找到很多关于SPI的演示例程。但是这些SPI的demo全部是点对点通信,也就是说一个主机对一个从机,不少客户询问一对多的实现方法,即主机通过片选信号与多个SPI从设备通信。故本文在浅析SPI的基础上,提供了一种基于SDK的SPI片选信号配置方法,方便大家学习借鉴。方法在LPC55 LPC54 等LPC上均适用。
1. LPC SPI简介 SPI通信以主从方式工作,通常有一个主设备和一个或多个从设备。 -SCK:时钟信号,由主设备产生 -MOSI: 主设备数据输出,从设备数据输入 -MISO: 主设备数据输入,从设备数据输出 -SSEL: 从设备使能信号,由主设备控制
LPC使用者手册中SPI框图如下: SPI内部工作原理为: -主机发送数据:设置为SPI模式的Flexcomm接口将FIFO数据传入Tx寄存器,再由其通过MOSI发送。 -主机接收数据:从机将数据通过MISO传入主机Rx寄存器,再由设置为SPI模式的Flexcomm接口接收。
需要重点注意的是:根据使用者手册,在SPI通讯中,片选信号最多设置为4个。 以LPC55S69为例:在LPC55S69中Flexcomm2、Flexcomm3、Flexcomm4有四个片选信号,但Flexcomm1、Flexcomm5、Flexcomm7等仅有两个片选信号,所以在选择片选信号数量时需根据具体接口进行合理选择。
其外部工作框图形式可简化为: 在SPI通讯中SCK、MOSI、MISO为公用数据线,连接每一个外围器件,数据传输由每个从机的片选信号SSEL决定。 2. 片选信号配置方法 下面以SDK LPCXpresso55S69 spi_polling_b2b_transfer_masterdemo为例,在原有demo的SPI数据发送基础上增加对片选的控制。添加SSEL0片选信号。 过程需两步便可实现。
① 步骤一:利用pin引脚配置工具添加使能SSEL0。 打开Pin引脚配置工具,选择Pin 30引脚,点击FLEXCOMM7:CTS_SDA_SSEL0,此时Routing Details出现红框区域部分。点击更新代码。 更新后Pin_mux.c文件中代码更新部分如下图。 ② 步骤二:将FIFOWR寄存器相应片选位使能。 以下实现方法可供用户参考: 在fsl_spi.c文件中添加SPI_MasterTransferBlocking_ssel函数。 该函数在SPI_MasterTransferBlocking函数基础上仅增加片选值以及利用位操作将片选位使能。高亮为改动部分: 修改后的fsl_spi.c文件以及fsl_spi.h文件见附件,供参考。 最后,在程序中直接调用SPI_MasterTransferBlocking_ssel(EXAMPLE,SPI_MASTER,&xfer,sselNum);即可通过参数sselNum来选择片选0。 在进行片选信号的改动时只需将红圈内的数字改为相应的片选数字(本例程为0)即可。
小结: 本文中改变片选信号的思路为:利用Pin引脚配置工具添加片选使能引脚,之后将管理片选信号的寄存器通过位操作使能。 客户在进行更改片选信号时只需先使能引脚,之后将程序中片选数字更改,重新编译即可。
|