F28335第十六篇——Flash操作

news2025/1/14 18:19:56

文章目录

  • 前言
  • 配置方法
  • 擦除函数
  • 编写和校验函数

前言

本文主要介绍如何对DSP28335进行Flash操作。

本文主要参考资料:

  • TI.Flash2833x_API_Readme

DSP的Flash操作需要借助官方提供API。官方提供的API主要完成Flash的擦除,编写,校验三种功能。

Flash编写,只能将数据位由1变成0,而无法由0变成1。所以,在每次需要刷新程序时,需要对Flash进行先擦除,再编写。最后防止出现错误,还需要进行校验。而DSP的Flash擦除操作中,其最小的擦除单位为扇区。而编写的最小单位为字(16位)。编写操作不会改变之前已经编写过的数据位。例如,在Flash中,可以不需要擦除的情况下,将已经编写为0xFFFE的数据重写编写为0xFFFC。但是,相反的操作是不允许的。

配置方法

下面介绍如何使用Flash API。

  1. 到官网下载sprc539压缩包。

  2. 将Flash2833x_API_Library.h和Flash2833x_API_Config.h两个头文件添加到项目工程中。

  3. 添加Flash28335_API_V210.lib文件到项目中。首先,需要将lib文件添加到项目工程中。其次,需要在CCS中添加lib所在的路径。
    在这里插入图片描述

  4. 将Flash API函数复制到SARAM中。这主要有两点原因:一,Flash API需要严格的时间限制。将函数复制到SARAM中,函数调用是无延时的,能够保证函数每个步骤的时序是正确的。二,因为Flash API是用于操作Flash中的数据的。若将函数放置于Flash中,有可能在程序运行中,函数代码被修改,造成程序失控。

其具体操作如下:
在cmd文件中添加如下代码:

   /* The Flash API functions can be grouped together as shown below.
      The defined symbols _Flash28_API_LoadStart, _Flash28_API_LoadEnd
      and _Flash28_API_RunStart are used to copy the API functions out
      of flash memory and into SARAM */

   Flash28_API:
   {
        -lFlash28335_API_V210.lib(.econst) 
        -lFlash28335_API_V210.lib(.text)
   }                   LOAD = FLASHA, 
                       RUN = RAML0,  
                       LOAD_START(_Flash28_API_LoadStart),
                       LOAD_END(_Flash28_API_LoadEnd),
                       RUN_START(_Flash28_API_RunStart),
                       PAGE = 0

修改cmd文件,可以在SARAM和Flash中分配好存储程序的空间。但是,在程序下载过程中,程序数据只会烧写进Flash中。而在SARAM中,虽然分配好了存储空间,程序数据的拷贝还需要自己在代码中实现。在main函数中添加如下语句:

  MemCopy(&Flash28_API_LoadStart, &Flash28_API_LoadEnd, &Flash28_API_RunStart);

其中,Memcopy函数的定义如下:

void 
MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr)
{
    while(SourceAddr < SourceEndAddr)
    { 
        *DestAddr++ = *SourceAddr++;
    }
    return;
}

经过以上步骤的设置,Flash API就成功的添加到项目中了。但是,还是需要注意一下几点:

  1. 确保系统时钟的频率是正确的,一般设置为150M。
  2. 不要工作在limp模式中。
  3. 关闭中断和看门狗。

下面重点介绍常用函数的使用方法。

擦除函数

extern Uint16  Flash_Erase(Uint16 SectorMask, FLASH_ST *FEraseStat);

Flash_Eraseh函数用于擦除指定的扇区。

参数:

  1. SectorMask:需要被擦除的扇区。其参数在头文件中有定义,代码如下所示。选择对应的扇区,即可擦除其内容。当然可以同时选择多个扇区,主需要将他们位或即可。
#define SECTORA   (Uint16)0x0001
#define SECTORB   (Uint16)0x0002
#define SECTORC   (Uint16)0x0004
#define SECTORD   (Uint16)0x0008
#define SECTORE   (Uint16)0x0010
#define SECTORF   (Uint16)0x0020
#define SECTORG   (Uint16)0x0040
#define SECTORH   (Uint16)0x0080
#define SECTOR_F28335 (SECTORA|SECTORB|SECTORC|\
                       SECTORD|SECTORE|SECTORF|\
                       SECTORG|SECTORH)
  1. FeraseStat:为结构体。定义为:
typedef struct {
    Uint32  FirstFailAddr;//第一出错的地址
    Uint16  ExpectedData;//期望值
    Uint16  ActualData;//实际值
}FLASH_ST;

注意:
在本函数中,只有第一个成员FirstFailAddr有意义。

返回值:

返回值表示函数的状态,其具体的取值如下定义:

// Operation passed, no errors were flagged
#define STATUS_SUCCESS                        0   

// The CSM is preventing the function from performing its operation
#define STATUS_FAIL_CSM_LOCKED               10

