MSP432学习笔记15:FLASH片内存储的学习

今日学习使用MSP432的片内flash存储相关内容

目录

MSP432片内存储资源:

添加头文件:

 相关函数学习认识:


MSP432片内存储资源:

MSP432学习笔记15:FLASH片内存储的学习_第1张图片

现在,我们看下存储器。在 MSP432P 系列的首个器件: MSP432P41R 上,内置的存储器
Flash 容量为 256 KB 。该 Flash 的运行频率为 16MHz ,同时它还包含一个 128 位的缓冲区,并支持预取指机制,以实现执行性能的加速。
此外, MSP432P41R 还附带 64 KB SRAM 存储器。这 64 KB 存储器可划分为 8 个存储器区域,每个区域各 8 KB SARM 。如此一来,您便可分别控制每个 SRAM 区域的供电,从 而优化整个系统的功耗。
MSP432 还配有 32KB ROM ,而 ROM 中则预存储了强大的 MSP432 外设驱动库 API 。这 API 通过相互集成,可有效地减小应用的空间。同时,从 ROM 存储器取值并运算所需
的功率较低,同时它还能够提供最高 48MHz 的访问频率,因而调用存储在 ROM 中的外设
驱动库可享受到上述诸多优点。
此外, MSP432 还内置了引导加载程序(或称 BSL )。 BSL 会预编程到闪存中,但您也可选
择使用自定义的 BSL 。尽管如此,出厂 的 BSL 仍支持共计三种串行通信接口,即 UART
I2C SPI 。因此,当无法进行 JTag 访问时,还可借助该串行通信机制来进行固件的现场
更新。

MSP432学习笔记15:FLASH片内存储的学习_第2张图片

首先,我们来看一下闪存。
MSP432 所采用的闪存架构将闪存划分为两个区域。每个区域 的容量为 128KB 。同时,每个区域的闪存也被分为多个扇区,且每个扇区的大小为 4KB
如此一来,用户便可以针对每个扇区,分别控制擦除和写入操作,也可分别对每个扇区进
行保护或取消保护等操作。因此,您可以在对整个存储器执行大规模擦除操作时,轻松地
单独保护某些重要的闪存扇区。
由于闪存被划分为两个独立的区域,开发人员便可以实现两个闪存区域的交互工作,比如
对某一个区域的闪存执行读取操作时,同时对另一个区域的闪存执行擦除或者编程操作。
如此一来,用户的应用便不会在闪存的操作上浪费任何时间,可以在更新闪存内容的同时,
并行地执行代码。
如前文所述,闪存能以最高 16MHz 的速度访问。因此当系统以高于此速度的频率(最高
48MHz )运行时,便需借助缓冲器来提升闪存的有效访问速度。有鉴于此,我们实现
128 位的缓冲器,以便 CPU 将指令预取指到缓冲器中,以便实现高于 16MHz 的执行速

MSP432学习笔记15:FLASH片内存储的学习_第3张图片

MSP432 共配有 64KB RAM 存储器。 64KB RAM 会划分为八个可动态配置的 RAM 组,
每组为 8KB 内存。
对于每个 RAM 组,均提供两种面向于优化功耗的选项:
完全启用 / 禁用相关组:从而使能或者关断相关 RAM 组,以便在活跃模式下获得最
佳功耗。
保留 / 不保留相关组内容:在 LPM3 模式中,选择保留或不保留某一 RAM 组中的内
容,从而尽可能降低 SRAM 的泄漏功耗。
共计有八个 SRAM 分组可在活跃模式下处于工作状态,对于选择不保留内容的 SRAM 组,
可在活跃模式下动态的忽略内容,并在器件进入 LPM3 模式后关闭相关的 SRAM 组。如此
一来,便可降低该器件的 SRAM 泄漏功耗。最终,可显著降低器件的总功耗。

MSP432学习笔记15:FLASH片内存储的学习_第4张图片

MSP432 遵循标准的 Cortex-M 内存映射机制。首先,位于存储器首地址 ( 0x00) 的是内置的
闪存,此处包括中断向量表和用户的应用代码。继而是位于 0x01000000 地址的 ROM 存储
器,其中存有 MSP432 的外设驱动程序库(即 DriverLib )。接下来的是位于 0x2000000
址的 SRAM 存储器,该处存储器支持通过 Bit-Band 方式进行独立的位访问。接着是位于
0x40000000 地址的外部寄存器,它也支持通过 Bit-Band 方式对每个外部寄存器的每个位
进行单独访问。最后但也很重要的是,我们还配有检测和调试接口。此类寄存器位于从
0xE0000000 地址开始的内存映射末段。

 

添加头文件:

首先添加头文件以下是有关#include "flash.h"头文件的目录(以空项目工程为例):

MSP432学习笔记15:FLASH片内存储的学习_第5张图片

 在步骤三添加MSP432学习笔记15:FLASH片内存储的学习_第6张图片

 相关函数学习认识:

说明:相关函数过多,因此另起文章说明学习了:

#include "flash.h"

MSP432 #include “flash.h“ 相关函数解释学习_NULL指向我的博客-CSDN博客


1.启用闪存读取缓冲区功能。
ROM_FlashCtl_enableReadBuffering
((void (*)(uint_fast8_t memoryBank,uint_fast8_t accessMethod))ROM_FLASHCTLTABLE[2])

