SST25VF016B的FLASH根据野火及网络资料修改的基于IAR的SPI通信
spi_flash (stm32 spi_flash的编程)
本帖最后由orange-208 于2012-5-28 10:05 编辑void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) SPI_FLASH_Write_SR(0x02);//使能状态寄存器中的写存储器SST25V_DBSY();SPI_FLASH_Write_SR(0x02);//使能状态寄存器中的写存储器 SST25V_DBSY();实验目的:将数据写入外部FLASH中,然后再读出来显示在LCD上实验平台:基于STM32F103C8T6的彩屏开发板FLASH:SST25VF016Bflash_SST.c#include "flash_SST.h"#include "spi.h"#include "delay.h"//4Kbytes为一个Sector//16个扇区为1个Block//SST25VF016B//容量为2M字节,共有32个Block(块),512个Sector(扇区)//初始化SPI FLASH的IO口//修改状态寄存器,允许芯片存储器被写void SPI_Flash_Init(void){RCC->APB2ENR|=1<<2; //PORTA时钟使能GPIOA->CRH&=0XFFFFFF0F;GPIOA->CRH|=0X00000030; //PA9 推挽GPIOA->ODR|=1<<9; //PA9上拉SPIx_Init(); //初始化SPISPI_FLASH_Write_SR(0x02); //使能状态寄存器中的写存储器SST25V_DBSY();}//读取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,空闲)//默认:0x00u8 SPI_Flash_ReadSR(void){u8 byte=0;SPI_FLASH_CS=0; //使能器件SPIx_ReadWriteByte(SST25_ReadStatusReg); //发送读取状态寄存器命令byte=SPIx_ReadWriteByte(0Xff); //读取一个字节SPI_FLASH_CS=1; //取消片选return byte;}//写SPI_FLASH状态寄存器//只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以写!!!void SPI_FLASH_Write_SR(u8 sr){SPI_FLASH_CS=0; //片选SPIx_ReadWriteByte(SST25_EnableWriteStatusReg); //使能写状态寄存器命令SPI_FLASH_CS=1; //取消片选SPI_FLASH_CS=0; //片选SPIx_ReadWriteByte(SST25_WriteStatusReg); //发送写取状态寄存器命令SPIx_ReadWriteByte(sr); //写入一个字节SPI_FLASH_CS=1; //取消片选}//SPI_FLASH写使能//将WEL置位void SPI_FLASH_Write_Enable(void){SPI_FLASH_CS=0; //使能器件SPIx_ReadWriteByte(SST25_WriteEnable); //发送写使能SPI_FLASH_CS=1; //取消片选}//SPI_FLASH写禁止//将WEL清零void SPI_FLASH_Write_Disable(void){SPI_FLASH_CS=0; //使能器件SPIx_ReadWriteByte(SST25_WriteDisable); //发送写禁止指令SPI_FLASH_CS=1; //取消片选}//读取芯片ID SST25VF016的是0XBF41u16 SPI_Flash_ReadID(void){u16 Temp = 0;SPI_FLASH_CS=0;//发送读取ID命令SPIx_ReadWriteByte(0x90);//发送24位的地址SPIx_ReadWriteByte(0x00);SPIx_ReadWriteByte(0x00);SPIx_ReadWriteByte(0x00);//读取返回的16位值Temp=SPIx_ReadWriteByte(0xFF)<<8; //高8位数据Temp+=SPIx_ReadWriteByte(0xFF); //底八位数据SPI_FLASH_CS=1;return Temp;}//读取SPI FLASH//在指定地址开始读取指定长度的数据//pBuffer:数据存储区//ReadAddr:开始读取的地址(24bit)//NumByteToRead:要读取的字节数(最大65535即64k)void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead) {u16 i;SPI_FLASH_CS=0; //使能器件SPIx_ReadWriteByte(SST25_ReadData); //发送读取命令//发送24bit地址SPIx_ReadWriteByte((u8)((ReadAddr)>>16));SPIx_ReadWriteByte((u8)((ReadAddr)>>8));SPIx_ReadWriteByte((u8)ReadAddr);for(i=0;i<NumByteToRead;i++){pBuffer=SPIx_ReadWriteByte(0XFF); //循环读数}SPI_FLASH_CS=1; //取消片选}//地址自动增加的写数据Avoid AutoAddressIncrement_WordProgramA(u8 Byte1, u8 Byte2, u32 Addr) {SPI_FLASH_Write_Enable();SPI_FLASH_CS=0;SPIx_ReadWriteByte(SST25_AAI_WordProgram);//输入所要写数据的起始地址SPIx_ReadWriteByte((Addr & 0xFF0000) >> 16);SPIx_ReadWriteByte((Addr & 0xFF00) >> 8);SPIx_ReadWriteByte(Addr & 0xFF); //发送最初的两个数据SPIx_ReadWriteByte(Byte1);SPIx_ReadWriteByte(Byte2);SPI_FLASH_CS=1;SPI_Flash_Wait_Busy();}//地址自动增加的写数据Bvoid AutoAddressIncrement_WordProgramB(u8 state,u8 Byte1, u8 Byte2){SPI_FLASH_Write_Enable();SPI_FLASH_CS=0;SPIx_ReadWriteByte(SST25_AAI_WordProgram);SPIx_ReadWriteByte(Byte1);SPIx_ReadWriteByte(Byte2);SPI_FLASH_CS=1;SPI_Flash_Wait_Busy();if(state==1){SPI_FLASH_Write_Disable();}SPI_Flash_Wait_Busy();}//结合AB构成的地址自动增加的连续数据的写入//具有先擦除待写区域的功能//pBuffer:为待写数据组//WriteAddr:所写数据的起始地址//NumByteToWrite:所要写的数据的长度void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite){u16 i,temp;u32 secpos;u16 secoff;u16 secremain;//以下代码为擦除待写区域的代码secpos=WriteAddr/4096; //扇区(4K)地址0~511 for SST25VF016secoff=WriteAddr@96; //在扇区内的偏移secremain=4096-secoff; //扇区剩余空间大小if(NumByteToWrite<secremain) //剩余空间大于所存数据{temp=1;}else //剩余空间小于所存数据{i=NumByteToWrite-secremain; //判断还占了几个扇区if(i%96==0)temp=i/4096+1;elsetemp=i/4096+2;}for(i=0;i<temp;i++){SPI_Flash_Erase_Sector((secpos+i)*4096); //擦除将要写入数据的扇区}//以下代码为将数据写入指定地址的代码if(NumByteToWrite%2==0){temp=NumByteToWrite/2-1;}else{temp=NumByteToWrite/2;}AutoAddressIncrement_WordProgramA(pBuffer[0], pBuffer[1],WriteAddr ); //开始写数据for(i=1;i<temp;i++){AutoAddressIncrement_WordProgramB(0,pBuffer[2*i], pBuffer[2*i+1]);}if(NumByteToWrite%2==0){AutoAddressIncrement_WordProgramB(1,pBuffer[NumByteToWrite-2], pBuffer[NumByteToWrite-1]); //结束写数据}else{AutoAddressIncrement_WordProgramB(1,pBuffer[NumByteToWrite-1],0); //结束写数据}//写入1Byte数据//pBuffer:待写的数据//WriteAddr:待写数据的地址void Flash_WriteByte(u8* pBuffer,u32 WriteAddr){u32 secpos;secpos=WriteAddr/4096; //扇区地址0~511 for w25x16 4096=4k SPI_Flash_Erase_Sector(secpos); //擦除这个扇区SPI_FLASH_Write_Enable(); //SET WELSPI_FLASH_CS=0; //使能器件SPIx_ReadWriteByte(SST25_ByteProgram ); //发送写页命令//发送24bit地址SPIx_ReadWriteByte((u8)((WriteAddr)>>16));SPIx_ReadWriteByte((u8)((WriteAddr)>>8));SPIx_ReadWriteByte((u8)WriteAddr); //发送待写的数据SPIx_ReadWriteByte(pBuffer[0]);SPI_FLASH_CS=1;SPI_Flash_Wait_Busy(); //等待写完成}//擦除整个芯片//整片擦除时间://W25X16:25s//W25X32:40s//W25X64:40s//等待时间超长...void SPI_Flash_Erase_Chip(void){SPI_FLASH_Write_Enable(); //SET WELSPI_Flash_Wait_Busy();SPI_FLASH_CS=0; //使能器件SPIx_ReadWriteByte(SST25_ChipErase); //发送片擦除命令SPI_FLASH_CS=1; //取消片选SPI_Flash_Wait_Busy(); //等待芯片擦除结束}//擦除一个扇区//Dst_Addr:扇区地址0~511 for w25x16//擦除一个山区的最少时间:150msvoid SPI_Flash_Erase_Sector(u32 Dst_Addr){SPI_FLASH_Write_Enable(); //SET WELSPI_Flash_Wait_Busy();SPI_FLASH_CS=0; //使能器件SPIx_ReadWriteByte(SST25_4KByte_BlockERASE); //发送扇区擦除指令SPIx_ReadWriteByte((u8)((Dst_Addr)>>16)); //发送24bit地址SPIx_ReadWriteByte((u8)((Dst_Addr)>>8));SPIx_ReadWriteByte((u8)Dst_Addr);SPI_FLASH_CS=1; //取消片选SPI_Flash_Wait_Busy(); //等待擦除完成}//等待空闲void SPI_Flash_Wait_Busy(void){while ((SPI_Flash_ReadSR()&0x01)==0x01); // 等待BUSY位清空}void SST25V_EBSY(void){SPI_FLASH_CS=0;SPIx_ReadWriteByte( SST25_EBSY);SPI_FLASH_CS=1;}void SST25V_DBSY(void){SPI_FLASH_CS=0;SPIx_ReadWriteByte( SST25_DBSY);SPI_FLASH_CS=1;}Flash.h#ifndef __FLASH_SST_H#define __FLASH_SST_H#include "sys.h"#define SPI_FLASH_CS PAout(9) //选中FLASH#define FLASH_ID 0XBF41 //SST25VF016读写//指令表#define SST25_ReadData 0x03#define SST25_FastReadData 0x0B#define SST25_4KByte_BlockERASE 0x20#define SST25_32KByte_BlockErase 0x52#define SST25_64KByte_BlockErase 0xD8#define SST25_ChipErase 0xC7#define SST25_ByteProgram 0x02#define SST25_AAI_WordProgram 0xAD#define SST25_ReadStatusReg 0x05#define SST25_EnableWriteStatusReg 0x50#define SST25_WriteStatusReg 0x01#define SST25_WriteEnable 0x06#define SST25_WriteDisable 0x04#define SST25_ManufactDeviceID 0x90#define SST25_JedecDeviceID 0x9F#define SST25_EBSY 0x70#define SST25_DBSY 0x80void SPI_Flash_Init(void);u16 SPI_Flash_ReadID(void); //读取FLASH IDu8 SPI_Flash_ReadSR(void); //读取状态寄存器void SPI_FLASH_Write_SR(u8 sr); //写状态寄存器void SPI_FLASH_Write_Enable(void); //写使能void SPI_FLASH_Write_Disable(void); //写保护void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead); //读取flashvoid SPI_Flash_Erase_Chip(void); //整片擦除void SPI_Flash_Erase_Sector(u32 Dst_Addr); //扇区擦除void SPI_Flash_Wait_Busy(void); //等待空闲void SST25V_EBSY(void);void SST25V_DBSY(void);void Flash_WriteByte(u8* pBuffer,u32 WriteAddr); //写入1Byte数据void AutoAddressIncrement_WordProgramA(u8 Byte1, u8 Byte2, u32 Addr); //地址自动增加的写数据Avoid AutoAddressIncrement_WordProgramB(u8 state,u8 Byte1, u8 Byte2); //地址自动增加的写数据Bvoid SPI_Flash_Write(u8 pBuffer[],u32 WriteAddr,u16 NumByteToWrite); //结合AB构成的地址自动增加的连续数据的写入#endifmain.c主函数:#include<stm32f10x_lib.h>#include"common.h"#include"TFTLCD.h"#include"spi.h"#include"key.h"#include"flash.h"const u8 TEXT_Buffer[]={"Chen An SST25VF"}; //待写入flash的数据#define SIZE sizeof(TEXT_Buffer) //计算待写入数据的长度int main(void){u8 key;u8 datatemp[SIZE]; //开辟空间用于存放从flash读回的数据Stm32_Clock_Init(9); //系统时钟初始化delay_init(72); //延时函数的初始化LCD_Init(); //LCD初始化KEY_Init(); //按键初始化SPI_Flash_Init(); //SPI关于flash的硬件接口初始化POINT_COLOR=RED; //设置字体颜色while(SPI_Flash_ReadID()!=FLASH_ID) //检验flash是否存在{LCD_ShowString(60,130,"SST25VF Check Failed!");delay_ms(500);}LCD_ShowString(60,130,"SST25VF Ready!");LCD_ShowString(60,150,"KEY1:Write KEY2:Read");POINT_COLOR=BLUE;while(1){key=KEY_Scan(); //按键扫描if(key==1) //按键1按下,开始写数据到flash{LCD_Fill(0,170,239,319,WHITE);LCD_ShowString(60,170,"Start Write SST25V");SPI_Flash_Write((u8*)TEXT_Buffer,1000,SIZE); //写数据LCD_ShowString(60,170,"SST25V Write Finished");}if(key==2) //按键2按下,开始从flash读回数据{LCD_ShowString(60,170,"Start Read SST25V");SPI_Flash_Read(datatemp,1000,SIZE); //读数据LCD_ShowString(60,170,"The Data Is");LCD_ShowString(60,190,datatemp);}}}总结:1.开始的时候,读取FLASH的ID成功,我觉得芯片一切正常,但是写入数据后读回来的全是“满屏”,纠结了一天才发现原来是FLASH没有进行初始化,没有写(SPI_FLASH_Write_SR(0x02);//使能状态寄存器中的写存储器 SST25V_DBSY() )这两句导致数据无法写入FLASH。
奋斗开发板V3.1入门手册
硬件篇:
奋斗版 STM32 开发板 V3.1 板,可选配奋斗嵌入式开发工作室的 2.4 寸(240X320)TFT 显示器、3 寸(240X400)TFT 显示器,4.3 寸(480X272)TFT 显示器及 7 寸(800X480)显 示方案。外接电源都是 5V,在学习过程中,可以用所配的 USB 线通过电脑给板子提供电源。 但也有可能由于一些电脑的 USB 供电能力太弱,提供不了足够的电流,此时就需要外接 5V 电源给板子供电了,否则会造成板子工作不正常的现象。V3 板可以通过电源插座提供 5V 接 口。 请配合原理图及硬件手册来了解奋斗 STM32 开发板的详细资源。
奋斗嵌入式开发工作室
奋斗版 STM32 开发板文档
奋斗开发板配 4.3 寸 TFT 显示器: 该模块是奋斗版 STM32 开发板 V3 及 MINI 板的配套模块,采用 STM32 的 FSMC 接口模式。
SSD1963 作为控制驱动器,显示速度更快。4.3 寸屏, 分辨率 480X272, 64K 色,数据接 口 16 位, 背光驱动采用白光驱动器提供背光用的横流源, 使背光更加均匀,背光明暗控 制采用 TTL 电平或者 PWM 模式控制。屏上带电阻式触摸屏, 模块板上带 SPI 控制方式的触 摸屏控制电路。
SST25VF016驱动程序 中文注释
#include <C8051F020.H>
#include "SST25VF016B_SOFT.H"
#define uchar unsigned char
#define uint unsigned int
Auto_Add_IncA_EBSY 带EBSY的初始化Auto Address Increment(AAI)
Auto_Add_IncB_EBSY 带EBSY的Auto_Address_Increment (AAI)
Chip_Erase 擦除整个芯片
#define ulong unsigned long
uchar xdata upper_128[128]; /* 存取读到的数据,发在外部RAM中 */
/************************************************************************/
void init()
{
uchar i;
P7 |= 0x7f; /* 设置SCK为低电平初始化状态 */
for(i=255;i>0;i--);
P7 &= 0x80;
}
/***********************************************************************/
SPI0DAT =out;
while(TXBSY);
}
/************************************************************************/
SST25VF080B_中文手册_datasheet
或V
IH.
如果 CE#是在一个保持状态驱动的主动高,它重置设备的内部逻辑.只要 HOLD#信号为低,内存仍然在保持状态.要恢复与设备通信, 按住#必须积极推动高,CE#必须被驱动低电平有效.参见图 24 为保持时间
•可用的软件包
- 8 引脚 SOIC(200 密耳)
- 8 引脚 SOIC(150 密耳)
- 8 触点 WSON(6 毫米×5 毫米) - 8 引脚 PDIP(300 密耳)
产品描述
SST 公司的 25 系列串行闪存系列具有四线 SPI 兼容接口,允许低 引脚数封装占用的电路板空间,并最终降低总系统成本.该 SST25VF080B 设备加强与改进工作频率和更低的功耗, 化. SST25VF080B SPI 串行闪存采用 SST 专有的,高性生产 曼斯 CMOS SuperFlash 技术.分裂门电池设计和厚氧化物隧道注射器 实现更高的可靠性和可制造性与替代方法. 该 SST25VF080B 器件显著提高性能和可靠性,同时降低功耗 消费.该设备写(编程或擦除)与 2.7-3.6V 的单电源供电 SST25VF080B.所消耗的总能量是所施加的电压,电流和应用的时间的函数.因为对 于任何给定的电压范围, SuperFlash 技术使用较少的编程电流和有一个较短的擦除时间,在任何擦除或编程 操作消耗的总能量小于其他闪存
设备操作
该 SST25VF080B 通过 SPI(串行外设接口)总线兼容的协议来访问. SPI 总线包括四个控制线;芯片使能(CE#)用于选择该设备,数据通过串行数据输 入(SI),串行数据输出(SO)和 串行时钟(SCK)进行访问. 该 SST25VF080B 支持模式 0(0,0)和模式 3(1,1)SPI 总线操作.所不同的 在两个模式之间,如图 3 所示,是在 SCK 信号的状态时,该总线主机在 待机模式并没有数据正在传输. SCK 信号是低模式 0 和 SCK 信号为高电平模式 3. 对于这两种模式,串行数据输入( SI)进行采样,在 SCK 时钟信号和串行数据输出的上升沿(SO)后驱动在 SCK 时 钟信号的下降沿.
最新各品牌Spi Flash代换表
各品牌Spi Flash代换表64M S25FL064POXMF1001GD25Q64BFIP KH25L6406DM2I-12G MX25L6406EM2I-12G128M MX25L12845EMI-10G西师版数学五年级下册教案第一单元分数分数的意义(一)【教学内容】教科书第1~2页的例1以及相关的练习。
【教学目标】1理解分数的意义和单位“1”的含义,知道分母、分子的含义和分数各部分的名称,知道生活中分数的广泛用途,会用分数解决生活中的简单问题。
2培养学生的分析能力和归纳概括能力。
【教学过程】一、复习引入师:中秋节到了,小华家买了很多月饼,分月饼的任务当然就落到小华的身上了。
你看,小华一会儿就把这几块月饼分好了。
你能用分数分别表示这些月饼的阴影部分占一个月饼的几分之几吗?二、教学新课1教学例1,理解单位“1”师:第二天,小华的爸爸又买回一盒月饼共8个,并且提出了一个新的分月饼的要求。
黑板画图演示:爸爸对小华说:小华,你把这8个月饼平均分给4个人吧。
师:同学们,你们能用小圆代替月饼,帮小华分一分吗?等学生分好后,抽一个学生分的小圆展示。
师:这时,小华的爸爸又提出了问题。
演示:爸爸对小华说:每个人得的月饼是这8个月饼的几分之几呢?引导学生理解把8个月饼平均分成了4份,每份是这8个月饼的14。
师:老师也有个问题,刚才小华分出了1个月饼的1/4,这儿又分出了8个月饼的1/4,同学们看一看,这两个1/4表示的月饼数量一样吗?引导学生理解两个1/4代表的数量不一样。
师:为什么会出现这种现象呢?引导学生说出前一个1/4是1个月饼的1/4,而后一个1/4是8个月饼的1/4。
师:前一个1/4是以1个月饼为一个整体来平均分的,而后一个1/4是以8个月饼为一个整体来平均分的。
平均分的整体不一样,对分出来的每份数量有影响吗?让学生意识到,整体“1”的变化对每份的数量是有影响的。
以1个月饼为整体“1”,每份就是1/4个月饼;以8个月饼为整体“1”,每份就是2个月饼。
SST25VF512-20-4C-SAE;SST25VF512-20-4C-SAE-T;中文规格书,Datasheet资料
Data Sheet Features•Single2.7-3.6V Read and Write Operations •Serial Interface Architecture–SPI Compatible:Mode0and Mode3•20MHz Max Clock Frequency•Superior Reliability–Endurance:100,000Cycles(typical)–Greater than100years Data Retention•Low Power Consumption:–Active Read Current:7mA(typical)–Standby Current:8µA(typical)•Flexible Erase Capability–Uniform4KByte sectors–Uniform32KByte overlay blocks•Fast Erase and Byte-Program:–Chip-Erase Time:70ms(typical)–Sector-or Block-Erase Time:18ms(typical)–Byte-Program Time:14µs(typical)•Auto Address Increment(AAI)Programming –Decrease total chip programming time over Byte-Pro-gram operations •End-of-Write Detection–Software Status•Hold Pin(HOLD#)–Suspends a serial sequence to the memorywithout deselecting the device•Write Protection(WP#)–Enables/Disables the Lock-Down function of the statusregister•Software Write Protection–Write protection through Block-Protection bits in statusregister•Packages Available–8-lead SOIC(4.9mm x6mm)–8-contact WSON•All non-Pb(lead-free)devices are RoHS compliantSST serial flash family features a four-wire, SPI-compatible interface that allows for a low pin-count package occupying less board space and ultimately lowering total system costs. SST25VF512 SPI serial flash memory is manufactured with SST's proprietary, high-performance CMOS SuperFlash technology. The split-gate cell design and thick-oxide tunneling injector attain better reliability and man-ufacturability compared with alternate approaches.Data Sheet Product DescriptionSST’s serial flash family features a four-wire,SPI-compatible interface that allows for a low pin-countpackage occupying less board space and ultimately lowering total system costs.SST25VF512SPIserial flash memory is manufactured with SST’s proprietary,high-performance CMOS SuperFlashtechnology.The split-gate cell design and thick-oxide tunneling injector attain better reliability and man-ufacturability compared with alternate approaches.The SST25VF512device significantly improves performance,while lowering power consumption.Thetotal energy consumed is a function of the applied voltage,current,and time of application.Since forany given voltage range,the SuperFlash technology uses less current to program and has a shortererase time,the total energy consumed during any Erase or Program operation is less than alternativeflash memory technologies.The SST25VF512device operates with a single2.7-3.6V power supply.The SST25VF512device is offered in both8-lead SOIC and8-contact WSON packages.See Figure1for the pin assignments.Data Sheet Block DiagramData SheetPin DescriptionFigure 1:Pin Assignments Table 1:Pin Description12348765CE#SO WP#V SSV DD HOLD#SCK SITop View119208-soic P1.48-lead SOIC8-contact WSON12348765CE#SO WP#V SSTop ViewV DD HOLD#SCK SI119208-wson P1a.6Data Sheet Memory OrganizationThe SST25VF512SuperFlash memory array is organized in4KByte sectors with32KByte overlayblocks.Device OperationThe SST25VF512is accessed through the SPI(Serial Peripheral Interface)bus compatible protocol.The SPI bus consist of four control lines;Chip Enable(CE#)is used to select the device,and data isaccessed through the Serial Data Input(SI),Serial Data Output(SO),and Serial Clock(SCK).The SST25VF512supports both Mode0(0,0)and Mode3(1,1)of SPI bus operations.The differencebetween the two modes,as shown in Figure2,is the state of the SCK signal when the bus master is inStand-by mode and no data is being transferred.The SCK signal is low for Mode0and SCK signal ishigh for Mode3.For both modes,the Serial Data In(SI)is sampled at the rising edge of the SCK clocksignal and the Serial Data Output(SO)is driven after the falling edge of the SCK clock signal.Data SheetHold OperationHOLD#pin is used to pause a serial sequence underway with the SPI flash memory without resetting the clocking sequence.To activate the HOLD#mode,CE#must be in active low state.The HOLD#mode begins when the SCK active low state coincides with the falling edge of the HOLD#signal.The HOLD mode ends when the HOLD#signal’s rising edge coincides with the SCK active low state.If the falling edge of the HOLD#signal does not coincide with the SCK active low state,then the device enters Hold mode when the SCK next reaches the active low state.Similarly,if the rising edge of the HOLD#signal does not coincide with the SCK active low state,then the device exits in Hold mode when the SCK next reaches the active low state.See Figure 3for Hold Condition waveform.Once the device enters Hold mode,SO will be in high-impedance state while SI and SCK can be V IL or V IH .If CE#is driven active high during a Hold condition,it resets the internal logic of the device.As long as HOLD#signal is low,the memory remains in the Hold condition.To resume communication with the device,HOLD#must be driven active high,and CE#must be driven active low.See Figure 17for Hold timing.Figure 3:Hold Condition WaveformWrite ProtectionThe SST25VF512provides software Write protection.The Write Protect pin (WP#)enables or disables the lock-down function of the status register.The Block-Protection bits (BP1,BP0,and BPL)in the sta-tus register provide Write protection to the memory array and the status register.See Table 3for Block-Protection description.Write Protect Pin (WP#)The Write Protect (WP#)pin enables the lock-down function of the BPL bit (bit 7)in the status register.When WP#is driven low,the execution of the Write-Status-Register (WRSR)instruction is determined by the value of the BPL bit (see Table 2).When WP#is high,the lock-down function of the BPL bit is disabled.Table 2:Conditions to execute Write-Status-Register (WRSR)InstructionT2.025076Data Sheet Status RegisterThe software status register provides status on whether the flash memory array is available for any Read or Write operation,whether the device is Write enabled,and the state of the memory Write pro-tection.During an internal Erase or Program operation,the status register may be read only to deter-mine the completion of an operation in progress.Table4describes the function of each bit in the software status register.BusyThe Busy bit determines whether there is an internal Erase or Program operation in progress.A“1”for the Busy bit indicates the device is busy with an operation in progress.A“0”indicates the device is ready for the next valid operation.Write Enable Latch(WEL)The Write-Enable-Latch bit indicates the status of the internal memory Write Enable Latch.If the Write-Enable-Latch bit is set to“1”,it indicates the device is Write enabled.If the bit is set to“0”(reset), it indicates the device is not Write enabled and does not accept any memory Write(Program/Erase) commands.The Write-Enable-Latch bit is automatically reset under the following conditions:•Power-up•Write-Disable(WRDI)instruction completion•Byte-Program instruction completion•Auto Address Increment(AAI)programming reached its highest memory address•Sector-Erase instruction completion•Block-Erase instruction completion•Chip-Erase instruction completionBlock Protection(BP1,BP0)The Block-Protection(BP1,BP0)bits define the size of the memory area,as defined in Table3,to be software protected against any memory Write(Program or Erase)operations.The Write-Status-Regis-ter(WRSR)instruction is used to program the BP1and BP0bits as long as WP#is high or the Block-Protect-Lock(BPL)bit is0.Chip-Erase can only be executed if Block-Protection bits are both0.After power-up,BP1and BP0are set to1.Data SheetBlock Protection Lock-Down (BPL)WP#pin driven low (V IL ),enables the Block-Protection-Lock-Down (BPL)bit.When BPL is set to 1,it prevents any further alteration of the BPL,BP1,and BP0bits.When the WP#pin is driven high (V IH ),the BPL bit has no effect and its value is “Don’t Care”.After power-up,the BPL bit is reset to 0.Auto Address Increment (AAI)The Auto Address Increment Programming-Status bit provides status on whether the device is in AAI programming mode or Byte-Program mode.The default at power up is Byte-Program mode.Table 3:Software Status Register Block Protection 11.Default at power-up for BP1and BP0is ‘11’.2.Protection Level 1(1/4Memory Array)applies to Byte-Program,Sector-Erase,and Chip-Erase operations.It does not apply to Block-Erase operations.Table 4:Software Status RegisterT4.025076Data Sheet InstructionsInstructions are used to Read,Write(Erase and Program),and configure the SST25VF512.The instruction bus cycles are8bits each for commands(Op Code),data,and addresses.Prior to execut-ing any Byte-Program,Auto Address Increment(AAI)programming,Sector-Erase,Block-Erase,or Chip-Erase instructions,the Write-Enable(WREN)instruction must be executed first.The complete list of the instructions is provided in Table5.All instructions are synchronized off a high to low transition of CE#.Inputs will be accepted on the rising edge of SCK starting with the most significant bit.CE#must be driven low before an instruction is entered and must be driven high after the last bit of the instruction has been shifted in(except for Read,Read-ID and Read-Status-Register instructions).Any low to high transition on CE#,before receiving the last bit of an instruction bus cycle,will terminate the instruction in progress and return the device to the standby mode.Instruction commands(Op Code),addresses, and data are all input from the most significant bit(MSB)first.Table5:Device Operation Instructions1T5.18250761.A MS=Most Significant AddressA MS=A15for SST25VF512Address bits above the most significant bit of each density can be V IL or V IH2.One bus cycle is eight clock periods.3.Operation:S IN=Serial In,S OUT=Serial Out4.X=Dummy Input Cycles(V IL or V IH);-=Non-Applicable Cycles(Cycles are not necessary)5.Sector addresses:use A MS-A12,remaining addresses can be V IL or V IH6.Prior to any Byte-Program,AAI-Program,Sector-Erase,Block-Erase,or Chip-Erase operation,the Write-Enable(WREN)instruction must be executed.7.Block addresses for:use A MS-A15,remaining addresses can be V IL or V IH8.To continue programming to the next sequential address location,enter the8-bit command,AFH,followed by the data to be programmed.9.The Read-Status-Register is continuous with ongoing clock cycles until terminated by a low to high transition on CE#.10.The Enable-Write-Status-Register(EWSR)instruction and the Write-Status-Register(WRSR)instruction must work inconjunction of each other.The WRSR instruction must be executed immediately(very next bus cycle)after the EWSRinstruction to make both instructions effective.Data Sheet11.Manufacturer’s ID is read with A0=0,and Device ID is read with A0=1.All other address bits are00H.The Manufac-turer’s and Device ID output stream is continuous until terminated by a low to high transition on CE#12.Device ID=48H for SST25VF512ReadThe Read instruction outputs the data starting from the specified address location.The data output stream is continuous through all addresses until terminated by a low to high transition on CE#.The internal address pointer will automatically increment until the highest memory address is reached.Once the highest memory address is reached,the address pointer will automatically increment to the beginning(wrap-around)of the address space,i.e.for4Mbit density,once the data from address loca-tion7FFFFH had been read,the next output will be from address location00000H.The Read instruction is initiated by executing an8-bit command,03H,followed by address bits[A23-A0].CE#must remain active low for the duration of the Read cycle.See Figure4for the Read sequence.Figure4:Read Sequence分销商库存信息:MICROCHIPSST25VF512-20-4C-SAE SST25VF512-20-4C-SAE-T。
SST25VF064C_cn中文数据手册
• 写保护 (WP#) – 使能/ 禁止状态寄存器的锁定功能
• 软件写保护 – 通过状态寄存器中的块保护位实现写保护
• 安全 ID – 可一次性编程(One-Time Programmable,OTP) 的 256 位安全 ID - 出厂前预编程的 64 位惟一标识符 - 192 位用户可编程
© 2011 Silicon Storage Technology, Inc.
5
DS25036A_CN
10/11
A Microchip Technology Company
64 Mb SPI 串行双 I/O 闪存
SST25VF064C
数据手册
复位
如果 RST#/HOLD# 引脚用作复位引脚,则 RST# 引脚提供了复位器件的硬件方法。将 RST# 引脚驱动 为高电平可将器件置于正常工作模式。RST# 引脚必须被驱动为低电平,并持续最少 TRST 时间,才能复 位器件。器件复位时, SO 引脚处于高阻抗状态。成功的复位会将状态寄存器复位到上电状态 (BPL、 BUSY 和 WEL = 0 ; BP3、BP2、BP1 和 BP0 = 1)。有关默认上电模式,请参见表 2。在有效的编程或 擦除操作期间复位器件将中止操作,目标地址范围内的数据可能会由于擦除或编程操作中止而发生毁坏 或丢失。
• 灵活的擦除功能 – 均一 4 KB 扇区 – 均一 32 KB 覆盖块 – 均一 64 KB 覆盖块
• 快速擦除 – 全片擦除时间:35 ms (典型值) – 扇区/块擦除时间:18 ms (典型值)
• 页编程 – 每页 256 字节 – 单输入和双输入支持 – 1.5 ms (典型值)的快速页编程时间
华邦W25Q16存储器颗粒SPI编程
华邦W25Q16存储器颗粒SPI编程W25X16、W25X32 和W25X64 系列FLASH 存储器可以为用户提供存储解决方案,具有“PCB 板占用空间少”、“引脚数量少”、“功耗低”等特点。
与普通串行FLASH 相比,使用更灵活,性能更出色。
它非常适合做代码下载应用,例如存储声音,文本和数据。
工作电压在 2.7V-3.6V 之间,正常工作状态下电流消耗0.5 毫安,掉电状态下电流消耗 1 微安。
所有的封装都是"节省空间"型的。
W25X16、W25X32 和W25X64 分别有8192、16384 和32768 可编程页,每页256 字节。
用"页编程指令"每次就可以编程256个字节。
用"扇区(sector)擦除指令"每次可以擦除16 页,用“块(block)擦除指令”每次可以擦除256 页,用“整片擦除指令”即可以擦除整个芯片。
W25X16、W25X32 和W25X64 分别有512、1024 和2048 个可擦除"扇区"或32、64 和128 个可擦除“块”。
W25X16、W25X32 和W25X64 支持标准的SPI 接口,传输速率最大75MHz。
四线制:①:串行时钟引脚CLK;①:芯片选择引脚CS;①:串行数据输出引脚DO;①:串行数据输入输出引脚DIO。
(注意:第①引脚“串行数据输入输出引脚DIO”的解释:在普通情况下,这根引脚是“串行输入引脚(DI),当使用了快读双输出指令(Fast Read Dual Output instruction)时,这根引脚就变成了DO 引脚,这种情况下,芯片就有了两个DO 引脚了,所以叫做双输出,这时,如果与芯片通信的速率相当于翻了一倍,所以传输速度更快。
)另外,芯片还具有保持引脚(HOLD)、写保护引脚(WP)、可编程写保护位(位于状态寄存器bit1)、顶部和底部块的控制等特征,使得控制芯片更具灵活性。
SST25VF040B
• Serial Interface Architecture
– SPI Compatible: Mode 0 and Mode 3
• End-of-Write Detection
– Software polling the BUSY bit in Status Register – Busy Status readout on SO pin in AAI Mode
1 2
8 7
VDD HOLD# SCK SI
CE# SO WP# VSS
1
8
VDD HOLD# SCK SI
2
7
Top View
3 4 6 5
3
Top View
6
4
5
1295 08-soic S2A P1.0
1295 08-wson QA P2.0
8-Lead SOIC
8-Contact WSON
Figure 2: Pin Assignments Table 1: Pin Description
©2011 Silicon Storage Technology, Inc.
DS25051A
09/11
2
4 Mbit SPI Serial Flash
A Microchip Technology Company
SST25VF040B
Data Sheet
Block Diagram
Address Buffers and Latches
• Low Power Consumption:
– Active Read Current: 10 mA (typical) – Standby Current: 5 µA (typical)
奋斗开发板MINI入门手册
奋斗版STM32开发板MINI入门手册基础知识篇作为STM32的初学者,首先需要了解硬件资源, STM32是意法半导体推出的基于CoreTex-M3内核的32位ARM, 目前主要有5个系列、奋斗版STM32开发板的MINI及V3选用了STM32F103VET6作为开发板的MCU。
这个芯片属于STM32F103系列的高容量芯片, QFP100封装, 主要特征:64K片内SRAM 512K片内FLASH。
具有FSMC接口(并行外设外设接口,TFT模块就是通过这个连接的),SDIO 4位接口(SD 卡的专用接口,速度更高)。
之所以选用这个芯片作为开发板的MCU,主要是基于以下几点:1-------容量大,是STM32系列里,容量最大的芯片2-------体积适中 QFP100脚封装,从大型设备到手持设备都可以选用。
3-------FSMC接口 由于板上设计有TFT模块, 因此选用具有FSMC接口的芯片是必然的。
4-------SDIO接口 作为一个嵌入式的平台,大容量SD存储是必须考虑的, 可以在SD上建立文件系统及大容量文件存取。
5-------性价比高, 该芯片的批量采购价格在30元左右,渠道稳定,适合工程选用。
很多用户先前都是从51平台转过来的, 对单片机的经验还停留在51带给我们的简单易用上,51单片机的资源简单,且口线定义唯一。
相对高端的51型单片机(如SILICON C8051F系列,AVR等)可以做到一定的口线复用(就是一个口线可以具有多种复用功能),51在处理对计算速度及控制速度相对不高的应用,还是具有很好的性价比及应用性。
近几年,随着应用技术的发展, 产品对嵌入式技术要求越来越高,51单片机已经不能满足复杂嵌入式应用要求, 在ARM技术发展过程中,coretex-M3内核应运而生,它的各项能力使得它成为微控领域之王,STM32是这种内核的产物, 是目前coretex-M3内核平台里最具性价比的平台,可以预见,未来几年里,STM32会很快占据微控平台市场。
Flash ROM ST25P16中文资料
■ 闪存器可被外围带 SPI 的控制器驱动并工作在下面两种模式下: CPOL=0 , CPHA=0 CPOL=1 , CPHA=1 在这两种模式下,输入数据都是在时钟信号上升沿锁入闪存器,输出数据是利用时钟信号的下降沿输出. 这两种模式的区如图 6 所示,时钟极性是在总线控制器在标准模式下不传输数据的极性: ------- C remains at 0 for (CPOL=0,CPHA=0) ------- C remains at 0 for(CPOL=1,CPHA=0)
串行数据输入
串行数据输出
片选信号(低电平有效)
写保护(低电平有效)
锁定(低电平有效)
正电源
地
信号描述: ■ Serial Data Output(Q):这个用脚是用来输出串行数据.数据在时钟信号下降沿输出.
PDF 文件使用 "pdfFactory Pro" 试用版本创建
时: ◇ 上电重启 ◇ 写取消指令(WRDI)完成 ◇ 写状态寄存器指令(WRSR)完成 ◇ 页编程指令(PP)完成 ◇ 段擦除指令(SE)完成 ◇ 片擦除指令(BE)完成
■ 块保护位(BP2,BP1,BP0)可设置闪存器部分区域只能被读,不能写入,这就是软件保护模式(SPM) ■ 写保护信号(W)允许块保护位(BP2,BP1,BP0)和状太寄存器写保护位(SRWD)位被保护.这就是硬件保护模式(HPM). ■ 除低功耗之外,掉电模式提供了额外软件保护,此时所有的写入,编程,擦除指令都不被处理.
■ 如果锁定信号不是在时钟信为低电平时产生,锁定状态将在下一个时钟信号为低时生效.同样地如果取消锁定信号不是 在时钟信号为低时产生,锁定取消将在下一个时钟信号为低时生效.
■ 在锁定状态中,串行输出端(Q)为高阻抗,串行输入数据(D)和串行时钟信号都不被处理. ■ 通常,在整个锁定过程中都被处选中状态,即片选信号(S)为低.这是为了确保进入锁定状态的储存器内部逻辑数据不变. ■ 如果片选信号(S)在锁定过程中变为高电平,这将对闪存器内部逻辑的重新编排有影响.重启闪存器的通信,这必须使锁定信
TV160编程器 SPI FLASH编程器使用操作说明书
片)芯片和待写芯片(子片)都放好时,编程器自动检测出器件容量和读写算法,并将数
据源芯片中的数据拷贝到待写芯片。当连接到电脑读写时,请不要放数据源(母片)芯片。
5. 固件升级:用户可以从彩电维修资料网的支持网站获取最新的固件升级到编程器中。
6. 支持芯片全面:全面支持 25 系列 SPI FLASH、24 EEPROM、25 EEPROM、93 EEPROM。
3.8
AT93C86
16Kbit
1.3
写时间(秒) 1.0 3.4 1.0 10.1 11.7 6.5 9.3 29.3 0.7 6.0 3.0
校验时间(秒) 0.4 0.4 0.4 3.1 3.1 3.1 3.1 13.2 0.3 3.8 1.3
4. 免按键全自动脱机拷贝:本编程器有自动检测芯片是否放好的功能,当检测到数据源(母
母片:脱机拷贝时的数据源(内有数据)芯片。 子片:脱机拷贝时的待烧写(空芯片)芯片。 在放置芯片时注意芯片方向,请按编程器标识的方向放入。
2.1 脱机拷贝如下图连接:
芯片放 置位置
将电源通电 后,稍等,黄 灯变红灯后, 即完成复制
电源自配,只要 是 5V 的输出, 并是标准的 USB 接口即可使用, 建议选择质量好 的稳压电源
M25PX64
MXIC
MX25L512 、 MX25L1005 、 MX25L2005 、 MX25L4005 、 MX25L8005 、 MX25L1605 、 MX25L3205、MX25L6405
PMC
PM25LV512A、PM25LV010A、PM25LV020、PM25LV040、PM25LV080B、PM25LV016B
7. USB 接口供电:系统运行时总功耗不超过 100mA,一般电脑 USB 口供能能力都在 500mA 左
25系列SPI串行闪存
SOIC-8 (200 mil), WSON-8 (5x6 mm), XFBGA-8 SOIC-8 (200 mil), WSON-8 (5x6 mm) SOIC-8 (200 mil), WSON-8 (5x6 mm) SOIC-16 (300 mil), WSON-8 (6x8 mm)
AAI编程 – 可支持快速量产的自动地址递增(Auto Address Increment,AAI)功能
页模式编程(64 Mb)
经验证的技术 – 采用CMOS SuperFlash®技术,可提高数据保 存持久性和耐用性,并减少擦除时间和降低 功耗,使SST串行闪存成为便携式设计的理 想选择 – 100,000次擦/写(典型值) – 数据保存时间大于100年 – 快速扇区擦除或块擦除时间: 18 ms(典型值) – 字节编程时间:7 μs(典型值) – 读操作时的工作电流:10 mA(典型值) – 待机电流:5 μA(典型值)
*也可提供2.45-2.75V工作电压。
串行闪存,1.8V 器件 SST25WF512 SST25WF010 SST25WF020 SST25WF040 SST25WF080
密度 512 Kb (64Kx8) 1 Mb (128Kx8) 2 Mb (256Kx8) 4 Mb (512Kx8)
8 Mb (1Mx8)
Silicon Storage Technology, Inc.是Microchip Technology Inc.的全资子公司。
© 2010 Silicon Storage Technology, Inc. 版权所有。SST徽标、SST和SuperFlash均为Silicon Storage Technology, Inc.的注册商标,Z-Scale为 Silicon Storage Technology, Inc.的商标。中国印制。12/10 DS01357A_CN
SST25VF016中文资料SPI存储芯片剖析
16 Mbit SPI串行闪存SST25VF016BSST25VF016B16Mb Serial Peripheral Interface (SPI flash memory数据表特点:•单电压读写操作– 2.7-3.6V•串行接口架构– SPI兼容:模式0和模式3•高速时钟频率– 50 MHz•卓越的可靠性–耐力:100,000周期(典型值)–大于100年数据保存期•低功耗:–有效的读电流:10 mA(典型)–待机电流:5 µA(典型)•灵活的擦除功能–一样的 4 K字节部门–一样的 32 K字节块重叠–一样的 64 K字节块重叠•快速擦除和字节的程序:–芯片擦除时间:35 ms(典型)– Sector-/Block-Erase时间:18 ms(典型)–字节节目时间:7 µs(典型)•编程自动地址递增(AAI–减少了整个芯片的编程时间字节编程操作• End-of-Write检测–软件查询中状态BUSY位寄存器–忙碌状态读出的SO引脚AAI模式•保持引脚(按住#)–挂起到内存串行序列该设备没有取消选择•写保护(WP#–启用/禁用的锁断功能status 寄存器•软件写保护–通过写块保护bits在保护status 寄存器•温度范围–商业:0°C到+70°C–工业:-40°C到+85°C•封装– 8-lead SOIC (200 mils– 8-contact WSON (6mm x 5mm•所有non-Pb(无铅)设备RoHS兼容产品说明SST的25系列串行闪存系列具有四线,SPI兼容接口的低引脚数可包装占地较少的电路板空间,最终降低整体系统成本.该SST25VF016B设备加强与改进工作频率,甚至低于原SST25VFxxxA功耗设备. SST25VF016B SPI串行闪存的记忆制造的SST专有的高性能CMOS SuperFlash技术.分体式设计门电池厚氧化层隧道获得更好的可靠性和注射器可制造性与替代方法.该SST25VF016B设备显着提高perfor -曼斯和可靠性,同时降低功耗.这些器件写(编程或擦除)与单电源供应2.7-3.6V的总能量SST25VF016B.消费是一种施加电压,电流,时间的应用.因为对于任何给定的电压范围,扣除流动SuperFlash技术uses方案和有一个较短的擦除时间,总能量消耗在任何擦除或编程操作是比其他的少闪存技术.该SST25VF016B器件提供两个8-lead SOIC(200 mils和8-contact WSON (6mm x 5mm包.参见图1引脚分配.SST25VF01616 Mbit SPI串行闪存SST25VF016B数据表F UNCTIONALB 锁D IAGRAM 地址缓冲器和插销X -解码器超快闪内存Y -解码器控制逻辑I / O缓冲器和数据锁存串行接口1271 B1.0CE#SCK SI 苏WP#HOLD# SST25VF01616 Mbit SPI串行闪存SST25VF016B数据表引脚说明CE#苏WP#VSS 1287VDD HOLD#SCK SI CE#SO WP#VSS 18VDD HOLD#SCK SI 27顶视图34651271 08-soic S2A P1.03Top View6451271 08-wson QA P2.08-铅SOIC 图1: P中A SSIGNMENTS表1: P中D ESCRIPTION 符号SCK 引脚名称串行时钟函数8-联系方式WSON 为了提供了串行接口的时序.命令,地址,或输入数据锁存时钟输入的上升沿,而输出的数据移出在时钟的下降沿.串行传送到设备的命令,地址或数据.输入是锁存串行时钟的上升沿.要传输数据串行移出器件.数据被移出串行时钟的下降沿.期间闪存AAI编程输出忙状态时重新配置为RY /由#引脚.参见“硬件End-of-Write检测”页的说明12上.该装置是由一对CE#.启用CE#高向低过渡必须保持低时间序列的任何命令.写保护(WP#引脚用于状态寄存器启用/禁用BPL位.要暂时停止与SPI 闪存没有复位串行通信设备.提供电源电压:2.7-3.6V为SST25VF016BT1.0 1271SI 苏串行数据输入串行数据输出CE#WP#HOLD#V DDV SS 芯片启动写保护举行电源地面16 Mbit SPI串行闪存SST25VF016B数据表存储器组织该SST25VF016B Super闪存阵列orga-在一样的 4 K字节可擦除扇区无法识别驱动器与32 K字节覆盖块和64 K字节可擦除块覆盖.选择设备,而数据则通过串行访问数据输入(SI,串行数据输出(SO)和串行时钟(SCK.支持两种模式的SST25VF016B 0 (0,0和模式3 (1,1的SPI 总线行动.之间的差异两种模式,如图所示2,是SCK状态信号时总线主人是在待机模式并没有数据正在传输.该SCK信号是低模式0和SCK信号是这两种模式的模式3.高,串行在(SI数据进行采样,在SCK上升沿时钟信号和串行数据输出(SO)被驱动后该SCK时钟信号的下降沿.器件工作访问的SST25VF016B通过SPI(连载外设接口)总线兼容的协议.该SPI 总线包括四个控制线;芯片使能(CE#是用来CE#MODE 3MODE 3MODE 0SCKSI苏MODE 0位7位6位5位4位3位2位1位0MSB DON'T护理位7位6位5位4位3位2位1位0MSB 1271 SPIprot.0高阻抗图2: SPI PROTOCOL16 Mbit SPI串行闪存SST25VF016B数据表保持操作在按住#引脚用于暂停主管串行序列与SPI 闪存方式无需重置时钟ing序列.要启动按住#模式,必须CE#在低电平状态.该模式下按住#时开始SCK低电平状态恰逢下降沿按住#信号. HOLD模式ends时按住#信号的上升沿恰逢SCK低电平状态.如果下降沿按住#信号不重合与SCK低电平状态,然后按住该设备进入下一个模式当SCK达到低电平状态.同样,如果按住#信号的上升沿不配合SCK低电平状态,则设备在退出保持模式当SCK未来达到活跃低的状态.见图3存留条件的波形.一旦设备进入保持模式,因此将在高阻抗状态,而SI和SCK可以VILor VIH.如果CE#驱动状态保持在一个活跃的高,它重置该器件的内部逻辑.只要按住#信号低,内存仍然在保持状态.要恢复与设备通信,按住#必须被驱动积极高,CE#必须被驱动低电平有效.见图23存留时间.SCKHOLD#主动举行主动举行主动1271 HoldCond.0图3: H老C ONDITION W AVEFORM写保护SST25VF016B提供软件写保护.该写保护引脚(WP#启用或禁用锁式功能状态寄存器.块的保护bits(BP3, BP2, BP1, BP0,和BPL在寄存器亲地位随写保护的存储器阵列和状态寄存器.见表4的块保护的描述.写保护引脚(WP#写保护(WP#引脚使锁式func-tion的BPL位(在状态寄存器 7.当WP#驱动低,执行的Write-Status-Register(WRSR指令是由价值的BPL位(见表2.当WP#高,锁式func-在tion位BPL被禁用.表2: CONDITIONS要执行W 天威-S TATUS -R EGISTER (WRSR INSTRUCTIONWP#L L HBPL 10X指令执行WRSR不允许允许允许T2.0 1271SST25VF01616 Mbit SPI串行闪存SST25VF016B数据表状态寄存器软件状态寄存器状态是否提供闪存阵列可用于任何读或写oper-振动性,设备是否可写,而国内存写保护.在内部擦除或表3: SOFTWARES TATUS R EGISTER位0123456名称忙WEL BP0BP1BP2BP3AAI功能1 =内部写操作正在进行中0 =没有内部写操作正在进行中1 =装置是可写存储器0 =设备未启用内存写入说明目前的水平块写保护(见表4说明目前的水平块写保护(见表4说明目前的水平块写保护(见表4说明目前的水平块写保护(见表4编程状态自动地址递增1 = AAI编程模式0 =字节编程模式1 = BP3, BP2, BP1, BP0是只读bits0 = BP3, BP2, BP1, BP0读/写在默认上电0011100读/写R R 读/写读/写读/写读/写R程序运行后,状态寄存器可能只读到确定一中的操作完成.表3介绍了软件的每个位的功能状态寄存器.7BPL 0读/写T3.0 1271忙Busy位确定是否有内部擦除或正在进行的程序操作.为忙位“1” indi-卡特设备正在忙于工作正在进行中.阿“0”指示设备是为下一个有效运作做好准备.写使能锁存 (WEL该Write-Enable-Latch位表示将相互地位nal存储器的写使能锁存.如果Write-Enable-Latch位设置为“1”,它表明该设备是可写.如果位设置为“0”(复位),它表明该设备是不写启用,不接受任何存储器写入(程序/擦除)命令.该Write-Enable-Latch位automati -新增Cally重置在下列条件:••••上电写禁用(WRDI指令完成字节程序指令完成自动地址递增(AAI编程完成或达到最高未受保护自动地址递增(AAI自动地址增量编程状态位亲志愿组织的状态是否是编程装置AAI模式或字节的程序模式.在开机时默认的气息字节编程模式.16 Mbit SPI串行闪存SST25VF016B数据表块保护(BP3,BP2, BP1, BP0块的保护(BP3, BP2, BP1, BP0 bits定义大小的内存区域,如表4,定义为软对任何内存保护器写入(程序或删除)操作.该Write-Status-Register (WRSR指令用于程序BP3, BP2, BP1和BP0bits只要WP#只要是高或Block-Protect-Lock(BPL位0.芯片擦除只能执行,如果块保护bits都是0.上电后,BP3, BP2, BP1和BP0设置为1.块保护锁断(BPLWP#引脚驱动为低(VIL ,使块与保护锁定向下(BPL位.当BPL设置为1,它可以防止任何进一步改变了BPL, BP3, BP2, BP1,和BP0 bits.当WP#拉高(VIH ,的BPL位无效果和它的值是“Don't照顾“.上电后,该BPL位复位为0.表4: SOFTWARES TATUS R EGISTER B 锁P ROTECTIONSST25VF016B1Status 寄存器位2防护等级无上1/32上1/16上1/8上1/4上1/2所有块所有块BP3X X X X X X X XBP200001111BP100110011BP001010101受保护的内存地址16 Mbit无1F0000H-1FFFFFH 1E0000H-1FFFFFH 1C0000H-1FFFFFH 180000H-1FFFFFH 100000H-1FFFFFH 000000H-1FFFFFH 000000H-1FFFFFHT4.0 12711. X = Don't护理(储备)默认为“02.上电默认为BP2, BP1,和BP0注册是…111'.(所有块保护)16 Mbit SPI串行闪存SST25VF016B数据表说明指令用于读,写(擦除和编程),并配置SST25VF016B.指令总线周期8 bits每个命令(操作码),数据和地址.在此之前执行任何字节程序,自动地址增量(AAI编程,扇区擦除,块擦除,Write-Status-Register,或芯片擦除指令系统蒸发散的写使能(WREN)指令必须exe-cuted第一.完整的指令列表中提供表5.所有的指令都是同步掀起了前高后低过渡期CE#.将接受输入的上升沿表5: DEVICE O 只好动手术I NSTRUCTIONS指令阅读高速阅读说明读记忆体25 MHz读记忆体50 MHz操作码循环1地址循环(s)233333033000003000假的数据最大循环(s)循环(s)频率10000000000000001 to∞1 to∞000012到∞1 to∞01001 to∞3到∞0025 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHzT5.01271对SCK首先是最重要的一点. CE#必须低电平输入的指令之前,必须驱动后的指令的最后一个有点高了移入(除了阅读,Read-ID,和读地位寄存器说明).任何低到高的变化对CE#,前收到总线周期的指令的最后一位,将终止正在执行的指令,并返回设备待机模式.指令命令(操作码),地址和数据都是从最重要的输入位(MSB第一.0000 0011b (03H 0000 1011b (0BH0010 0000b (20H0101 0010b (52H 1101 1000b (D8H 0110 0000b (60H or1100 0111b (C7H 0000 0010b (02H 1010 1101b (ADH0000 0101b (05H 0000 0001b (01H0000 0110b (06H 0000 0100b (04H 1001 0000b (90Hor1010 1011b (ABH 1001 1111b (9FH 4 K字节扇区擦除3K字节的擦除4存储阵列32 K字节块擦除4块擦除32 K字节记忆体阵列64 K字节块擦除5块擦除64 K字节记忆体阵列芯片擦除字节程序AAI-Word-Program 6RDSR 7EWSR WRSR WREN WRDI RDID8JEDEC的识别码EBSY DBSY删除全部内存阵列要计划一个数据字节自动地址递增编程Read-Status-Reg ister Write-Status-Register 写使能写禁用Read-ID JEDEC的ID 阅读Enable-Write-Status-Register 0101b 0000b (50H因此,为了使输出RY /由#0111 0000b (70H在编程状态AAI所以禁用输出RY /由#1000 0000b (80H在编程状态AAI一个总线周期为八时钟周期.上述地址,每个密度最高位bits可以VIL or VIH . 4KByte扇区擦除地址:使用MS -A 12, 剩余的地址是don't的照顾,但是必须设置V要么IL or VIH. 1. 2. 3.16 Mbit SPI串行闪存SST25VF016B数据表说明指令用于读,写(擦除和编程),并配置SST25VF016B.指令总线周期8 bits每个命令(操作码),数据和地址.在此之前执行任何字节程序,自动地址增量(AAI编程,扇区擦除,块擦除,Write-Status-Register,或芯片擦除指令系统蒸发散的写使能(WREN)指令必须exe-cuted第一.完整的指令列表中提供表5.所有的指令都是同步掀起了前高后低过渡期CE#.将接受输入的上升沿表5: DEVICE O 只好动手术I NSTRUCTIONS指令阅读高速阅读说明读记忆体25 MHz读记忆体50 MHz操作码循环1地址循环(s)233333033000003000假的数据最大循环(s)循环(s)频率10000000000000001 to∞1 to∞000012到∞1 to∞01001 to∞3到∞0025 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz50 MHz对SCK首先是最重要的一点. CE#必须低电平输入的指令之前,必须驱动后的指令的最后一个有点高了移入(除了阅读,Read-ID,和读地位寄存器说明).任何低到高的变化对CE#,前收到总线周期的指令的最后一位,将终止正在执行的指令,并返回设备待机模式.指令命令(操作码),地址和数据都是从最重要的输入位(MSB第一.0000 0011b (03H 0000 1011b (0BH0010 0000b (20H0101 0010b (52H 1101 1000b (D8H 0110 0000b (60H or1100 0111b (C7H 0000 0010b (02H 1010 1101b (ADH00000101b (05H 0000 0001b (01H0000 0110b (06H 0000 0100b (04H 1001 0000b (90Hor1010 1011b (ABH 1001 1111b (9FH 4 K字节扇区擦除3K字节的擦除4存储阵列32 K字节块擦除4块擦除32 K字节记忆体阵列64 K字节块擦除5块擦除64 K字节记忆体阵列芯片擦除字节程序AAI-Word-Program 6RDSR 7EWSR WRSR WREN WRDI RDID8JEDEC的识别码EBSY DBSY删除全部内存阵列要计划一个数据字节自动地址递增编程Read-Status-Reg ister Write-Status-Register 写使能写禁用Read-ID JEDEC的ID 阅读Enable-Write-Status-Register 0101b 0000b (50H因此,为了使输出RY /由#0111 0000b (70H在编程状态AAI所以禁用输出RY /由#1000 0000b (80H在编程状态AAI一个总线周期为八时钟周期.上述地址,每个密度最高位bits可以VIL or VIH . 4KByte扇区擦除地址:使用MS -A 12, 剩余的地址是don't的照顾,但是必须设置V要么IL or VIH. 1. 2. 3.16 Mbit SPI串行闪存SST25VF016B数据表阅读(25 MHz读取指令,03H,支持高达25 MHz阅读.该设备输出的数据从指定的起始地址位置.数据输出流是连续通过所有地址,直到终止由低到高tran-sition上CE#.内部地址指针将automati -新增Cally递增,直到最高的内存地址达成协议.一旦达到最高的内存地址,地址指针将自动递增到开始(缠绕)的地址空间.一旦从地址位置数据1FFFFFH已被读取,下一个输出会从地址位置000000H.读指令启动后,执行一个8-bit com-mand, 03H,其次地址bits [A23-A 0]. CE#必须仍然在读周期中低电平有效.见图4的阅读顺序.CE#MODE 30 1 2 3 4 5 6 7 815 1623 2431 3239 40474855 5663 6470 SCKMODE 0SIMSB苏03地址.MSB高阻抗地址.地址.N D OUT MSB1271 ReadSeq.0N+1D OUT N+2D OUT N+3D OUT N+4D OUT图4: READ S EQUENCE16 Mbit SPI串行闪存SST25VF016B数据表High-Speed-Read (50 MHz该High-Speed-Read指令支援高达50 MHz读是通过执行一个8-bit启动命令,0BH, fol-钮,然后再解决bits [A23-A 0]并插入一个空字节. CE#必须保持了高速持续时间有源低读周期.参见图5的High-Speed-Read序列.经过虚拟周期,High-Speed-Read指令tion产出数据从指定地址开始位置.数据输出流是连续通过所有地址,直到终止由低到高的跳变CE#.内部地址指针会自动递增ment,直至达到最高的内存地址.一旦在达到最高的内存地址,地址指针会自动递增至开始(结束左右)的地址空间.一旦数据从地址位置1FFFFFH被读取,输出将是下一个从地址位置000000H.CE#模式3SCK模式00 1 2 3 4 5 6 7 815 1623 2431 3239 4047 4855 5663 6471 7280SIMSB苏0B 地址.MSB高阻抗地址.地址.XN D OUT MSBN+1D OUTN+2D OUTN+3D OUTN+4D OUT1271 HSRdSeq.0Note: X = Dummy Byte: 8 Clocks Input Dummy Cycle (VIL or VIH 图5: HIGH -S PEED -R EAD S EQUENCE16 Mbit SPI串行闪存SST25VF016B数据表字节程序字节程序指令计划在bits选择所需的数据字节.选定的字节必须在擦除状态(FFH是当一个程序启动运作.一个字节程序指令应用到亲tected内存区域会被忽略.在此之前的任何写操作,写使能(WREN)指令必须执行. CE#必须保持低电平在这项字节程序指令的时间.的字节程序指令启动后,执行一个8-bit com-mand, 02H,其次地址bits [A23-A 0].继地址,数据输入从MSB(位7以LSB(位0. CE#必须被驱动为高电平的指令之前执行.用户可以在软件中轮询有点忙状态寄存器或等待TBP 对于内部完成自定时字节的程序操作.参见图6字节程序序列.CE#MODE 30 1 2 3 4 5 6 7 815 1623 2431 3239SCKMODE 0SIMSB02地址.MSB地址.地址.D INMSBLSB苏高阻抗1271 ByteProg.0图6: BYTE -P ROGRAM S EQUENCE16 Mbit SPI串行闪存SST25VF016B数据表自动地址递增(AAI Word的程序该AAI程序指令允许多个字节的数据进行编程,而无需重新发出下一个顺序地址位置.此功能可以减小总方案ming时多个字节或整个存储器阵列是进行编程.一个AAI指向Word程序指令受保护的内存区域会被忽略.选定地址范围必须在擦除状态时(FFH ini-tiating一AAI Word程序操作.尽管在AAI 字编程序列,唯一有效的说明是AAI字(ADH, RDSR (05H,或WRDI (04H.用户有三种选择,以确定每个完成AAI Word程序周期:硬体读数检测串行输出,通过查询软件检测忙位在软件状态寄存器或等待TBP. 参阅尾,其中,写检测的细节部分.在此之前任何写操作,写使能(WREN)指令必须执行. Word程序的AAI教学过程是由执行一个8-bit命令,ADH,其次地址bits [A23-A 0].继地址,两个字节的数据输入顺序,每一个从MSB(比特7至LSB(0.数据的第一个字节(D0位将被编入的起始地址[A23-A 1]与A 0=0, (D1的第二个字节的数据将被编程到初始地址[A23-A 1]与A0=1. CE#必须驱动为高电平前AAI Word程序指令exe-cuted.用户必须检查进入前忙地位ing下一个有效的命令.一旦设备指示它是不再忙碌,数据在未来两个连续的地址可以编程等.当最后的希望字节已输入,检查忙碌状态使用硬件方法或RDSR指令并执行写禁用(WRDI指令,04H,终止AAI.用户必须检查后WRDI忙状态,以确定是否设备是任何命令准备.见图9和10为AAI字编程序列.期间没有AAI编程换行模式,一旦未受保护的内存地址是最高达到,设备将退出AAI操作和复位写使能,锁存位(WEL = 0和AAI位(AAI=0.End-of-Write检测有三种方法来确定一个亲完成,克周期在AAI字编程:硬件Hardware End-of-Write Detection在硬件检测方法消除了end-of-write投票开销在软件状态有点忙寄存器期间AAI Word程序操作.该8-bit命令,70H,配置串行输出(SO)引脚表明在AAI字编程闪存Busy状态.(见7图的8-bit命令,必须执行70H,之前,执行一个AAI Word的程序指令.一旦内部编程操作开始时,声称CE#将立即推动内部闪存的状态状态通过SO引脚.阿“0”表示设备正忙和“1”指示设备是为下一条指令做好准备. De-主张CE#将返回SO引脚为三态.该8-bit命令,80H,禁用串行输出(SO)忙状态输出引脚在AAI-Word-program 歌剧tion并返回SO引脚输出软件现状寄存器数据在AAI字编程. (见图8CE#MODE 30 1 2 3 4 5 6 7SCKMODE 0SIMSB70高阻抗1271 EnableSO.0苏图7: ENABLE 苏作为H ARDWARE RY/BY#期间AAI PAGC软件CE#MODE 30 1 2 3 4 5 6 7SCKMODE 0SIMSB80高阻抗苏图8: DISABLE 苏作为H16 Mbit SPI串行闪存SST25VF016B数据表CE#MODE 307 815 1623 24 31 3239 4047 4807 815 1623 2407 815 1623 240707 815 SCK SIMODE 0AD A A A D0D1AD D2D3ADD n-1Last 2Data BytesD n WRDI WDRI to exitAAI ModeRDSRLoad AAI command, Address, 2 bytes data苏2D OUTWait TBP or pollSoftware Status registerto load any commandCheck for Flash Busy Status to load next valid1commandNote:1. Valid commands during AAI programming: AAI command or WRDI command2. User must configure the SO pin to output Flash Busy status during AAI programming1271 AAI.HW.0图9:阿UTO A DDRESS I NCREMENT (AAI WORD -P ROGRAM S EQUENCE带H ARDWARE E ND -作者:-W 天威D ETECTIONWait TBP or poll Software Statusregister to load next valid1commandCE#MODE 307 815 1623 24 31 3239 4047 4807 815 1623 2407 815 1623 240707 815SCK SIMODE 0AD A A A D0D1AD D2D3AD D n-1Last 2Data BytesD n WRDI WDRI to exitAAI ModeRDSRLoad AAI command, Address, 2 bytes data苏Note:1. Valid commands during AAI programming: AAI command or WRDI command16 Mbit SPI串行闪存SST25VF016B数据表4-KByte扇区擦除该部门擦除指令清除所有选定bits 4K字节部门FFH.一个扇区的擦除指令适用于受保护的内存区域会被忽略.在此之前任何写操作时,写使能(WREN)指令必须执行. CE#必须保持低电平的持续时间任何命令序列.该部门擦除指令通过执行一个8-bit命令启动,20H,其次地址bits [A23-A 0].地址bits [AMS -A 12] (AMS = Mute重大地址)来确定该部门地址(SAX ,其余地址bits可以VIL or VIH. CE#必须被驱动为高电平的指令之前执行.用户可以WWW N在软件状态寄存器忙位轮询ter或等待TSE 为完成内部自定时扇区擦除周期.见图11该部门擦除序列.CE#MODE 30 1 2 3 4 5 6 7 815 1623 2431SCK MODE 0SI MSB 20地址.MSB地址.地址.苏高阻抗1271 SecErase.0图11: S厄克托-E RASE S EQUENCE16 Mbit SPI串行闪存SST25VF016B数据表32-KByte和64-KByte块擦除该32-KByte块擦除指令清除所有的bits选择32 K字节块FFH.一个块擦除指令适用于受保护的内存区域会被忽略.该64-KByte块擦除指令清除所有的bits选择64 K字节块FFH.一个块擦除指令适用于受保护的内存区域会被忽略.在此之前任何写操作,写使能(WREN)指令必须执行. CE#必须保持为低电平时间序列的任何命令.该32-Kbyte块ERASE指令启动后,执行一个8-bit com-mand, 52H,其次地址bits [A23-A 0].地址bits[AMS -A 15] (AMS =最密切地址)用来确定块地址(BAX ,其余地址bits可以被VIL or VIH. CE#必须被驱动为高电平的指令之前被执行.该64-Kbyte块擦除指令源创力Initi -通过执行命令ated 8-bit D8H,其次地址bits [A23-A 0].地址bits [AMS -A 15]用于确定块地址(BAX ,其余地址bits 可以被VIL or VIH. CE#必须被驱动为高电平的指令之前被执行.用户可以在软件中轮询有点忙状态寄存器或等待T是对于内部完成自定时32-KByte块擦除或64-KByte块擦除周期.见图12和13为32-KByte块擦除和64-KByte块擦除序列.CE#MODE 30 1 2 3 4 5 6 7 815 1623 2431SCK MODE 0SI MSB 52ADDR MSBADDR ADDR苏高阻抗1271 32KBklEr.0图12: 32-KBYTE B 锁-E RASE S EQUENCECE#MODE 30 1 2 3 4 5 6 7 815 1623 2431SCK MODE 0SI MSB D8ADDR MSBADDR ADDR苏高阻抗1271 63KBlkEr.0图13: 64-KBYTE B 锁-E RASE S EQUENCE16 Mbit SPI串行闪存SST25VF016B数据表芯片擦除该芯片擦除指令清除设备中所有bits到FFH.一种芯片擦除指令将被忽略,如果任何内存区域的保护.在此之前的任何写操作,写使能(WREN)指令必须执行. CE#必须保持芯片的擦除时间低电平指令序列.该芯片擦除指令启动通过执行一个8-bit命令,60H或C7H. CE#必须驱动高指令执行前.用户可以轮询在软件状态寄存器忙位或等待TCE 对于自定时内部芯片擦除完成循环.见的芯片擦除序列图14.CE#MODE 30 1 2 3 4 5 6 7SCK MODE 0SI MSB60或C7高阻抗1271 ChEr.0苏图14: C热等静压-E RASE S EQUENCERead-Status-Register (RDSR该Read-Status-Register (RDSR指令允许读ing状态寄存器.状态寄存器可阅读即使是在任何时间写(编程/擦除)操作.当一个写操作正在进行中,可能会有点忙检查前发出任何新的命令,以确保新的命令是正确接收的设备.CE#必须驱动为低电平之前RDSR指令进入并保持低电平,直到状态数据被读取.读状态寄存器是与正在进行的时钟周期持续直到它被终止由低到高的跳变的CE#.见的15指令序列图RDSR.CE#MODE 301234567891011121314 SCK SI 苏MODE 005MSB高阻抗位7位6位5位4位3位2位1位016 Mbit SPI串行闪存SST25VF016B数据表写使能(WREN)写使能(WREN)指令sets的写启用-锁存状态寄存器位1允许写入操作发生.当WREN指令必须exe-cuted之前,任何写(编程/擦除)操作.该WREN指令也可用于允许执行在Write-Status-Register (WRSR指令,但是,在状态寄存器 Write-Enable-Latch位将被清理后的CE#指令上升沿WRSR.CE#必须被驱动为高电平指令之前将WREN执行.CE#MODE 30 1 2 3 4 5 6 7SCK MODE 0SI MSB06高阻抗1271 WREN.0苏图16: W天威E NABLE (WREN位置)SEQUENCE写禁用(WRDI该写禁用(WRDI指令复位写启用锁存位和AAI位0禁用任何新的写行动的发生.该指令将不会WRDI终止正在进行的任何编程操作.任何亲克中的操作可能会持续到TBP 后执行WRDI指令. CE#必须被驱动为高电平前WRDI指令执行.CE#MODE 30 1 2 3 4 5 6 7SCK MODE 0SI MSB04高阻抗1271 WRDI.0苏图17: W天威D ISABLE (WRDI SEQUENCE16 Mbit SPI串行闪存SST25VF016B数据表Write-Status-Register (WRSR该Write-Status-Register指令写入新值在BP3, BP2, BP1, BP0,和BPL bits状态寄存器ter. CE#必须驱动为低电平之前命令WRSR指令序列的输入和驱动高前WRSR指令执行.见图18为EWSR或WREN和WRSR指令序列.执行指令将Write-Status-Register时忽略WP#低,BPL位设置为“1”.当该WP#低,BPL位只能从“0”设置为“1”到锁定状态下寄存器,但不能从“1”复位到“0”.当WP#高,锁定式功能的BPL位残疾人和BPL, BP0,和BP1和BP2在状态寄存器 bits都可以更改.只要BPL位为0或WP#拉高(VIH 前low-to-high转型期CE#针在年底WRSR指令,在状态bits 寄存器都可以改变由WRSR指令.在这种情况下,一个WRSR指令可以设置BPL位“1”锁定状态寄存器以及改变BP0, BP1,和BP2 bits 在同一时间.见表2为摘要说明WP#和BPL功能.CE#MODE 30 1 2 3 4 5 6 7MODE 3MODE 00 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15SCKMODE 0SIMSB苏50或06MSB01高阻抗状态寄存器中7 6 5 4 3 2 1 0MSB1271 EWSR.0图18: ENABLE -W 天威-S TATUS -R EGISTER (EWSR或W 天威-E NABLE (WREN位置)及W 天威-S TATUS -R EGISTER (WRSR SEQUENCE16 Mbit SPI串行闪存SST25VF016B数据表JEDEC的Read-IDJEDEC的Read-ID指令识别装置,如SST25VF016B和设备制造商为SST.信息可以读取执行8-bit命令,9FH.继JEDEC的Read-ID指令,8-bit制造商的ID, BFH,从设备输出.后这,是一个16-bit设备ID SO引脚上转移出来.字节1,BFH,标识为SST.字节2, 25H, iden-制造商tifies作为SPI串行闪存类型.字节3, 41H,标识为SST25VF016B.设备指令序列图19. JEDEC的阅读ID指令终止由低到高跳变CE#在数据输出在任何时间.如果没有其他命令执行后,发出指令的JEDEC Read-ID,进入待机前发出去一00H (NOP命令模式(CE#=VIH .CE#MODE 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34SCKMODE 0SI高阻抗9F苏BFMSBMSB25411271 JEDECID.1图19: JEDEC的READ -ID SEQUENCE 表6: JEDEC的READ -ID DATA制造商的IDBy te1BFH字节225H设备ID内存类型内存容量字节341HT6.0 127116 Mbit SPI串行闪存SST25VF016B数据表Read-ID (RDID该Read-ID指令(RDID标识的设备作为SST25VF016B和制造商这命令,SST.向后兼容所有的设备和SST25xFxxxA应作为默认设备识别当多串行闪存器件的ple SPI版本是用在设计.该设备可读取的信息从执行一8-bit命令,90H或ABH,其次地址bits[A23-A 0].继Read-ID指令,使用厂造商的ID位于地址00000H和设备ID是坐落在地址00001H.一旦设备在Read-ID模式,制造商的输出数据和设备ID过渡期补贴,地址gles之间和00000H 00001H直到端子,经过NAT由低到高的变化对CE#.参阅表6和7用于设备标识数据.CE#MODE 30 1 2 3 4 5 6 7 815 1623 2431 3239 4047 4855 5663SCKMODE 0SIMSB90或AB0000地址1MSB苏高阻抗MSBBF Device IDBF Device ID高阻抗注:制造商的和设备ID输出流是连续的,直至终止了低到高过渡CE#.。
[指南]SST25Vf010读写问题
一、经过大约3周的时间终于搞定flash芯片SST25Vf010读写问题,为了便于使用,进行了大修改,分享如下,主要函数,可以定义为SPI_Init.c,内容:#include <c 8051f020.h> // SFR declarations#include <stdio.h>#include<intrins.h>#include "model_spi.h" //自定义的头文件,包含了下列函数声明,在下面有定义void SendSPIByte(unsigned char SPI_byte){uchar SPI_count;for(SPI_count = 8;SPI_count > 0;SPI_count--){SPICLK = 0;if(SPI_byte&0x80)SPIMOSI = 1;elseSPIMOSI = 0;SPICLK = 1;SPI_byte<<=1;}}unsigned char GetSPIByte(void){uchar SPI_count;unsigned char SPI_byte;for(SPI_count = 8;SPI_count > 0;SPI_count--){SPICLK = 0;_nop_();_nop_();_nop_();_nop_();SPICLK = 1;_nop_();_nop_();_nop_();_nop_();SPI_byte<<=1;SPI_byte |= SPIMISO;_nop_();_nop_();}return SPI_byte;}unsigned char GetSPIByte2(void){uchar SPI_count;unsigned char SPI_byte;for(SPI_count = 8;SPI_count > 0;SPI_count--){SPICLK = 0;_nop_();_nop_();_nop_();_nop_();SPI_byte<<=1;SPI_byte |= SPIMISO;SPICLK = 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}return SPI_byte;}void Wait_Busy(){while ((Read_State_Register())&0x01 == 0x01);// Read_State_Register();}//读Flashvoid FlashRead(unsigned long star_addr,unsigned int len, unsigned char *buffer) //从缓冲区1的指定位置(0-263)中读入指定字节{unsigned int i;DF_CHIP_SELECT;SendSPIByte(FLASH_READ); //Flash读命令0x03SendSPIByte((unsigned char)(star_addr>>16));SendSPIByte((unsigned char)(star_addr>>8));SendSPIByte((unsigned char)star_addr);for (i=0;i<len;i++){buffer[i] = GetSPIByte(); // read data from SPI}_nop_();DF_CHIP_NOSELECT;}uchar FlashRead_BYTE(unsigned long star_addr){uchar byte;DF_CHIP_SELECT;SendSPIByte(FLASH_READ); //Flash读命令0x03SendSPIByte((unsigned char)(star_addr>>16));SendSPIByte((unsigned char)(star_addr>>8));SendSPIByte((unsigned char)star_addr);byte = GetSPIByte(); // read data from SPI _nop_();DF_CHIP_NOSELECT;return(byte);}//读状态寄存器unsigned char Read_State_Register(void){unsigned char Read_date;DF_CHIP_SELECT;_nop_();_nop_();SendSPIByte(0x05); //写使能命令Read_date = GetSPIByte();_nop_();DF_CHIP_NOSELECT;_nop_();_nop_();_nop_();_nop_();return(Read_date);}void WREN_Check(){uchar byte;byte = Read_State_Register();if ((byte&0x02) != 0x02){Write_EN();//如果未置1进行相应处理,如对其进行写使得操作}}//写使能信号void Write_EN(void) //{DF_CHIP_SELECT;_nop_();_nop_(); //80nsSendSPIByte(0x06); //写使能命令_nop_();_nop_();DF_CHIP_NOSELECT;}//写使能禁止void Write_DISABLE(void) //{ DF_CHIP_SELECT;_nop_();_nop_();SendSPIByte(0x04); //写使能禁止_nop_();DF_CHIP_NOSELECT;}//使能状态寄存器写void State_Register_WR_EN(void){DF_CHIP_SELECT;_nop_();_nop_();SendSPIByte(0x50); //写使能命令DF_CHIP_NOSELECT;}//写状态寄存器void State_Register_WR(void){DF_CHIP_SELECT;SendSPIByte(0x01); //写使能命令SendSPIByte(0x00); //State_register的内容_nop_();DF_CHIP_NOSELECT;_nop_(); _nop_();_nop_();_nop_();}//写字节到Flashvoid FlashWrite_BYTE(unsigned long start_addr, unsigned char date) //向缓冲区1的指定位置(0-263)写入指定字节{Write_EN();DF_CHIP_SELECT; // CESendSPIByte(FLASH_WRITE_BYTE);SendSPIByte((unsigned char)(start_addr>>16));SendSPIByte((unsigned char)(start_addr>>8));SendSPIByte((unsigned char)start_addr);SendSPIByte(date);DF_CHIP_NOSELECT;}//写连续字节void FlashWrite_Auto_BYTE(unsigned long start_addr, unsigned int len,unsigned char *buffer){unsigned long temp2 = 0;xdata unsigned int i = 0;temp2 = start_addr + len;for(;start_addr < temp2;start_addr ++){FlashWrite_BYTE(start_addr,buffer[i]);i++;delay(5000);}}//写连续字节到Flashvoid FlashWrite_AutoIncrement_BYTE(unsigned long start_addr, unsigned intlen,unsigned char *buffer) //向缓冲区1的指定位置(0-263)写入指定字节{char State_Register;unsigned char i;Write_EN();DF_CHIP_SELECT;_nop_();_nop_();SendSPIByte(AUTOINCREMENT_BYTE);SendSPIByte((unsigned char)(start_addr>>16));SendSPIByte((unsigned char)(start_addr>>8));SendSPIByte((unsigned char)start_addr);SendSPIByte(buffer[0]);DF_CHIP_NOSELECT;delay(5000);for (i=1;i<len;i++){DF_CHIP_SELECT;SendSPIByte(AUTOINCREMENT_BYTE);SendSPIByte(buffer[i]);DF_CHIP_NOSELECT;delay(5000);}Write_DISABLE();State_Register = Read_State_Register();// putchar(State_Register);_nop_();}//Sector_Erease 4K字节擦除void Sector_Erease(unsigned long start_addr){Write_EN();DF_CHIP_SELECT;_nop_();_nop_();SendSPIByte(SECTOR_EREASE); //写使能命令 SendSPIByte((unsigned char)(start_addr>>16));SendSPIByte((unsigned char)(start_addr>>8)); SendSPIByte((unsigned char)start_addr);_nop_();DF_CHIP_NOSELECT;_nop_();}//块擦除32K字节擦除void Block_Erease(unsigned long start_addr){// DF_RDY_BUSY; // check if flash is busyWrite_EN();DF_CHIP_SELECT;_nop_();_nop_();SendSPIByte(BLOCK_EREASE); //写使能命令 SendSPIByte((unsigned char)(start_addr>>16));SendSPIByte((unsigned char)(start_addr>>8)); SendSPIByte((unsigned char)start_addr);_nop_();DF_CHIP_NOSELECT;_nop_(); _nop_();_nop_();_nop_();}//芯片擦除void Chip_Erease(void){DF_CHIP_SELECT;Write_EN();DF_CHIP_SELECT;_nop_();_nop_();SendSPIByte(CHIP_EREASE); //写使能命令_nop_();_nop_();DF_CHIP_NOSELECT;}//芯片ID读取unsigned long Flash_Read_ID(void){unsigned long Manufact_ID1 = 0,Product_ID1 = 0,Manufact_ID2 = 0,Product_ID2 = 0; unsigned long Chip_ID;DF_CHIP_SELECT;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SendSPIByte(READ_ID); //写使能命令SendSPIByte(0x00);SendSPIByte(0x00);SendSPIByte(0x01); //0x00则先得到生厂商ID,0x01则先得到产品IDManufact_ID1 = GetSPIByte();Product_ID1 = GetSPIByte();Manufact_ID2 = GetSPIByte();Product_ID2 = GetSPIByte();DF_CHIP_NOSELECT;Chip_ID = Manufact_ID1 << 24 | Product_ID1<< 16 | Manufact_ID2 << 8 | Product_ID2; return(Chip_ID);}//系统初始化函数void SYSCLK_Init (void){hold_1();wp_1();WDTCN = 0xde; // disable watchdog timerWDTCN = 0xad;OSCXCN = 0x67;while(OSCXCN & 0x80 ==0);OSCICN |= 0x08;}//端口初始化函数void PORT_Init (void){XBR0=0x04; //spi and uart enableXBR1=0x00; //INT0 and INT1 disenableXBR2=0x46; //弱上拉要设置要不然产生不了中断。
嵌入式Linux荔枝派V3SNorFlashxt25f128bFlash使用
一、全志V3s出厂SD卡,需要增加对SPI NorFlash的支持SPI Flash 系统编译使用的是荔枝派zero上面焊接了一个芯天下的Nor Flash型号为:XT25F128B也就是16MByte。
内核:linux-zero-5.2.y1、嵌入式Linux 需要的程序⚫Uboot⚫Linux Kernel⚫Dtb设备树⚫根文件系统2、Nor Flash的支持,需要以下步骤1.配置uboot支持nor flash2.配置Linux kernel支持nor flash3.在设备树中添加nor flash的设备节点4.由于nor flash的特殊性需要选择JFFS2格式的文件系统3、Nor flash的分区XT25F128B,也就是16MByte NOR Flash作为启动介质,规划分区如下:由于内核中增加了网络驱动、音视频解码驱动,导致内核目前4.6MB左右,考虑到后期扩展,将内核分区扩大至6MB,文件系统分区缩小至8MB+960KB。
分区序号分区大小分区描述地址空间及分区名mtd0 1MB spl+uboot 0x0000000-0x0100000 : “uboot”mtd1 64KB dtb文件0x0100000-0x0110000: “dtb”mtd2 6MB linux内核0x0110000-0x0710000 : “kernel”mtd3 8MiB 960KiB 根文件系统 0x0710000-0x1000000 : “rootfs”三、编译Uboot由于目前Uboot环境变量固定存放在1MB位置之内,所有留给uboot的空间固定到flash前1MB的位置不变。
每个分区的大小必须是擦除块大小的整数倍,XT25F128B的擦除块大小是64KB。
1、下载uboot源码下载包含spi驱动的体验版本uboot,该驱动目前尚未合并到主线。
2、配置Flash支持型号执行make ARCH=arm menuconfig 打开uboot菜单配置,进入到Device Drivers ‣SPI Flash Support。
SST25VF016B
5 SI
1271 08-wson QA P2.0
8-CONTACT WSON
FIGURE 1: PIN ASSIGNMENTS
TABLE 1: PIN DESCRIPTION
Symbol SCK
Pin Name Serial Clock
SI
Serial Data Input
SO
Serial Data Output
S71271-02-000
1/06
1
The SST logo and SuperFlash are registered Trademarks of Silicon Storage Technology, Inc. These specifications are subject to change without notice.
The SST25VF016B device is offered in both 8-lead SOIC (200 mils) and 8-contact WSON (6mm x 5mm) packages. See Figure 1 for pin assignments.
©2006 Silicon Storage Technology, Inc.
CE#
WP# HOLD#
VDD VSS
Chip Enable
Write Protect Hold
Power Supply Ground
Functions To provide the timing of the serial interface. Commands, addresses, or input data are latched on the rising edge of the clock input, while output data is shifted out on the falling edge of the clock input. To transfer commands, addresses, or data serially into the device. Inputs are latched on the rising edge of the serial clock. To transfer data serially out of the device. Data is shifted out on the falling edge of the serial clock. Outputs Flash busy status during AAI Programming when reconfigured as RY/BY# pin. See “Hardware End-of-Write Detection” on page 12 for details. The device is enabled by a high to low transition on CE#. CE# must remain low for the duration of any command sequence. The Write Protect (WP#) pin is used to enable/disable BPL bit in the status register. To temporarily stop serial communication with SPI flash memory without resetting the device. To provide power supply voltage: 2.7-3.6V for SST25VF016B
SST25VF016B的FLASH根据野火及网络资料修改的基于IAR的SPI通信
0xD8 /* 扇区擦除:64K */
#define SST25VF016B_SectorErase
0x20 /* 扇区擦除:4K */
#define SST25VF016B_ChipErase
0xC7 /* 全片擦除
*/
#define SST25VF016B_DeviceID
0xAB /*读ID , 可以为0xAB 或0x90*/
#define sFLASH_ID0xBF25来自1 //SST25VF016B
#define FLASH_WriteAddress 0x00000
#define FLASH_ReadAddress FLASH_WriteAddress #define FLASH_SectorToErase FLASH_WriteAddress
Spi_flash.c
/******************************************************************************
****
* 文件名 :spi_flash.c
* 描述 :spi 底层应用函数库
* 实验平台:STM32
* 硬件连接 ----------------------------
/*!< SPI_FLASH_SPI Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
/*!< Configure SPI_FLASH_SPI pins: SCK */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x01 /* 写状态寄存器 */
#define SST25VF016B_ReadData
0x03 /* 读数据
*/
#define SST25VF016B_FastReadData
0x0B /* 快速读
*/
#define SST25VF016B_PageProgram
0x02 /* 字节编程
*/
#define SST25VF016B_BlockErase
#define sFLASH_ID
0xBF2541 //SST25VF016B
#define FLASH_WriteAddress 0x00000
#define FLASH_ReadAddress FLASH_WriteAddress #define FLASH_SectorToErase FLASH_WriteAddress
//#define SPI_FLASH_PageSize 256 //#define SPI_FLASH_PerWritePageSize 256
/* Private define ------------------------------------------------------------*/
delay_us( 200 );
/* Get SPI Flash ID */ FlashID = SPI_FLASH_ReadID(); //printf("\r\n FlashID is 0x%x, Manufacturer Device ID is 0x%x\r\n",FlashID,DeviceID); /* Check the SPI Flash ID */
0x00
#define SST25VF016B_EnableWriteStatusReg 0x50 /* 使能写状态寄存器 */
#define SST25VF016B_AutoAddIP
0xAD /* 自动地址增量编程 */
#define SST25VF016B_BlockErase32K
0x52 /* 扇区擦除:32K */
Spi_flash.c
/******************************************************************************
****
* 文件名 :spi_flash.c
* 描述 :spi 底层应用函数库
* 实验平台:STM32
* 硬件连接 ----------------------------
/*!< SPI_FLASH_SPI Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
/*!< Configure SPI_FLASH_SPI pins: SCK */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
if (FlashID == sFLASH_ID) {
/* Erase SPI FLASH Sector to write on */ SPI_FLASH_SectorErase(FLASH_SectorToErase);
/* 将发送缓冲区的数据写到flash中 */ SPI_FLASH_BufferWrite(Tx_Buffer, FLASH_WriteAddress, BufferSize);
*
* Function Name : SPI_FLASH_Init
* Description : Initializes the peripherals used by the SPI FLASH driver.
* Input
: None
* Output : None
* Return : None
*******************************************************************************
main(void) { #if 1 /* 配置串口1为:115200 8-N-1 */ //USART1_Config();
//SST25VF016B 初始化 SPI_FLASH_nit(); /* Get SPI Flash Device ID */ DeviceID = SPI_FLASH_ReadDeviceID();
#define SST25VF016B_EnableBusy
0x70 /* 打开SO忙输出指示 */
#define SST25VF016B_DisableBusy
0x80 /* 关闭SO忙输出指示 */
/******************************************************************************
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*!< Configure SPI_FLASH_SPI pins: MISO */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOA, &GPIO_InitStructure);
SPI_FLASH_SPI_MISO_GPIO, SPI_FLASH_SPI_DETECT_GPIO and SPI_FLASH_SPI_SCK_GPIO Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
实验目的:将数据写入外部FLASH中,然后再读出来 FLASH:SST25VF016B FLASH硬件接口:(其中野火的CE口为PA4,此处我的为PE6)
操作指令:
主要代码: Main.c
#include <stdio.h> #include "usart1.h" #include "spi_flash.h"
#define SST25VF016B_WriteEnable
0x06 /* 打开写使能 */
#define SST25VF016B_WriteDisable
0x04 /* 关闭写使能 */
#define SST25VF016B_ReadStatusReg
0x05 /* 读状态寄存器 */
#define SST25VF016B_WriteStatusReg
/* 将刚刚写入的数据读出来放到接收缓冲区中 */ SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize);
}// if (FlashID == sFLASH_ID) else {
} #endif }
//printf("\r\n 获取不到 SST25VF016B ID!\n\r");
/
void SPI_FLASH_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable SPI1 and GPIO clocks */ /*!< SPI_FLASH_SPI_CS_GPIO, SPI_FLASH_SPI_MOSI_GPIO,
/* Private typedef -----------------------------------------------------------*/
//使用的由256改为4096,说是4k的原因,没有深入研究 #define SPI_FLASH_PageSize 4096 #define SPI_FLASH_PerWritePageSize 4096
/*!< Configure SPI_FLASH_SPI pins: MOSI */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure);
/*!< Configure SPI_FLASH_SPI_CS_PIN pin: SPI_FLASH Card CS pin */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//看sch硬件连接信息,cs连接的是pe6 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOE, &GPIO_InitStructure);
*
----------------------------
* 库版本 :ST3.5.0
* 参考 :野火
* 作者 :Linx *******************************************************************************
***/
#include "spi_flash.h"
#define countof(a) (sizeof(a) / sizeof(*(a))) #define BufferSize (countof(Tx_Buffer)-1)
__IO uint32_t DeviceID = 0; __IO uint32_t FlashID = 0;