This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好,我刚刚学习应用msp430单片机,买了一个5529lp入门,在学习flash的时候遇到一些问题.
开发环境:硬件:msp4305529 launch pad
软件:CCS6.12
目的:想要用尽可能大的flash存储数据,写入的数据1s一次存入flash,等预先设计好的空间快满了就把所有数据读出来,然后擦除,等待重新写入
问题:1,在datasheet里面有flash的组织形式,
用户指南里说可以bank擦除,但是中断向量表(00FF80-00FFFFh)就存在bankB中,如果我要擦除整个bankB,是不是连中断向量表也一起擦除了?
2,我编译了程序之后,看生成的.map文件中,将 code memory model和data memory model选成small,
但是我看官方的程序里面说要Ensure Large memory model is selected,这个该如何设置?是不是选上use large-data memory model就可以?我选上这个之后提示我Small code model requires small data model as well. Small data model is being used.这个是冲突吗,那该如何解决呢?
3,我看到论坛里有说可以将中断向量表放到ram里,我没找到下载的地方,原来的地址已经无效了,谁能给我发一个,另外,如果放到ram里,当reset后会怎样?中断向量表还回到flash里还是ram里?如果能存到ram里,是否也能存到更低地址的flash里面呢?
谢谢
1 是的,如果你擦除Blank B ,那么中断向量也会擦掉,你所有的中断都会跑到 0xFFFF,也就是RESET,导致系统重启。
建议用Segment erase,避开中断向量这个segment.
2 Small model是指地址位是2byte,从0x0000~0xFFFF, 最大就是65kB嘛。
现在设备flash大了,地址需要扩展到3byte ,比如按你的例子, 从0x0000~0x24400,就要选large memory mode 。
如果你选了small,那么你所有的程序都将被限定在 0x4400~0xFFFF 这个区间。
数据区和程序区是同理。 看你的应用如果你想用 0x10000以上的区域存测量数据,不放程序,那么选small model是没问题的。
3 中断向量放RAM里这个不了解。。
PS , 建议你不要用MSP430 的内置Flash 来存测量数据,
1 内部flash 读写的时候,整个cpu是hand over给flash controler的,出现读写失败(比如外部电源扰动啊之类的)很容易hang up。
如果数据损坏了,你想把没损坏的数据读出来都困难。
2 建议用外部存储器,比如I2C 或者 SPI 的 EEPROM来存数据。 可靠性要高很多,而且失效时候容易抢救。
非常感谢您的回复,受益匪浅.
关于small mode的选择,是我想用bank擦除模式.现在看来不太现实,一是中断向量在这个bank中,二来程序也在这个bank中,只能bank擦除bankC和bankD了
对于存储器的选择,考虑的主要是功耗的问题,本来想程序写完了测一下功耗的,外加一个存储器的功耗总要更高一些吧~~