基于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模块,系统连接如下图:

恩智浦

信号线的连接如下图:

恩智浦

读Norflash的时序如下图:

恩智浦

写Norflash的时序如下图:

恩智浦

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

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的功能,想传多少传多少。

在NXP官网已经有EZH的cookbook的应用笔记,欢迎查看https://www.nxp.com.cn/docs/en/application-note/AN14650.pdf.

恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分