本文将介绍 LPC55 系列的 SPI 外设使用。重点讲述 SPI 的配置和具体的使用调试过程。
- SPI 简介
SPI 是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,分别是 SCK,SSEL,MOSI,MISO. 这里不对其做过多的叙述,初学者可以在某度查询资料学习。
- 实战演练
废话不多说,直接进行工程的配置和调试。
开发环境:MCUXpresso IDE (自行 NXP 官网下载,需要指导参考该系列以前的博文)
开发板:LPC55S69-EVK Revision A1
连接工具:Microusb 数据线,杜邦线,逻辑分析仪
① 例程:SDK 中的 lpcxpresso55s69_spi_polling_b2b_transfer_master demo
② 硬件引脚接口,如下图。
③ 打开例程代码,引脚配置如下,详细可以 go to 进去查看,这里不做多叙述。需要使用其他 SPI 接口的可以进行修改,这里默认使用 SPI7 .
④ 接下来是 SPI 的配置:配置时钟,片选 CS ,时钟极性等。
/* attach 12 MHz clock to SPI7 */
CLOCK_AttachClk(kFRO12M_to_FLEXCOMM7);
SPI_MasterGetDefaultConfig(&userConfig);
srcFreq = CLOCK_GetFlexCommClkFreq(7U);
userConfig.sselNum = (spi_ssel_t)EXAMPLE_SPI_SSEL;//1
userConfig.sselPol = (spi_spol_t)EXAMPLE_SPI_SPOL;//kSPI_SpolActiveAllLow
SPI_MasterInit(EXAMPLE_SPI_MASTER, &userConfig, srcFreq);
⑤ 看到这里,我们先抓一下波形看看,例程是使用两个板子进行通信,这里影响,直接删除后面代码的 check data , 然后直接用逻辑分析仪抓取波形,如下图,这里可以看到发送 64 byte 数据,片选 CS是一直拉低,发送完成,片选拉高。
⑥ 实际使用 SPI 呢,我们需要按照实际的设备的手册要求去发送和接收,时序的波形可能有细微的差别,所以呢,这里我们先更改发送的 BUFFER 为 8 byte 进行调试,方便我们查看波形。而且这里底层更改一下,如下图,使得每次放送完数据(1 byte)使得片选拉高,再发送 1 byte 再拉高。
波形如下图:
⑦ 这里还有一点需要特别注意的,就是挂载多个从机设备时,片选该怎么选择我们需要通信的设备呢,上图红色方框 g_configs[instance].sselNum 就是片选的配置,一开始初始化已经存好了,那后续需要怎么更改呢,这里给出两种建议方法。
- 第一种方法:
采取默认的片选信号引脚,但是在实际使用时,我们采用其他 IO 口进行控制片选拉高拉低。这种方法使用需要自己在自己编写的发送和接收函数进行手动选择片选。
- 第二种方法:
在底层的发送接收函数更改底层的接口,增加一个片选的选择参数,然后进行赋值。这种方法可能会是的底层函数移植的不兼容,需要特别注意移植。
- 总结:
官方给定的例程 Demo 仅供参考,有一些实际的项目应用,需要特别的修改,所以这方面的细节需要注意一下。
- 参考:
- 《 LPC55S69-SCH.pdf 》
- 《 UM11126_LPC55S6x_LPC55S2x_LPC552x User manual.pdf 》
谢谢!
评论