读取厂家\设备 ID

发送 90H 指令,再发送 00h 的地址,然后接收即可。

代码如下:

void SPIFlashReadID(int *pMID, int *pDID)
{
SPIFlash_Set_CS(0); /* 选中SPI FLASH */ SPISendByte(0x90); SPIFlashSendAddr(0); *pMID = SPIRecvByte();
*pDID = SPIRecvByte(); SPIFlash_Set_CS(1);
}

两个状态寄存器

通过状态寄存器可以查询芯片此时是否忙碌、解除各种保护操作等。

写状态寄存器

/* 通过 BUSY 位得知芯片是否忙碌 */
static void SPIFlashWaitWhenBusy(void)
{
while (SPIFlashReadStatusReg1() & 1);
} /* 使能操作 */
static void SPIFlashWriteEnable(int enable)
{
if (enable)
{
SPIFlash_Set_CS(0);
SPISendByte(0x06);
SPIFlash_Set_CS(1);
}
else
{
SPIFlash_Set_CS(0);
SPISendByte(0x04);
SPIFlash_Set_CS(1);
}
} /* 写状态寄存器 */
static void SPIFlashWriteStatusReg(unsigned char reg1, unsigned char reg2)
{
SPIFlashWriteEnable(1); SPIFlash_Set_CS(0);
SPISendByte(0x01);
SPISendByte(reg1);
SPISendByte(reg2);
SPIFlash_Set_CS(1); SPIFlashWaitWhenBusy();
}

擦除操作

/* erase 4K */
void SPIFlashEraseSector(unsigned int addr)
{
SPIFlashWriteEnable(1); SPIFlash_Set_CS(0);
SPISendByte(0x20);
SPIFlashSendAddr(addr);
SPIFlash_Set_CS(1); SPIFlashWaitWhenBusy();
}

读写数据

/* program */
void SPIFlashProgram(unsigned int addr, unsigned char *buf, int len)
{
int i; SPIFlashWriteEnable(1); SPIFlash_Set_CS(0);
SPISendByte(0x02);
SPIFlashSendAddr(addr); for (i = 0; i < len; i++)
SPISendByte(buf[i]); SPIFlash_Set_CS(1); SPIFlashWaitWhenBusy(); } /* read */
void SPIFlashRead(unsigned int addr, unsigned char *buf, int len)
{
int i; SPIFlash_Set_CS(0);
SPISendByte(0x03);
SPIFlashSendAddr(addr);
for (i = 0; i < len; i++)
buf[i] = SPIRecvByte(); SPIFlash_Set_CS(1);
}

芯片的操作指令表

下一篇文章写出 Flash 在 Linux 上的驱动程序。

SPI Flash(W25Q16DV) 基本操作的更多相关文章

  1. SPI Flash(W25Q16DV) 驱动

    大体上可分为以下几个部分: 1.注册设备驱动 spi_register_driver 2.分配 mtd_info 结构体 3.配置 mtd_info 结构体 4.注册 mtd_info 结构体 构建 ...

  2. Nand Flash,Nor Flash,CFI Flash,SPI Flash 之间的关系

    前言:    在嵌入式开发中,如uboot的移植,kernel的移植都需要对Flash 有基本的了解.下面细说一下标题中的中Flash中的关系 一,Flash的内存存储结构    flash按照内部存 ...

  3. 【iCore、iCore2 双核心板】EPCS 实验(SPI Flash)(基于Verilog语言)

    _____________________________________ 深入交流QQ群: A: 204255896(1000人超级群,可加入) B: 165201798(500人超级群,满员) C ...

  4. nand flash,nor flash,spi flash,片上RAM,片外RAM

    Flash有掉电数据保存的特点,RAM掉电则数据丢失,但是RAM的速度更高,擦写次数理论上没有限制,而Flash则不行. Nand Flash相比其余的几种flash优势在于可擦写次数多,擦写速度快, ...

  5. 27.some company's Spi Flash chip replace altera epcsxxx

    由于altera公司的epcsxxx芯片比较贵,所以一般用其它公司的spi flash芯片代替也可以.据AlteraFAE描述:“EPCS器件也是选用某家公司的SPIFlash,只是中间经过Alter ...

  6. NAND Flash的基本操作——读、写、擦除

    基本操作 这里将会简要介绍一下NAND Flash的基本操作在NAND Flash内部是如何进行的,基本操作包括:读.写和擦除.   读:     当我们读取一个存储单元中的数据时(如图2.4),是使 ...

  7. OpenRisc-32-ORPSoC烧写外部spi flash

    引言 经过前面的分析和介绍,我们对ORPSoC的启动过程(http://blog.csdn.net/rill_zhen/article/details/8855743)和 ORpSoC的debug子系 ...

  8. SPI FLASH与NOR FLASH的区别?

    1.SPI Flash (即SPI Nor Flash)是Nor Flash的一种: 2.NOR Flash根据数据传输的位数可以分为并行(Parallel)NOR Flash和串行(SPI)NOR ...

  9. Jlink使用技巧之烧写SPI Flash存储芯片

    前言 大多数玩单片机的人都知道Jlink可以烧写Hex文件,作为ARM仿真调试器,但是知道能烧写SPI Flash的人应该不多,本篇文章将介绍如何使用JLink来烧写或者读取SPI Flash存储器, ...

随机推荐

  1. javaScript 字符串

    var name = '小明'; var age = 20; var message = '你好, ' + name + ', 你今年' + age + '岁了!'; alert(message) 要 ...

  2. python之高阶函数

    1.函数的参数能接收变量 def calc(x): return x*x n = 10 print(calc(n)) #输出为100 2.变量指向函数 def calc(x): return x*x ...

  3. The current state of generics in Delphi( 转载)

    The current state of generics in Delphi   To avoid duplication of generated code, the compiler build ...

  4. Transform Model

    self attention Q=K=V :输入一个句子,那么里面的每个词都要和该句子中的所有词进行attention计算,目的是要学习句子内部词之间的依赖关系,捕获句子的内部结构. 首先,要buil ...

  5. telnet的安装和使用

    在日常使用中,有时候需要检测服务器上面的部分端口有没有打开,这个时候可以使用telnet进行调试.下面是一篇转载的文章. 原文地址:http://linuxtech.blog.51cto.com/36 ...

  6. 前端之html表单

    html表单 用于搜集不同类型的用户输入 表单由不同类型的标签组成   1.<form>标签 定义整体的表单区域     * action属性 定义表单数据提交地址     * metho ...

  7. Codeforces791 B. Bear and Friendship Condition

    B. Bear and Friendship Condition time limit per test 1 second memory limit per test 256 megabytes in ...

  8. yesno孤立词识别kaldi脚本

    path.sh主要设定路径等 export KALDI_ROOT=`pwd`/../../.. [ -f $KALDI_ROOT/tools/env.sh ] && . $KALDI_ ...

  9. cad.net 更改高版本填充交互方式为低版本样子

    /// <summary> /// 修改cui,双击填充 /// </summary> /// https://blog.csdn.net/hfmwu/article/deta ...

  10. Nginx的安装与部署

    1:安装工具包 wget.vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc g ...