《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > 基于千兆網接口的攝像機設計
基于千兆網接口的攝像機設計
摘要: 千兆網接口攝像機,網絡傳輸有效數據帶寬達400Mb/s以上,較好的解決了百兆網傳輸帶寬不足、數據傳輸速度慢的問題。傳輸300萬像素不進行壓縮的原始圖像,幀率可達18幀/秒,視頻流暢清晰。計算機采用Winpcap捕獲圖像數據,丟包率小于0.02%。
Abstract:
Key words :

       1 引 言

  隨著監(jiān)控系統(tǒng)在商用民用的日漸普及,監(jiān)控攝像機被廣泛應用在各個領域,為社會治安保駕護航。視頻監(jiān)控攝像機廣泛應用于居民住宅、樓盤別墅、商場店鋪、財務室。每個不同的應用領域,需要有不同類型的監(jiān)控攝像機。傳統(tǒng)的監(jiān)控攝像機圖像分辨率低,難以滿足一些有特殊要求的應用場合。利用網絡來實現對高分辨率高幀率視頻圖像傳輸是視頻監(jiān)控系統(tǒng)的一種重要思想。但百兆網傳輸帶寬不足、數據傳輸速度太慢嚴重制約了其在監(jiān)控領域的應用。針對這一問題,本文提出了基于千兆以太網傳輸視頻圖像并充分利用了FPGA并行處理和SDRAM高速緩存的優(yōu)勢,提高了視頻圖像的傳輸速度。

  2 硬件總體設計

  硬件總體框架如上圖,主控制器FPGA選用altera公司高性價比芯片EP2C20F256C6N。系統(tǒng)工作頻率為100M。圖像傳感器的數據首先在FIFO里緩沖后暫存于SDRAM,在網絡空閑時將暫存的圖像數據經FIFO2緩沖后送MAC芯片,再發(fā)送到網絡上。

  CMOS芯片選用MICRON TECHNOLOGY的MT9P031,在500萬像素的滿分辨率下最高可輸出14幀的圖像數據。 SDRAM選用W982516BH-75,容量為32Mbytes,g與FPGA內部FIFO結合可設計為32Mbytes的大容量循環(huán)緩存,在圖像分辨率為300萬像素時可緩存10幀以上圖像數據。千兆網接口MAC芯片選用AX88180,物理層芯片選用88E1111,再通過網絡變壓器及RJ45用六類網線與計算機千兆網卡相連。

  3 千兆網接口設計

  AX88180是亞信公司推出的一款高性能低成本的Non-PCI千兆以太網控制器,適用于多種需要高速接入網絡的嵌入式系統(tǒng),如消費電子和家庭網絡等。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用于主機發(fā)送數據包到PHY,可以用高效方式進行封包的存儲、檢索與修改;內置256字節(jié)的配置寄存器,用于主機控制和參數設置;內置EEP-ROM接口;內置IP/TCP/UDP 校驗和大大減小微控制器的運算負載,改善傳輸反應時間。圖2為AX88180及PHY芯片88E1111的連接圖。
 


  3.1 千兆網接口初始化

  對千兆網接口的初始非常重要,如果初始化不正確,系統(tǒng)將無法正常工作。對接口的初始化主要包括對AX88180和88E1111的初始化。

  代碼用verilog語言完成。具體代碼可參考亞信公司的驅動程序代碼,應注意初始化時需要加入一些固定的延時以確定芯片正常工作。

  3.2 圖像數據的封包

  當圖像的分辨率為2048×1536時,一個UDP數據包包含1024字節(jié)的圖像數據和兩個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;//fragment offset始終為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編寫程序需要安裝開發(fā)包及驅動程序。

第一步,指定要通信的網卡設備并打開。

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) < 0){
  AfxMessageBox("nError compiling filter: wrong syntax");
  pcap_close(m_pcap);  return FALSE; } 
if(pcap_setfilter(m_pcap, &fcode)<0){
  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_data[1]<<8); }//這里就沒有處理包頭,直接處理數據。

4 總結

      兆網接口攝像機,網絡傳輸有效數據帶寬達400Mb/s以上,較好的解決了百兆網傳輸帶寬不足、數據傳輸速度慢的問題。傳輸300萬像素不進行壓縮的原始圖像,幀率可達18幀/秒,視頻流暢清晰。計算機采用Winpcap捕獲圖像數據,丟包率小于0.02%。

此內容為AET網站原創(chuàng),未經授權禁止轉載。