平头哥剑池CDK教程——算法工程开发步骤

上次我们提到了一个算法工程会分为以下四个部分,我们在做算法开发的时候,真正需要我们做二次开发的是红框三部分。

第一部分是我们的flash设备的描述,我们需要安装flash实际的参数去填写flash设备的描述信息。

第二部分是flash接口的实现,我们需要根据具体的flash硬件设备的特性,去完成flash标准接口的逻辑。

第三部分是关于数据交互buffer大小的调整,这里我们会根据芯片的ram大小,去设置我们buffer的大小,这个buffer是pc端待烧写的镜像跟算法交互数据传输的buffer的区域,这个区域的大小理论上设置的越大,整个交互的次数会越少,导致整个flash烧写的速度会变得很快;若设置的空间较小,会导致我们烧写的速度降低,这里需要根据我们目标端具体的memory大小,尽可能设置较大的buffer空间

我们创建完成一个flash工程以后,包含以下四个文件夹,真正需要我们做二次开发的是在src文件夹下的文件。

首先,我们看flashdev.c,是我们flash的描述文件,这里我们只需要按照注释的要求进行填写即可。

按照注释意思,红框下的第一项我们不要去修改它,

第二项是填写flash名称,也就是我们硬件设备上的名称,

第三项是填写我们所用的CPU型号,

第四项是flash的ID号,这个ID是用来作为我们flash唯一标识,

第五项是flash类型,会根据实际的flash类型填写一个字符串,

第六项是reserved区域,也是不能进行修改的,

第七项意思是是否可以直接进行访问和读取,如果写1,后续CDK去进行读flash操作的时候就不会调用我们后面的需要做二次开发接口的flashread接口,反之,若写0,则会调用driver.c文件中flashread接口去读取flash内容。

最后一块是我们flash空间的配置,这里支持多个flash区域的配置,每个flash都是由起始地址、flash大小以及每一个sector大小组成,这里可以根据我们硬件的实际指标我们就保持默认配置即可

在main.c里面的g_rvbuffer的数据大小,我们默认是4k的大小,这里建议根据自身芯片的ram空间的配置,尽可能配置较大的buffer大小

最后我们需要改的driver.c文件里面的每一个写了todo的位置,是我们需要做的接口开发的内容,这里面包含了我们上节讲到的各种接口。那么我们这里需要根据我们的硬件行为来完成具体的逻辑。

我们在flashinit里面需要完成的是硬件如果需要进行flash操作之前,需要进行的一些与硬件相关的初始化配置。flashuninit是所flash操作完成以后需要做的硬件初始化。flashid需要返回之前flashdev.c里面描述的flashid。

flashprogram是用来将我们需要烧写的数据烧写到flash区间中,第一个参数dst是我们flash需要进行编程的地址,第二个参数是我们数据的原地址,第三个参数是我们所需要烧写数据的长度,也就是说它会把src内存上面的length长的数据烧写到dst所在的位置

我们在实际的演示中是用一个ram去模拟我们的flash,所以我们这里需要烧写的数据去直接copy到我们的目标地址即可,这里就是简单的数据复制的过程

flashread接口对于我们在flashdev.c文件中的access directly中选择是1的话,CDK将不会去掉用这个接口,因此我们这里的flashread接口不做任何操作。

flasherase接口是我们sector erase的操作,这个dst地址是我们sector对齐的一个首地址,length是我们需要擦除的数据长度

flashchiperase是我们需要整片擦除的内容

该代码意思是把i作为一个地址,去进行一个地址上的赋值操作,这样就会把整个0x80000区域下的所有内容全部修改为0xff

对于flashchecksum接口,如果说我们的flash能够直接读的话,我们可以直接把红框下注释的代码直接copy到flashchecksum函数中。

为了后续开发方便,建议在flash驱动工程中去加入一下串口驱动,建议将每个接口的数据的基本参数作一些打印输出,这样子可以为后续做flash烧写的调试做好铺垫。

参考视频:

https://www.bilibili.com/video/BV1gA411K7Qr?p=18&vd_source=77c874a500ef21df351103560dada737

猜你喜欢

转载自blog.csdn.net/qq_42233059/article/details/134896965
今日推荐