FLASH算法对接

概述

FLASH算法用于下载用户镜像文件到调试目标的RAM空间,然后将需要烧写的数据放到FLASH算法中的缓冲区中,由算法负责将数据烧写到NV空间中,而算法本身是运用在调试目标RAM中的可执行程序。

算法工程创建

利用CDK创建SOC工程,在弹出新建SOC工程的窗口中选择C语言,Project Type选择Flash即可快速创建。

2、建立自己的芯片组件

3、CPU类型选择

4、链接脚本中的地址空间定义

5、printf功能移植

算法接口实现

在创建的工程里找到driver.c文件,可以发现该文件里报告如下算法接口

@brief Flash编程初始化接口,运行Flash程序,开始编程之前会执行该接口;
@return 返回0表示成功,否则失败;
int flashInit()
@brief Flash编程结束接口,CDK在Flash操作结束之后,会默认执行此接口;
@return 返回0表示成功,否则失败;
int flashUnInit()
@brief 获取Flash ID接口;
@param flashID 返回flash ID;
@return 返回0表示成功,否则失败;
int flashID(unsigned int* flashID)
@brief Flash烧写接口;
@param dst 烧写目标地址;
@param src 烧写源数据地址;
@param length 烧写源数据长度;
@return 返回0表示成功,否则失败;
int flashProgram(char* dst, char *src, int length)
@brief Flash数据读取接口;当该Flash不是直接可读的Flash属性时,CDK会调用该接口读取数据;
@param dst 读取目标地址;
@param src 数据保存地址;
@param length 读取数据长度;
@return 返回0表示成功,否则失败;
int flashRead(char* dst, char* src, int length)
@brief Flash擦除接口;用于擦除指定空间的数据;
@param dst 待擦除目标地址;该地址始终是后续FlashDev.c文件中描述的PageSize对齐的地址;
@param length 待擦除数据长度;该长度始终是后续FlashDev.c文件中描述的PageSize的倍数;
@return 返回0表示成功,否则失败;
int flashErase(char* dst, int length)
@brief Flash整片擦除接口;
@return 返回0表示成功,否则失败;
int flashChipErase()

FLASH信息描述表

在创建的工程里找到FlashDev.c文件,在该文件里实现FLASH的基本信息。

struct FlashDevice const FlashDevices INDEVSECTION = {
  FLASH_DRV_VERS,                                 // 系统保留,用户无需修改
  "mydemo",                                     // Flash 设备名称
  "ck803",                                         // CPU型号,需要使用小写字母
  0x123456,                                     // Flash ID号
  "NorFlash",                                    // Flash类型
  512*1024,                                      // 系统保留
  1,                                               // 用于表征该Flash是否直接可读;1表示直接可读,0表示需要使用drive.c文件中的flashRead接口完成读操作
  1,                                               // 表示后续Flash区间的描述块个数
  // Specify Size and Address of Sectors
  { {0x0, 0x80000, 0x2000} }            // Flash区间描述块
};

Flash区间描述块用于描述每个Flash的空间范围以及其中每个sector大小;
struct Device {
  unsigned long Start;                  // Flash起始地址
  unsigned long Length;                  // Flash长度
  unsigned long PageSize;                  // 每个sector长度
};

FLASH算法可执行文件

在创建的工程文件main.c里包含的是算法的控制逻辑,无需改动。编译通过后,可以生成FLASH算法可执行文件。

FLASH算法使用

对FLASH算法的使用可以通过CDK和FLASH PROGRAMMER。

  1. 如果通过CDK,可以通过主菜单选择Flash->Flash Management,弹窗中点击ADD按钮选择生成的算法文件,最后完成算法的添加。
  2. 如果通过FLASH PROGRAMMER,可以通过点击主菜单Advance, 在弹出的窗口里点击Browse按钮完成对flash算法文件的选择,最后完成算法的添加。

注意:用CDK编译生成的FLASH算法可执行文件在LINUX下也可以通用。

results matching ""

    No results matching ""