华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx

上传人:b****4 文档编号:13736425 上传时间:2022-10-13 格式:DOCX 页数:21 大小:3.14MB
下载 相关 举报
华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx_第1页
第1页 / 共21页
华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx_第2页
第2页 / 共21页
华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx_第3页
第3页 / 共21页
华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx_第4页
第4页 / 共21页
华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx

《华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。

华邦W25Q16存储器颗粒SPI编程Word文档下载推荐.docx

串行时钟引脚CLK;

②:

芯片选择引脚CS;

③:

串行数据输出引脚DO;

④:

串行数据输入输出引脚DIO。

(注意:

第④引脚“串行数据输入输出引脚DIO”的解释:

在普通情况下,这根引脚是“串行输入引脚(DI),当使用了快读双输出指令(FastReadDualOutputinstruction)时,这根引脚就变成了DO引脚,这种情况下,芯片就有了两个DO引脚了,所以叫做双输出,这时,如果与芯片通信的速率相当于翻了一倍,所以传输速度更快。

另外,芯片还具有保持引脚(HOLD)、写保护引脚(WP)、可编程写保护位(位于状态寄存器bit1)、顶部和底部块的控制等特征,使得控制芯片更具灵活性。

芯片支持JEDEC工业标准。

引脚排布:

 

原理图:

控制和状态寄存器说明

S7

S6

S5

S4

S3

S2

S1

S0

SRP

(Reservd)

TB

BP2

BP1

BP0

WEL

BUSY

通过"

读状态寄存器指令"

读出的状态数据可以知道芯片存储器阵列是否可写或不可写,或是否处于写保护状态。

写状态寄存器指令"

可以配置芯片写保护特征。

状态寄存器:

忙位(BUSY)

BUSY位是个只读位,位于状态寄存器中的S0。

当器件在执行"

页编程"

、"

扇区擦除"

、"

块区擦除"

芯片擦除"

写状态寄存器"

指令时,该位自动置1。

这时,除了"

读状态寄存器"

指令,其它指令部忽略。

当编程、擦除和写状态寄存器指令执行完毕之后,该位自动变为0,表示芯片可以接收其它指令了。

写保护位(WEL)

WEL位是个只读位,位于状态寄存器中的S1。

执行完"

写使能"

指令后,该位置1。

当芯片处于"

写保护状态"

下,该位为0。

在下面两种情况下,会进入"

•掉电后

•执行以下指令后写禁能、页编程、扇区擦除、块区擦除、芯片擦除和写状态寄存器

块区保护位(BP2,BP1,BP0)

BP2\BP1\BP0位是可读可写位,分别位于状态寄存器的S4\S3\S2。

可以用"

命令置位这些块区保护位。

在默认状态下,这些位都为0,即块区处于未保护状态下。

可以设置块区没有保护、部分保护或者是全部处于保护状态下。

当SPR位为1或/WP引脚为低的时候,这些位不可以被更改。

底部和顶部块区保护位(TB)

TB位是可读可写位,位于状态寄存器的S5。

该位默认为0,表明顶部和底部块区处于未被保护状态下。

命令置位该位。

当SPR位为1或/WP引脚为低的时候,这些位不可以被更改。

保留位

状态寄存器的S6为保留位,读出状态寄存器值时,该位为0。

建议读状态寄存器值用于测试时将该位屏蔽。

状态寄存器果护位(SRP)

SRP位是可读可写位,位于状态寄存器的S7。

该位结合/WP引脚可以实现禁能写状态寄存器功能。

该位默认值为0。

当SRP位=0时,/WP引脚不能控制状态寄存器的"

写禁能"

当SRP位=1,/WP引脚=0时,"

命令失效。

当SRP位=1,/WP引脚=1时,可以执行"

命令。

状态寄存器存储保护模块:

1、写使能时序图(指令:

0x06):

“写使能”指令将会使“状态寄存器”WEL位置位。

在执行每个“页编程”、“扇区擦除”、“块区擦除”、“芯片擦除”、和“写状态寄存器”命令之前,都要先置位WEL。

/CS引脚先拉低之后,“写使能”指令代码06h从DI引脚输入,在CLK上升沿采集,然后再拉高/CS引脚。

程序设计流程:

1、使能片选位,拉低CS引脚;

2、CLK起始状态或高电平或低平,配置数据采集从CLK第一个上升沿开始;

3、等待发送缓冲区是否为空,SPI_SR的TXE位;

4、将数据赋值给SPI_DR寄存器;

5、等待接收缓冲区是否为空,SPI_SR的RXNE位;

6、返回接收到的数据;

7、禁能片选位,拉高CS引脚。

例程:

unsignedcharSPI_SendByte(unsignedcharbyte)

{

while(!

(SPI_SR&

0x02));

//等待发送缓冲区为空

SPI_DR=byte;

//送值到数据寄存器

whlie(!

0x01));

//等待接收缓冲区为空

returnSPI_DR;

//返回接收的内容

}

