作者:李春港

出处: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. 要想用活Redis,Lua脚本是绕不过去的坎

    前言 Redis 当中提供了许多重要的高级特性,比如发布与订阅,Lua 脚本等.Redis 当中也提供了自增的原子命令,但是假如我们需要同时执行好几个命令的同时又想让这些命令保持原子性,该怎么办呢?这 ...

  2. PHP的常用函数 持续更新

    PHP的常用函数 前言: 由于害怕遗忘,故在此记录下常用的php函数,以便复习 1 define函数 作用:定义常量 用法 <?php define('a',100); ?> 2 intv ...

  3. Linux系统SCSI磁盘扫描机制解析及命令实例

    介绍Linux系统扫描SCSI磁盘有几种方式?Linux新增LUN之后,能否不重启主机就认出设备?如果安装了PowerPath,动态添加/删除LUN的命令是什么?本文总结了Linux主机对磁盘设备进行 ...

  4. 4.安装etcdkeeper查看etcd数据库中的数据

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-06-24 12:47:59 星期一 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...

  5. Bootstrap微章

    给链接.导航等元素嵌套 span class="badge" 元素,可以很醒目的展示新的或未读的信息条目. <a href="#">Inbox &l ...

  6. 深入理解JavaScript中的箭头

    箭头函数可以使我们的代码更加简洁,如下: var sum = (a,b) => a+b; JavaScript 充满了我们需要编写在其他地方执行的小函数的情况. 例如: arr.forEach( ...

  7. MAC地址分类

    网卡MAC地址作为互联网设备在以太网中身份的唯一标识在以太网通讯中的作用比IP地址还要重要,MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique i ...

  8. Web 前端如何一键开启上帝模式

    Web 前端如何一键开启上帝模式 God Mode document.designMode = `on`; refs https://www.cnblogs.com/xgqfrms/tag/desig ...

  9. React Native for Windows + macOS

    React Native for Windows + macOS React Native 0.63 https://aka.ms/ReactNative https://microsoft.gith ...

  10. 使用 js 实现一个简易版的 drag & drop 库

    使用 js 实现一个简易版的 drag & drop 库 具有挑战性的前端面试题 H5 DnD js refs https://www.infoq.cn/article/0NUjpxGrqRX ...