6.关于3516编译
https://blog.csdn.net/aslily1234/article/details/100040079
5.最近调通了dc输入,介绍一下digital camera接口输入的信号,参考资料在ebaina里面很多论坛。我总结一下:主要对于vi处理很多。
如果要配成cmos(dc,bt656,bt601,bt1120)输入时,1、看引脚复用功能,查看传感器启动脚本如:load3559av100_multicore,里面有引脚复用为cmos引脚,还需要配置videvID对应的为cmos。2、配置VI_DEV_ATTR_S,PIPE属性:
a.加载驱动:使用离线模式。
./load3559av100_multicore -i -sensor0 bt1120
Cmos的引脚复用配置:
vi_bt656_mode()
{//引脚复用
himm 0x1F001084 0x000014f3
himm 0x1F0010A4 0x000014f3
himm 0x1F0010A0 0x000014f3
himm 0x1F00109c 0x000014f3
himm 0x1F001098 0x000014f3
himm 0x1F001094 0x000014f3
himm 0x1F001090 0x000014f3
himm 0x1F00108c 0x000014f3
himm 0x1F001088 0x000014f3
#himm 0x1F0010c4 0x000014f3
#himm 0x1F0010c0 0x000014f3
#himm 0x1F0010bc 0x000014f3
#himm 0x1F0010b8 0x000014f3
#himm 0x1F0010b4 0x000014f3
#himm 0x1F0010b0 0x000014f3
himm 0x1F0010ac 0x000014f6
himm 0x1F0010a8 0x000014f6
echo "============vi_bt1120_0_mux done============="
}
把vi5配置为cmos复用。
bt656)
vi_bt656_mode;
himm 0x12030098 0x20; # vi port work_mode£o VI0
himm 0x12010104 0x00c28e00;//功能复用。配置videv5配对到cmos0,看数据手册!因此mpp里面的videv要配置为5才能用。
;;
b.vi配置:
设备属性结构体:
VI_DEV_ATTR_S DEV_ATTR_xxx_BASE =
{
VI_MODE_DIGITAL_CAMERA,//用原始数据输入或者BT656
VI_WORK_MODE_1Multiplex,
{0x00FF0000, 0x0},//配置引脚掩码0-7,我们接的就是vi0-7脚。如果接到的是8-15脚,掩码为0xff000000.
VI_SCAN_PROGRESSIVE,//扫描模式。如果是BT656输入时,配置为隔行
{-1, -1, -1, -1},
VI_DATA_SEQ_YVYU,//输入格式
{
/*port_vsync port_vsync_neg port_hsync port_hsync_neg 如果是数字信号,配置port_vsync为VI_VSYNC_FIELD, port_vsync_neg为VI_VSYNC_NEG_HIGH*/
VI_VSYNC_PULSE, VI_VSYNC_NEG_LOW, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,
/*hsync_hfb hsync_act hsync_hhb*/
{0, MY_GAODE_PIX_WIDTH, 0,
/*vsync0_vhb vsync0_act vsync0_hhb*/
0, MY_GAODE_PIX_HIGH, 0,
/*vsync1_vhb vsync1_act vsync1_hhb*/
0, 0, 0}
},
VI_DATA_TYPE_YUV,
HI_FALSE,
{MY_GAODE_PIX_WIDTH , MY_GAODE_PIX_HIGH},//{3840 , 2160},
{
{
{MY_GAODE_PIX_WIDTH , MY_GAODE_PIX_HIGH},//{3840 , 2160},
},
{
VI_REPHASE_MODE_NONE,
VI_REPHASE_MODE_NONE
}
},
{
WDR_MODE_NONE,
MY_GAODE_PIX_HIGH//1080
},
DATA_RATE_X1
};
Pipe属性结构体:
VI_PIPE_ATTR_S PIPE_ATTR_xxx_RFR =
{
//对于bt656和raw数据,需要配置为无压缩,
VI_PIPE_BYPASS_NONE, HI_FALSE,HI_TRUE,//如果是YVU输入,跳过ISP;如果是原始RGB输入,不能跳过ISP
MY_GAODE_PIX_WIDTH,MY_GAODE_PIX_HIGH,//3840, 2160,视频宽高配置,和输入一样
PIXEL_FORMAT_YVU_SEMIPLANAR_422,//有YUV和RGB输入。如果是YVU输入,跳过ISP;如果是原始RGB输入,不能跳过ISP
COMPRESS_MODE_NONE,//无压缩
DATA_BITWIDTH_8,
HI_FALSE,
{
PIXEL_FORMAT_YVU_SEMIPLANAR_420,
DATA_BITWIDTH_8,
VI_NR_REF_FROM_RFR,
COMPRESS_MODE_NONE
},
HI_FALSE,
{ -1, -1}
};
通道属性:这是输出视频格式。
VI_CHN_ATTR_S CHN_ATTR_xxx_LINEAR =
{
{MY_GAODE_PIX_WIDTH, MY_GAODE_PIX_HIGH},//{3840, 2160},
PIXEL_FORMAT_YVU_SEMIPLANAR_420,
DYNAMIC_RANGE_SDR8,
VIDEO_FORMAT_LINEAR,
COMPRESS_MODE_SEG,
0, 0,
0,
{ -1, -1}
};
总结一下:海思mpp的SDK没有源码,多参考手册“HiMPP V4.0 媒体处理软件开发参考”;看/proc/umap/vi等信息,在mpp手册里面有proc调试信息说明;有问题的时候看:cat /dev/logmpp,通过字面意思看问题,配置失败,环节出错,都会有不同的信息,可能在你山穷水尽疑无路的时候,又有柳暗花明又一村的感觉。
4.我们用hi3519v101做了自己的板子,然后由于ddr接线和demo不一样,不能用hitool烧写程序,但是单块ddr接线一样,然后需要做配置用单片启动:
配置ddr为16bit,但是还是启动不起来。
DDRC_CFG_DDRMODE | 0x8050 | 0xC10216 |
还需要修改:之前是0xf80000.在手册上面找不到这两个寄存器。。。。。。
DXCTRL(BYTE2) | 0xc308 | 0xf80001 |
DXCTRL(BYTE3) | 0xc388 | 0xf80001 |
1.hi3519v101用emmc-8g启动,并且boot,kernel,rootfs,保存视频目录fs。
烧写boot,kernel,rootfs参考3559的emmc烧写
启动参数改一下:setenv bootargs 'mem=512M console=ttyAMA0,115200 rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4 blkdevparts=mmcblk0:1M(fastboot),9M(kernel),96M(rootfs),7G(data) ip=192.168.1.2:192.168.1.251:192.168.1.254:255.255.255.0'
起来之后可以看到:
/mnt # ls /dev/mmcblk0p*
/dev/mmcblk0p1 /dev/mmcblk0p2 /dev/mmcblk0p3 /dev/mmcblk0p4
第4个块就是7g数据块,看看他情况:
/mnt # fdisk -l /dev/mmcblk0p4
Disk /dev/mmcblk0p4: 40 GB, 42949672960 bytes, 83886080 sectors
1310720 cylinders, 4 heads, 16 sectors/track
Units: cylinders of 64 * 512 = 32768 bytes
Disk /dev/mmcblk0p4 doesn't contain a valid partition table
现在mount他会失败,我们可以用直接使用内部命令mkfs.ext4来制作文件系统
~ # mkfs.ext4 /dev/mmcblk0p4
mke2fs 1.42.13 (17-May-2015)
Discarding device blocks: random: crng init done
done
Creating filesystem with 10485760 4k blocks and 2621440 inodes
Filesystem UUID: d0ba2520-ea92-4e00-8c98-c74ba3e2f752
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
然后mount他:
~ # mount /dev/mmcblk0p4 /mnt/surmnt/
EXT4-fs (mmcblk0p4): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (mmcblk0p4): mounted filesystem with ordered data mode. Opts: (null)
看一下内容:
~ # ls /mnt/surmnt/
lost+found
文件系统已经有了
/mnt # df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 92656 16656 74036 18% /
tmpfs 248028 4 248024 0% /dev
/dev/mmcblk0p4 41153856 49032 38991288 0% /mnt/surmnt
2.gadget可以实现usb访问设备,如U盘,usb转串口,网口等
可以参考文档:外围设备驱动操作指南
但是window并不支持ext4格式的文件系统,如果用windows识别gadget的U盘功能的话,需要把文件系统改为fat32。
mkfs.vfat /dev/mmcblk0p1
3.
得到a倍数且<=x的最小值.
#define CEILING_2_POWER(x,a) ( ((x) + ((a) - 1) ) & ( ~((a) - 1) ) )
得到a倍数且>x的最大值.
#define FLOOR_2_POWER(x,a) ( (x) & (~((a) - 1) ) )