作者:李春港

出处:https://www.cnblogs.com/lcgbk/p/14514297.html

一、前言

由于项目需要,在3516a芯片上通过采集bt1120的视频数据实现H264编码。所以就直接在sdk中的mpp/sample/venc/sample_venc.c例程中修改代码进行vi->vpss->venc通路的测试,但是并没有那么顺利,发现一有视频源接进来到了vpss层,内核就出现了各种报错,有时候直接卡住没有任何信息打印,有时候又会打印一大堆看不懂的内核报错,如下:


================vpss 0 debug info=============
===debug info from 0000-0100===
0000 : 040c000d 00000000 00000006 00000000
0010 : 02cf04ff 00000000 00000000 00000000
0020 : 87070300 87151300 05000500 80000000
0030 : 8c667000 8c667010 8c667020 8c74f0a0
0040 : 05000500 8c91f1c0 8c91f1c0 00000140
0050 : 00000000 00000000 00000000 00000000
0060 : 00000000 00000000 00000000 00000000
0070 : 00000000 00000000 00000000 00000000
0080 : 00000000 00000000 00000000 00000000
0090 : 00000000 00000000 00000000 00000000
00a0 : 00000000 00000000 00000000 00000000
00b0 : 00000000 00000000 00000000 00000001
00c0 : 8c7c30e0 8c7c30f0 8c7c3100 8c8ab180
00d0 : 05000500 00000003 02cf04ff 8778d480
00e0 : 87790180 87791800 87872800 05000500
00f0 : 00000000 01df02cf 00000000 00000000
===debug info from 0100-0200===
0100 : 8c41b000 8c46f600 02d002d0 00000000
0110 : 1fff1fff 00000000 00000000 00000000
0120 : 00000000 00000000 00000003 02cf04ff
0130 : 87621100 87623e00 87625480 87706480
0140 : 05000500 00000000 00000000 00000000
0150 : 00000000 00000000 00000000 00000000
0160 : 00000000 00000000 00000000 00000000
0170 : 00000000 00000000 00000000 00000000
0180 : 02cf04ff 00000000 00000000 00000000
0190 : 00000000 00000000 00000000 00000000
01a0 : 00000000 0fff0fff 00000000 0fff0fff
01b0 : 00000000 0fff0fff 00000000 00000000
01c0 : 00000000 00000000 00000000 00000000
01d0 : 00000000 00000000 00000000 00000000
01e0 : 00000000 00000000 00000000 00000000
01f0 : 00000000 00000000 00000000 00000007
===debug info from 0200-0300===
0200 : 86000200 86001b00 86001100 86002a00
0210 : 86000700 86001f00 86000f00 86002800
0220 : 00000000 00000000 00000000 00000000
0230 : 00000000 00000000 00000000 00000000
0240 : 8c941000 00000000 8c941600 00000000
0250 : 00000000 8c940a00 00000000 00000000
0260 : 00000000 00000000 00000000 00000000
0270 : 00000000 00000000 00000000 00000000
0280 : 00000000 00000000 00000000 00000000
0290 : 00000000 00000000 00000000 00000000
02a0 : 00000000 00000000 00000000 00000000
02b0 : 00000000 00000000 00000000 00000000
02c0 : 00000000 00000000 00000000 00000000
02d0 : 00000000 00000000 00000000 00000000
02e0 : 00000000 00000000 00000000 00000000
02f0 : 00000000 00000000 00000000 00000000
===debug info from 0300-0320===
0300 : 00000000 00000000 00000000 00000000
0310 : 00000001 07006433 00000000 ffffffffKernel panic - not syncing:
ASSERT failed at:File name: /home/pub/temp/platform_ipc/mpp/code/mkp/../arch/hi3516a/hal/vpss/vpss_drv.c
Function : VPSS_DRV_IsWrongInt
Line No. : 4180
Condition: 0

但是不运行sample_venc例程的时候,板子一切正常,没有任何的异常情况出现,一到运行sample_venc例程就出现各种报错,所以一开始就以为是代码出现了问题,就一直停留在sample_venc的代码中寻找问题,找了很久也没找到问题。这个时候就开始各种怀疑,怀疑FPGA给过来的bt1120数据有问题,怀疑硬件的DDR有问题。

在FPGA工程师寻找无解的时候,我就决定对海思外围的两片DDR进行压力测试。

二、使用memtester对ddr进行压力测试

如何安装和使用memtester工具,上一个文章已经写了,这里就不多说了,网址:https://www.cnblogs.com/lcgbk/p/14497838.html

使用memtester工具测试后发现每次测试到第二片ddr的时候,内核就会出现和运行sample_venc例程一样的内核异常。

这个时候我肯定是怀疑是DDR硬件问题了,所以板子给到了硬件工程师重新焊接了DDR,最后发现还是不行,硬件工程师又说两片DDR的走线和硬件上面没什么差异,这不得不让我怀疑是我的软件层问题。后来发现还真的是软件层的问题,uboot的DDR位宽设置有误。

三、修改uboot的DDR位宽