// Device REVID does not match that required by the API
#define STATUS_FAIL_REVID_INVALID            11
    
// Invalid address passed to the API
#define STATUS_FAIL_ADDR_INVALID             12

// Incorrect PARTID
// For example the F2806 API was used on a F2808 device. 
#define STATUS_FAIL_INCORRECT_PARTID         13

// API/Silicon missmatch.  An old version of the
// API is being used on silicon it is not valid for
// Please update to the latest API. 
#define STATUS_FAIL_API_SILICON_MISMATCH     14

// ---- Erase Specific errors ---- 
#define STATUS_FAIL_NO_SECTOR_SPECIFIED      20
#define STATUS_FAIL_PRECONDITION             21
#define STATUS_FAIL_ERASE                    22
#define STATUS_FAIL_COMPACT                  23
#define STATUS_FAIL_PRECOMPACT               24

// ---- Program Specific errors ----  
#define STATUS_FAIL_PROGRAM                  30
#define STATUS_FAIL_ZERO_BIT_ERROR           31

// ---- Verify Specific errors ----
#define STATUS_FAIL_VERIFY                   40

// Busy is set by each API function before it determines
// a pass or fail condition for that operation.  
// The calling function will will not receive this 
// status condition back from the API
#define STATUS_BUSY                999    

编写和校验函数

extern Uint16  Flash_Program(Uint16 *FlashAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FProgStatus);
extern Uint16  Flash_Verify(Uint16 *StartAddr, Uint16 *BufAddr, Uint32 Length, FLASH_ST *FVerifyStat);

因为编写和校验函数使用方法基本一致,所以放置到一起讲解。编写函数就是将数据写入到Flash中,校验函数就是校验写入到Flash中的数据和预期数据是否一致。

参数:

  1. FlashAddr:16位数据地址,指向函数作用的Flash首地址。
  2. BufAddr:16为数据地址,指向将要被编写/校验数据的首地址。
  3. Length:16位数据,表示即将编写/校验数据的长度。
  4. FprogStatus:结构体,前文已经介绍。

返回值:

和前文一致,不再介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/117656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

八、Java 15 新特性

八、Java 15 新特性 JDK 15 在 2020 年 9 月 15 号正式发布了&#xff01;根据发布的规划&#xff0c;这次发布的 JDK 15 将是一个短期的过度版&#xff0c;只会被 Oracle 支持&#xff08;维护&#xff09;6 个月&#xff0c;直到明年 3 月的 JDK 16 发布此版本将停止维护。而…

VUE3-生命周期钩子《六》

目录 1.onMounted() 2.onUpdated() 生命周期的作用&#xff0c;页面加载的时候&#xff0c;主动执行某些程序。生命周期钩子有很多种&#xff0c;每一种都是有顺序的&#xff0c;如果不按照顺序执行的话&#xff0c;那么就不会触发某种效果&#xff0c;所以先要了解生命周期钩…

Java Web高级面试题(一)

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java面试题…

常用的工具网站(网址 + 效果图)

一&#xff0c;阿里图标库 https://www.iconfont.cn/?spma313x.7781069.1998910419.d4d0a486a 二&#xff0c;AI人工智能图片放大 https://bigjpg.com/zh 三&#xff0c;一个有情怀的免费PPT模板下载网站&#xff01; https://www.ypppt.com/ 四&#xff0c;照片抠图…

AOP技术

目录 一、简介 1.1、OCP原则 1.2、AOP介绍及使用场景 二、AOP在项目中的使用 2.1、集成使用 2.2、定义全局异常通知 2.3、AOP注解的含义 2.4、多个切面的执行顺序 三、通知的执行顺序&#xff08;基于spring-aop5版本&#xff09; 四、常用的四种切入点表达式 4.1、…

【技术分享】手机端代理网络共享至win电脑端

【技术分享】手机端代理网络共享至win电脑端使用前提工具准备具体步骤1. 打开并实现安卓模拟器内的vP|n2. 打开并配置安卓模拟器内的Proxy Server3. 配置win的代理4. 完成使用前提 手机端具备代理功能&#xff0c;而电脑端不具备&#xff1b;希望电脑端使用手机端的代理功能上…

嵌入式技术之IAP,自从有了它老板再也不担心我的代码了!(中)

上篇文章我们一起学习了IAP的工作原理和IAP包含的3个重要功能&#xff1a;数据交互、数据存储和程序跳转。 这3个重要功能称为“IAP的三板斧”&#xff0c;接下来我们看这三板斧具体完成哪些细节工作&#xff0c;如何实现这三板斧。 1.数据交互 数据交互的功能是IAP核心功能…

Gson解析JSON

1.介绍 Gson是Google提供的处理JSON数据的Java类库&#xff0c;主要用于转换Java对象和JSON对象。 2.依赖 <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency><groupId>com.google.code.gson</groupId><artifac…

