如何创建一个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

相关文章
|
6月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
|
4月前
|
算法
Ngnix02 --- Ngnix的功能特性及常见功能,Ngnix常用的功能模块,有不同算法,根据不同算法进行转发,ip_hash、url_hash、fair,核心组成 ngnix二进制可执行文件
Ngnix02 --- Ngnix的功能特性及常见功能,Ngnix常用的功能模块,有不同算法,根据不同算法进行转发,ip_hash、url_hash、fair,核心组成 ngnix二进制可执行文件
|
6月前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到"result.txt"以供MATLAB显示图像分割效果。
|
6月前
|
算法 计算机视觉 异构计算
基于直方图相似性的图像分类算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容包含了一段关于图像处理算法的摘要,主要包括: 1. 展示了MATLAB和FPGA的测试结果图像,显示了图像读取完成的标志和相似性指标,其中图1与图2有较强相似性,图1与图3相似性较弱。 2. 算法使用的是vivado 2019.2和matlab 2022A版本。 3. 算法原理涉及图像直方图统计和直方图相似性度量,通过计算直方图的差异来衡量图像相似度,FPGA实现包括图像采集、直方图计算、比较和分类决策步骤。 4. 提供了一个部分核心Verilog程序,用于读取图像数据并在FPGA上进行直方图相似性计算。
|
6月前
|
编解码 算法 计算机视觉
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
|
6月前
|
监控 算法 计算机视觉
基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证
|
6月前
|
存储 算法 安全
C# | 上位机开发新手指南(五)校验算法——CRC
当我们在进行数据传输时,可能会因为信道噪声、干扰等因素导致数据出现错误,从而影响传输的可靠性和准确性。此时,我们需要一种方法来检测数据是否出现错误,并尽可能快速地发现和纠正错误。CRC(Cyclic Redundancy Check)校验算法就是一种常用的数据校验方法,它通过对数据进行处理生成校验码,从而实现对数据的完整性和准确性进行验证。 使用CRC校验的意义在于能够提高数据传输的可靠性,降低数据传输错误率,确保数据的完整性和准确性。在各个领域中,如通信、网络、存储等,CRC校验都得到了广泛的应用。
286 0
C# | 上位机开发新手指南(五)校验算法——CRC
|
6月前
|
算法 C#
C# | 上位机开发新手指南(四)校验算法
校验算法是一种用于验证数据传输过程中是否出现错误或丢失的算法。 在数据传输过程中,由于噪声、干扰、传输错误等因素的影响,会导致数据传输过程中出现错误或丢失。 为了保证数据传输的准确性,需要在数据传输过程中添加校验码。发送端通过计算数据的校验码并将其附加到数据中一起发送出去,接收端再次计算校验码并将其与接收到的校验码进行比较,如果两者相同,则说明数据传输过程中没有出现错误或丢失。
250 0
C# | 上位机开发新手指南(四)校验算法
|
6月前
|
并行计算 算法 异构计算
基于FPGA的图像拼接算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像拼接算法实现,包括tb测试文件和MATLAB辅助验证