unsignedcharSPI_WriteEnable()

Flash_CS=0;

//使能CS引脚

SPI_SendByte(0x06)//写使能指令

Flash_CS=1;

//禁能片选引脚

2、写禁能时序图(指令:

0x04):

“写禁能”指令将会使WEL位变为0。

/CS引脚拉低之后,把04h从DIO引脚送到芯片之后,拉高/CS,就完成了这个指令。

在执行完“写状态寄存器”、“页编程”、“扇区擦除”、“块区擦除”、“芯片擦除”指令之后,WEL位就会自动变为0。

SPI_SendByte(0x04)//写禁能指令

3、读状态时序(指令:

0x05):

当/CS拉低之后,开始把05h从DIO引脚送到芯片,在CLK的上升沿数据被芯片采集,当芯片认出采集到的数据时05h时,芯片就会把“状态寄存器”的值从DO引脚输出,数据在CLK的下降沿输出,高位在前。

“读状态寄存器”指令在任何时候都可以用,甚至在编程、擦除和写状态寄存器的过程中也可以用,这样,就可以从状态寄存器的BUSY位判断编程、擦除和写状态寄存器周期有没有结束,从而让我们知道芯片是否可以接收下一条指令了。

如果/CS不被拉高,状态寄存器的值将一直从DO引脚输出。

/CS拉高之后,读指令结束。

1、使能片选,拉低CS引脚;

2、发送读取指令0x04;

3、循环发送读伪指令0xFF,等待非忙时跳出循环;

4、禁能片选,拉高CS引脚。

voidSPI_ReadStatus()

unsignedcharFlash_Status;

FLASH_CS=0;

//使能片选引脚

SPI_SendByte(0x05);

//发送读状态指令

do

Flash_Status=SPI_SendByte(0xFF);

//发送伪指令维持时钟等待非空跳出循环,伪指令任意写。

}while(!

(Flash_Status&

FLASH_CS=1;

//禁能片选引脚

4、写状态时序(指令:

0x01)

在执行“写状态寄存器”指令之前,需要先执行“写使能”指令。

先拉低/CS引脚,然后把01h从DIO引脚送到芯片,然后再把你想要设置的状态寄存器值通过DIO引脚送到芯片,拉高/CS引脚,指令结束,如果此时没有把/CS引脚拉高,或者是拉的晚了,值将不会被写入,指令无效。

只有“状态寄存器”当中的“SRP、TB、BP2、BP1、BP0位”可以被写入,其它“只读位”值不会变。

在该指令执行的过程中,状态寄存器中的BUSY位为1,这时候可以用“读状态寄存器”指令读出状态寄存器的值判断,当指令执行完毕,BUSY位将自动变为0,WEL位也自动变为0。

通过对“TB”、“BP2”、“BP1”、“BP0”位写1,就可以实现将芯片的部分或全部存储区域设置为只读。

通过对“SRP位”写1,再把/WP引脚拉低,就可以实现禁止写入状态寄存器的功能。

1、使能片选,CS引脚拉低;

2、发送写状态指令0x01;

3、发送读取指令0x04

4、禁能片选,CS引脚拉高。

voidSPI_FLASH_WriteStatus()

SPI_SendByte(0x06);

//写使能指令

SPI_SendByte(0x01);

//写状态指令

SPI_SendByte(0x00);

//写入状态的数据

5、读数据时序图(指令:

0x03):

“读数据”指令允许读出一个字节或一个以上的字节被读出。

先把/CS引脚拉低,然后把03h通过DIO引脚送到芯片,之后再送入24位的地址,这些数据在CLK的上升沿被芯片采集。

芯片接收完24位地址之后,就会把相应地址的数据在CLK引脚的下降沿从DO引脚送出去,高位在前。

当读完这个地址的数据之后,地址自动增加,然后通过DO引脚把下一个地址的数据送出去,形成一个数据流。

也就是说,只要时钟在工作,通过一条读指令,就可以把整个芯片存储区的数据读出来。

把/CS引脚拉高,“读数据”指令结束。

当芯片在执行编程、擦除和读状态寄存器指令的周期内,“读数据”指令不起作用。

程序设计流程(指令:

2、发送读数据指令0x03,紧接着发送24位地址;

3、读以SPI_DR寄存器数据

4、禁能片选,拉高CS引脚

voidSPI_FLASH_BufferRead(u

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1