python协程--yield和yield from

字典为动词“to yield”给出了两个释义&#xff1a;产出和让步。对于 Python 生成器中的 yield 来说&#xff0c;这两个含义都成立。yield item 这行代码会产出一个值&#xff0c;提供给 next(...) 的调用方&#xff1b;此外&#xff0c;还会作出让步&#xff0c;暂停执行生成器…

Web应用怎样获取Access Token?

1.在联盟创建服务器应用 参考文档&#xff1a;开发准备 2.获取用户级Access Token 2.1 获取code 参考文档&#xff1a;接入华为帐号获取凭证 2.1.1 先按照跳转链接进行配置url https://oauth-login.cloud.huawei.com/oauth2/v3/authorize? response_typecode& acces…

docker(七)容器监控(CAdvisor+InfluxDB+Granfana)

docker可能会运行多个容器&#xff0c;一个宿主机上有多个容器时&#xff0c;需要监控容器的&#xff1a;CPU使用率&#xff0c;内存使用率&#xff0c;网络状态&#xff0c;磁盘空间等数据。 一、docker stats docker stats命令可以监控以下数据&#xff1a; 数据是实时的&…

FFmpeg简单使用:过滤器 ---- 视频过滤2

1. 简介 FFmpeg filter提供了很多⾳视频特效处理的功能&#xff0c;⽐如视频缩放、截取、翻转、叠加等。 其中定义了很多的filter&#xff0c;例如以下常⽤的⼀些filter。 scale&#xff1a;视频/图像的缩放 overlay&#xff1a;视频/图像的叠加 crop&#xff1a;视频/图像的裁…

新建unity项目

在此处点击新项目按钮&#xff0c;建立新的项目。 选择对应的项目模板和项目名称&#xff0c;位置。 项目新建会花费几分钟到十几分钟的时间。 新建完项目打开后就可以进入到unity引擎中。 新建项目会默认创建一个场景&#xff0c;场景保存在Assets--> Scenes中&#xff0c;…

服务器,只有“鞋盒”大小

上期,我们谈到了边缘端的远中近分类法,并介绍了戴尔科技集团最新发布的“远边缘”服务器PowerEdge XR4000。今天我们来继续说说这款服务器的奥秘。      服务器,只有“鞋盒”大小      PowerEdge XR4000代表了戴尔继续致力于边缘创新的承诺,它的大小只与鞋盒差不多,是P…

Java 集合有哪些内容?

今天我们就来简单的了解下java中的集合&#xff0c;有了解过得朋友都知道&#xff0c;也都用过&#xff0c;比如说做常用的List&#xff0c;还有Set、Map&#xff0c;而且像List和Set都是用于存储单列数据的集合&#xff0c;他们的父接口都是Conllection&#xff0c;List的特点…

hyperf中的缓存之CacheEvict

在开发中难免会遇到要批量删除一些缓存&#xff0c;hyperf的注解中提供了关于缓存的几个注解如下 Cacheable 生成缓存的&#xff0c;根据你的返回值生成缓存 参数($prefix, $value, $ttl, $listener, $offset, $group, $collect) CachePut 更新缓存 参数($prefix, $value, …

MS 训练笔记【1】:nnUNet

文章目录前言1. 安装2. 训练与测试2.1. 数据处理2.1.1. 整理数据路径2.1.2. 设置 nnFormer 读取文件的路径2.1.3. 数据集预处理2.2. 训练2.2.1. 训练代码2.2. 预测总结前言 nnUNet是德国癌症研究中心的工程师编写的框架&#xff0c;迄今为止依旧在维护和更新。本文主要记载 nn…

FBX模型

概览 fbx文件&#xff0c;一般是导出给unity使用的模型文件。 如下图所示&#xff0c;建立一个models目录&#xff0c;然后右击&#xff0c;选择 imoprt new asserts 即可导入这些文件。 展示如下&#xff0c;Mesh定义了形状。 铅笔也是同理&#xff0c;只不过铅笔有自己的贴图…

尚医通-前端列表(十一)

目录&#xff1a; &#xff08;1&#xff09;搭建前端环境 &#xff08;2&#xff09;目录结构和登录改造 &#xff08;3&#xff09;医院设置前端-列表 &#xff08;1&#xff09;搭建前端环境 vue-element-admin 简介 vue-element-admin是基于element-ui 的一套后台管理系…

计算机系统基础实验 - 数的机器级表示

实验1 数的机器级表示 实验序号&#xff1a;1 实验名称&#xff1a;数的机器级表示 适用专业&#xff1a;软件工程 学时数&#xff1a;2学时 一、实验目的 1.熟练掌握无符号整数的机器级表示 2.熟练掌握有符号整数的机器级表示 3.熟练掌握浮点数的机器级表示 二、实验要求 …