作者:李春港

出处: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. 梨子带你刷burp练兵场(burp Academy) - 服务器篇 - Sql注入 - SQL injection UNION attack, determining the number of columns returned by the query

    目录 SQL injection UNION attack, determining the number of columns returned by the query SQL injection ...

  2. [Angular] 删除旧版本,升级安装最新版本

    目录 删除旧版本 清除未卸载干净的angular-cli缓存 对于Linux 对于Windows 安装最新版本 查看安装版本 创建新项目 删除旧版本 npm uninstall -g angular- ...

  3. Http和Https之为什么Https更安全

    [除夕了,加油干.希望自己新的一年万事顺意,祝大家身体健康,心想事成!] 我们都知道 HTTPS 安全,可是为什么安全呢? 看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,因为Https相 ...

  4. codeforces 1042C Array Product【构造】

    题目:戳这里 题意:n个数,两种操作,第一种是a[i]*a[j],删掉a[i],第一种是直接删除a[i](只能用一次)剩下的数序列号不变.操作n-1次,使最后剩下的那个数最大化. 解题思路: 正数之间 ...

  5. React Gatsby 最新教程

    React Gatsby 最新教程 https://www.gatsbyjs.com/docs/quick-start/ https://www.gatsbyjs.com/docs/tutorial/ ...

  6. Docker & Node.js

    Docker & Node.js https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ https://docs.docker.com ...

  7. c++ winapi 在当前程序(local)调用目标程序(target)的函数

    GameCheat stackoverflow 如果你的目标程序是x86/x64, 那么当前程序也需要编译为x84/x64 #include <iostream> #include < ...

  8. Redis 博文索引

    博文索引 Redis 对象与编码 Redis 持久化 Redis 主从复制 Redis 哨兵 Redis 缓存淘汰 Redis 集合统计 Redis 简介

  9. [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2

    转载地址:https://blog.csdn.net/kyjl888/article/details/72942209 1 ORB-SLAM2源码详解 by 吴博 2 https://github.c ...

  10. 用注解开发SpringMVC

    Spring2.5以后,用注解开发SpringMVC的功能十分强大,注解也是SpringMVC的精髓.在实际开发中,都会使用注解来实现. 这让SpringMVC开发工作量最小化,开发者只要专注于业务逻 ...