教程资料

链接:https://pan.baidu.com/s/142JRSPisQO2Cu6VZ2Y5YrQ 密码:eom0

今天测试开发板的W25Q16(16Mbit--Flash)写一篇文章备忘一下

先说一下容量的单位

计算机存储单位一般用B,KB、MB、GB、TB、PB、EB、ZB、YB、BB来表示,它们之间的关系是:

位 bit (比特)(Binary Digits):存放一位二进制数,即 0 或 1,最小的存储单位。    字节 byte:8个二进制位为一个字节(B),最常用的单位。

1KB(Kilobyte 千字节) = 2^10 B = 1024 B;

1MB(Megabyte 兆字节) = 2^10 KB = 1024 KB = 2^20 B;

1GB(Gigabyte 吉字节) = 2^10 MB = 1024 MB = 2^30 B;

1TB(Trillionbyte 太字节) = 2^10 GB = 1024 GB = 2^40 B;

1PB(Petabyte 拍字节) = 2^10 TB = 1024 TB = 2^50 B;

1EB(Exabyte 艾字节) = 2^10 PB = 1024 PB = 2^60 B;

1ZB(Zettabyte 泽字节) = 2^10 EB = 1024 EB = 2^70 B;

1YB(YottaByte 尧字节) = 2^10 ZB = 1024 ZB = 2^80 B;

1BB(Brontobyte ) = 2^10 YB = 1024 YB = 2^90 B;

1NB(NonaByte ) = 2^10 BB = 1024 BB = 2^100 B;

1DB(DoggaByte) = 2^10 NB = 1024 NB = 2^110 B

所以16Mbit = 16*1024KB= 16384KB

16384KB = 16384*1024 bit = 16777216 bit

1字节=8位(bit)

也就是说W25Q16最多可以存储16777216 /8 = 2097152个字节的数据

可以先看一下数据手册

https://wenku.baidu.com/view/7b361c5cba1aa8114531d936.html

http://www.51hei.com/bbs/dpj-41029-1.html

芯片呢对2097152个字节进行了分配

每256个字节自己作为一页   所以就有  2097152/ 256 = 8192页

然后呢又对8192页进行了分配

每16页作为一个扇区     所以就有  8192/ 16 = 512个扇区

还有就是 让每 256页作为一个块

所以 就有 8192 / 256 = 32 个块

每次写数据之前需要先擦除

芯片规定最小擦除的单位是扇区,所以最小需要擦除16页,也就是16*256 = 4096个字节,也可以说最小擦除的空间是4KB, 4096 / 1024 = 4KB

当然也可以使用块擦除,那么每次擦除一个块,也就是256页  ,就是  256*256 = 65536个字节..  就是64KB   65536 / 1024 = 64KB

最后呢还有一个全片擦除指令,就是说写一个指令就可以擦除整个空间

看资料上还有

这个..............不确定...也可以擦除128页???还是说W25Q80是可以擦除128页....最后写程序试一试就知道了....

然后呢就是一些指令...测试完所有的功能再写

附上自己的程序,,,,,,史上最简单

/**
* @brief SPI函数
* @param value--发送的数据
* @param None
* @param None
* @retval None
* @example
**/
unsigned char SPIWriteRead(unsigned char value)
{
unsigned char i=,temp=;
SPI_CLK = ;//进入之前其实是高电平
if(SPI_MISO)temp|=0x80;//接收数据
for(i=;i<;i++)
{
SPI_MOSI=value&(0x80>>i);//准备数据
SPI_CLK=;
SPI_CLK = ;
if(i<)if(SPI_MISO)temp|=0x80>>(i+);//接收数据
}
return temp;
}

测试

        SPI_CS=;
SPIWriteRead(W25X_PowerON_ID);
SPIWriteRead(0xff);
SPIWriteRead(0xff);
SPIWriteRead(0xff);
aa=SPIWriteRead(0xff);
SPI_CS=; printf("%X\r\n",(int)aa); DelayMs(); SPI_CS=;
SPIWriteRead(W25X_JEDEC_ID);
aa=SPIWriteRead(0xff);
bb=SPIWriteRead(0xff);
cc=SPIWriteRead(0xff);
SPI_CS=; DelayMs(); printf("%X%X%X\r\n",(int)aa,(int)bb,(int)cc);
DelayMs();
#ifndef W25QXX_H_
#define W25QXX_H_ #ifndef W25QXX_C_
#define W25QXX_C_ extern
#else
#define W25QXX_C_
#endif //以自己买的型号为准
#define FLASH_ID 0xC84015 //GD25Q16CSIG DeviceID 0x14
// #define FLASH_ID 0xEF3015 //W25X16
// #define FLASH_ID 0xEF4015 //W25Q16
// #define FLASH_ID 0XEF4018 //W25Q128
// #define FLASH_ID 0XEF4017 //W25Q64 #define W25X_ReadStatus 0x05 //读状态寄存器
#define W25X_WriteStatus 0x01 //写状态寄存器
#define W25X_ReadDATA8 0x03 //普读_数据
#define W25X_FastRead 0x0B //快读_数据
#define W25X_DualOutput 0x3B //快读_双输出
#define W25X_Writepage 0x02 //写_数据_0~255个字节
#define W25X_S_Erase 0x20 //扇区擦除4KB
#define W25X_B_Erase 0xD8 //块区擦除64KB
#define W25X_C_Erase 0xC7 //整片格式化
#define W25X_PowerDown 0xB9 //待机
#define W25X_PowerON_ID 0xAB //开机或是读ID
#define W25X_JEDEC_ID 0x9F //十六位的JEDEC_ID
#define W25X_WriteEnable 0x06 //写允许
#define W25X_WriteDisable 0x04 //写禁止 sbit SPI_CS = P1^; // 片选
sbit SPI_MISO = P1^; // 数据输入引脚
sbit SPI_MOSI = P1^; // 数据输出引脚
sbit SPI_CLK = P1^; // 时钟 #endif

