精华内容
下载资源
问答
  • flash读写

    2019-07-31 10:39:33
    读写内部flash 单片机是32的,对于32位单片机系统来说,一个字是4个字节的,8位的比如51单片机系统一个字就是2位的,64位单片机系统一个字就是8个字节,脱离单片机系统说字是多少个字节是没意义的。所以这里写入/...

    读写内部flash

            单片机是32的,对于32位单片机系统来说,一个字是4个字节的,8位的比如51单片机系统一个字就是2位的,64位单片机系统一个字就是8个字节,脱离单片机系统说字是多少个字节是没意义的。所以这里写入/读出半字也就是一次写入2个字节,写完/读出一次地址会加2。

    展开全文
  • Flash读写

    2020-06-12 14:54:46
    FLASH简单的读、写操作 主存储器是以页为单位划分的。stm32根据FLASH主存储块容量、页面的不同,系统存储器的不同,分为小容量、中容量、大容量、互联型,共四类产品。 主存储块用于保存具体的程序代码和用户...

    FLASH简单的读、写操作

    主存储器是以页为单位划分的。stm32根据FLASH主存储块容量、页面的不同,系统存储器的不同,分为小容量、中容量、大容量、互联型,共四类产品。

    在这里插入图片描述

    • 主存储块用于保存具体的程序代码和用户数据。起始地址0x08000000,b0和b1接GND从这里开始执行程序。
    • 信息块用于负责由stm32出厂时放置2KB的启动程序(BootLoader)和512B的用户配置信息区。启动程序代码,是用来存储 ST 自带的启动程序,b0接3.3v,b1接GND运行的就是这部分代码 ,用作串口下载代码。
    • 闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪存模块的控制机构 。在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理 。

    操作流程(详见STM32F1 开发指南(精英板-库函数版) )

    1. 检查 FLASH_CR 的 LOCK 是否解锁,如果没有则先解锁
    2. 检查 FLASH_SR 寄存器的 BSY 位,以确认没有其他正在进行的闪存操作
    3. 设置 FLASH_CR 寄存器的 PER 位为’ 1’
    4. 用 FLASH_AR 寄存器选择要擦除的页
    5. 设置 FLASH_CR 寄存器的 STRT 位为’ 1’
    6. 等待 BSY 位变为’ 0’
    7. 读出被擦除的页并做验证

    库函数级的操作流程

    1. 确定要写入Flash的首地址(稍后介绍确定地址的方法)
    2. 解锁Flash
    3. 对Flash进行操作(写入数据)
    4. 对Flash重新上锁

    要想选定安全的Flash地址进行读写,可以根据自己的STM32 MCU型号,查找数据手册,确定FLASH的地址区段,因为起始段会存储代码,所以一定要避开起始段,以避免数据错误。(我一般是根据Flash大小计算Flash的最末尾地址,往前推一段地址空间,在这里一般不会对代码中的数据产生覆盖等影响)这里采用的是STM32F103(大容量产品)写入的首地址为0x0807F800;

    • 添加STM32 flash底层固件库文件stm32f10x_flash.c

    编写自己的Flash驱动库文件,如下

    Flash.h
    #ifndef __FLASH_H
    #define __FLASH_H 			   
    #include "sys.h"
     
    
    void FLASH_W(u32 add,u16 dat);
    u16 FLASH_R(u32 add);
    
    #endif
    
    Flash.c
    #include "flash.h"
    
    //FLASH写入数据
    void FLASH_W(u32 add,u16 dat){ //参数1:32位FLASH地址。参数2:16位数据
    //	 RCC_HSICmd(ENABLE); //打开HSI时钟
    	 FLASH_Unlock();  //解锁FLASH编程擦除控制器
         FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
         FLASH_ErasePage(add);     //擦除指定地址页
         FLASH_ProgramHalfWord(add,dat); //从指定页的addr地址开始写
         FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
         FLASH_Lock();    //锁定FLASH编程擦除控制器
    }
    
    //FLASH读出数据
    u16 FLASH_R(u32 add){ //参数1:32位读出FLASH地址。返回值:16位数据
    	u16 a;
        a = *(u16*)(add);//从指定页的addr地址开始读
    return a;
    }
    
    main.c
    #include "stm32f10x.h" //STM32头文件
    #include "sys.h"
    #include "delay.h"
    #include "led.h"
    #include "key.h" 
    
    #include "flash.h" 
    
    #define FLASH_START_ADDR  0x0807F800	  //写入的起始地址
    
    
    int main (void){//主程序
    	u8 key;
    	u16 a; //定义变量
    	//初始化程序
    	RCC_Configuration(); //时钟设置
    	LED_Init();//LED初始化
    	KEY_Init();//按键初始化
    
      a = FLASH_R(FLASH_START_ADDR);//从指定页的地址读FLASH
    
    	//GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)
    
    	//主循环
    	while(1){
    		key = KEY_Scan(0);
    		if(key == WK_UP_PRES){
    				a++;
    				if(a>1)a=0;
    				FLASH_W(FLASH_START_ADDR,a);
    		}else{
    				delay_ms(10);
    		}
    		LED0=a;
    		
        }
    }
    

    Flash操作注意事项:

    1. 操作一定要先擦后写
    2. 每页是1024个地址,起始地址0x08000000
    3. 擦除操作以页为单位,写操作必须以16位宽度为单位,允许跨页写入。
    4. STM32内置Flash擦或写时,必须打开外部/内部高速振荡器。
    5. Flash可最多擦写10万次,不可死循环擦写。
    6. 擦写时要避开用户程序存储的区域,否则会擦掉用户程序导致错误。
    7. 擦除一页要10ms(对于1k大小的一页),比较慢,而且不能单个字节的擦写。
    展开全文
  • flash读写对象

    2018-05-23 10:31:34
    flash读写代码类,希望可以帮助到您们
  • fpga_flash读写驱动

    2021-01-19 10:20:58
    fpga_flash读写驱动
  • STM32F1 内部flash读写

    2018-06-11 20:17:05
    STM32F1 内部flash读写 STM32F1 内部flash读写 STM32F1 内部flash读写
  • STM32 Flash读写程序

    2020-11-27 00:00:38
    STM32学习笔记:FLASH读写 https://blog.csdn.net/thebestleo/article/details/109761000
  • FLASH 读写控制

    2011-10-21 08:45:15
    flash读写控制 这里通过实现一个简单的功能来验证FPGA对FLASH的读写控制
  • flash读写代码

    2012-12-06 07:07:28
    flash读写代码也不用初始化,拿来直接就用。哈哈
  • CC2530的FLASH读写程序

    2017-10-09 15:21:04
    CC2530的FLASH读写程序,是用SPI的flash.CC2530的FLASH读写程序,是用SPI的flash.
  • nand_Flash读写擦除数据

    2019-02-01 16:38:03
    nand_Flash读写擦除数据
  • nand flash 读写

    2011-04-12 12:43:46
    关于nand flash读写的一些基本操作
  • dsp 6416 flash 读写

    2013-09-08 23:00:54
    ti dsp 6416 flash读写工程
  • Flash读写xml

    2019-08-12 16:26:46
    一、Flash读写xml 1、版本是:air的,代码是as3 2、资源使用 3、xml文件设置 注意: 1、数量要少于下面的坐标数量 2、写入后,系统默认的xml阅读器看这个文件分行是乱的,我这个notepad++是按照顺序排列的...

    目录

     一、目的

    1、想:在flash中写xml文件

    二、参考

    1、

    三、操作:Flash读写xml

    1、版本是:air的,代码是as3

    2、资源使用

    3、xml文件设置

    4、代码


     

     一、目的

    1、想:在flash中写xml文件

     

    二、参考

    1、

     

    三、操作:Flash读写xml

    1、版本是:air的,代码是as3

    2、资源使用

    3、xml文件设置

    注意:

    1、数量要少于下面的坐标数量

    2、写入后,系统默认的xml阅读器看这个文件分行是乱的,我使用notepad++查看xml文件时候是按照顺序排列的

    3、在里面注释没有用,写入后注释都没有了

    4、xml文件只能是和flash一个路径,不能是上一层或者下一层距离

    5、此项目只能从flash中运行,exe、swf都运行不了

    4、代码

    import flash.events.KeyboardEvent;
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.display.StageDisplayState;
    
    //此全屏模式可以按键输入
    this.stage.displayState=StageDisplayState.FULL_SCREEN_INTERACTIVE;
    
    //xml信息
    var myXML:XML = new XML  ;
    var myXMLURL:URLRequest = new URLRequest("config_flash.xml");
    var myLoader:URLLoader = new URLLoader(myXMLURL);
    var fs:FileStream;
    var file:File;
    var xmlPath:String;
    myLoader.addEventListener(Event.COMPLETE, LoadPos);
    
    
    //读写的物体位置
    var InsectNum:int = 0;
    var Insect:Array = new Array();
    var PosX:Array = new Array();
    var PosY:Array = new Array();
    var CurrentIns:int = 0;
    
    Init();
    
    function Init()
    {
    	stage.addEventListener(KeyboardEvent.KEY_DOWN,Down);
    }
    
    function LoadPos(e:Event):void
    {
    	myXML = XML(myLoader.data);
    	InsectNum = myXML.num;
    	AddInsect();
    }
    function AddInsect():void
    {
    	for (var i:int = 0; i<InsectNum; i++)
    	{
    		var Pos:Object = myXML.pos[i];
    		PosX[i] = int(Pos. @ x);
    		PosY[i] = int(Pos. @ y);
    		var aa:YaChong = new YaChong();
    		Insect.push(aa);
    		Insect[i].rect.visible = false;
    	}
    	addChild(Insect[0]);
    	Insect[0].x = PosX[0];
    	Insect[0].y = PosY[0];
    	Insect[CurrentIns].rect.visible = true;
    }
    
    function Down(e:KeyboardEvent):void
    {
    	switch (e.keyCode)
    	{
    		case 37 :
    			Insect[CurrentIns].x--;
    			break;
    		case 38 :
    			Insect[CurrentIns].y--;
    			break;
    		case 39 :
    			Insect[CurrentIns].x++;
    			break;
    		case 40 :
    			Insect[CurrentIns].y++;
    			break;
    		case 83 :
    			if (CurrentIns < InsectNum)
    			{
    				SaveXML();
    			}
    
    			break;
    		case 90 :
    			if (CurrentIns > 0)
    			{
    				Insect[CurrentIns].rect.visible = false;
    				CurrentIns--;
    				Insect[CurrentIns].rect.visible = true;
    			}
    			break;
    		case 88 :
    			if (CurrentIns<InsectNum-1)
    			{
    				Insect[CurrentIns].rect.visible = false;
    				CurrentIns++;
    				Insect[CurrentIns].rect.visible = true;
    			}
    			break;
    
    	}
    }
    
    
    function SaveXML():void
    {
    	xmlPath = "config_flash.xml";
    	fs = new FileStream  ;//使用 FileStream 对象读取和写入文件
    	file = new File(File.applicationDirectory.resolvePath(xmlPath).nativePath);
    	fs.open(file,FileMode.READ);//以同步方式打开 FileStream 对象,指向由 file 参数指定的文件。
    	var _xml:XML = XML(fs.readUTFBytes(fs.bytesAvailable)); //获取xml内容
    	PosX[CurrentIns] = Insect[CurrentIns].x;
    	PosY[CurrentIns] = Insect[CurrentIns].y;
    	_xml.pos[CurrentIns]. @ x = PosX[CurrentIns].toString();
    	_xml.pos[CurrentIns]. @ y = PosY[CurrentIns].toString();
    	fs.open(file,FileMode.WRITE);//重新以写方式打开文件,目的在于清除原有的内容
    	fs.writeUTFBytes(_xml); //写入修改过后的XML
    	fs.close();
    	if (CurrentIns<InsectNum-1)
    	{
    		Insect[CurrentIns].rect.visible = false;
    		CurrentIns++;
    		addChild(Insect[CurrentIns]);
    		Insect[CurrentIns].x = PosX[CurrentIns];
    		Insect[CurrentIns].y = PosY[CurrentIns];
    		Insect[CurrentIns].rect.visible = true;
    	}
    
    }

     

    展开全文
  • flash读写汇编程序

    2012-11-17 10:58:21
    flash读写程序,从片内读到flash
  • 本文主要是关于NOR Flash的相关介绍,并着重对NOR Flash读写原理及驱动进行了详尽的阐述。NOR FlashNOR Flash是现在市场上两种主要的非易失闪存技术之一。Intel于1988年首先开发出NOR Flash 技术,彻底改变了原先由...

    本文主要是关于NOR Flash的相关介绍,并着重对NOR Flash读写原理及驱动进行了详尽的阐述。

    NOR Flash

    NOR Flash是现在市场上两种主要的非易失闪存技术之一。Intel于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Erasable Programmable Read-Only-Memory电可编程序只读存储器)和EEPROM(电可擦只读存储器Electrically Erasable Programmable Read - Only Memory)一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash 结构,强调降低每比特的成本,有更高的性能,并且像磁盘一样可以通过接口轻松升级。NOR Flash 的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能。NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于Flash的管理需要特殊的系统接口。通常读取NOR的速度比NAND稍快一些,而NAND的写入速度比NOR快很多,在设计中应该考虑这些情况。——《ARM嵌入式Linux系统开发从入门到精通》 李亚峰 欧文盛 等编著 清华大学出版社 P52 注释 API Key

    性能比较

    flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。

    由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。

    执行擦除时块尺寸的不同进一步拉大了NOR和NAND之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。

    l 、NOR的读速度比NAND稍快一些。

    2、 NAND的写入速度比NOR快很多。

    3 、NAND的4ms擦除速度远比NOR的5s快。

    4 、大多数写入操作需要先进行擦除操作。

    5 、NAND的擦除单元更小,相应的擦除电路更少。

    详解

    NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。

    像“flash存储器”经常可以与相“NOR存储器”互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。

    NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。

    NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理需要特殊的系统接口。

    接口差别

    NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。

    NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。

    NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。

    容量成本编辑

    NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。

    NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC(多媒体存储卡Multi Media Card)存储卡市场上所占份额最大。

    可靠耐用

    采用flash介质时一个需要重点考虑的问题是可靠性。对于需要扩展MTBF(平均故障间隔时间Mean Time Between Failures)的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。

    寿命(耐用性)

    在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸为NOR器件的八分之一,每个NAND存储器块在给定的时间内的删除次数要少一些。

    NOR Flash读写原理及驱动

    一。原理

    从原理图中我们能看到NOR FLASH有地址线,有数据线,能向内存一样读,不能向内存一样写(要发出某些命令)。这也使得NOR的数据非常可靠,所以一般用来存储bootloader。当然现在手机上都只有nand flash了,节约成本嘛。下节我会带大家去分析nand flash驱动,并进行总结。

    二。驱动程序

    /*

    * 参考 drivers\mtd\maps\physmap.c

    */

    #include 《linux/module.h》

    #include 《linux/types.h》

    #include 《linux/kernel.h》

    #include 《linux/init.h》

    #include 《linux/slab.h》

    #include 《linux/device.h》

    #include 《linux/platform_device.h》

    #include 《linux/mtd/mtd.h》

    #include 《linux/mtd/map.h》

    #include 《linux/mtd/partitions.h》

    #include 《asm/io.h》

    static struct map_info *s3c_nor_map;

    static struct mtd_info *s3c_nor_mtd;

    /*分区数组*/

    static struct mtd_partition s3c_nor_parts[] = {

    [0] = {

    .name = “bootloader_nor”,

    .size = 0x00040000,

    .offset = 0,

    },

    [1] = {

    .name = “root_nor”,

    .offset = MTDPART_OFS_APPEND, //紧接着上一个

    .size = MTDPART_SIZ_FULL, //到最后

    }

    };

    static int s3c_nor_init(void) //入口函数

    {

    /* 1. 分配map_info结构体 */

    s3c_nor_map = kzalloc(sizeof(struct map_info), GFP_KERNEL);;

    /* 2. 设置: 物理基地址(phys), 大小(size), 位宽(bankwidth), 虚拟基地址(virt) */

    s3c_nor_map-》name = “s3c_nor”;

    s3c_nor_map-》phys = 0; //物理地址

    s3c_nor_map-》size = 0x1000000; /* 》= NOR的真正大小 */

    s3c_nor_map-》bankwidth = 2; //位宽

    s3c_nor_map-》virt = ioremap(s3c_nor_map-》phys, s3c_nor_map-》size); //虚拟地址

    simple_map_init(s3c_nor_map); //简单初始化

    /* 3. 使用: 调用NOR FLASH协议层提供的函数来识别 */

    printk(“use cfi_probe\n”);

    s3c_nor_mtd = do_map_probe(“cfi_probe”, s3c_nor_map);

    /*如果没识别就用jedec*/

    if (!s3c_nor_mtd)

    {

    printk(“use jedec_probe\n”);

    s3c_nor_mtd = do_map_probe(“jedec_probe”, s3c_nor_map);

    }

    /*如果仍然没事别就释放掉,返回错误*/

    if (!s3c_nor_mtd)

    {

    iounmap(s3c_nor_map-》virt);

    kfree(s3c_nor_map);

    return -EIO;

    }

    /* 4. add_mtd_partitions (添加分区)*/

    add_mtd_partitions(s3c_nor_mtd, s3c_nor_parts, 2);

    return 0;

    }

    static void s3c_nor_exit(void) //出口函数

    {

    del_mtd_partitions(s3c_nor_mtd);

    iounmap(s3c_nor_map-》virt);

    kfree(s3c_nor_map);

    }

    module_init(s3c_nor_init);

    module_exit(s3c_nor_exit);

    MODULE_LICENSE(“GPL”);

    三。驱动分析

    1. 分配map_info结构体

    2. 设置: 物理基地址(phys), 大小(size), 位宽(bankwidth), 虚拟基地址(virt)

    3. 使用: 调用NOR FLASH协议层提供的函数来识别

    4. add_mtd_partitions (添加分区)

    其实我们的这个驱动,主要把硬件上的差异性写出来就可以了,大部分的工作内核已经帮我们做了。现在我主要来分析第三步。cfi和jedec,这里主要分析cfi

    /*NOR FLASH识别过程*/

    do_map_probe(“cfi_probe”, s3c_nor_map);

    drv = get_mtd_chip_driver(name)

    ret = drv-》probe(map); // cfi_probe.c

    cfi_probe

    mtd_do_chip_probe(map, &cfi_chip_probe);

    cfi = genprobe_ident_chips(map, cp);

    genprobe_new_chip(map, cp, &cfi)

    cp-》probe_chip(map, 0, NULL, cfi)

    cfi_probe_chip

    // 进入CFI模式

    cfi_send_gen_cmd(0x98, 0x55, base, map, cfi, cfi-》device_type, NULL);

    // 看是否能读出“QRY”

    qry_present(map,base,cfi)

    我们进行的操作其实在协议层已经帮我们写好了,我们需要提供的其实就是硬件上的差异。因为所有的nor都是支持这套协议的。

    结语

    关于NOR Flash的相关介绍就到这了,如有不足之处欢迎指正。

    展开全文
  • Flash读写基础教程

    2013-08-24 23:52:28
    Flash读写基础教程,适合于新手打好基本功
  • MPC5744P内部Flash读写

    2018-12-24 13:42:40
    MPC5744P内部Flash读写示例,具体说明参考文章:https://blog.csdn.net/u010875635/article/details/85232221
  • 本文给大家分享了msp430F149单片机的flash读写程序。
  • c8t6_flash读写操作.zip

    2021-02-19 21:44:18
    cubeMX+keil5开发,flash读写操作完整工程,包括cubeMX的工程,keil5 工程。
  • SPI_FLASH读写程序

    2014-09-21 17:31:14
    基于VHDL的SPI_Flash读写程序
  • W25Q128 Flash读写

    2015-08-14 12:45:29
    W25Q128 Flash 读写,调试过,修改对应管脚可直接使用!
  • S32K_144 NorFlash读写

    2018-12-12 14:00:58
    S32K144 自身NorFlash读写,在NXP官方编译器S32 Design Studio for ARM Version 2018.R1(需要打补丁跟新到 RTM2.0版SDK)直接编译。 可直接在单片机Norflash上连续读写。
  • nrf51822 CPU片内FLASH读写操作说明,擦除,读写,中文翻译资料,带源代码说明,资料非常详细,学习资料。
  • MSP430G2553 FLASH读写

    2015-10-14 10:41:54
    MSP430G2553 FLASH读写操作
  • uboot支持nandflash读写

    2013-05-03 11:37:37
    uboot支持nandflash读写,支持nandflash启动
  • STM32内部Flash读写问题

    千次阅读 多人点赞 2020-07-18 11:54:07
    STM32Flash读写之Flash调试技巧 文章目录先熟悉所用MCU的Flash存储大小以及扇区地址Flsah写之前为什么要先擦除Flash擦除长时间占用CPU实测Flash擦写占用的时间Flash读写要注意几点keil的.map文件中包含了什么操作...
  • 本程序为德州仪器cc2530在模拟spi下驱动 w25x16 flash读写,可以向指定地址写入指定数据,还包括页写页擦除等

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,217
精华内容 1,686
关键字:

flash读写