今天小Q来给大家介绍QuecPython开发外扩存储的方案,有外扩SD卡和Flash两种。很多小伙伴在开发过程中会遇到模组资源紧张的问题,我们可以通过外扩存储的方案来解决。
目前QuecPython开发的一些行业方案都采用了外扩存储的方案,例如:学生卡、手表穿戴等采外扩了4线的Flash,大屏开发板“铀”外扩了6线的Flash。
QuecPython开发的模组型号有很多,有哪些模组支持SD卡、支持Flash呢?SD卡用的什么通信协议?4线Flash和6线Flash有什么区别?下面小Q来给各位开发者们一一解答。
支持SD卡的模组以及通信协议
目前支持SD卡的平台有EC200A\EC200U\EC600U\EC600N\EC800N\EC600M\EC800M,其中EC600M和EC800M需要定制固件支持,SPI协议;EC200U和EC600U采用SDIO协议;EC600N和EC800N采用SPI协议,具体型号如下表一格所示。
模组型号 | 通信协议 |
EC200A全系列 | SDIO |
EC200U全系列 | SDIO |
EC600CNLB\EC600UCNLC | SDIO |
EC600NCNLA\EC600NCNLC\EC600NCNLE\EC600NCNLF | SPI |
EC600MCNLA\LE\EC800MCNLA\LE(定制) | SPI |
EC800NCNLA | SPI |
表一 支持SD卡的模组型号
SD卡驱动
SPI-SD驱动方法
SPI方式接线如下表二所示,以EC600NCNLA开发板为例,用SPI1接到SD卡转接板,接线图如下图一所示。
Pin | SD | SPI |
1 | CD/DAT3 | CS |
2 | CMD | MISO |
3 | VSS1 | GND |
4 | VDD | VDD |
5 | CLK | CLK |
6 | VSS2 | GND |
7 | DAT0 | MOSI |
8 | DAT1 | NA |
9 | DAT2 | NA |
表二 SPI-SD接线方式
图一 EC600NCNLA-SD卡接线图
驱动结果如下图二所示,挂载成功后,可以在SD卡分区操作写入和读取文件。以下示例是w+的形式新建一个txt文件,写入数据0123456并读取。
图二 SPI-SD驱动结果
SDIO-SD驱动方法
EC200A\EC200U\EC600U有专门的SDIO接口,按照下图三所示接线,该测试使用EC200UCNAA开发板,搭载32GB的SD卡
图三 SDIO-SD接线方式
挂载测试结果如下图四所示,uos.statvfs(“/sd”)的返回值为(f_bsize, f_frsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_flag, f_namemax),可以计算出SD卡的内存大小为512*62309504÷(1024*3)≈29.7GB
- f_bsize – 文件系统块大小,单位字节
- f_frsize – 分栈大小,单位字节
- f_blocks – 文件系统数据块总数
- f_bfree – 可用块数
- f_bavai – 非超级用户可获取的块数
- f_files – 文件结点总数
- f_ffree – 可用文件结点数
- f_favail – 超级用户的可用文件结点数
- f_flag – 挂载标记
- f_namemax – 最大文件长度,单位字节
图四 SDIO-SD测试结果
支持Flash型号的模组以及4线和6线的区别
支持6线Flash的型号有EC600UCNLB\EC600UCNLC,支持4线Flash的型号有EC200U\EC600U\EC600N\EC600M\EC800N\EC600G\EC800M\EG810M。这里所提到的Flash为NOR Flash,NOR Flash是一种非易失闪存技术,由Intel在1988年创建。它是市场上两种主要的非易失闪存技术之一,另一种是NAND Flash。NOR Flash的特点是具有较高的可靠性和耐用性,可以承受一万次到一百万次抹写循环。4线指的是标准4线SPI(MISO、MOSI、CLK、CS),既Dual SPI;6线为QSPI,在Dual SPI的基础上增加两根I/0线(SIO3、SIO4)。两种Flash的接线方式如下图五、图六所示。
图五 4线Flash接线图
图六 6线Flash接线图
下表是QuecPython开发模组支持Flash的具体型号,以及Flash的接线方式。
模组型号 | Flash接线方式 |
EC200U系列 | 4线 |
EC600UCNLB\LC | 4线、6线 |
EC600NCNLA\LC\LE\LF | 4线 |
EC600MCNLA\LE\LC\LF\CC | 4线 |
EC800MCNLA\LE\GA\LC\LF | 4线 |
EC810MCNGA\GB | 4线 |
表三 支持Flash的模组型号
FLASH驱动方法
EC600U-6线SPI Nor Flash
需要选择特点的固件,如EC600UCNLB_EXTFS8M,在下载固件时就已初始化Flash,该方式可用于存放QuecPython程序镜像,直接运行程序。如下图七所示,能给客户提供丰富的usr分区,4096*767÷1024÷1024=3MB ,uos.statvfs(“/usr”)的返回值参考上文。
图七 EC600UCNLB_EXTFS8M用户空间
4线SPI Nor flash
4线Nor Flash有两种方式,一是只用于存储数据,二是在存储数据的前提下烧录文件(脚本、图片和音频等),受平台资源限制,最大只能挂载16MB的型号。第一种方式把Nor Flash接好之后可直接调用API挂载。第二种方式以EG810MCNGB穿戴开发板为例,挂载之前需要release固件,把Flash型号添加到固件包里,并分配ext_fs和ext_font分区大小,如下图八所示,ext_fs为外部用户存储分区, ext_font为外部字库分区,完整的固件包可质询移远技术支持提供。
图八 外部Flash分区分配
工具使用QPYcom3.2.0,在工具栏里选择功能箱-修改分区-ASR,弹出的界面里选择固件包、Release包和Flash型号后进行release固件,如下图九所示。
图九 QYPcom_release固件方法
以下图十是用EG810MCNGB穿戴开发板测试的结果,挂载的Nor Flash为4MB,分配了1MB给到字库分区,3MB给外部用户存储分区。
图十 EG810MCNGB挂载Nor Flash
小结:
SD卡方案适用于存储文件数据,例如音频文件,图片已经运行日志等;4线Nor Flash方案适用于穿戴方案,Flash可存储脚本、音频图片文件、字库以及运行日志等;6线Nor Flash方案能存放镜像文件系统,把模块支持的功能都能加进去,例如EC600UCNLB公版方案支持Audio、TTS,不支持BT和VOLTE,6线Nor Flash方案就可把这些功能都加上去。
附言:
后期小Q也会陆续分享其他QuecPython学习心得,欢迎各位看官沟通交流。