51单片机开发板(W25Q16学习)的更多相关文章

  1. 树莓派、 Arduino 、传统单片机开发板该如何选择?

    几十年前的电子爱好者,最喜欢的就是电烙铁.面包板和收音机:十几年前,出现了单片机,于是玩具就成了电烙铁.面包板和单片机:到了2015年,贴片技术的不断普及,让面包板不再那么有用武之地,经济的发展也让现 ...

  2. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

  3. 初学嵌入式STM32基础下选哪款开发板适合学习

    iTOP-4412开发板 目前为止,在用户网盘上已经积累了多达100G以上资料, 这些资料都是和4412相关的,并不是随便拼凑起来的!同时我们也完全开放原厂资料. 鉴于用户对于海量资料无从下手的问题, ...

  4. 嵌入式开发板iTOP4412学习开发板

    网站:http://www.topeetboard.com 淘宝:https://item.taobao.com/item.htm?_u=okcahs0f42a&id=38712193806 ...

  5. 华大单片机开发板HC32L13X上手入门

    HC32L136开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分).二者中间通过邮票孔相连,如果将板子从中间掰开,板载调试模块就可以当一个CMSIS-DAP的仿真器来使用.此 ...

  6. Arm开发板+Qt学习之路

    从2015.11.13日开始接触arm开发板,开始学习Qt,到现在已经四个月零17天了,从一个拿到开发板一无所知的小白,到现在能够在开发板上进行开发,有付出有收获. 之前一直没有时间将这个过程中的一些 ...

  7. 华大单片机开发板HC32F030上手入门

    HC32F030开发板(如下图所示)分为板载调试模块(左半部分)和MCU开发电路(右半部分).二者中间通过邮票孔相连,如果将板子从中间掰开,板载调试模块就可以当一个CMSIS-DAP的仿真器来使用.此 ...

  8. 迅为iTOP-4412物联网开发板入门学习高手进阶项目开发超树莓派

    免费视频教程: 为初学者精心录制的整套视频教程全部免费,随IT技术发展而不断增添的视频教程仍然免费!一支有经验的工程师团队会始终成为您的后盾. 项目实战---全开源: 手机远程控制开发板 门禁系统 W ...

  9. 如何选安卓android|linux系统开发板,简化学习难度,缩短开发进程

    平台一:iTOP-4412精英版 系统支持:Android 4.0.3系统  / Android 4.4系统 / Linux + Qt系统 / Ubuntu12.04系统 开发板特点:Cortex-A ...

随机推荐

  1. 透明度 rgba 和 opacity 的区别

    rgba: 使用方式:rgba(255, 255, 255, .5) 最后一个参数表示透明度取值范围 0 ~1    只作用于元素的颜色或其背景色. opacity :  使用方式:opacity : ...

  2. 洛谷P2178 [NOI2015]品酒大会(后缀自动机 线段树)

    题意 题目链接 Sol 说一个后缀自动机+线段树的无脑做法 首先建出SAM,然后对parent树进行dp,维护最大次大值,最小次小值 显然一个串能更新答案的区间是\([len_{fa_{x}} + 1 ...

  3. il8n国际化

    il8n国际化 支持多国语言的web应用,根据客户端系统的语言类型返回对应的界面 方案 为每种语言提供一套相应的资源文件,并以规范化命名的方式保存在特定的目录中,由系统自动根据客户端语言选择适合的资源 ...

  4. BeanFactory和ApplicationContext的比较

    1.BeanFactory实例化后,不会马上实例化Bean:ApplicationContext在实例化后紧跟着就会实例化Bean 2.ApplicationContext还实现了ResourceLo ...

  5. JavaScript大杂烩17 - 性能优化

    在上一节推荐实践中其实很多方面是与效率有关的,但那些都是语言层次的优化,这一节偏重学习大的方面的优化,比如JavaScript脚本的组织,加载,压缩等等. 当然在此之前,分析一下浏览器的特征还是很有意 ...

  6. 简单易懂的程序语言入门小册子(1):基于文本替换的解释器,lambda演算

    最近比较闲,打算整理一下之前学习的关于程序语言的知识.主要的内容其实就是一边设计程序语言一边写解释器实现它.这些知识基本上来自Programming Languages and Lambda Calc ...

  7. Python & 机器学习之项目实践

    机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能 ...

  8. centos7执行umount提示:device is busy或者target is busy解决方法

    问题描述: 因为挂载错了,想取消挂载,但是umount报告如下错误: [root@zabbix /]# umount /dev/sdc1 umount: /data1: target is busy. ...

  9. 点击eclipse包报错

    每次只要新建一个package包,或者鼠标选择某个package包,系统就会提示:An error has occurred. See error log for more details. org/ ...

  10. linux系统日志自动切割工具----logrotate

    参考资料 :https://www.cnblogs.com/kevingrace/p/6307298.html 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务 ...