提供一个简单的编程 API,允许针对不同类型的存储器(例如 NOR 或 NAND FLASH 或基于 EEPROM 的存储器)定制开发编程算法。通过将编程算法和不同的程序映像与 DFUSec 工具混合作为不同的步骤,单个编程序列可以通过 USB 在单个 DFUSec 编程周期中对所有非易失性存储器和存储器区域进行编程!本节讲解创建新编程算法的过程。
编程算法是在目标硬件上运行的可执行程序,并使用 LPC18xx/43xx 的 DFU 启动功能通过 DFUSec 下载到电路板。每个编程算法都有独特的代码来处理它将要编程的内存。
要创建一个新的编程算法需要以下步骤:
dfusec_programming_api.h 头文件包含必须为 DFU 流代码驱动程序开发的函数原型和共享数据结构。该驱动程序需要一个全局函数来初始化非易失性存储器接口和设备,并准备定义非易失性设备内存区域和回调函数的数据结构。该结构提供了五个附加函数(通过间接调用),分别用于处理区域擦除、完全擦除、编程、验证和地址检查。并非所有这些函数都需要执行某些操作。
需要提供的第一个函数是 algo_flash_init() 函数。此函数由 DFU 流处理器调用,用于初始化非易失性存储设备,返回 DFU 流缓冲区的指针和大小,并返回 FLASH 配置结构和回调函数。该函数的原型如下: /* 初始化设备编程能力 */
DFUPROG_REGION_T *algo_flash_init(void **buffer,int32_t *buffer_size); style="color:rgb(100, 100, 100);font-family:Arial, sans-serif;font-size:12px"
typedef struct {
int32_t num_regions; /* 设备上的程序区域数量 */
/* 缓冲区应为 32 位对齐 */
无效*缓冲区;
/* 必须至少为 64 字节或 DFU 最大数据包大小,并且必须
是最大数据包大小的一个因子(1x、2x、3x 等)*/
uint32_t缓冲区大小;
const PROGALGOS_T *pprogalgos;
const DFUPROG_REGZONE_T *pregions; /* 地址和区域大小数组 */
} DFUPROG_REGION_T;/* 函数指针类型和函数数组 */
typedef int32_t (* progalgo_flash_erase_region) (uint32_t,uint32_t);
typedef int32_t (*progalgo_flash_erase_all) (void);
typedef int32_t (* progalgo_flash_write) (uint32_t,uint32_t);
typedef int32_t (* progalgo_flash_verify) (uint32_t,uint32_t,uint32_t);
typedef int32_t (* progalgo_verify_range) (uint32_t,uint32_t);
typedef struct {
progalgo_flash_erase_region 擦除区域;
progalgo_flash_erase_all 擦除所有;
progalgo_flash_write 写入;
progalgo_flash_verify 验证;
progalgo_verify_range vrange;
} PROGALGOS_T;/* 从 DFUSec 收到的特定步骤的编程信息 */
#定义DFUPROG_VALIDVAL 0xDB001843
typedef struct {
int32_t stepnum; /* 步数,0 - 9 */
uint32_t imagesize; /* 图像大小(以字节为单位)*/
uint32_t address; /* 开始图像编程或开始擦除的地址 */
int32_t regionsize; /* 'eraseregion' 擦除区域的大小 */
int32_t erasregion; /* 擦除区域标志,如果为 !0,则擦除区域 */
int32_t erasfulldevice; /* 如果为 !0,则擦除整个设备 */
int32_t 参数;/* 可选参数值 */
uint32_tvalidatetag;/*必须是DFUPROG_VALIDVAL的值*/
} DFUSEC_PROGINFO_T;
外部 DFUSEC_PROGINFO_T dfusec_proginfo;当前可用于构建编程算法的预配置项目仅适用于 Keil uVision4 工具链。要使用您的驱动程序构建项目,请打开一个预配置的项目,并用新的驱动程序替换 DFUSec_programming_algorithm 组下的文件。单击“build”以编译并链接图像。构建周期的最终结果将是一个带有 .bin 的二进制图像扩大。
LPC18xx/43xx DFUSec编程API工具 构建日期:2012年7月19日:15:03:24 初始化 USB 接口 初始化DFU 连接 USB 步数 = 0 图像大小 = 4724 地址 = 10080000 区域大小 = 00004000 擦除区域 = 0 擦除设备 = 0 验证标签 = db001843 程序周期完成
准备与 DFUSec 工具一起使用的编程算法的最后一步是将启动头附加到上一步生成的二进制文件中。DFUSec 工具无法直接启动二进制文件,需要此标头。
要生成标题,请运行 DFUSec 工具并单击 HDR/RAW 模式选项卡。对于二进制框,选择.bin要为其创建标题的文件。
然后点击“生成带头的二进制文件”按钮,生成一个新文件。将在与 .bin 相同的目录中创建一个新文件.hdr 文件扩大。
这个 .hdr文件是您的编程算法文件,应与 DFUSec 的程序模式选项卡中的 Algo 框一起使用。