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

相关文章
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
4月前
|
算法 计算机视觉 异构计算
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
|
1月前
|
编解码 算法 计算机视觉
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
|
3月前
|
监控 算法 计算机视觉
基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证
|
3月前
|
并行计算 算法 异构计算
基于FPGA的图像拼接算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像拼接算法实现,包括tb测试文件和MATLAB辅助验证
|
4月前
|
算法 Docker Python
Python【算法中心 04】Docker镜像制作的两种方式代码内置与代码挂载(部署简单和避免修改Docker内文件的权衡)
Python【算法中心 04】Docker镜像制作的两种方式代码内置与代码挂载(部署简单和避免修改Docker内文件的权衡)
56 0
|
4月前
|
算法 异构计算
基于FPGA的图像缩小算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像缩小算法实现,包括tb测试文件和MATLAB辅助验证
|
4月前
|
算法 计算机视觉 异构计算
基于FPGA的图像坏点像素修复算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像坏点像素修复算法实现,包括tb测试文件和MATLAB辅助验证
|
4月前
|
算法 计算机视觉 异构计算
基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证
|
4月前
|
存储 算法 vr&ar
基于FPGA的图像白平衡算法实现,包括tb测试文件和MATLAB辅助验证
基于FPGA的图像白平衡算法实现,包括tb测试文件和MATLAB辅助验证