Msp430Flash型单片机内部Flash存储器介绍
Msp430的Flash存储器的特点有:
1)
2)
3)
4)
2 Flash存储器的分割
Msp430 Flash存储器分成多个段。可对其进行单个字节、字的写入,也可以进行连续多个字、字节的写入操作,但是最小的擦除单位是段。
Flash 存储器被分割成两部分:主存储器和信息存储器,两者在操作上没有什么区别。两部分的区别在于段的大小和物理地址的不同。
以Msp430F149为例,信息存储器有两个128字节的段,即segmentA和segmentB,主存储器有多个512字节的段。Msp430F149内部Flash的地址为0x1000H~0xFFFFH,计60K。信息段SegA的起始地址为0x1080H,信息段SegB的起始地址为0x1000H。
3 Flash存储器的操作
在默认状态下,处于读操作模式。在读操作模式中,Flash存储器不能被擦除和写入,时序发生器和电压发生被关闭,存储器操作指向ROM区。
Msp430 Flash存储器在系统编程ISP(in-system programmable)不需要额外的外部电压。CPU能够对Flash直接编程。Flash存储器的写入/擦除通过BLKWRT、WRT、MERAS、ERASE等位确定。
3.1 擦除
Flash存储器各位的缺省值为1,每一位都可以单独编程为0,但只有擦除操作才能将其恢复为1。擦除操作的最小单位是段。通过erase和meras位设置可选择3种擦除模式。
MERAS
ERASE
擦除模式
0
1
段擦除
1
0
多段擦除(所有主存储器的段)
1
1
整体擦除(LOCKA=0时,擦除所有主存储器和信息存储器的段;主存储器的段只有当LOCKA=0时可以擦除)
擦除操作开始于对擦除的地址范围内的任意位置执行一次空写入。空写入的目的是启动时序发生器和擦除操作。在空写入操作之后,BUSY位自动置位,并保持到擦除周期结束。BUSY、MERAS、ERASE在擦除周期结束后自动复位。
3.2 写入
写入模式由WRT和BLKWRT位进行设置。
BLKWRT(块写入模式选择)
WRT(写模式选择位)
写入模式
0
1
单字节、单字写入
1
1
块写入
所有的写入模式使用一系列特有的写入命令,采用块写入的速度大约是单个写入的2
倍,因为电压发生器在块写入完成器件均能保持。对于这两种写入模式,任何能修改目的操作数的指令均能用于修改地址。一个Flash字不能再擦除器件进行两次以上的写入。
当启动写入操作时,BUSY置位,写入结束时复位。
4 操作编程
4.1 Flash擦除
对Flash要写入数据,必须先擦除相应的段,且对Flash存储器的擦除必须是整段进行的,可以一段一段擦,也可以多段一起擦除。擦除操作的顺序如下:
1)
2)
3)
4)
5)
6)
7)
根据上述操作顺序,编写程序代码如下:
void FlashErase(unsigned int adr)
{
}
4.2 写入
对Flash的写入数据可以是单字、单字节,也可以是连续多个字或字节(即块操作)。编程写入操作的顺序如下:
1)
2)
3)
4)
5)
6)
7)
根据上述操作顺序,编写程序代码如下:
//write single byte
//Adr 为要编程的地址,没有奇偶地址要求、DataB为要编程的字节数据
void FlashWB(unsigned char Adr,unsigned char DataB)
{
}
//write single word
//Adr 为要编程的地址,应该是偶地址、DataW为要编程的字数据
void FlashWW(unsigned int Adr,unsigned int DataW)
{
}
void FlashWrite(uchar *pc_byte,uchar *Datain,uint count)
{
}
注意:在对字写入和字节写入的时候,用于指向信息区数据指针类型的区别,字写入时候为*((unsigned int *)Adr),字节写入时候为*((unsigned char *)Adr)。
4.3 读取
根据查看的书籍资料和网络资料得出,内部Flash的读取操作没有顺序的要求,一般Flash默认的操作方式即为读模式。读取Flash的程序代码如下:
void FlashRead(uchar *pc_byte,uchar *Dataout,uint count)
{
}
在网上查找资料的时候,好像看到过有位网友的博客说,内部Flash的地址是自动加1的,按照他的理解,函数中pc_byte++语句就没有用处了,可是事实不然,我在调试过程中,发现并不能自动加1,pc_byte++语句还是有必要的。调用上述函数,可以通过这样的方式FlashRead((uchar *)0x1000,a,4);即从0x1080地址处开始,连续读取4个字节的数据,送给数组a。
5 小结
对Msp430 片内Flash的操作是通过对3个控制字中的相应位来完成的,只有控制位的正确组合,才能实现相应的功能。
评论