历史上的今天
今天是:2025年05月07日(星期三)
2020年05月07日 | MSP430F149内部Flash操作
2020-05-07 来源:eefocus
一般,在单片机中的Flash存储器用于存放程序代码,属于只读型存储器。而在MSP430些列的单片机中,都可以通过内置的Flash控制器擦除或改写任何一段的内容。另外,msp430的单片机内部还专门留有一段Flash区域(information memory),用于存放掉电后需要永久保存的数据。利用430内部的Flash控制器,可以完成较大容量的数据记录、用户设置参数在掉电后的保存等功能。
硬件介绍:
要对Flash读写,首先要了解MSP430的存储器组织。430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间中,没有代码空间和数据空间之分。
一般430的单片机都统一编址在0-64k地址范围中,只有少数高端的型号才能突破64k(如:FG461x系列)。绝大多数的msp430单片机都编址在64kB范围内。地址的大概编码方式如下:
可以通过MERAS、ERASE 位来设置擦除的模式:段擦除,主Flash擦除,全部擦除。
对要擦除段内的一个地址空写入启动擦出周期:空写入可以启动时序发生器和擦除操作。空写入后BUSY位立即变高直到擦除周期结束,这一位变为低(0)。BUSY, MERAS和 ERASE位在擦除周期结束后会自动复位。擦除周期的时间和要擦出的Flash大小无关,每次擦除的时间对于MSP430F1xx系系列单片机来说,所需时间是一样的。擦除的时序如下:
从RAM中启动擦除操作:任意擦除周期都可以从RAM启动,这时CPU不再暂停而是继续从RAM中运行接下来的程序。CPU可以访问任何Flash地址之前,必须检查BUSY位以确定擦除周期结束。如果BUSY = 1访问Flash,这是一个访问冲突,这时ACCVIFG将被设置,而擦除的结果将是不可预测的的。
从RAM中启动擦除操作时,过程如下:
写Flash操作:写入的模式由WRT和BLKWRT位来确定:
BLKWRT WRT Write Mode 0 1 Byte/word write 1 1 Block write
这两种模式中块写入大约是字或字节写操作时的两倍快,因为在块写入完成之前,变成电压一直维持直到块写入完成。同一个位置不能在擦除周期之前写入两次或以上,否则将发生数据损坏。写操作时,BUSY位被置1,写入完成后,BUSY被自动清零。如果写操作是从RAM发起的,在BUSY=1时,程序不能访问Flash,否则会发生访问冲突,置位ACCVIFG,Flash写入操作不可以预料。
字或字节写入:字或字节写入可以从Flash内部发起,也可以从RAM中发起。如果是从Flash中启动的写操作,时序将由Flash控制,在写入完成之前CPU运行将被暂停。写入完成后CPU将继续运行。
操作时序如下:
若是从RAM中启动写Flash,程序将继续从RAM中运行。CPU再次访问Flash之前必须确认BUSY位已经清零,否则会发生访问冲突,置位ACCVIFG,写入的结果将不可预料。
字或字节写入模式下,内部产生的编程电压时适用于完整的64个字节块的写入 In byte/word mode, the internally-generated programming voltage is applied to the complete 64-byte block, each time a byte or word is written, for 32 of the 35 fFTG cycles. With each byte or word write, the amount of time the block is subjected to the programming voltage accumulates. The cumulative programming time, tCPT, must not be exceeded for any block. If the cumulative programming time is met, the block must be erased before performing any further writes to any address within the block.
从Flash发起写字节或字时:
; Byte/word write from flash. 514 kHz < SMCLK < 952 kHz ; Assumes 0FF1Eh is already erased ; Assumes ACCVIE = NMIIE = OFIE = 0.MOV #WDTPW+WDTHOLD,&WDTCTL ; Disable WDTDINT ; Disable interrupts MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2MOV #FWKEY,&FCTL3 ; Clear LOCKMOV #FWKEY+WRT,&FCTL1 ; Enable writeMOV #0123h,&0FF1Eh ; 0123h −> 0FF1EhMOV #FWKEY,&FCTL1 ; Done. Clear WRTMOV #FWKEY+LOCK,&FCTL3 ; Set LOCK... ; Re-enable WDT?EINT ; Enable interrupts
从RAM中启动写入操作时:
; Byte/word write from RAM. 514 kHz < SMCLK < 952 kHz ; Assumes 0FF1Eh is already erased ; Assumes ACCVIE = NMIIE = OFIE = 0.MOV #WDTPW+WDTHOLD,&WDTCTL ; Disable WDTDINT ; Disable interruptsL1 BIT #BUSY,&FCTL3 ; Test BUSYJNZ L1 ; Loop while busyMOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2MOV #FWKEY,&FCTL3 ; Clear LOCKMOV #FWKEY+WRT,&FCTL1 ; Enable writeMOV #0123h,&0FF1Eh ; 0123h −> 0FF1EhL2 BIT #BUSY,&FCTL3 ; Test BUSYJNZ L2 ; Loop while busyMOV #FWKEY,&FCTL1 ; Clear WRTMOV #FWKEY+LOCK,&FCTL3 ; Set LOCK... ; Re-enable WDT?EINT ; Enable interrupts
史海拾趣
|
各位英雄: 我的系统基于pxa255+wce4.2,外挂2个bank的sdram,每个bank接64M,由两片32M组成。我在eboot中为测试sdram,就分别对两个bank的地址进行读写(每个bank的低400字节),发现bank0可以正常读写,也即读写数据一致;bank1读写数据不一致, ...… 查看全部问答> |
|
核心板是在gooolgman处购得,仅上过一次点,读ID,由于导师项目临时有变,所以出掉,回收资金,继续开发!光盘资料齐全,将刻录成DVD随核心板发送。也可以提供其他6410开发板的光盘资料,详请联系。 本人平时较忙,所以若不在线请手机短信联系:13 ...… 查看全部问答> |
|
请教:板子为ARM2410,在wince下,我的应用程序一打开串口2,串口1上就会有打印信息 Data Abort: Thread=8fadf914 Proc=8e028d08 \'device.exe\' AKY=00001009 PC=024d2a30 RA=03f87e64 BVA=08000000 FSR=00000007 而且串口2不能收发数据,请问 ...… 查看全部问答> |
|
Windows硬件工程大会七折票价倒计时!通过eeworld购票可获赠全年12期程序员杂志,如此优惠,不要错过! “Windows 硬件工程大会”是微软公司面向个人电脑终端、服务器、硬件设备以及驱动程序的最具前瞻性的全球硬件技术信息盛会,在北美地区已成功举办16届,今年是首次在中国独立举办。因此,此次大会将是一场极具营养的大会。 WinHEC 会上将前瞻性全 ...… 查看全部问答> |
|
msp430f147.148.149中有没有上电自动复位功能,需要外接上电复位电路吗? 在仿真过程中,通过仿真器将程序写入片子里,拔掉仿真器有时候会遇上程序不运行情况,请问:msp430f147.148.149中有没有上电自动复位功能,需要外接上电复位电路吗?… 查看全部问答> |







