如图所示 电脑休眠之后需要切换播放安卓设备休眠,求解.

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
下面原子的代码实现各个操作:#include "w25qxx.h"&#include "spi.h"//modified on 16:02#define W25QXX_Debug 0//启用调试为1,会用串口打印相关信息,需要prtinf()支持u16 W25QXX_TYPE=W25Q128; //默认是W25Q128//4Kbytes为一个Sector//16个扇区为1个Block//W25Q128//容量为16M字节,共有128个Block,4096个Sector&void delay_us(u16 t){ while(t--);}void W25QXX_Init(void)//初始化FLASH W25QXX的IO口{ & W25QXX_CS_H();
//SPI FLASH不选中 SPI1_Init();
//初始化SPI SPI1_SetSpeed(SPI_BAUDRATEPRESCALER_4);
//设置为21M时钟,高速模式
W25QXX_TYPE=W25QXX_ReadID(); //读取FLASH ID.} &//读取W25QXX的状态寄存器//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,空闲)//默认:0x00u8 W25QXX_ReadSR(void) &&{ & u8 byte=0; && W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 && SPI1_ReadWriteByte(W25X_ReadStatusReg); & &//发送读取状态寄存器命令 & & byte=SPI1_ReadWriteByte(0Xff); & & & & & & //读取一个字节 & W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选 & &&
&&}&//写W25QXX状态寄存器//只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以写!!!void W25QXX_Write_SR(u8 sr) &&{ && W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 && SPI1_ReadWriteByte(W25X_WriteStatusReg); & //发送写取状态寄存器命令 & & SPI1_ReadWriteByte(sr); & & & & & & & //写入一个字节 & W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选 & &
& & &} &&//W25QXX写使能 //将WEL置位 &&void W25QXX_Write_Enable(void) &&{ W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 &&& SPI1_ReadWriteByte(W25X_WriteEnable); & & &//发送写使能 & W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选 & &
& & &}&//W25QXX写禁止 //将WEL清零 &void W25QXX_Write_Disable(void) &&{ & W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 &&& SPI1_ReadWriteByte(W25X_WriteDisable); & & //发送写禁止指令 & & W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选 & &
//读取芯片ID//返回值如下:
&&//0XEF13,表示芯片型号为W25Q80 &//0XEF14,表示芯片型号为W25Q16 & &//0XEF15,表示芯片型号为W25Q32 &//0XEF16,表示芯片型号为W25Q64&//0XEF17,表示芯片型号为W25Q128
&u16 W25QXX_ReadID(void){ u16 Temp = 0;
& W25QXX_CS_L();
& & SPI1_ReadWriteByte(0x90);//发送读取ID命令
& & SPI1_ReadWriteByte(0x00);
& & SPI1_ReadWriteByte(0x00);
& & SPI1_ReadWriteByte(0x00);
&& Temp|=SPI1_ReadWriteByte(0xFF)&&8; & Temp|=SPI1_ReadWriteByte(0xFF); & W25QXX_CS_H();
& & return T} &
& &//读取SPI FLASH &//在指定地址开始读取指定长度的数据//pBuffer:数据存储区//ReadAddr:开始读取的地址(24bit)//NumByteToRead:要读取的字节数(最大65535)void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead) &&{&& u16 &
& & W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 &&& & SPI1_ReadWriteByte(W25X_ReadData); & & & & //发送读取命令 &&& & SPI1_ReadWriteByte((u8)((ReadAddr)&&16)); &//发送24bit地址 & && & SPI1_ReadWriteByte((u8)((ReadAddr)&&8)); &&& & SPI1_ReadWriteByte((u8)ReadAddr); &&& & for(i=0;i&NumByteToRi++)& &{&& & & & pBuffer[i]=SPI1_ReadWriteByte(0XFF); & //循环读数 && & } W25QXX_CS_H(); &
& & &} &//SPI在一页(0~65535)内写入少于256个字节的数据//在指定地址开始写入最大256字节的数据//pBuffer:数据存储区//WriteAddr:开始写入的地址(24bit)//NumByteToWrite:要写入的字节数(最大256),该数不应该超过该页的剩余字节数!!! &void W25QXX_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite){& u16 && & W25QXX_Write_Enable(); & & & & & & & & & & //SET WEL&& & W25QXX_CS_L(); & & & & & & & & & & & & & & //使能器件 &&& & SPI1_ReadWriteByte(W25X_PageProgram); & & &//发送写页命令 &&& & SPI1_ReadWriteByte((u8)((WriteAddr)&&16)); //发送24bit地址 & && & SPI1_ReadWriteByte((u8)((WriteAddr)&&8)); &&& & SPI1_ReadWriteByte((u8)WriteAddr); &&& & for(i=0;i&NumByteToWi++)SPI1_ReadWriteByte(pBuffer[i]);//循环写数 &
W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选&
W25QXX_Wait_Busy();
& //等待写入结束}&//无检验写SPI FLASH&//必须确保所写的地址范围内的数据全部为0XFF,否则在非0XFF处写入的数据将失败!//具有自动换页功能&//在指定地址开始写入指定长度的数据,但是要确保地址不越界!//pBuffer:数据存储区//WriteAddr:开始写入的地址(24bit)//NumByteToWrite:要写入的字节数(最大65535)//CHECK OKvoid W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) &&{
&& pageremain=256-WriteAddr%256; //单页剩余的字节数
& & if(NumByteToWrite&=pageremain)pageremain=NumByteToW//不大于256个字节 while(1) {
W25QXX_Write_Page(pBuffer,WriteAddr,pageremain);
if(NumByteToWrite==pageremain)//写入结束了
else //NumByteToWrite&pageremain
WriteAddr+=
NumByteToWrite-=
&//减去已经写入了的字节数
if(NumByteToWrite&256)pageremain=256; //一次可以写入256个字节
else pageremain=NumByteToW
&//不够256个字节了
& &}&//写SPI FLASH &//在指定地址开始写入指定长度的数据//该函数带擦除操作!//pBuffer:数据存储区//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大65535) &&u8 W25QXX_BUFFER[4096];
&void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) &&{& u32 u16 u16
&&& u16 & & u8 * W25QXX_BUF;
&& & W25QXX_BUF=W25QXX_BUFFER;
& &&& secpos=WriteAddr/4096;//扇区地址 & secoff=WriteAddr%4096;//在扇区内的偏移 secremain=4096-//扇区剩余空间大小 #if W25QXX_Debug && printf("ad:%X,nb:%X\r\n",WriteAddr,NumByteToWrite);//测试用#endif & if(NumByteToWrite&=secremain)secremain=NumByteToW//不大于4096个字节 while(1)& {
W25QXX_Read(W25QXX_BUF,secpos*);//读出整个扇区的内容
for(i=0;i&i++)//校验数据
if(W25QXX_BUF[secoff+i]!=0XFF)//需要擦除 &
if(i&secremain)//需要擦除
W25QXX_Erase_Sector(secpos);//擦除这个扇区
for(i=0;i&i++)
W25QXX_BUF[i+secoff]=pBuffer[i];
W25QXX_Write_NoCheck(W25QXX_BUF,secpos*);//写入整个扇区 &
}else W25QXX_Write_NoCheck(pBuffer,WriteAddr,secremain);//写已经擦除了的,直接写入扇区剩余区间.
if(NumByteToWrite==secremain)//写入结束了
else//写入未结束
secpos++;//扇区地址增1
secoff=0;//偏移位置为0
pBuffer+= &//指针偏移
WriteAddr+=//写地址偏移
NumByteToWrite-=
//字节数递减
if(NumByteToWrite&4096)secremain=4096; //下一个扇区还是写不完
else secremain=NumByteToW
//下一个扇区可以写完了
} & }; &}//擦除整个芯片
&//等待时间超长...void W25QXX_Erase_Chip(void) &&{ & & & & & & & & & & & & & & & & &&& & W25QXX_Write_Enable(); & & & & & & & & &//SET WEL&& & W25QXX_Wait_Busy(); &&&
W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 &&& & SPI1_ReadWriteByte(W25X_ChipErase); & & & &//发送片擦除命令 & W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选 & &
& & & W25QXX_Wait_Busy(); &
& //等待芯片擦除结束} &&//擦除一个扇区//Dst_Addr:扇区地址 根据实际容量设置//擦除一个扇区的最少时间:150msvoid W25QXX_Erase_Sector(u32 Dst_Addr) &&{& #if W25QXX_Debug //监视falsh擦除情况,测试用 &&& printf("fe:%x\r\n",Dst_Addr);#endif & Dst_Addr*=4096;& & W25QXX_Write_Enable(); & & & & & & & & &//SET WEL
&& & W25QXX_Wait_Busy(); &&&
W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 &&& & SPI1_ReadWriteByte(W25X_SectorErase); & & &//发送扇区擦除指令&& & SPI1_ReadWriteByte((u8)((Dst_Addr)&&16)); &//发送24bit地址 & && & SPI1_ReadWriteByte((u8)((Dst_Addr)&&8)); &&& & SPI1_ReadWriteByte((u8)Dst_Addr); &
W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选 & &
& & && & W25QXX_Wait_Busy(); &
& //等待擦除完成} &//等待空闲void W25QXX_Wait_Busy(void) &&{ && while((W25QXX_ReadSR()&0x01)==0x01); & // 等待BUSY位清空} &//进入掉电模式void W25QXX_PowerDown(void) &&{&&
W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 &&& & SPI1_ReadWriteByte(W25X_PowerDown); & & & &//发送掉电命令 &
W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选 & &
& & && & delay_us(3); & & & & & & & & & & & & & & & //等待TPD &} &&//唤醒void W25QXX_WAKEUP(void) &&{ &&
W25QXX_CS_L(); & & & & & & & & & & & & & &//使能器件 &&& & SPI1_ReadWriteByte(W25X_ReleasePowerDown); & // &send W25X_PowerDown command 0xAB & & W25QXX_CS_H(); & & & & & & & & & & & & & &//取消片选 & &
& & && & delay_us(3); & & & & & & & & & & & & & & & //等待TRES1} &&//封装几个函数,供FATFS使用,#define FLASH_SECTOR_SIZE 512//每个扇区512KB&//对于 W25Q128//前 12M 字节给 fatfs 用,12M 字节后,用于存放字库,字库占用 3.09M. 剩余部分,//给客户自己用&u16 FLASH_SECTOR_COUNT=24; //W25Q1218,前 12M 字节给 FATFS 占用,扇区数#define FLASH_BLOCK_SIZE 16 //每个 BLOCK 有 16 个扇区u8 BSP_W25QXX_Init(void){ W25QXX_Init();&
if(W25QXX_TYPE == W25Q128) {
return &0;//成功返回0 } else & {
return 1;//没有读到ID号表示初始化失败 }
}//// &TRANSFER_OK & &= 0U, &/*!& Transfer success & & &*/// &TRANSFER_BUSY &= 1U, &/*!& Transfer is occurring */// TRANSFER_ERROR = 2U & /*!& Transfer failed & & & */u8 BSP_W25QXX_GetStatus(void){ u8 state=0;//默认空闲 state=W25QXX_ReadSR();//0空闲,1忙 if(state != 0) {
return (1U); } else {
return (0U); }}u8 BSP_W25QXX_ReadBlocks(uint32_t *pData, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumOfBlocks){ u8 sector=ReadA for(;NumOfBlocks&0;NumOfBlocks--) {
W25QXX_Read((uint8_t*)pData,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE);
pData+=FLASH_SECTOR_SIZE; } return 0;}u8 BSP_W25QXX_WriteBlocks(uint32_t *pData, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumOfBlocks){ u8 sector=WriteA for(;NumOfBlocks&0;NumOfBlocks--) {
W25QXX_Read((uint8_t*)pData,sector*FLASH_SECTOR_SIZE,FLASH_SECTOR_SIZE);
pData+=FLASH_SECTOR_SIZE; } return 0;}&
阅读(1240)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'SPI FLASH 之 W25Q系列',
blogAbstract:'作为技术的菜鸟,为了更快的学习好技术,要踏实的搞定每一个当前遇到的知识,很多大神都有写博客的习惯,我并非效仿,而是为了养成记录的习惯,这有助于提高知识的熟练度。刚工作不久,接触了W25Q系列的spiflash,w25q系列的spiflash,包括w25q16、w25q32、w25q80,w25q128,今天就以q128系列为对象,做一下学习的总结。w25q80型号spiflash,每页256B,每16个page为一个sector(扇区),每8个扇区为一个block(块),即每页256B,每个sector 4KB,每个block 32KB.SpiFlash 的常用操作与指令如图所示:',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:7,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}您是不是在找:
买家还在看:
当前位置:
W25Q16BVSSIG W25Q64FVSSIG 专供工厂
detail3e达人选购¥38.00¥36.00¥0.95¥8000.00¥20.00
detail3e周边优质供应商广东省深圳市广东省东莞市广东省东莞市浙江省宁波市
品牌:优势现货/进口原装
型号:W25Q16BVSSIG W25Q64FVSSIG
类型:其他IC
用途:详情咨询/批发电话1
封装:标准原封装
批号:2011
慧聪网厂家深圳市金美华电子科技有限公司为您提供W25Q16BVSSIG W25Q64FVSSIG 专供工厂的详细产品价格、产品图片等产品介绍信息,您可以直接联系厂家获取W25Q16BVSSIG W25Q64FVSSIG 专供工厂的具体资料,联系时请说明是在慧聪网看到的。
detail3e相关商品推荐¥38.00¥36.00¥0.95¥8000.00¥20.00¥105.00¥16.00
detail3e店内热门商品面议面议面议面议
detail3e销相关资源销热门产品搜索销相关热门专题更多&热门商机最新商机
提示:您在慧聪网上采购商品属于商业贸易行为。以上所展示的信息由卖家自行提供,内容的真实性、准确性和合法性由发布卖家负责,请意识到互联网交易中的风险是客观存在的。推荐使用,保障您的交易安全!
所在地:广东省&&
联系人:姚文鹏 & 先生
075 ******
请供应商联系我
手机号不能为空
姓名不能为空
请供应商联系我
您对该公司的咨询信息已成功提交请注意接听供应商电话。
detail3e关于销
detail3e同类其他品牌
detail3e您是不是在找
您采购的产品:
请输入采购产品
您的手机号码:
请输入手机号码
*采购产品:
请输入采购产品
*采购数量:
请输入采购数量
*采购截止日期:
请输入正确的手机号码
请输入验证码
*短信验证码:
<input id="valid_Code1" maxlength="6" placeholder="请输入验证码" name="VALIDCODE" class="codeInput" onkeyup="this.value=this.value.replace(/\D/g,'')" onkeypress="if(event.keyCode
57) event.returnValue =" type="text">
免费获取验证码
为了安全,请输入验证码,我们将优先处理您的需求!
请输入验证码
发送成功!
慧聪已收到您的需求,我们会尽快通知卖家联系您,同时会派出采购专员1对1为您提供服务,请您耐心等待!
075 ******
联系人:姚文鹏&销售 经理
公司名称:深圳市金美华电子科技有限公司
备注:点击关注按钮后才可自动收到卖家电话
请输入正确的手机号码
请输入验证码
*短信验证码:
免费获取验证码
为了安全,请输入验证码,我们将优先处理您的需求!
请输入验证码
按字母分类 :#include "iospiflash.h"
/*******************************************//// This is a IOSPI (simulater by IO)// // Lib For Driver Flash
W25Q64BV//*******************************************///sbit IOFLASHSPI_CS = P1^0;//sbit IOFLASHSPI_DIN
= P1^3;//sbit IOFLASHSPI_DOUT
= P1^4;//sbit IOFLASHSPI_CLK
/*******************************************//// IOSPI base FUNC// Data shifting at the --rising edge-- of the clk// CLK need a hold time
MyDelay(3)////
Shift // Write u8// Read
Time Series requires:
The W25Q64B Flash support the stantdard SPI , but the SPI Mode 0 or 3. SPI Mode 0 required that:
when free:
the CLK need be low - 0 , while the /CS is high( when free );
when execute an instruction:
Fall the /CS that Enable the Flash.
0 - 1 - 0 - 1 the CLK,
when the rasing edge of CLK, the DOUT(0,1) will be send to the FLASH.
when a whole instruction completed.
need to! PULL up the /CS than Over an Instruction.
SPI Mode 3 required that:
..... /CS /CLK the reverse.
Other IO need! /HOLD --- like a enable pin.
when /hold is Low,the FLASH ,can not excute any instructions.
//*******************************************/u8
IOSPI_Flash_Shift(u8 Data){ u8 DataRead = 0xFF;
u8 i = 0; for(i = 0 ; i & 8 ; i++) {
IOFLASHSPI_CLK = 0;
//fall edge chage the out data bit
IOFLASHSPI_DOUT = ((Data & 0x80) == 0x80 )?1 : 0;
Data &&= 1;
DataRead &&= 1;
MyDelay(5);
IOFLASHSPI_CLK = 1;
//rising edge
// the rising edge out the data bit and in the data bit
MyDelay(5);
if(IOFLASHSPI_DIN==1)
DataRead += 1; }
return DataR
}//rising edge of CLK//!!!!!the CLK should be keep 0,while there is not excuting any instructions! void IOSPI_Flash_u8_Write(u8 Data){ u8 i = 0; for(i = 0 ; i & 8 ; i++) {
IOFLASHSPI_CLK = 0;
IOFLASHSPI_DOUT = (Data & 0x80);
Data &&= 1;
MyDelay(5);
IOFLASHSPI_CLK = 1;
//rising edge
MyDelay(5); }
IOFLASHSPI_CLK = 0;}
IOSPI_Flash_u8_Read(void){ u8 Data = 0xFF; u8 i = 0; for(i = 0 ; i & 8 ; i++) {
IOFLASHSPI_CLK = 0;
Data &&= 1;
MyDelay(5);
//hold time
IOFLASHSPI_CLK = 1;
//rising edge
MyDelay(5);
if(IOFLASHSPI_DIN==1)
//get bits
Data += 1; } IOFLASHSPI_CLK = 0; return D}
//-----------------------------------//// IOSPI FLASH FUNC////-----------------------------------void IOSPI_Flash_CMD(u8 CMD){
IOSPI_Flash_u8_Write(CMD);}
IOSPI_Flash_RDSR(void){ u8 ReadStatus = 0;
IOSPI_FLASH_CS_ENABLE
IOSPI_Flash_CMD(CMD_RDSR);
//time series need to be learn
ReadStatus = IOSPI_Flash_u8_Read();
IOSPI_FLASH_CS_DISABLE
//cs over the instruction
return ReadS}
u32 IOSPI_Flash_RDJCID(){ u8 i = 0; u32 JCID = 0x; u8 *pData = &JCID;
IOSPI_FLASH_CS_ENABLE
IOSPI_Flash_CMD(CMD_RDJCID);
//time series need to be learn
for(i = 0 ; i & 3 ; i++) {
*(pData++) = IOSPI_Flash_u8_Read(); }
IOSPI_FLASH_CS_DISABLE
//cs over the instruction
return JCID;}
void IOSPI_Flash_WaitFree(void){ while((IOSPI_Flash_RDSR() & 0x01)==0x01)
//check the busy = 0; {
MyDelay(30); }}
//---------------------------------------------------------//// 4K byte Erase 16 pages////---------------------------------------------------------void IOSPI_Flash_SectorErase(u32 Addr){ u8* pAddr = &A IOSPI_Flash_WaitFree();
IOSPI_FLASH_CS_ENABLE IOSPI_Flash_CMD(CMD_ENABLEWRITE); IOSPI_FLASH_CS_DISABLE
MyDelay(5);
IOSPI_FLASH_CS_ENABLE IOSPI_Flash_CMD(CMD_SECERASE); IOSPI_Flash_u8_Write(*pAddr++); IOSPI_Flash_u8_Write(*pAddr++); IOSPI_Flash_u8_Write(*pAddr); IOSPI_FLASH_CS_DISABLE}//void IOSPI_Flash_BlockErase(u8* Addr);
//-----------------------------------------------------------------//// Page Programe// the data to be programe must less than 256bytes,//
otherwise the page will be wrap by the bytes lengther than the 256////-----------------------------------------------------------------void IOSPI_Flash_Write(u32 Addr , char* Data , u16 length){ u16 i = 0; u8 pData = 0x00; u8* pAddr = &A if(length & 256)
IOSPI_Flash_WaitFree();
IOSPI_FLASH_CS_ENABLE IOSPI_Flash_CMD(CMD_ENABLEWRITE); IOSPI_FLASH_CS_DISABLE
MyDelay(5);
IOSPI_FLASH_CS_ENABLE IOSPI_Flash_CMD(CMD_PAGEWRITE); IOSPI_Flash_u8_Write(*pAddr++); IOSPI_Flash_u8_Write(*pAddr++); IOSPI_Flash_u8_Write(*pAddr);
for(i = 0 ; i & i++) {
IOSPI_Flash_u8_Write(*(Data+i)); } IOSPI_FLASH_CS_DISABLE
//-----------------------------------------------------////
Standard Flash Read.//
Can Read 256 bytes once at most.////-----------------------------------------------------void IOSPI_Flash_Read(u32 Addr , char* Data , u16 length){ u16 i = 0; u8* pAddr = &A IOSPI_Flash_WaitFree();
IOSPI_FLASH_CS_ENABLE IOSPI_Flash_CMD(CMD_READ); IOSPI_Flash_u8_Write(*pAddr++); IOSPI_Flash_u8_Write(*pAddr++); IOSPI_Flash_u8_Write(*pAddr);
for(i = 0 ; i & i++) {
*(Data+i) = IOSPI_Flash_u8_Read(); } IOSPI_FLASH_CS_DISABLE
void IOSPI_Flash_FastRead(u32 Addr , char* Data , u16 length){ u16 i = 0; u8* pAddr = &A if(length & 256)
IOSPI_Flash_WaitFree();
IOSPI_FLASH_CS_ENABLE IOSPI_Flash_CMD(CMD_FASTREAD); IOSPI_Flash_u8_Write(*pAddr++); IOSPI_Flash_u8_Write(*pAddr++); IOSPI_Flash_u8_Write(*pAddr); IOSPI_Flash_u8_Write(0x00);
for(i = 0 ; i & i++) {
*(Data+i) = IOSPI_Flash_u8_Read(); } IOSPI_FLASH_CS_DISABLE}
===========================================================================================================
===========================================================================================================
===========================================================================================================&
#ifndef __IOSPIFLASH_H#define __IOSPIFLASH_H#include "Common.h"/**************************************************************//// W25Q64BVSFIG
FLASH////*************************************************************/#define CMD_RDSR
0x05#define CMD_ENABLEWRITE
0x06#define CMD_DISABLEWRITE 0x04#define CMD_WDSR
0x01#define CMD_READ
0x03#define CMD_FASTREAD
0x0B#define CMD_PAGEWRITE
0x02#define CMD_SECERASE
0x20#define CMD_BLOCKERASE
0x52#define CMD_RDJCID
#define IOSPI_FLASH_CS_ENABLE
{IOFLASHSPI_CS = 0;}#define IOSPI_FLASH_CS_DISABLE
{IOFLASHSPI_CS = 1;}
IOSPI_Flash_Shift(u8 Data);void IOSPI_Flash_u8_Write(u8 Data);u8
IOSPI_Flash_u8_Read(void);
void IOSPI_Flash_CMD(u8 CMD);u8
IOSPI_Flash_RDSR(void);void IOSPI_Flash_WaitFree(void);void IOSPI_Flash_SectorErase(u32 Addr);//void IOSPI_Flash_BlockErase(u2 Addr);void IOSPI_Flash_Write(u32 Addr , char* Data , u16 length);void IOSPI_Flash_Read(u32 Addr , char* Data , u16 length);void IOSPI_Flash_FastRead(u32 Addr , char* Data , u16 length);
u32 IOSPI_Flash_RDJCID(void);
阅读(...) 评论()

我要回帖

更多关于 usb设备休眠 的文章

 

随机推荐