浅谈在LPC5500上面实现QuadSPI接口

SPI接口使平时工作中常用到的一个接口,它的用处非常多。首先支持全双工操作,发送的时候可以接收。还有就是操作比较简单,没有太多上层协议,底层主要是发送缓冲区和一些标志。关键是速度比较快,在LPC5500上面高速SPI接口可以达到50Mbps,这在150Mhz主频的MCU上面算是不慢的了。

对于高速传输的模块一般适用SPI接口而不是串口。很多Norflash也主要支持SPI接口。但是有些场合单个数据线的SPI还是有写吃力的。比如想快速加载Norflash里面的代码到RAM中。再比如想快速读取外部flash中的图片数据加载到LCD显示上面,或者想快速对比外部flash中的模型数据。这些应用都需要更高速的SPI。除了提高SPI的总线速度,就是增加SPI的数据信号线的个数。比如四位数据线的QuadSPI,八位数据线的Octal SPI。

小编结合工作中客户的应用需求在LPC5500上面实现了QuadSPI接口。这个QuadSPI接口是通过LPC5500里面的协处理器EZH实现的。因为EZH可以单周期访问IO,并且EZH还能实现简单的逻辑运算,还可以将数据存储到RAM中。将这些性能放在一起就可以实现QuadSPI,并且自带DMA功能,您只需告诉它发哪些数据,发多少字节的数据即可。它就可以自动完成,不需要ARM核干预。

小编也基于LPC55S69的开发板做了一个方案,Norflash模块采用W25M512JV模块,系统连接如下图:

1.png

信号线的连接如下图:

2.png

读Norflash的时序如下图:

3.png

写Norflash的时序如下图:

4.png

留给客户操作的函数也比较简练,如下:

Routine

Description

QSPI_pin_Init();

QSPI pin initialization

QSPI_Init(void *pPara);

QSPI initialization

QSPI_Start();

QSPI flash start

QSPI_software_trigger();

Start the transaction by software

QSPI_reset();

QSPI flash reset

QSPI_read_JEDEC_ID();

Read ID of flash

QSPI_Erase();

Erase flash

QSPI_Page_Program();

Program flash

QSPI_read();

Read data from flash in QSPI mode

QSPI_read_1wire();

Read data from flash in normal SPI mode

QSPI_Fast_Read_Quad_IO();

Read data from flash in quad IO mode

QSPI_write_status();

Write status registers of flash

QSPI_read_status();

Read status registers of flash

经过测试它的性能可以达到:读写时总线速度位25Mhz,数据传输速度高达100Mbps.这个速度比50Mhz的SPI数据传输速度快了1倍。虽然没有达到更高的总线速度,但小编已经尽力了。

总结一下:小编今天带给大家的基于LPC5500的QuadSPI接口的方案,可以明显提高SPI的传输速度。并且它完全不占用ARM核的负载资源,自主实现收发。还赠送一个DMA的功能,想传多少传多少。

来源:恩智浦MCU加油站

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。