概述
我们可以通过标准的SPI接口和QSPI接口来外挂flash。区别如下
使用标准SPI接口外挂flash,需要自己实现flash驱动,和自己移植文件系统
使用QSPI接口外挂flash,不需要自己实现flash驱动,也不需要移植文件系统 。通过mount接口挂载文件系统后,可以直接通过文件系统接口访问外部flash
标准SPI外挂flash
标准SPI有2个,SPI1和SPI2
SPI管脚定义
接口 名称 复用 管脚 作用
SPI1 SPI1_CLK spi_1_clk 52 SPI1的时钟信号
SPI1 SPI1_DIN spi_1_di_1 53 SPI1的数据信号
SPI1 SPI1_CS spi_1_cs_0 54 SPI1的片选型号
SPI1 SPI1_DOUT spi_1_dio_0 55 SPI1的数据信号
SPI2管脚定义
接口 PIN NO Ball Name 复用 作用
SPI2 R19 GPIO_0 spi_2_clk SPI1的时钟信号
SPI2 R20 GPIO_1 spi_2_cs_0 SPI1的片选型号
SPI2 P21 GPIO_2 spi_2_dio_0 SPI1的数据信号
SPI2 P22 GPIO_3 spi_2_di_1 SPI1的数据信号
QSPI外挂flash
QSPI有2种管脚定义, 电压不同,选择flash型号需要考虑供电电压
通过LCD复用的QSPI (电压域VLCD, 默认关闭,电压范围1.6125V~3.2V)
通过GPIO复用的QSPI (V_GLOBAL_1V8) (仅722UG支持)
支持的FLASH型号
GD PUYA WINBOND XMCA XMCC XMCB
XT25W32B XT25W64B
XM25QU64A XM25QU64B XM25QU32C XM25QU16C
GD25LE64E GD25LQ128C GD25Q127C
W25Q64JV
MD25Q64CS16
ZB25VQ64
客户已经验证过的flash型号有
XT25Q128DWOIGT
LCD复用QSPI FLASH1管脚定义(724模块)
接口 名称PIN NO 复用Ball Name 管脚复用 作用
FLASH1 LCD_DATA spi_flash1_clk 41 FLASH1的时钟信号
FLASH1 LCD_DC spi_flash1_cs 58 FLASH1的片选信号
FLASH1 LCD_CLK spi_flash1_sio_0 40 FLASH1的数据信号
FLASH1 LCD_CS spi_flash1_sio_1 39 FLASH1的数据信号
FLASH1 LCD_SEL spi_flash1_sio_2 57 FLASH1的数据信号
FLASH1 LCD_FMARK spi_flash1_sio_3 42 FLASH1的数据信号
LCD复用QSPI FLASH1管脚定义(722UG模块)
管脚名 类型 序号 电压域 描述
FLASH_CS DO 85 VCC_LCD QSPI 接口片选信号
FLASH_CLK DO 84 VCC_LCD QSPI 接口时钟信号
FLASH_S0 DO 43 VCC_LCD QSPI 接口数据信号 0
FLASH_S1 DO 42 VCC_LCD QSPI 接口数据信号 1
FLASH_S2 DO 81 VCC_LCD QSPI 接口数据信号 2
FLASH_S3 DO 82 VCC_LCD QSPI 接口数据信号 3
VCC_LCD DO 83 V_GLOBAL_1V8 输出 1.6-3.3V, 默认电压是 1.8V, IOmax=200mA,可用于给 LCD 供电可以根据选用的 QSPI Flash 的型号来配置输出电压。
GPIO复用QSPI FLASH1管脚定义(仅722UG支持)
管脚名 类型 序号 电压域 描述
FLASH_CS DO 35 V_GLOBAL_1V8 QSPI 接口片选信号
FLASH_CLK DO 34 V_GLOBAL_1V8 QSPI 接口时钟信号
FLASH_S0 DO 77 V_GLOBAL_1V8 QSPI 接口数据信号 0
FLASH_S1 DO 78 V_GLOBAL_1V8 QSPI 接口数据信号 1
FLASH_S2 DO 79 V_GLOBAL_1V8 QSPI 接口数据信号 2
FLASH_S3 DO 80 V_GLOBAL_1V8 QSPI 接口数据信号 3
V_GLOBAL_1V8 DO 10 V_GLOBAL_1V8 LDO 输出,固定输出 1.8V,IOmax=50mA 开机后默认打开,不能关闭
上述管脚是和 MIPI DSI 管脚复用的,在用到 MIPI DSI 接口的情况下,如果要外接 QSPI Flash,可以通过SPI LCD 的相关管脚映射出来,管脚映射关系如上
请注意722UG模块这两路 QSPI 无法同时使用
LUA 接口
mount
挂载文件系统分区
语法
io.mount(flashType[,path][,size][,offset][,clock])
参数
参数 取值 释义
flashType io.SDCARD SD卡
io.INTERNAL 内部flash
io.EXTERN_PINLCD 外挂flash, LCD复用管脚,V_LCD供电
io.EXTERN_PINGPIO 外挂flash, 使用GPIO pin脚复用,V_PAD_1V8供电
path 字符串长度>=5,第一个字节为’/‘ mount的文件系统根目录
size 要考虑字节对齐 分区的大小
offset flash 地址偏移量
clock clock=166M/clkDiv,2<clkDiv<255 时钟
返回值
1:成功
0:失败
unmount
挂载文件系统分区
语法
io.unmount(flashType[,path][,size][,offset][,clock])
参数
返回值
1:成功
0:失败
format
格式化文件系统分区
语法
io.format(flashType[,path][,size][,offset][,clock])
参数
返回值
1:成功
0:失败
常见问题
http://doc.openluat.com/article/638/0
-
SPI外置FLASH有demo吗 最大支持多少?
qspi外挂flash参考:demo/qspi 目前有测试过最大的是 16MByte 的 qspi,超过16M不支持,是硬件限制的(QSPI地址只有24位)
标准spi外挂flash参考:demo/spiFlash,对flash容量没限制,需要自己实现驱动 -
外挂flash支持nand还是nor flash?
qspi仅支持nor flash
标准spi支持nand和nor flash,完全由自己在脚本中写驱动来控制 -
用demo测试qspi挂载成功,操作文件失败
先格式化一下,第一次需要格式化一下,之后就不用了