LPC5528的SPI功能由Flexcomm接口提供,在使用SPI之前需要将Flexcomm接口的外设功能设定为SPI。LPC5528一共有8个Flexcomm,所以总共有8个SPI接口,其中Flexcomm8对应的是高速的SPI。
一、SPI简介
LPC5528的SPI都可配为主机或者从机模式,支持4~16位的数据传输模式,其他更灵活的数据位传输可以通过软件SPI实现。
同时支持DMA传输,效率更高,可以支持直接向从机设备写数据而不接收数据。
SPI在主机模式下时钟最高可达30M,从机模式下20M,高速SPI主从模式下最高可达50M。
二、简单使用
示例使用高速SPI去读取一颗SPI Flash,主要完成以下动作,读取设备ID,往里面写入数据0~255,再读取刚刚写入的数据。
(1)将flexcomm的外设功能设定为SPI
(2)初始化SPI
1)配置工作模式
主要是配置时钟极性选择(CPOL)和时钟相位(CPHA)。
CPOL=0,SPI总线空闲电平为低电平,CPOL=1,SPI总线空闲电平为高电平。
CPHA=0,在SCK第一个跳变沿采样数据,CPHA=1,在SCK第二个跳变沿采样。
工作模式的定义:
工作模式1:
CPOL=0,CPHA=0
工作模式2:
CPOL=1,CPHA=0
工作模式3:
CPOL=0,CPHA=1
工作模式4:
CPOL=1,CPHA=1
2)配置波特率
按照前面所述,SPI在主机模式下时钟最高可达30M,从机模式下20M,高速SPI主从模式下最高可达50M。波特率也在这个范围。
3)配置数据传输位宽
有4~16位可选。
4)配置数据高低位传输
在进行数据传输的时候,决定先从数据的高位开始传还是数据的低位开始传。
5)配置片选时钟极性
根据从机的特性,决定在通信的时候,CS脚的电平状态是高还是低。
6)配置从机设备选择
LPC5528一个SPI总线上根据CS脚的不同,最多可以挂载4个从设备,这里配置当前选择哪个从设备。
以上所述的6个配置都可在一个结构体中去初始化,如下图。
(3)读取ID
使用默认的全双工传输的方式,往Flash里面发送对应的指令然后读取相应的ID。
实际的波形如下:
可以看到MISO线上是成功读取到了Flash的ID。
(4)写入数据
可以从上图中看出,在往flash写入特定的指令并得到Flash的回应之后,就开始往里写0~255的数据。
(5)读取数据
上图是从Flash中读取数据的波形,也是先向Flash写入对应指令,得到回应之后,就可以读取刚刚写入的数据了。
通过串口把读取的数据打印出来,确认成功读写。
(6)代码参考
关于读写部分代码上传在附录,请参考。
三、总结
本文所参考的文档为 LPC5528 的用户手册,已上传在附录,所用的代码为NXP官方的SDK,可在链接(Select Board | MCUXpresso SDK Builder (nxp.com))注册下载,任意版本均适用。
许多SPI设备都会有特定的时序要求,如果光使用SDK里面的SPI去读写很可能不能实现想要的效果,所以在多数情况下,需要根据不同的时序要求去修改读写逻辑。另外在更高的数据量和更快的要求情境下,使用DMA的方式去读写会更好。
评论