读取厂家\设备 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. ScheduledExecutorService--目前最理想的定时任务实现方式

    ScheduledExecutorService 理想的定时任务实现方式 : 通过线程池的方式来执行任务的 可以灵活的设定第一次执行任务延迟时间 提供了良好的约定,以便设定定时执行的间隔时间代码实现: ...

  2. 深入浅出WPF文摘

    第一部分 深入浅出XMAL 第一章 XMAL概览 第二章 从零起步认识XMAL 第三章 系统学习XMAL语法 第四章 X名称空间详解 第五章 控件与布局 GUI:图形化用户界面 逻辑树: 可视树: : ...

  3. drf5 版本和认证组件

    开发项目是有多个版本的 随着项目的更新,版本就越来越多.不可能新的版本出了,以前旧的版本就不进行维护了 那我们就需要对版本进行控制,这个DRF框架也给我们提供了一些封装好的版本控制方法 版本控制组件 ...

  4. JDK源码核心包

    一.核心包有哪些? Jdk的包中,除开了lang包下面的类,用得最多的应该要属于util包下面的类了, 本篇文章主要针对Jdk的util包下面的类(util目录下面的类,暂时不包括util 包下面的子 ...

  5. 移植U-Boot时遇到的问题

    1. 在lowlevel_init过程中,本来想实现一个串口直接打印字符串的过程,编译的时候出现了问题,说是发现代码执行段没有对齐:“unaligned opcodes detected in exe ...

  6. Java从无知到入门书籍推荐

    0 前言 本文主题为Java Web书籍推荐 1 零基础学习 此处的零基础,指的是不懂或只懂if-else之类基本代码流程.初次接触,建议淘宝买一套**培训机构录播课程,看入门段视频.一是学习之初培养 ...

  7. 抓取任务管理器信息实时上传到中国移动onenet平台

    这个和上次做的那个电脑信息上传工具采用了不同的思路 算殊途同归吧

  8. Vuejs——(4)v-if、v-for

    版权声明:出处http://blog.csdn.net/qq20004604   目录(?)[+]   (二十)v-if ①标准v-if用法 简单来说,该值为true则显示该标签,为false则不显示 ...

  9. jdk8新特性(详解)

    最近在复习外加看点面试题,jdk8的新特性虽然在项目用用到过一两个,准备系统的了解一下jdk8的常用新特性 一:Lambd表达式 也可称为闭包         引入函数式编程到Java中 为了使现有函 ...

  10. rest framework 尝鲜

    安装 pip install djangorestframework 新建项目 python manage.py startapp idcs 添加模型(models.py) class Idcs(mo ...