基于千兆网接口摄像机设计
1引言
随着监控系统在商用民用的日渐普及,监控摄像机被广泛应用在各个领域,为社会治安保驾护航。视频监控摄像机广泛应用于居民住宅、楼盘别墅、商场店铺、财务室。每个不同的应用领域,需要有不同类型的监控摄像机。传统的监控摄像机图像分辨率低,难以满足一些有特殊要求的应用场合。利用网络来实现对高分辨率高帧率视频图像传输是视频监控系统的一种重要思想。但百兆网传输带宽不足、数据传输速度太慢严重制约了其在监控领域的应用。针对这一问题,本文提出了基于千兆以太网传输视频图像并充分利用了fpga并行处理和sdram高速缓存的优势,提高了视频图像的传输速度。
2硬件总体设计
硬件总体框架如上图,主控制器fpga选用altera公司高性价比芯片ep2c20f256c6n。系统工作频率为100m。图像传感器的数据首先在fifo里缓冲后暂存于sdram,在网络空闲时将暂存的图像数据经fifo2缓冲后送mac芯片,再发送到网络上。
cmos芯片选用microntechnology的mt9p031,在500万像素的满分辨率下最高可输出14帧的图像数据。sdram选用w982516bh-75,容量为32mbytes,g与fpga内部fifo结合可设计为32mbytes的大容量循环缓存,在图像分辨率为300万像素时可缓存10帧以上图像数据。千兆网接口mac芯片选用ax88180,物理层芯片选用88e1111,再通过网络变压器及rj45用六类网线与计算机千兆网卡相连。
3千兆网接口设计
ax88180是亚信公司推出的一款高性能低成本的non-pci千兆以太网控制器,适用于多种需要高速接入网络的嵌入式系统,如消费电子和家庭网络等。ax88180内置10/100/1000mb/s以太网媒体存取控制器(mac),符合ieee802.3/ieee802.3u/ieee802.3ab协议,可与一般16/32位微控制器连接,其操作与sram相同。ax88180内置10/100/1000mb/s以太网媒体存取控制器(mac),与phy之间采用rgmii接口;内置主机接口控制器,可以与16/32位主机方便连接寻址方式与sram相同;内置40kbsram网络封包缓存器,其中32kb用于从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<=‘hffff;//目的mac地址(广播地址),写三次
‘d3:w_dd<=‘h1111;//源mac地址,均为0x1111,写三次
‘d6:w_dd<=‘h0008;//协议号
‘d7:w_dd<=‘h0045;//固定数据vip4,
‘d8:w_dd<=‘h1e04;//ip包总长度1026+28,并且高低8位交换
‘d9:w_dd<=‘h0;//id号,始终为0
‘d10:w_dd<=‘h0;//fragmentoffset始终为0;
‘d11:w_dd<=‘h1140;//生存期和协议号,固定
‘d12:w_dd<=‘h0;//ip校验和,由mac芯片自动生成
‘d13:w_dd<=‘ha8c0;//源ip,固定为192.168.1.204
‘d14:w_dd<=‘hcc01;
‘d15:w_dd<=‘hffff;//目的ip,任意
‘d16:w_dd<=‘hffff;
‘d17:w_dd<=‘h7017;//源端口,固定为6000
‘d18:w_dd<=‘h7017;//目的端口,固定为6000
‘d19:w_dd<=‘h0a04;//udp数据长度
‘d20:w_dd<=‘h0;////校验和由ax88180自动生成
‘d21:w_dd<=row_num;//图像行信息从0开开始
default:w_dd<=w_dd;
endcase
3.3应用程序设计
由于大量数据在网络上传输,用socket的方式来获图像数据包已经比较困难,丢包率会比较高。采用winpcap来捕获网络上的数据包,可有效的减少丢包率。用winpcap编写程序需要安装开发包及驱动程序。
第一步,指定要通信的网卡设备并打开。
boolinitwpcap(){
pcap_if_t*alldevs;
pcap_if_t*d;
charerrbuf[pcap_errbuf_size];
if(pcap_findalldevs(&alldevs,errbuf)==-1){
afxmessagebox(“errorinpcap_findalldevs”);
returnfalse;}
//枚举网卡然后添加到用户选择的combobox中,代码省略
char*filter=port6000;//只接收端口6000的数据
bpf_u_int32netmask=0xffffff;
structbpf_programfcode;
if(pcap_compile(m_pcap,&fcode,filter,1,netmask)<0){
afxmessagebox(nerrorcompilingfilter:wrongsyntax);
pcap_close(m_pcap);returnfalse;}
if(pcap_setfilter(m_pcap,&fcode)<0){
afxmessagebox(nerrorsettingthefiltern);
pcap_close(m_pcap);returnfalse;}
pcap_freealldevs(alldevs);//释放alldev资源
returntrue;}
第二步:开启一个线程接收数据。
uintrecvproc(lpvoidlpparammeter)
{pcap_loop(m_pcap,0,packet_handler,null);return0;}
packet_handler是处理收到数据包的回调函数,当从port6000收到数据后它会被调用,直到线程终止。
第三步:处理收到的数据
voidpacket_handler(u_char*param,conststructpcap_pkthdr*header,constu_char*pkt_data){
constu_char*real_data=pkt_data+42;
introw=real_data[0]+(real_data[1]<<8);}//这里就没有处理包头,直接处理数据。
4总结
兆网接口摄像机,网络传输有效数据带宽达400mb/s以上,较好的解决了百兆网传输带宽不足、数据传输速度慢的问题。传输300万像素不进行压缩的原始图像,帧率可达18帧/秒,视频流畅清晰。计算机采用winpcap捕获图像数据,丢包率小于0.02%。
具有30年生命周期的铌-石墨烯电池
科学家通过双面投影技术更好地绘制地球地图
基于机器视觉中单线如何传输高分辨率视频数据?
安路科技获华大半导体领投C轮融资,全力推动国产FPGA加速发展
闪电网络为比特币带来了新的可能性
基于千兆网接口摄像机设计
三轴加速度计LIS2DW12开发(2)----基于中断信号获取加速度数据
15000亿元金矿意味什么?物联网助推经济转型升级
电产与滑铁卢大学研发车载传感器,可探测无人看管的小孩和宠物
努比亚官方放出了即将发布的全新全面屏旗舰手机“努比亚X”的真机
头盔终将成历史 微软全力研发新AR技术
基于移远通信NB-IoT模组的智慧水务解决方案
云知声和上海师范大学研究“多语种混合语音识别关键技术研发与应用”
汽车芯片要做到零缺陷有多难?汽车芯片趋势分析
比特币再获突破,达到创纪录的8735美元
关于电缆断芯的检查方法
小米6最新消息:第一部蓝色小米,性能怪兽小米6发布在即,必须666!
高精度电子开关电源电路
利用等离子增强技术改善钙钛矿太阳能电池在可见光谱中的低光学吸收
Qorvo和ubisys联手,推出首个采用多堆栈芯片的IoTivity平台