美文网首页
C66xx DSP调试

C66xx DSP调试

作者: 侠之大者_7d3f | 来源:发表于2019-01-04 17:18 被阅读23次

    前言

    最近调试DSP也有一段时间了,期间遇到了不少的问题与新的发现。之前,主要的调试经验是PC程序,比如C/C++, JAVA, Python等,在PC端,操作系统屏蔽了硬件底层,因此在编写和调试应用程序/算法时候,无需关注内存,缓存,中断等问题。但是在嵌入式端,底层非常重要,比如内存的分区,程序中各个段的分配(数据段,代码段,bss段等),这些都需特别注意。


    开发、测试环境

    • C66xx DSP
    • windows10

    开发过程

    主要完成的内容:

    • DSP,FPGA端 SRIO通信

    • NCC模板匹配算法的测试与移植

    • Nand Flash固化与启动

    • RS422串口数据解析及PC端交互


    DSP,FPGA端SRIO通信

    实现功能:
    FPGA端: FPGA通过SRIO发送视频,60fps帧率。
    DSP端: 接收FPGA端的视频


    NCC模板匹配算法的测试与移植

    归一化积相关算法(Normalized Cross Correlation,简称NCC算法),与上面算法相似,依然是利用子图与模板图的灰度,通过归一化的相关性度量公式来计算二者之间的匹配程度。

    image.png

    去均值的NCC, Zero-NCC


    image.png image.png

    在DSP端,由于内存,实时性的要求,直接计算的话速度很慢,中间存在大量的冗余计算。

    冗余计算部分:


    image.png

    优化之后的程序测试:
    模板图像存储在L2 SRAM中, 图像存储在MSM核间共享内存中。
    32x32模板, 48x48搜索区域, 时间为2ms。
    32x32模板, 96x96搜索区域,时间为8ms。
    32x32模板, 128x128搜索区域,时间约为15~17ms

    由于NCC算法与SRIO控制流程是完全独立的,为了将算法与控制逻辑分离,因此将NCC编译为静态链接库。并且进行了充分的测试,保证结果的一致性。


    Nand Flash固化与启动

    NAND Flash烧写详细见其他文章

    实验了2中启动方式:
    1. DSP ROM Bootloader + Nand Flash启动
    2. I2C EEPROM + Nand Flash启动

    方式2(二次引导)在EVM评估板上测试工程,但是启动速度特别慢,大约10sec+。

    方式1在EVM和原板子上测试成功,启动速度快,烧写也相对简单。


    RS422串口数据解析及PC端交互

    image.png

    RS422是双端线传送信号。

    image.png

    本系统中,RS422包头2个字节: 0x66, 0x33 之后是数据位和校验位。

    DSP端判断RS422是否发送数据的逻辑:
    SRIO每一帧同时发送RS422数据和图像一帧的数据。DSP端设置2个缓冲区,一个缓冲区用于保存上一次RS422的数据,另一个缓冲器保存每次SRIO发送的RS422数据, 在每个Doorbell间隔中,DSP判断2者内存的数据是否发生变化,如果发生变化说明外界RS422有新的数据发送,此时DSP解析RS422的命令,执行相应的操作。


    总结

    嵌入式开发与普通PC程序开发存在着比较大的差异,开发嵌入式程序首先需要了解整体的硬件结构,调试到具体某一个模块或者单元,需要查阅芯片的文档,结合官网自带的例子,调试嵌入式平台,认真总结经验,这样能力才会逐步提高。

    相关文章

      网友评论

          本文标题:C66xx DSP调试

          本文链接:https://www.haomeiwen.com/subject/wwskrqtx.html