1 引 言
跟着监控体系在商用民用的日渐遍及,监控摄像机被广泛使用在各个范畴,为社会治安保驾护航。视频监控摄像机广泛使用于居民住所、楼盘别墅、商场店肆、财务室。每个不同的使用范畴,需求有不同类型的监控摄像机。传统的监控摄像机图画分辨率低,难以满意一些有特殊要求的使用场合。使用网络来完结对高分辨率高帧率视频图画传输是视频监控体系的一种重要思维。但百兆网传输带宽缺乏、数据传输速度太慢严峻限制了其在监控范畴的使用。针对这一问题,本文提出了依据千兆以太网传输视频图画并充分使用了FPGA并行处理和SDRAM高速缓存的优势,提高了视频图画的传输速度。
2 硬件整体规划
硬件整体结构如上图,主操控器FPGA选用altera公司高性价比芯片EP2C20F256C6N。体系作业频率为100M。图画传感器的数据首先在FIFO里缓冲后暂存于SDRAM,在网络空闲时将暂存的图画数据经FIFO2缓冲后送MAC芯片,再发送到网络上。
CMOS芯片选用Micron Technology的MT9P031,在500万像素的满分辨率下最高可输出14帧的图画数据。 SDRAM选用W982516BH-75,容量为32Mbytes,g与FPGA内部FIFO结合可规划为32Mbytes的大容量循环缓存,在图画分辨率为300万像素时可缓存10帧以上图画数据。千兆网接口MAC芯片选用AX88180,物理层芯片选用88E1111,再经过网络变压器及RJ45用六类网线与计算机千兆网卡相连。
3 千兆网接口规划
AX88180是亚信公司推出的一款高性能低成本的Non-PCI千兆以太网操控器,适用于多种需求高速接入网络的嵌入式体系,如消费电子和家庭网络等。AX88180内置10/100/1000 Mb/s以太网媒体存取操控器(MAC),契合IEEE 802.3/IEEE 802.3u/IEEE 802.3ab协议,可与一般16/32位微操控器衔接,其操作与SRAM相同。AX88180内置10/100/1000 Mb/s以太网媒体存取操控器(MAC),与PHY之间选用RGMII接口;内置主机接口操控器,能够与16/32位主机便利衔接寻址方法与SRAM相同;内置40 KB SRAM网络封包缓存器,其间32 KB用于从PHY接纳数据包,KB用于主机发送数据包到PHY,能够用高效方法进行封包的存储、检索与修正;内置256字节的装备寄存器,用于主机操控和参数设置;内置EEP-ROM接口;内置IP/TCP/UDP 校验和大大减小微操控器的运算负载,改进传输反应时间。图2为AX88180及PHY芯片88E1111的衔接图。
3.1 千兆网接口初始化
对千兆网接口的初始非常重要,假如初始化不正确,体系将无法正常作业。对接口的初始化首要包括对AX88180和88E1111的初始化。
代码用verilog言语完结。详细代码可参阅亚信公司的驱动程序代码,应留意初始化时需求参加一些固定的延时以确认芯片正常作业。
3.2 图画数据的封包
当图画的分辨率为2048×1536时,一个UDP数据包包括1024字节的图画数据和两个bytes图画行编号。当计算机收到数据包时,依据图画行编号信息放入对应的内存中,能够很便利的组合成一副完好的图画。而且,选用行编号的方法,还可避免某一两个数据包丢掉后导致整副图画都无法显现的问题。以下这FPGA写入AX88180的UDP包头代码。
case(param_num)
‘d0: w_dd ‘d3: w_dd ‘d6: w_dd ‘d7: w_dd ‘d8: w_dd ‘d9: w_dd ‘d10:w_dd ‘d11:w_dd ‘d12:w_dd ‘d13:w_dd ‘d14:w_dd ‘d15:w_dd ‘d16:w_dd ‘d17:w_dd ‘d18:w_dd ‘d19:w_dd ‘d20:w_dd ‘d21:w_dd default:w_dd endcase
3.3 使用程序规划
因为很多数据在网络上传输,用SOCKET的方法来获图画数据包现已比较困难,丢包率会比较高。选用Winpcap来捕获网络上的数据包,可有用的削减丢包率。用Winpcap编写程序需求装置开发包及驱动程序。
第一步,指定要通讯的网卡设备并翻开。
BOOL InitWpcap(){
pcap_if_t* alldevs;
pcap_if_t* d;
char errbuf[PCAP_ERRBUF_SIZE];
if(pcap_findalldevs(alldevs, errbuf) == -1){
AfxMessageBox(“Error in pcap_findalldevs”);
return FALSE; }
// 枚举网卡然后添加到用户挑选的ComboBox中,代码省掉
char *filter = port 6000;//只接纳端口6000的数据
bpf_u_int32 NetMask = 0xFFFFFF;
struct bpf_program fcode;
if(pcap_compile(m_pcap, fcode, filter, 1, NetMask) AfxMessageBox(nError compiling filter: wrong syntax);
pcap_close(m_pcap); return FALSE; }
if(pcap_setfilter(m_pcap, fcode)AfxMessageBox(nError setting the filtern);
pcap_close(m_pcap); return FALSE; }
pcap_freealldevs(alldevs); // 开释alldev资源
return TRUE;}
第二步:敞开一个线程接纳数据。
UINT RecvProc(LPVOID lpParammeter)
{ pcap_loop(m_pcap, 0, packet_handler, NULL); return 0;}
packet_handler是处理收到数据包的回调函数, 当从port6000收到数据后它会被调用,直到线程停止。
第三步:处理收到的数据
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data){
const u_char *real_data = pkt_data+42;
int row=real_data[0]+(real_data4 总结
兆网接口摄像机,网络传输有用数据带宽达400Mb/s以上,较好的处理了百兆网传输带宽缺乏、数据传输速度慢的问题。传输300万像素不进行紧缩的原始图画,帧率可达18帧/秒,视频流通明晰。计算机选用Winpcap捕获图画数据,丢包率小于0.02%。