5. DSP (J5)

5.1. 常见问题

1. J5芯片选用的DSP型号?

答:J5 芯片选用了 2 颗 Cadence 公司的 Tensilica Vision P6 DSP IP(以下简称 VP6), 是专用于视觉/图像处理的数字信号处理器。 更多信息可见: 用户手册 10.2 节Cadence 官方文档

2. 如何获取 Cadence 官方文档?

答:当 Cadence 开发工具成功安装后,即可获取官方文档, 具体路径可参考:用户手册 10.2.2.3 节

3. J5 芯片 DSP 支持哪些计算精度?

答:支持 int8/int16/int32 的整型计算,以及 float32 的浮点计算。

4. J5 芯片如何调度 DSP?

答:如下图所示,J5 芯片中的 VP6 与 ARM 以 Server-Client 的形式,通过 rpmsg 进行业务通讯。 因为 VP6 与 CPU/BPU 共享内存,所以 rpmsg 只需传递数据地址等 meta data。

并且为了方便用户使用,地平线还封装了一套基于 RPC 的开发框架, 并提供了相关的 API 接口和开发示例(ddk/samples/vdsp_rpc_sample), 对应文档请参考: 用户手册 10.2~10.4 节

../_images/dsp_rpc.jpg

5. 如何查看 DSP 侧的日志输出?

答:目前 DSP 程序还不支持终端直接打印,需要通过 printf 命令在串口查看日志。但需要注意的是, DSP FW 日志和 kernel 日志都会输出到串口,所以存在相互干扰的问题,可以通过以下命令降低 kernel 日志等级来防止干扰: echo 0 > /proc/sys/kernel/printk

6. 如何控制 rpc 返回等待时间?

答:可以在板端通过环境变量 HB_DSP_RPMSG_RECV_TIMEOUT 进行配置,该值默认为 0,单位为毫秒,表示不设置等待时间上限。若设置 1000 则表示最多等待 1000 毫秒,超时则 DSP 程序执行失败。

7. J5 的 DSP 示例是否可以直接运行?

答:J5 的 OE 开发包在 ddk/samples/vdsp_rpc_sample/script/image 路径下提供了基于示例预编译好的 DSP 镜像, 可以直接参考 用户手册 10.4.4.1 节 完成上板部署。 但若您想进行相关代码开发,或者编译新的镜像,则需要 DSP 开发软件 Xplorer 和对应的 License 授权文件,获取方式请联系项目接口人。

8. DSP点云预处理示例适用于几维数据?

答:J5 自 OE-v1.1.57 版本新增了 CenterPoint 模型五维点云预处理的 DSP 加速示例,如果您有处理四维点云数据的需求, 那么可以参考用户手册的 PointPillars点云前处理介绍 章节理解代码结构,并做对应修改,修改后需要重新编译 DSP 镜像。


5.2. 常见故障

1. libdnn.so: undefined symbol:hb_bpu_core_estimate_loading

答:该报错可能发生在 OE-v1.1.37 及后续版本的 nn 示例程序板端运行阶段, 请使用 cat /etc/issue 命令查看 J5 系统软件版本,若低于 20220810 版本则需进行升级。

2. Acore address 0x0 isn’t valid! Should be [0xc0000000, 0x180000000]

答:该报错信息出现于串口打印,是由于 dsp 代码中 hb_dsp_mem_map 接口的传参不对,导致地址映射错误。 当 ARM 侧 hbDSPRpc 接口传输的数据包含物理地址时,就需要使用该接口进行地址映射。

3. dsp_relay_server not in $PATH

答:DSP 程序有 direct 直连和 relay 中继两种运行模式,默认以 relay 模式运行。 该模式下需要赋予 dsp_relay_server 文件执行权限。可以进入 script/lib 文件夹,执行 chmod 777 dsp_relay_server 命令,之后即可成功运行。

4. dcore0_rpmsg_op server not start 或 Dsp core 1/2 service not available

答:该报错是因为 BSP 版本过低导致,请升级至 20230417 及以上版本(OE v1.1.52a 版本提供离线镜像文件)。 当前系统软件版本可使用 cat /etc/version 命令查看, 升级方法可参考用户手册 J5 DVB开发板镜像串口升级说明 章节, 本次升级需要使用 hbupdate 工具线刷(不支持 OTA),并且还会修改分区,导致 /userdata 路径下的数据被清空,因此请提前备份重要文件。