2.禁用闪存读取缓冲区功能。
ROM_FlashCtl_disableReadBuffering
((void (*)(uint_fast8_t memoryBank,uint_fast8_t accessMethod))ROM_FLASHCTLTABLE[3])

3.取消保护指定扇区。
ROM_FlashCtl_unprotectSector
((bool (*)(uint_fast8_t memorySpace,uint32_t sectorMask))ROM_FLASHCTLTABLE[4])

4.检查指定扇区是否受保护。
ROM_FlashCtl_isSectorProtected
((bool (*)(uint_fast8_t memorySpace, uint32_t sector))ROM_FLASHCTLTABLE[6])

5.验证指定内存地址区域的数据。
ROM_FlashCtl_verifyMemory
((bool (*)(void* verifyAddr,uint32_t length,uint_fast8_t pattern))ROM_FLASHCTLTABLE[7])

6.执行全片擦除操作。
ROM_FlashCtl_performMassErase
((bool (*)(void))ROM_FLASHCTLTABLE[8])

7.擦除指定扇区。
ROM_FlashCtl_eraseSector
((bool (*)(uint32_t addr))ROM_FLASHCTLTABLE[9])

8.将数据编程到目标内存地址中。
ROM_FlashCtl_programMemory
((bool (*)(void* src,void* dest,uint32_t length))ROM_FLASHCTLTABLE[10])

9.设置编程验证模式。
ROM_FlashCtl_setProgramVerification
((void (*)(uint32_t verificationSetting))ROM_FLASHCTLTABLE[11])

10.清除编程验证设置。
ROM_FlashCtl_clearProgramVerification
((void (*)(uint32_t verificationSetting))ROM_FLASHCTLTABLE[12])

11. 启用字编程模式。
ROM_FlashCtl_enableWordProgramming 
((void (*)(uint32_t mode))ROM_FLASHCTLTABLE[13])

12.禁用字编程模式。
ROM_FlashCtl_disableWordProgramming
((void (*)(void))ROM_FLASHCTLTABLE[14])

13.检查字编程模式是否启用。
ROM_FlashCtl_isWordProgrammingEnabled
((uint32_t (*)(void))ROM_FLASHCTLTABLE[15])

14.启用闪存控制器中断。
ROM_FlashCtl_enableInterrupt
((void (*)(uint32_t flags))ROM_FLASHCTLTABLE[16])

15.禁用闪存控制器中断。
ROM_FlashCtl_disableInterrupt
((void (*)(uint32_t flags))ROM_FLASHCTLTABLE[17])

16.获取使能的中断状态
ROM_FlashCtl_getEnabledInterruptStatus
((uint32_t (*)(void))ROM_FLASHCTLTABLE[18])

17.获取中断状态
ROM_FlashCtl_getInterruptStatus
((uint32_t (*)(void))ROM_FLASHCTLTABLE[19])

18.清除中断标志
ROM_FlashCtl_clearInterruptFlag
((void (*)(uint32_t flags))ROM_FLASHCTLTABLE[20])

19.设置等待状态
ROM_FlashCtl_setWaitState
((void (*)(uint32_t bank,uint32_t waitState))ROM_FLASHCTLTABLE[21])

20.获取等待状态
ROM_FlashCtl_getWaitState
((uint32_t (*)(uint32_t bank))ROM_FLASHCTLTABLE[22])

21.设置读取模式
ROM_FlashCtl_setReadMode
((bool (*)(uint32_t flashBank,uint32_t readMode))ROM_FLASHCTLTABLE[23])

22.获取读取模式
ROM_FlashCtl_getReadMode 
((uint32_t (*)(uint32_t flashBank))ROM_FLASHCTLTABLE[24])

23.重新屏蔽数据(8位数据,写入后)
ROM___FlashCtl_remaskData8Post
((uint8_t (*)(uint8_t data,uint32_t addr))ROM_FLASHCTLTABLE[27])

24.重新屏蔽数据(8位数据,写入前)
ROM___FlashCtl_remaskData8Pre 
((uint8_t (*)(uint8_t data,uint32_t addr))ROM_FLASHCTLTABLE[28])

25.重新屏蔽数据(32位数据,写入前)
ROM___FlashCtl_remaskData32Pre
((uint32_t (*)(uint32_t data,uint32_t addr))ROM_FLASHCTLTABLE[29])

26.重新屏蔽数据(32位数据,写入后)
ROM___FlashCtl_remaskData32Post
((uint32_t (*)(uint32_t data,uint32_t addr))ROM_FLASHCTLTABLE[30])

27.重新屏蔽批量数据(写入前)
ROM___FlashCtl_remaskBurstDataPre
((void (*)(uint32_t addr,uint32_t size))ROM_FLASHCTLTABLE[31])

28.重新屏蔽批量数据(写入后)
ROM___FlashCtl_remaskBurstDataPost
((void (*)(uint32_t addr,uint32_t size))ROM_FLASHCTLTABLE[32])

29.开始扇区擦除
ROM_FlashCtl_initiateSectorErase
((void (*)(uint32_t addr))ROM_FLASHCTLTABLE[33])

30.开始全片擦除
ROM_FlashCtl_initiateMassErase
((void (*)(void))ROM_FLASHCTLTABLE[34])

暂时先学习到这,以后有机会在学习把,浪费了俩天时间,愣是写的不成功。。。。。。

你可能感兴趣的:(MSP432学习笔记,笔记,学习,MSP432P401R,arm开发)