背景介绍
今天想扩展一下Flash存储,用了一片常用的W25Q64的芯片,通过SPI接口方式,与W801进行连接,并进行数据存储和读取。
Flash基础知识
页:Page
扇区:Sector
块:Block
以W25Q128为例:128Mbit =16MB的大小
每页256字节,共65536个页。
每个扇区16页=4KB;
每个块可以是32KB,64KB。
块是上层软件中(操作文件时)使用的最小的操作单元,就是(操作文件时)一个块一个块进行操作(块的大小格式化时可以设置【如linux、fatfs等等】)。
擦除可以按16页(即一个扇区擦除,4K)、按128页擦除(32KB块擦除)、按256页擦除(64KB块擦除)或者整片擦除。
每次编程数据为256字节。
驱动W25Q64
我用的是W25Q64,是一个8MB的flash,W801源码中,有一个gd25qxx的驱动,基本是可以通用的,但是有两个问题,需要解决。
读取ID失败,W25Q64的读ID指令是0x90,所以我这里增加了一个宏定义开关
static int tls_spifls_read_id(u32 * id)
{
u32 cmd;
int err;
#if FOR_W25Q64
cmd = 0x90;
#else
cmd = FLS_CMD_READ_DEV_ID;
#endif
*id = 0;
err = tls_spi_read_with_cmd((const u8 *) &cmd, 4