如何创建一个Flash算法文件 | 《平头哥剑池CDK快速上手指南》第三章

简介: CDK支持Flash烧写功能,为了能够适配不同的Flash器件的编程逻辑,CDK允许开发人员通过Flash算法文件的适配,实现Flash器件的编程,从而实现对某个芯片平台的Flash烧写。

CDK支持Flash烧写功能,为了能够适配不同的Flash器件的编程逻辑,CDK允许开发人员通过Flash算法文件的适配,实现Flash器件的编程,从而实现对某个芯片平台的Flash烧写。

关于Flash算法文件的内容,可以参考《Flash算法的开发和使用》视频教程进行详细了解。

2.1 配置算法初始信息

要在CDK中制作一个特定芯片的方案,需要通过New SOC Project创建一个Flash类型的CDK工程。

image.png

此时Project Type选为Flash,并在RAM1中填写SmartL的RAM区域。CPU和对应SDK的CPU要完全一致。
完成工程创建以后,工程视图显示内容如下:

image.png

FlashDev.c文件用来对算法基本信息进行描述。

/**
 * structure to describe flash device
 */
struct FlashDevice const FlashDevices  INDEVSECTION =  {
    6,                      // Reserved version description, do not modify!!!
    "SmartL_Flash",              // Flash name
    "ck802",              // CPU name, must in low case
    0x123456,               // Flash ID
    "NorFlash",             // type
    512*1024,               // Reserved
    1,                      // Access directly
    1,                      // RangeNumbers
    // {start address, the flash size, sector size}
    {{0x0, 0x80000, 0x200}}
};

将默认的内容修改为SmartL硬件信息相匹配即可。

2.2 实现算法接口

Driver.c文件用来实现算法逻辑,针对具体的硬件信息,实现对应的接口。

image.png
image.png
image.png

2.3 调试算法逻辑

main.c文件是算法工程的主控逻辑,main函数完成此功能。


it main() {
    // call nor flash drivers to program
    g_error = flashInit();
    // for debug flash driver
    flashTest();
    do {
        __bkpt_label();
        switch (g_func) {
        case 0:
            g_error = flashID(&g_flashID);
            break;
        case 1:
            g_error = flashProgram((char *) g_dstAddress, (char *) g_rwBuffer,
                    g_length);
            break;
        case 2:
            g_error = flashRead((char *) g_rwBuffer, (char *) g_dstAddress,
                    g_length);
            break;
        case 3:
            g_error = flashErase((char *) g_dstAddress, g_length);
            break;
        case 4:
            g_error = flashChipErase();
            break;
        case 5:
            g_error = flashUnInit();
            break;
        case 6:
            g_error = flashChecksum((char*)g_dstAddress, g_length, g_checksum);
            break;
        default:
            break;
        }
    } while (1);
}

CDK通过下载次算法工程到芯片RAM的g_rwBuffer[]数组中,然后通过控制g_func,g_dstAddress,g_length,g_checksum这些全局变量,实现对特定Flash器件的编程功能。这里需要调试算法文件,就是模拟整个烧写的过程,将每个函数调试通过即可。
为了能够更方便的调试算法文件,右击算法工程,在Compiler配置中,修改Optimization修改为 -O0 ,然后再次编译算法工程。

image.png

双击工程视图的算法工程节点,设置为active project,然后点击调试按钮,启动调试,运行到main函数以后,全速运行,发现算法文件停止在__bkpt_label函数处。

image.png

然后,我们这里根据调试需求,设置相应的全局变量,进行验证。
例如,这里我们调试flashProgram接口的正确性,首先在CDK Watch界面将g_func设置为1,g_dstAddress设置为要进行编程的Flash区域的地址,g_length设置为要烧写的数据长度,g_rwBuffer设置为具体的烧写数据内容,一般来说,对于调试,g_length数据量不需要太长。

image.png

这里我们设置向Flash区域0x0—0x8区域烧写0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8特征数据,来验证算法文件的正确性。CDK中设置好这些变量以后,把PC的值设置为当前lr(r15)的值,然后点击单步运行,

image.png

点击单步运行,程序运行在main.c文件的flashProgram入口,然后通过常规的调试手段,进入该函数内部,运行函数完成以后,验证是否正确烧写。
按照上诉手段,分别验证每个函数的正确性即可。

2.4 配置算法文件到SDK工程---

当完成整个算法文件调试以后,为了更好的提升算法文件的性能,这里我们将算法工程的Compiler编译选项由 -O0 修改为 -O2,然后重新编译,编译完成以后,将SmartL_Flash工程根路径下Obj/目录中生成的SmartL_Flash.elf算法文件copy到my_solution工程使用的SmartL_Chip组件的目录中去,CDK工程视图右击菜单Open Containing Folder选项,可以直接打开工程、组件所在的目录。
然后在工程视图SmartL_Chip组件节点的配置窗口中,配置SmartL_Flash.elf作为算法文件。

image.png

【情况2】
对于没有使用芯片组件或者使用旧版本的组件的情况,则需要将SmartL_Flash.elf拷贝到my_solution工程根路径下(与my_solution.ckdproj文件同目录),然后在工程配置的Flash Tab的算法选择中,选择该组件即可。

image.png

相关文章
|
3月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
142 2
|
11月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
8月前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
227 3
|
11月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
10月前
|
存储 算法 文件存储
探秘文件共享服务之哈希表助力 Python 算法实现
在数字化时代,文件共享服务不可或缺。哈希表(散列表)通过键值对存储数据,利用哈希函数将键映射到特定位置,极大提升文件上传、下载和搜索效率。例如,在大型文件共享平台中,文件名等信息作为键,物理地址作为值存入哈希表,用户检索时快速定位文件,减少遍历时间。此外,哈希表还用于文件一致性校验,确保传输文件未被篡改。以Python代码示例展示基于哈希表的文件索引实现,模拟文件共享服务的文件索引构建与检索功能。哈希表及其分布式变体如一致性哈希算法,保障文件均匀分布和负载均衡,持续优化文件共享服务性能。
|
11月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到"result.txt"以供MATLAB显示图像分割效果。
Ngnix02 --- Ngnix的功能特性及常见功能,Ngnix常用的功能模块,有不同算法,根据不同算法进行转发,ip_hash、url_hash、fair,核心组成 ngnix二进制可执行文件
Ngnix02 --- Ngnix的功能特性及常见功能,Ngnix常用的功能模块,有不同算法,根据不同算法进行转发,ip_hash、url_hash、fair,核心组成 ngnix二进制可执行文件