在Windows打开下面这个文件,对DDR的位宽进行设置:Hi3516AV100R001C01SPC050\01.software\board\Hi3516A_SDK_V1.0.5.0\package\osdrv\osdrv\tools\pc\uboot_tools\Hi3516A-DMEB-uboot-DDR250M-1GB-32bit-CPU600M-BUS198M.xls

点击《mddrc_dmc1》页,发现DDR的位宽被改为了0x16也就是16bit的DDR位宽,但是我们板子使用的DDR是两片16bit的DDR,所以这里需要改为32bit的,否则就会有一块使用不了或者使用异常。将0x16改为0x26保存。

点击《main》页,点击《Generate reg bin file》按钮,生成reg_info.bin文件。

参考文档:

  • 00.hardware\chip\document_cn\Hi3516A\《Hi3516D 专业型HD IP Camera Soc用户指南.pdf》
  • 01.software\board\document_cn\Hi3516A\《Hi3516D U-boot 移植应用开发指南》
  • 02.Only for Reference\03.hardware\documents_cn\Hi3516A\《Hi3516D DDR配置指导说明.pdf》

四、编译修改DDR位宽的uboot镜像

  • 进入boot源代码目录,将生成的u-boot.bin 复制到osdrv/tools/pc/uboot_tools/目录下
  • 运行./mkboot.sh reg_info.bin u-boot-ok.bin
  • 生成的u-boot-ok.bin即为可用的u-boot镜像
  • 将u-boot镜像烧录到板子上

到此运行sample_venc正常了,使用memtester对ddr进行压力测试也正常了。

【海思】Hi3516A 运行sample_venc的demo内核奔溃(DDR问题)的更多相关文章

  1. 海思 Hi3516A Hi3518E V200 芯片介绍

    海康是生产监控摄像头和硬盘录像机的,海思是提供机器里芯片的,海思属于华为的. http://www.hisilicon.com/en/Products/ProductList/Surveillance ...

  2. 海思HI3516A开发板顺利上线

    有图有真相.

  3. Hi3516开发笔记(一):海思HI3516DV300芯片介绍,入手开发板以及Demo测试

    前言   目前主流国产芯片为RV11XX.RK33XX.Hi35XX系列,本系列开启Hi3516系列的开发教程.   Hi3516DV300芯片介绍   Hi3516DV300为专业行Smart IP ...

  4. 用VS2013+VELT-0.1.4进行海思平台 Linux内核 的开发

    快乐虾 http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651) 欢迎转载,但请保留作者信息 本文仅适用于vs20 ...

  5. 【ARM-Linux开发】用VS2013+VELT-0.1.4进行海思平台 Linux内核 的开发

    1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件 ...

  6. 用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发

    1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件 ...

  7. 海思 3520D 移植Qt4.5.3 一

    一.移植Qt4.5.3  1.获得 Qt4.5.3 的源码Qt4.5.3源码的原始包 qt-embedded-opensource-src-4.5.3.tar.gz 将其复制到 /opt 下,     ...

  8. [转帖]IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”)

    IPC网络高清摄像机基础知识1(IPC芯片市场分析以及“搅局者”华为海思 “来自2013年”) 2016-06-02 14:23:49 Times_poem 阅读数 9734更多 分类专栏: IPC网 ...

  9. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

随机推荐

  1. Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制

    kafka系列文章 第一章 linux单机安装kafka 第二章 kafka--集群安裝部署(自带zookeeper) 第三章 Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制 Ka ...

  2. codeforces 875B

    B. Sorting the Coins time limit per test 1 second memory limit per test 512 megabytes input standard ...

  3. 这些不可不知的JVM知识,我都用思维导图整理好了

    JVM是面试中必问的部分,本文通过思维导图以面向面试的角度整理JVM中不可不知的知识. 先上图: 1.JVM基本概念 1.1.JVM是什么 JVM 的全称是 「Java Virtual Machine ...

  4. WebAssembly in Action

    WebAssembly in Action 数据加密,反爬虫,防盗链,版权保护,数据追踪,埋点 blogs 加密,js 禁用检测,权限控制 WebAssembly 防盗链 wasm online id ...

  5. Electron All In One

    Electron All In One desktop app https://www.electronjs.org/docs/api/browser-window BrowserWindow 创建和 ...

  6. windows 隐藏desktop.ini文件

    原文 在文件夹选项>查看 勾选"隐藏受保护的操作系统文件(推荐)"选项

  7. Echarts制作一张全球疫情图

    一.获取全球疫情数据 1)获取API 使用用友提供的新冠肺炎实时数据,登录注册之后可以免费使用. 2)点击用户信息 这里的AIPCODE,复制并保存,用于后续的使用. 3)API的使用 用友有提供一个 ...

  8. 06.numpy聚合运算

    >>> import numpy as np >>> L = np.random.random(100) >>> L array([0.82846 ...

  9. 数据归一化 scikit-learn中的Scaler

    1 import numpy as np 2 from sklearn import datasets 3 4 # 获取数据 5 iris = datasets.load_iris() 6 X = i ...

  10. 聊聊CPU的LOCK指令

    本文转载自聊聊CPU的LOCK指令 导语 在多线程操作中,可能最经常被提起的就是数据的可见性.原子性.有序性.不管是硬件方面.软件方面都在这三方面做了很足的工作,才能保证程序的正常运行. 之前发表过一 ...