求教W25x16 改成W25X32cd驱动器改成u盘

查看: 12952|回复: 13
我也来麻烦下原子哥,现在W25X16貌似要开始停产了,用W25Q16可以直接替代吗,原子原来的驱动程序兼容吗?能直接用否?
主题帖子精华
初级会员, 积分 143, 距离下一级还需 57 积分
在线时间0 小时
主题帖子精华
金钱122728
在线时间1012 小时
回复【楼主位】PowerEDV:
-------------------------------
兼容的,我们早就用q16了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 143, 距离下一级还需 57 积分
在线时间0 小时
后面容量更大的也兼容?
主题帖子精华
金钱122728
在线时间1012 小时
回复【3楼】PowerEDV:
-------------------------------
基本兼容,只有少数不同,比如ID之类的。
豪华版用的是W25Q32,4M字节的。
和Q16就是ID不同,其他的一模一样。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
中级会员, 积分 408, 距离下一级还需 92 积分
在线时间0 小时
STM32芯片---上海银洋电子021-
欢迎来电??采购找张经理
主题帖子精华
中级会员, 积分 288, 距离下一级还需 212 积分
在线时间17 小时
回复【2楼】正点原子:
---------------------------------
原子哥,我用ministm32板载的W25Q16的时候看到有个读取ID的操作,那个ID是固定的吗,哪能找到?因为我想用W25X64直接替换掉W25Q16,但是读取ID的时候出错,也就是说W25X64的ID跟16的不一样,不知道这个ID是多少,您知道吗?
主题帖子精华
金钱122728
在线时间1012 小时
回复【6楼】巅峰残狼:
---------------------------------
是固定的,数据手册就有说的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
金钱122728
在线时间1012 小时
回复【6楼】巅峰残狼:
---------------------------------
&每个芯片ID都不一样
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
中级会员, 积分 288, 距离下一级还需 212 积分
在线时间17 小时
回复【8楼】正点原子:
---------------------------------
恩恩,明白了,我去看看数据手册,谢谢原子哥
主题帖子精华
中级会员, 积分 241, 距离下一级还需 259 积分
在线时间3 小时
回复【9楼】巅峰残狼:
---------------------------------
请教一下,w25Q64能兼容w25x16的读写程序吗?
总有一天,要为自由而活
主题帖子精华
中级会员, 积分 288, 距离下一级还需 212 积分
在线时间17 小时
回复【10楼】LIUYABO:
---------------------------------
应该兼容,主要是看时序吧,时序一致就兼容
主题帖子精华
中级会员, 积分 201, 距离下一级还需 299 积分
在线时间12 小时
回复【楼主位】PowerEDV:
-------------------------------
兼容的,我们早就用q16了.
原子哥,我用了战舰的W25Q64程序,然后我的Flash芯片是W25Q16的,硬件引脚完全一样。我代码改了u16 W25QXX_TYPE=W25Q16;& & & & //这里原来例程是W25Q64的,我修改了16的。但是初始化一直失败。请问是不是我改少了那个地方了。谢谢
学习单片机编程贵在坚持,无论多难的问题都有不轻易放弃的原则,坚持着去解决它,相信你总会找到解决方法的。
主题帖子精华
中级会员, 积分 201, 距离下一级还需 299 积分
在线时间12 小时
原子哥,我用了战舰的W25Q64程序,然后我的Flash芯片是W25Q16的,硬件引脚完全一样。我代码改了u16 W25QX ...
哈哈,我知道为什么了,原来是W25Q16的ID号和W25Q128的ID号不一样,我读回来的是25Q16的ID,把他改成判断是否等于25Q16的ID号即可通过。嘿嘿。
学习单片机编程贵在坚持,无论多难的问题都有不轻易放弃的原则,坚持着去解决它,相信你总会找到解决方法的。
主题帖子精华
中级会员, 积分 201, 距离下一级还需 299 积分
在线时间12 小时
回复【3楼】PowerEDV:
-------------------------------
基本兼容,只有少数不同,比如ID之类的。
豪华版用 ...
原子哥哥,是不是还有在写和读的时候,要把4096改成256才能兼容W25Q16呢?我改成256后数据读写都正确。按照原来战舰例程,里面是4096,写进去的数据,读出来是0xffffffff。
学习单片机编程贵在坚持,无论多难的问题都有不轻易放弃的原则,坚持着去解决它,相信你总会找到解决方法的。
Powered by&>&W25X16、W25X32、W25X64中文手册
W25X16、W25X32、W25X64中文手册
上传大小:863KB
W25X16、W25X32、W25X64中文手册
综合评分:4(4位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有2条
有些作用,比英文的看起来简单些
打印啦,很有帮助
siyao_yang
综合评分:
积分/C币:10
综合评分:
积分/C币:3
综合评分:
积分/C币:10
综合评分:
积分/C币:10
综合评分:
积分/C币:10
综合评分:
积分/C币:10
综合评分:
积分/C币:3
综合评分:
积分/C币:3
综合评分:
积分/C币:12
综合评分:
积分/C币:12
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
W25X16、W25X32、W25X64中文手册
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
W25X16、W25X32、W25X64中文手册> > > 大容量Flash存储器W25X16,W25X32,W25X64读写擦除程序大容量Flash存储器W25X16,W25X32,W25X64读写擦除程序已有 447342个资源编辑推荐相关资源下载专区TI最新应用解决方案上传者其他资源C#教程之操作xml...嵌入式系统热门资源本周本月全部文档信息资源大小:2.39MB上 传 者: () 上传日期:资源类型:应用文档资源积分:1分评
论:下载次数:4参与讨论:标&&&&签:分&&&&享:文档简介大容量Flash存储器W25X16,W25X32,W25X64读写擦除程序,在SST单片机上测试通过,使用了SST单片机的硬件SPI功能;也可以使用虚拟SPI的方法,在SST和STC单片机上测试通过。文件列表.BMP----|000005.BMP----|000010.BMP----|000024.BMP----|000025.BMP----|000027.BMP----|000039.BMP----|000059.BMP----|000068.BMP----|000074.BMP----|000078.BMP----|000092.BMP----|000108.BMP----|000109.BMP----|000113.BMP----|000122.BMP----|Thumbs.db.dep----|lcd_lib.o.d----|main.o.d----|twi_i2c.o.d.deps----|ControlResource.Po----|DCU99Editor.Po----|DuplexEditor.Po.eclipseme.tmp----|emulation----|----|PhoneBook.jad----|----|PhoneBook.jarverified----|classes----|----|com----|----|----|north----|----|----|----|phonebook----|----|----|----|----|model----|----|----|----|----|----|Account.class----|----|----|----|----|----|ApplicationException.class----|----|----|----|----|----|Index.class----|----|----|----|----|----|Model$AccountFilter.class----|----|----|----|----|----|Model$IndexFilter.class----|----|----|----|----|----|Model.class----|----|----|----|----|----|Preference.class----|----|----|----|----|----|UserModel.classui----|ConfirmationDialog.class----|DetailInfoUI.class----|Dialog.class----|DialogListener.class----|IndexFunctionUI$ListIndex.class----|IndexFunctionUI.class----|ListMerchantGroupUI.class----|ListPhoneUI.class----|LoginUI.class----|MerchantGroupDetailInfoUI.class----|NewPhoneUI.class----|SearchPhoneUI.class----|Title.class----|UIController$1.class----|UIController$EventID.class----|UIController.class----|WaitCanvas$1.class----|WaitCanvas.class----|WelcomeUI.classPhoneBookMIDlet.class.metadata----|.plugins----|----|org.eclipse.core.resources----|----|----|.projects----|----|----|----|Nios II Device Drivers----|----|----|----|----|.location----|----|----|----|----|.propertieshello_led_0----|.markers----|.propertieshello_led_0_syslib----|.markers----|.properties.root----|112.tree.safetable----|org.eclipse.core.resourcesorg.eclipse.core.runtime----|.settings----|----|org.eclipse.cdt.core.prefs----|----|org.eclipse.cdt.ui.prefs----|----|org.eclipse.ui.prefsorg.eclipse.ui.workbench----|dialog_settings.xml----|workbench.xml.lock.logversion.ini.myeclipse----|CVS----|----|Repository----|----|Root.settings----|CVS----|----|Entries----|----|Repository----|----|Rootorg.eclipse.core.resources.prefs.sopc_builder----|install.ptf.svn----|prop-basepropstext-base----|readme.txt.svn-basetmp----|prop-basepropstext-baseall-wcpropsdir-prop-baseentriesformat.tmp_versions----|dw4002.modW25X32----|pdf----|----|SST89EXXRDX.pdf----|----|W25P16.pdf----|----|W25X16-32-64.pdf----|----|sst_SPI.pdf00-FF.BINSPIDRVSPIDRV.M51SPIDRV.hexSPIDRV.lnpSPIDRV.plgSST89x5xxRD2.HSST_SPI_W25X.LSTSST_SPI_W25X.OBJSST_SPI_W25X.cTest_SPI_W25X.LSTTest_SPI_W25X.OBJTest_SPI_W25X.cW25X.hW25X_M.hspidrv.LSTspidrv.OBJspidrv.Optspidrv.Uv2spidrv.c.bakspidrv_Opt.Bakspidrv_P1.cspidrv_Uv2.Bak. Online calibration of Nyquist-rate analog-to-digital converters.pdf..dir.dat.DS_Store._.DS_Store._CotEditor_346._MacOS_Setup._PortVaR.actionScriptProperties.apriori_config.ccsproject.classpath.cproject.cvsignore.cxl.depend.dw4002.ko.cmd.dw4002.mod.o.cmd.dw4002.o.cmd.exe.flexProperties.gitignore.htaccess.indent.pro.message.pdf.project.qmake.internal.cache.screenrc.synopsys_dc.setup.synopsys_pt.setup.untf.vimrc.xhdl3.xref相关帖子大学堂最新课程请选择理由 辱骂 色情 广告提交若举报审核通过,可奖励2下载分举报人:被举报人:nishisb举报的资源分:1* 类型:请选择类型资源无法下载资源分类不正确资源无法使用标题与实际内容不符含有危害国家安全内容含有反动色情等内容含广告内容版权问题,侵犯个人或公司的版权其他* 详细原因:回到顶部EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_.cn 或通过站内短信息或QQ:联系管理员 高进,我们会尽快处理。STM32驱动W25X64存储器
10:03:22来源: eefocus 关键字:&&&&
W25X64 是华邦公司推出的大容量SPI &FLASH 产品,W25X64 的容量为 64Mbit(8M),该系列还有 W25Q80/16/32 等。W25X16,W25X32,W25X64分别有,32768个可编程页,每页256字节,用扇区擦除指令每次可以擦除16页,用块擦除指令每次可以擦除256页,用整片擦除指令既可以擦除整个芯片,W25X16,W25X32,W25X64分别有512,个可擦除扇区,或者32,64,128个可擦除的块W25Q64 的擦写周期多达 10W 次,具有 20 年的数据保存期限,支持电压为 2.7~3.6V,W25Q64 支持标准的 SPI,还支持双输出/四输出的 SPI,最大 SPI 时钟可以到 80Mhz(双输出时相当于 160Mhz,四输出时相当于 320M)引脚一般如下其中CS DO SIO VCC GND都是SPI通讯引脚HOLD是防误操作引脚,该脚为低时,忽略一切外部指令wp为保护引脚,该脚为低,数据无法擦除修改对W25X64的写入读出都伴随着指令,指令集如下有一个很重要的寄存器是状态寄存器,在对flash写入的时候一定要对状态寄存器查看一下busy:只读,当flash内部正在进行操作的时候,这一位自动变为1,当该位为1的时候,除了读状态指令,不响应任何指令wel:写保护位,只读,当芯片处于写保护状态的时候,该位为0,所以当要对芯片进行操作的时候一定要查看这一位,否则无法写入,该位在掉电后,写禁能,页编程,扇区擦除,芯片擦除以及写状态寄存器特定值之后会变为0,执行写使能命令之后会变成1其他状态寄存器另外,芯片初始化自检的时候需要读取ID,用于设备识别,id寄存器如下代码如下#ifndef&__FLASH_H
#define&__FLASH_H
#include&"spi.h"
#include&"delay.h"&
#include&"ioremap.h"
//W25X系列/Q系列芯片列表 &&&
//W25Q80&ID&&0XEF13
//W25Q16&ID&&0XEF14
//W25Q32&ID&&0XEF15
//W25Q32&ID&&0XEF16
#define&W25Q80& 0XEF13&
#define&W25Q16& 0XEF14
#define&W25Q32& 0XEF15
#define&W25Q64& 0XEF16
extern&u16&SPI_FLASH_TYPE;//定义我们使用的flash芯片型号
#define SPI_FLASH_CS&PBout(12)&&//选中FLASH
////////////////////////////////////////////////////////////////////////////
#define&W25X_WriteEnable
0x06&&&&//写使能
#define&W25X_WriteDisable
0x04&&&&//写禁止
#define&W25X_ReadStatusReg
0x05&&&&//读状态寄存器
#define&W25X_WriteStatusReg
0x01&&&&//写状态寄存器
#define&W25X_ReadData
0x03&&&&//读数据
#define&W25X_FastReadData
0x0B&&&&//快速读数据
#define&W25X_FastReadDual
0x3B&&&&//快速异步读数据
#define&W25X_PageProgram
0x02&&&&//页编程
#define&W25X_BlockErase
0xD8&&&&//块擦除
#define&W25X_SectorErase
0x20&&&&//扇区擦除
#define&W25X_ChipErase
0xC7&&&&//片擦除
#define&W25X_PowerDown
0xB9&&&&//关机
#define&W25X_ReleasePowerDown &&&&&&&&0xAB&&&&//释放关机
#define&W25X_DeviceID
0xAB&&&&//读取设备ID
#define&W25X_ManufactDeviceID &&&&&&&&0x90&&&&//
#define&W25X_JedecDeviceID
0x9F&&&&//
void&SpiFlashInit(void);
u16&&SpiFlashReadID(void);&& &&&&//读取FLASH&ID
u8&&&SpiFlashReadSR(void);&&&&&&&&//读取状态寄存器&
void&SpiFlashWriteSR(u8&sr);&& //写状态寄存器
void&SpiFlashWriteEnable(void);&&//写使能&
void&SpiFlashWriteDisable(void); //写保护
void&SpiFlashWriteNoCheck(u8*&pBuffer,u32&WriteAddr,u16&NumByteToWrite);
void&SpiFlashRead(u8*&pBuffer,u32&ReadAddr,u16&NumByteToRead);&&&//读取flash
void&SpiFlashWrite(u8*&pBuffer,u32&WriteAddr,u16&NumByteToWrite);//写入flash
void&SpiFlashEraseChip(void);&&&& &&//整片擦除
void&SpiFlashEraseSector(u32&Dst_Addr);//扇区擦除
void&SpiFlashWaitBusy(void);&&&&&&&&&&&//等待空闲
void&SpiFlashPowerDown(void);&&&&&&&&&&&//进入掉电模式
void&SpiFlashWakeUp(void);
u8&SpiFlashCheck(void);&&&&&&&&&&&&&&//flash检测
#endif&#include&"flash.h"&
u16&SPI_FLASH_TYPE=W25Q64;//默认就是25Q64
//4Kbytes为一个Sector
//16个扇区为1个Block
//容量为2M字节,共有32个Block,512个Sector&
//初始化SPI&FLASH的IO口
void&SpiFlashInit(void)
&&&&GPIO_InitTypeDef&GPIO_InitS
&&&&RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB"RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG,&ENABLE&);//PORTB时钟使能&
&&&&GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_12;&&//&PB12&推挽&
&&&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_Out_PP;&&//推挽输出
&&&&GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_50MHz;
&&&&GPIO_Init(GPIOB,&&GPIO_InitStructure);
&&&&GPIO_SetBits(GPIOB,GPIO_Pin_12);
&&&&GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_2;&&//&PD2&推挽&
&&&&GPIO_Init(GPIOD,&&GPIO_InitStructure);
&&&&GPIO_SetBits(GPIOD,GPIO_Pin_2);
&&&&GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_7;&&//&PG7&推挽&
&&&&GPIO_Init(GPIOG,&&GPIO_InitStructure);
&&&&GPIO_SetBits(GPIOG,GPIO_Pin_7);
&&&&Spi2Init();
&&& //初始化SPI
&&&&Spi2SetSpeed(SPI_BaudRatePrescaler_2);//设置为18M时钟,高速模式
&&&&SPI_FLASH_TYPE=SpiFlashReadID();//读取FLASH&ID.&&
//读取SPI_FLASH的状态寄存器
//BIT7&&6&&&5&&&4&&&3&&&2&&&1&&&0
//SPR&&&RV&&TB&BP2&BP1&BP0&WEL&BUSY
//SPR:默认0,状态寄存器保护位,配合WP使用
//TB,BP2,BP1,BP0:FLASH区域写保护设置
//WEL:写使能锁定
//BUSY:忙标记位(1,忙;0,空闲)
//默认:0x00
u8&SpiFlashReadSR(void)&&&
&&&&u8&byte=0;&&&
&&&&SPI_FLASH_CS=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//使能器件&&&
&&&&Spi2ReadWriteByte(W25X_ReadStatusReg);&&&&&//发送读取状态寄存器命令&&&&
&&&&byte=Spi2ReadWriteByte(0Xff);&&&&&&&&&&&&&&//读取一个字节&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&&&&&
&&&&return&&&&
//写SPI_FLASH状态寄存器
//只有SPR,TB,BP2,BP1,BP0(bit&7,5,4,3,2)可以写!!!
void&SpiFlashWriteSR(u8&sr)&&&
&&&&SPI_FLASH_CS=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//使能器件&&&
&&&&Spi2ReadWriteByte(W25X_WriteStatusReg);&&&//发送写取状态寄存器命令&&&&
&&&&Spi2ReadWriteByte(sr);&&&&&&&&&&&&&&&//写入一个字节&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&&&&& &&&&&&
//SPI_FLASH写使能
//将WEL置位&&&
void&SpiFlashWriteEnable(void)&&&
&&&&SPI_FLASH_CS=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//使能器件&&&
&&&&Spi2ReadWriteByte(W25X_WriteEnable);&&&&&&//发送写使能&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&&&&& &&&&&&
//SPI_FLASH写禁止
//将WEL清零&&
void&SpiFlashWriteDisable(void)&&&
&&&&SPI_FLASH_CS=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//使能器件&&&
&&&&Spi2ReadWriteByte(W25X_WriteDisable);&&&&&//发送写禁止指令&&&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&&&&& &&&&&&
//读取芯片ID&W25X16的ID:0XEF14
u16&SpiFlashReadID(void)
&&&&u16&Temp&=&0; &&
&&&&SPI_FLASH_CS=0;
&&&&Spi2ReadWriteByte(0x90);//发送读取ID命令 &&&&
&&&&Spi2ReadWriteByte(0x00);& &&&&
&&&&Spi2ReadWriteByte(0x00);& &&&&
&&&&Spi2ReadWriteByte(0x00);& &
&&&&Temp|=Spi2ReadWriteByte(0xFF)<>16));&&//发送24bit地址&&&&
&&&&Spi2ReadWriteByte((u8)((ReadAddr)>>8));&&&
&&&&Spi2ReadWriteByte((u8)ReadAddr);&&&
&&&&for(i=0;i>16));&//发送24bit地址&&&&
&&&&Spi2ReadWriteByte((u8)((WriteAddr)>>8));&&&
&&&&Spi2ReadWriteByte((u8)WriteAddr);&&&
&&&&for(i=0;i<NumByteToWi++)Spi2ReadWriteByte(pBuffer[i]);//循环写数&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&
&&&&SpiFlashWaitBusy();
&&&//等待写入结束
//无检验写SPI&FLASH&
//必须确保所写的地址范围内的数据全部为0XFF,否则在非0XFF处写入的数据将失败!
//具有自动换页功能&
//在指定地址开始写入指定长度的数据,但是要确保地址不越界!
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大65535)
//CHECK&OK
void&SpiFlashWriteNoCheck(u8*&pBuffer,u32&WriteAddr,u16&NumByteToWrite)&&&
&&&&u16& &&&
&&&&pageremain=256-WriteAddr%256;&//单页剩余的字节数
&&&&if(NumByteToWritepageremain
&&&&&&&&&&&&pBuffer+=
&&&&&&&&&&&&WriteAddr+=
&&&&&&&&&&&&
&&&&&&&&&&&&NumByteToWrite-=
&&//减去已经写入了的字节数
&&&&&&&&&&&&if(NumByteToWrite>256)pageremain=256;&//一次可以写入256个字节
&&&&&&&&&&&&else&pageremain=NumByteToW& &&//不够256个字节了
&&&&}; &&&&
//写SPI&FLASH&&
//在指定地址开始写入指定长度的数据
//该函数带擦除操作!
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大65535)&&
u8&SPI_FLASH_BUF[4096];
void&SpiFlashWrite(u8*&pBuffer,u32&WriteAddr,u16&NumByteToWrite)&&&
&&&&u16& &&&
&&&&u16&i;&&&&
&&&&secpos=WriteAddr/4096;//扇区地址&0~511&for&w25x16
&&&&secoff=WriteAddr%4096;//在扇区内的偏移
&&&&secremain=4096-//扇区剩余空间大小&&&
&&&&if(NumByteToWrite<=secremain)secremain=NumByteToW//不大于4096个字节
&&&&while(1)&
&&&&&&&&SpiFlashRead(SPI_FLASH_BUF,secpos*);//读出整个扇区的内容
&&&&&&&&for(i=0;i<i++)//校验数据
&&&&&&&&&&&&if(SPI_FLASH_BUF[secoff+i]!=0XFF)//需要擦除&& &&
&&&&&&&&if(i<secremain)//需要擦除
&&&&&&&&&&&&SpiFlashEraseSector(secpos);//擦除这个扇区
&&&&&&&&&&&&for(i=0;i4096)secremain=4096; //下一个扇区还是写不完
&&&&&&&&&&&&else&secremain=NumByteToW
//下一个扇区可以写完了
&&&&&&&&} &
&&&&}; & &
//擦除整个芯片
//整片擦除时间:
//W25X16:25s&
//W25X32:40s&
//W25X64:40s&
//等待时间超长...
void&SpiFlashEraseChip(void)&&&
{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&SpiFlashWriteEnable();&&&&&&&&&&&&&&&&&&//SET&WEL&
&&&&SpiFlashWaitBusy();&&&
&&&&SPI_FLASH_CS=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//使能器件&&&
&&&&Spi2ReadWriteByte(W25X_ChipErase);&&&&&&&&//发送片擦除命令&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&&&&& &&&&&&
&&&&SpiFlashWaitBusy();&&&
&&&//等待芯片擦除结束
//擦除一个扇区
//Dst_Addr:扇区地址&0~511&for&w25x16
//擦除一个山区的最少时间:150ms
void&SpiFlashEraseSector(u32&Dst_Addr)&&&
&&&&Dst_Addr*=4096;
&&&&SpiFlashWriteEnable();&&&&&&&&&&&&&&&&&&//SET&WEL& &
&&&&SpiFlashWaitBusy();&&&
&&&&SPI_FLASH_CS=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//使能器件&&&
&&&&Spi2ReadWriteByte(W25X_SectorErase);&&&&&&//发送扇区擦除指令&
&&&&Spi2ReadWriteByte((u8)((Dst_Addr)>>16));&&//发送24bit地址&&&&
&&&&Spi2ReadWriteByte((u8)((Dst_Addr)>>8));&&&
&&&&Spi2ReadWriteByte((u8)Dst_Addr);&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&&&&& &&&&&&
&&&&SpiFlashWaitBusy();&&&
&&&//等待擦除完成
//等待空闲
void&SpiFlashWaitBusy(void)&&&
&&&&while&((SpiFlashReadSR()&0x01)==0x01);&&&//&等待BUSY位清空
//进入掉电模式
void&SpiFlashPowerDown(void)&&&
&&&&SPI_FLASH_CS=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//使能器件&&&
&&&&Spi2ReadWriteByte(W25X_PowerDown);&&&&&&&&//发送掉电命令&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&&&&& &&&&&&
&&&&DelayMs(3);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//等待TPD&&
void&SpiFlashWakeUp(void)&&&
&&&&SPI_FLASH_CS=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//使能器件&&&
&&&&Spi2ReadWriteByte(W25X_ReleasePowerDown);&&&//&&send&W25X_PowerDown&command&0xAB&&&&
&&&&SPI_FLASH_CS=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//取消片选&&&&& &&&&&&
&&&&DelayMs(3);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//等待TRES1
关键字:&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

我要回帖

更多关于 更改驱动器号参数错误 的文章

 

随机推荐