首页 > 代码库 > HI3518c+OV9712
HI3518c+OV9712
==================写的好,大转一把,呵呵================
hi3518C 环境说明
硬件环境:
处理器内核: ARM926@440MHz ,16KB I-Cache, 16KB D-Cache
视频编码:H.264 Baseline Profile 编码 H.264 Main Profile编码 MJPEG/JPEG Baseline编码
视频编码处理器性能:
H.264编码可支持最大分辨率为2M Pixel (像素)
H.264&JPEG 多码流实时编码能力:720P@30fps +QVAG@30fps+720P@1fps JPEG 抓拍 (fps :帧数)
支持JPEG抓拍720P@30fps
CBR/VBR两种码率控制模式,且输出码率范围为: 32kbit/s ~ 40Mbit/s
编码帧率支持 1/16 ~ 30fps
支持8个感兴趣域(ROI)编码
支持8个区域的编码前处理OSD 叠加
智能视频分析:
集成智能分析加速引擎,支持智能运动侦测,周界防范,视频诊断等多种智能分析应用
视频与图形处理:
支持3D去噪,图像增强,边缘增强,de-interlace等前处理功能
支持视频,图形输出抗闪烁处理
支持图形1/2~2x 缩放功能
8个区域的编码前处理)OSD 叠加
2层(视频层,图形层1)视频处理后处理硬件图像加
ISP:
支持AE和AWB功能,用户可自行调节
强光抑制、背光补偿、gamma、色彩增强
支持坏点校正、去噪、数字防抖
支持去雾
支持镜头畸变校正
支持图像mirror、flip
支持数字WDR和tone mapping
提供PC端ISP tuning tools
音频编解码:
通过软件实现多协议语音编解码
协议支持G.711、ADPCM、G.726
支持回波抵消功能
安全引擎:
硬件实现AES/DES/3DES 三种加解密算法
数字水印技术
视频接口:
输入:支持支持8/10/12 bit RGB Bayer输入,时钟频率最高74.25MHz
支持BT.601、BT.656
支持与SONY 、Aptina、OMiniVision、Panasonic等主流高清CMOS对接
支持与CCD sensor对接兼容多种sensor电平提供可编程sensor时钟输出
支持输入最大分辨率为2M Pixel
输出:
提供1个BT.1120视频输出接口,用于外扩HDMI或SDI接口,支持1080P@30fps输出
音频接口:
集成Audio codec,支持16bit语音输入和输出
外围接口:
支持POR
集成高精度RTC
集成2通道SAR-ADC
2个UART接口
I2C接口、GPIO接口
3个PWM接口
1个SDIO2.0接口,支持SDHC
1个USB 2.0 HOST接口
支持RMII和MII模式;支持10/100Mbit/s 全双工或
半双工模式,提供PHY时钟输出
外部存储接口:
DDR2/3 SDRAM接口
16bit DDR2/DDR3@400MHz
最大容量支持1Gbit
SPI Nor Flash接口
1、2、4bit SPI Nor Flash
支持从Nor Flash启动
SDK
提供基于Linux-3.0.y SDK包
提供H.264的高性能PC解码库
芯片物理规格:
功耗 :
700mW典型功耗
支持多级省电模式
工作电压:
内核电压为1.2V
IO电压为3.3V,容限电压为3.8V
DDR2/3 SDRAM接口电压为1.8/1.5V
封装:
20mm x 20mm,176pin 0.40管脚间距,QFP RoHS封装
13mm x 13mm,293pin 0.65管脚间距,TFBGA RoHS封装
以上是HI3518C的硬件特性,以下是在板子上的系统移植过程:
一、搭建linux 开发环境
1、安装Linux服务器 (此处省略)
2、
安装SDK(软件开发工具包)
i、拷贝。将Hi3518_SDK_V1.0.7.0.tgz(XX是版本号)拷贝到Linux服务器上。
II、解压。解压文件,使用命令:tar –zxf Hi3518_SDK_V1.0.7.0.tgz
III 、展开SDK包内容
1) 在执行安装脚本前建议修改系统默认shell为bash。
2) 返回Hi3518_SDK_V1.0.7.0目录,运行source sdk.unpack(不需要sudo)将会展开SDK包打包压缩存放的内容,请按照提示完成操作。
如果您需要通过WINDOWS操作系统中转拷贝SDK包,请先运行source sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。
3、
在linux服务器上安装交叉编译器
1)安装uclibc交叉编译器(注意,需要有sudo权限或者root权限):
进入Hi3518_SDK_V1.0.7.0osdrv/toolchain/arm-hisiv100nptl-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。
2) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。
二、编译uboot:(参见osdrv目录下readme)
1、待进入boot源代码目录后,执行以下操作
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- hi3518c_config
可能会出现以下问题: /bin/bash: arm-hisiv100nptl-linux-gcc: command not found
解决办法:因为交叉工具链安装在 /etc/profile中。所以打开/etc/profile文件把 export PATH="/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin:$PATH" 写在命令行
临时导出工具链的路径
make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- //指定了编译工具链为arm-hisiv100nptl-linux-
编译成功后,将在U-boot目录下生成u-boot.bin。 //这一步生成的u-boot.bin只是一个中间件,并不是最终在单板上执行的U-boot镜像。
将生成的u-boot.bin 复制到osdrv/tools/pc_tools/uboot_tools/目录下
赋予mkboot.sh可执行权限
chmod +x mkboot.sh
运行./mkboot.sh reg_info_.bin u-boot-ok.bin //这里 reg_info_bin 对应的就是 osdrv/tools/pc_tools/uboot_tools/reg_info_hi3518c.bin
生成的u-boot-ok.bin即为可用的u-boot镜像
6、SDK目录介绍
Hi3518_SDK_Vx.x.x.x 目录结构如下:
|-- sdk.cleanup # SDK清理脚本
|-- sdk.unpack # SDK展开脚本
|-- osdrv # 存放操作系统及相关驱动的目录
| |-- busybox # busybox源代码
| |-- drv # drv源代码
| |-- kernel # linux内核源代码
| |-- pub # 编译好的镜像、工具、drv驱动等
| |-- rootfs_scripts # rootfs源代码
| |-- toolchain # 交叉编译器
| |-- tools # linux工具源代码
| |-- uboot # uboot源代码
| `-- Makefile # osdrv Makefile
|-- package # 存放SDK各种压缩包的目录
| |-- osdrv.tgz # linux内核/uboot/rootfs/tools源码压缩包
| |-- mpp.tgz # 媒体处理平台软件压缩包
| `-- image # 可供FLASH烧写的映像文件,如内核、根文件系统
|-- scripts # 存放shell脚本的目录
|-- mpp # 存放媒体处理平台的目录
|-- component # 组件源代码
|-- extdrv # 板级外围驱动源代码
|-- include # 对外头文件
|-- ko # 内核模块
|-- lib # release版本库以及音频库
|-- tools # 媒体处理相关工具
`-- sample # 样例源代码
三、配置编译linux 内核
配置内核的操作步骤如下:
1. 手动拷贝.config 文件:
linux@ubuntu:~/Hi3518_SDK_V1.0.7.0/$ cd osdrv/kernel/linux-3.0.y
linux@ubuntu:~/Hi3518_SDK_V1.0.7.0/osdrv/kernel/linux-3.0.y$ cp arch/arm/configs/hi3518c_full_defconfig .config
2. 通过“make menuconfig”进行内核配置:
linux@ubuntu:~/Hi3518_SDK_V1.0.7.0/osdrv/kernel/linux-3.0.y$make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig
注意:
I: 窗口要够大不然会报错
II: 错误:*** ‘make menuconfig‘ requires the ncurses libraries.
*** Install ncurses (ncurses-devel) and try again.
解决方法:
apt-get install libncurses5-dev
3. 选择需要的模块。
4. 选择完毕后,保存并退出。
5.直接输入$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- uImage //命令编译内核生成镜像,此时需要等待几分钟。
可能出现的错误:
"mkimage" command not found - U-Boot images will not be built
解决方法: 下载 mkimage 命令
$sudo apt-get install uboot-mkimage
四、制作根文件系统
利用busybox制作根文件系统需要先获取busybox源代码,然后配置、编译和安装busybox,操作成功后开始制作根文件系统。// busybox-1.16.1
配置busybox:
进入busybox所在目录,进行配置操作需要输入如下命令:
$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig
busybox的配置界面和内核配置相似,其功能选项容易理解,可以根据自己的需求选择配置。在Busybox Settings ---> Build Options中注意下面两个选项:
[*]Build BusyBox as a static binary (no shared libs)
(arm-hisiv100nptl-linux-) Cross Compiler prefix
其中:
第一个选项选择是否把busybox编译成静态链接的可执行文件。如果选择该选项,编译出来的busybox就是静态链接的,运行时不依赖于动态库,但体积较大;清除该选项
将得到动态链接的busybox,体积较小,但需要动态库的支持。
第二个选项是用于选择SDK推荐的交叉编译器,配置好后保存并退出。// 在这里我们不要输入交叉编译,因为在命令行会输入,在这里输入,然后又在命令行输入会报错。
编译和安装busybox:
编译和安装busybox的具体操作如下:
$make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux-
$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- install
编译并安装成功后,在busybox目录下的_install目录下生成以下目录及文件:
drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 bin
lrwxrwxrwx 1 linux linux 11 2005-04-22 11:01 linuxrc->bin/busybox
drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 sbin
drwxr-xr-x 4 linux linux 4096 2005-04-22 11:01 usr
制作扩展的根文件系统
1、在新生成的 _install 文件夹下制作根文件系统
$mkdir etc dev lib tmp var mnt home proc
2、配置etc、lib、dev目录的必需文件。
I、 etc目录可参考系统/etc 下的文件。其中最主要的文件包括inittab、fstab、init.d/rcS
文件等,这些文件最好从busybox的examples目录下拷贝过来,根据需要自行修
改。
II、dev 目录下的设备文件,可以直接从系统中拷贝过来或者使用mknod命令生成需
要的设备文件。
1: 拷贝文件时请使用cp –R file。
2:
III、lib 目录是存放应用程序所需要的库文件,请根据应用程序需要拷贝相应的库文
件。
我把交叉工具链下的库全部拷过去了。
$ cp -rf ~/Hi3518_SDK_V1.0.7.0/osdrv/toolchain/arm-hisiv100nptl-linux/runtime_lib/armv5te_soft/lib ~/Hi3518_SDK_V1.0.7.0/osdrv/busybox/busybox-1.16.1/_install/lib 下
完成以上两个步骤,一个完整的根文件系统就生成了。但是但是没有玩哦。
Hi3518C 选择的文件系统是JFFS2。为了使内核支持JFFS2文件系统,必须在编译内核时把JFFS2的选项加入(我们发布
的内核默认已经加入了支持)。在make ARCH=arm CROSS_COMPILE=armhisiv100nptl-linux- menuconfig后,进入“File systems”,选择“miscellaneous
filesystems”,最后选中其中的“Journalling Flash File System v2 (JFFS2) support”选项(SDK里面提供的内核默认已经选择了该文件系统的支持)
JFFS2的制作方法为:
$ mkfs.jffs2 -d ./_install -l -o jffs2-root.img // ./_install是刚才我们制作的根文件系统目录
mkfs.jffs2工具可以从互联网中下载,也可以在SDK包中找到。我是通过命令行从网上下载的
$apt-get install mtd-utils
好啦,以上系统中生成的 u-boot-ok.bin 、uImage 、jffs2-root.img 分别就是我们最终要下载到开发板的bootloader,kernel,rootfs.
u-boot-ok.bin 路径:Hi3518_SDK_V1.0.7.0/osdrv/tools/pc_tools/uboot_tools/u-boot-ok.bin
uImage 路径:Hi3518_SDK_V1.0.7.0/osdrv/kernel/linux-3.0.y/arch/arm/boot/uImage
jffs2-root.img 路径:Hi3518_SDK_V1.0.7.0/osdrv/busybox/busybox-1.16.1/jffs2-root.img
五、从PC下载到开发板
终于可以开始下载了,嘎嘎...,由于其他原因,我就不写怎么烧录uboot了,只写内核和根文件系统的下载
因为我没有中转设备,所以我不得不采用串口来下载,串口工具我选择的是 SecureCRT ,我u-boot支持loady命令,所以我采用 Ymodem 协议。在超级终端的U-boot命令行中输入loadb 0x82000000(存放内核的内存地址),打开菜单“Transfer”下的“send Ymodem”,在win窗口中选择下载的文件。
下载内核过程:
hisilicon # loadb 0x82000000 // 打开菜单“Transfer”下的“send Ymodem”,在win窗口中选择下载的文件 uImage
等待下载完成后,使用U-boot的sf命令系列将内核从内存拷贝到SPI Flash中,这里
以SPI Flash操作为例:
hisilicon#sf probe 0 /*对SPI Flash进行初始化设置*/
hisilicon#sf erase 0x100000 0x300000 /*擦除Flash*/ //erase 多少是根据你下载文件的大小决定的 我的文件2.8M,所以我从 0x100000 擦出到 0x300000 共 3M
hisilicon#sf write 0x82000000 0x100000 0x300000 /*将内核写入到SPI Flash偏移地址为0x100000位置*/
下载根文件系统:
下载根文件系统和下载内核的操作方法相同,具体步骤如下:
hisilicon # loadb 0x82000000 // 打开菜单“Transfer”下的“send Ymodem”,在win窗口中选择下载的文件 jffs2-root.img
等待下载完成后,使用U-boot的sf命令系列将内核从内存拷贝到SPI Flash中,这里
以SPI Flash操作为例:
hisilicon#sf probe 0 /*对SPI Flash进行初始化设置*/
hisilicon#sf erase 0x500000 0x100000 /*擦除Flash*/ //erase 多少是根据你下载文件的大小决定的 我的文件不到1M,所以我从 0x500000 擦出到 0x100000 共 1M
hisilicon#sf write 0x82000000 0x500000 0x100000 /*将内核写入到SPI Flash偏移地址为0x100000位置*/
终于内核和根文件系统已经下载到板子上,且写到spi flash中。
最后最后一步了!
六、启动 linux
设置启动参数以及自动启动方式 , 从U-boot引导内核,需要给内核传递参数,包括内存大小、根文件系统挂载设备等。
根据根文件系统类型不同,设置也相应不同,这里仅提供一种参考设置。
各参数的含义如下:
mem:设置操作系统内存大小。以上设置mem=64M表示分配给操作系统内存为64M。
console:设置控制台设备。格式为console=ttyAMA0,115200表示控制台为串口0,波特率115200。
root:设置根文件系统挂载设备。格式为root= /dev/mtdblock3表示从Flash第3个分区挂载(Flash分区编号从0开始)。
rootfstype:设置挂载文件系统类型。
mtdparts:Flash分区描述,格式为mtdparts=hi_sfc:256K(boot),3M(kernel),1M(rootfs),5M(data) //表示有4个分区,分区0大小为256用于bootloader启动,分区1大小为3M用于内核启动,分区2大小为1M用于根文件系统启动,5M为用户数据。
以下参数设置,必须在同一行中输入。
根文件系统类型为JFFS2时,设置如下:
hisilicon# setenv bootargs ‘mem=64M console=ttyAMA0,115200 root=/dev/mtdblock3 rootfstype=jffs2 mtdparts=hi_sfc:256K(boot),3M(kernel),1M(rootfs),5M(data)’
//boot 、kernel、rootfs、data 名字是可以随便取的。 root=/dev/mtdblock3 把根文件系统挂在到第三个分区 data 处
hisilicon# setenv bootcmd ‘sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000‘
hisilicon#setenv bootdelay 2 /*设置启动延时为2秒*/
hisilicon#saveenv
ok ok .可以重启开发板,进入我们的新系统了。
=====================================================
待研究的问题:
1,今天看了一下Hi3518C,感觉跟GM8126非常相似。而且,也是QFP-176pin封装。都是720p@30 fps+ QVGA@30 fps+720p@1 fps JPEG snapshot的IPC高性价比解决方案。
不过,华为的文档资料整理得确实非常的好,这一点比GM强多了。
编译工具采用的是arm-linux-gnueabi-4.4.1,这比gm8126采用的arm-linux-gnueabi-4.4.0还要新一点,比hi3516用的3.4.1强多了(onvif编译总是有问题)。
2,什么是网络摄像机模组?
参考:
1,HI3518c+OV9712
http://blog.sina.com.cn/s/blog_bb8f36e60101re9e.html
2,公司推出基于最新海思HI3518C 的百万高清IPC 开发板,方案
http://www.easycdma.cn/asp/shownews.asp?id=205
3,Hi3518C开发板系统移植总结
http://blog.csdn.net/u012420933/article/details/13094681