1. 程式人生 > >cmos sensor (影象感測器) CSI介面

cmos sensor (影象感測器) CSI介面

Chapter 39(Page 1429)
CMOS Sensor Interface(CSI)

 本章介紹了CMOS影象感測器介面(CSI)的架構,操作守則以及程式設計原型。該CSI介面能夠使得MX27直接連線到外部的CMOS影象感測器上。
CMOS影象感測器分為兩類,非智慧和智慧。非智慧的這類影象感測器只是支援傳統的攝像頭時序(場同步和行同步),然後輸出一個Bayer(拜耳)以及
統計的資料,而智慧感測器支援CCIR656視訊解碼格式,並且還提供了額外的一些影象處理(例如:影象壓縮,影象濾波預處理,以及多種資料輸出格式)

CSI的包含的能力如下:
   .前端-配置邏輯介面以便支援大多數通用的可用的CMOS攝像頭介面。
   .支援CCIR656視訊介面以及傳統的攝像頭介面。
   .8位資料口,支援方便YCC,YUV,Bayer或者是RGB的資料格式輸入。
   .完全可控的8-bit或16-bit資料到32-bit的FIFO進行打包
   .32*32大小的FIFO儲存接受到的的影象畫素資料,該FIFO可以通過可程式設計的IO或者是DMA進行讀取.
   .後端-提供了直接到eMMA的預處理PrP塊介面(PrP和PP組成了MX27圖形加速器eMMA,PrP和PP能夠用來給視訊做預處理和後期處理,例如,放大,縮小,顏色轉換)
   .提供sensor的可遮蔽中斷源,該中斷源也是中斷可控的: 開始Frame,結束Frame,Change of Field,FIFO Full
   .提供給外部sensor用的,可配置的主時鐘頻率
   .由統計資料產生的自動曝光(AE)和自動白平衡(AWB)控制。

39.1 CSI結構
 39-5圖,顯示了CMOS攝像頭介面的框圖,它包含了2個控制暫存器(Control Register 1和3)來建立介面的時序以及中斷產生,另外一個控制器
(Control Register 2)用來產生統計資料,還有一個狀態暫存器,介面邏輯,資料包邏輯,CCIR時序編碼,中斷控制,主時鐘產生源,統計資料產生,
32*32影象資料接受FIFO(RxFIFO),還有16*32統計資料FIFO(StatFIFO).
 
39.2 CSI介面訊號描述
 CSI模組和外部的CMOS影象感測器的介面如下:
   .CSI_VSYNC input    Vertical Sync(Start of Frame) 攝像頭傳輸進CSI介面,是場同步介面,提供起始幀
   .CSI_HSYNC

 input  Horizontal Sync(Blank Signal) 攝像頭傳輸進CSI介面,是行同步介面,提供行同步訊號,判斷消隱訊號
   .CSI_D[7:0]  input   8-bit攝像頭資料匯流排(傳輸YUV,YCC,RGB,或者Bayer等資料)
   .CSI_MCLK output  Sensor Master Clock 該介面是CSI輸出介面,提供給外部攝像頭的主時鐘
   .CSI_PIXCLK  input    pixel Clock      該介面是攝像頭輸出的畫素時鐘,一般都等於MCLK主時鐘
        在CSI的RxFIFO和eMMA的預處理塊PrP之間有一條用來快速傳輸資料的資料線. 該資料線可以enabled或者disabled。
    當該bus enabled時,CSI的RxFIFO會從AHB總線上取消,並且連線到PrP上。任何CPU或者DMA通道到RxFIFO暫存器的請求讀取都將被忽略(因為連線到PrP上了)
  所有的CSI中斷都被MASK防止軟體訪問FIFO以及相關的狀態暫存器。
    RxFIFO設定Full level等級為4/8/16 Words,如果是24words那麼內部邏輯認為是8Words.
    使用者使用RxFIFO的full level來參考資料格式和線性寬度,來確保傳輸的幀是一個完整的幀, 影象的大小(in Words)必須是RxFIFO設定的full level
 的整數倍。
 關係如下:
 資料格式  每個畫素包含的byte數目      每個Words包含的畫素數目     RxFIFO Full level等級    所需要的線寬(line Width)
 YUV422        2    2     4/8/16Words        8/16/32的倍數
 YCC422        2    2     同上                      8/16/32的倍數
 RGB565       2    2      同上                       8/16/32的倍數
 RGB888       4    1      同上                         4/8/16的倍數
 Bayer           1    4                                   16/32/64的倍數
 
39.3 操作原理
 
  該小段描述sensor介面的操作模式
  CSI設計是為了支援普通的sensor介面時序以及CCIR656的視訊介面時序。傳統的CMOS感測器典型使用SOF,HSYNC(消隱),和PIXCLK訊號
 給Bayer或者YUV輸出。智慧CMOS感測器,一般在片上都有影象處理,並且通常都支援視訊模式的傳輸,它們使用了內嵌的時序編碼來取代了SOF和BLANK訊號。
 該時序編碼依據的標準就是CCIR656.
 39.3.1 門選通時鐘模式(Gated Mode)
   VSYNC,HSYNC,以及PIXCLK訊號採用的都是門選時鐘模式(脈衝門)
 一個幀通常都開始於VSYNC的上升沿_||__,然後HSYNC訊號開始變高HIGH,並且hold高電平整行資料(line)。並且當HSYNC訊號是高電平的時候,
     pixel clock才是合法的畫素時鐘,Data資料就是每HSYNC高電平期間,每個pixel clock上升沿讀取的資料才是有效資料。當HSYNC為低電平的時候
     那麼該行就結束了。pixel clock就是不合法了,並且CSI也停止從stream中接收資料。然後等待下一行的HSYNC重複開始,最後重複VSYNC進入下一幀。
 39.3.2 非門選通時鐘模式(non-Gated Mode)
  該模式下,只有VSYNC和pixel clock兩個訊號使用到,HSYNC是被忽略的。
  該模式下,總的時間是和gated mode一樣的,區別只是在於HSYNC訊號。HSYNC是被CSI忽略的,所有的pixel clock時鐘所表示的資料都是合法的,
 其實區別就是Gate模式的pixel clock是一直開著的,而該模式下是和HSYNC同步進行了與門的操作,只保留了有效資料的pixel clock.所以pixel clock
 在非法資料時候是低電平。
 39.3.3 CCIR656介面模式
  在CCIR656模式中,只有pixel clock和DATA[7:0]訊號被使用到。起始幀VSYHC和BLANK消隱訊號都被攝像頭內直接內嵌的時序編碼根據時序直接替換
 為有效資料流,不需要後期進行資料流的處理。每一個有效行伴隨SAV碼啟用,並且伴隨EAV碼結束。有一些方案,數字化的消隱訊號是插在SAV和EAV之間的。
 CSI會從資料流中進行編碼以及濾出相關的時序,來還原VSYHC和HSYNC訊號,來給內部使用,例如統計塊控制和CSI-to-PrP互連時。
 資料從直接轉發,以原來連續的方式進行打包。因此,第一幀是跟在第二幀後面的(如果得到了2幀的話)。所以,該幀序是需要重新進行排序的,來還原原來的影象。
 
 COF(Change of Field改變域/幀/場) ,它觸發奇偶場的變化。中斷服務會讀取狀態暫存器來確定是否是當前的幀。
 
 依據CCIR656標準,影象必須是625/50幀的PAL,或者是525/60幀的NTSC格式。另外,影象還要交錯成奇偶場, 垂直和行消隱資料都被填入特定的行。
 資料必須是YCC422格式,每個畫素包含了2 bytes,Y+Cr+Y+Cb.這些都是TV模式的設定。
 該CSI僅僅支援PAL和NTSC制式。
 從39-3圖中可以看到,SOF是一箇中斷,時序編碼timing codec中斷產生,表示來了新的幀,SOV1和SOV2是表示奇偶域。
 39-4,39-5兩圖表示具體的碼和有效資料位。
 
 39.3.4 CCIR656更進模式
        CMOS攝像頭系統提供的VGA或CIF解析度,CIF標準中,奇偶場交錯不用很嚴格的指出,因為CIF影象本身就很小,使用奇場或偶場就可以了。
        一般是使用奇場,即Field 1.大多數的sensor都支援該CCIR模式,因此在CIF下,只要一個SOF中斷進入新的一幀,而不需要SOV來判斷奇偶場了。
 39.3.5 CCIR656編碼錯誤校驗
  依據CCIR編碼表,SAV和EVAV之間的保護資料是被編碼過的,使用這種方法,編碼器可以糾正1-bit錯誤,可以檢查2-bit的錯誤。
  該特徵只是在CSI的CCIR編碼中,僅僅是奇偶交錯模式中支援。
 
 
 39.4 中斷產生

  
 39.4.1起始幀中斷Start Of Frame Interrupt(SOF_INT)--- 一般都是VSYHC的上升沿開始,就觸發了
  在傳統模式中,VSYHC訊號來自感測器,因此SOF_INT中斷是由VSYHC訊號的上升沿或者是下降沿觸發的。
  在CCIR模式中,SOF中斷資訊是從嵌入的程式碼檢索出來的,並且產生SOF_INT的。
  在CCIR更進模式中,有下面兩個SOF中斷:
   .內部VSYHC模式,SOF是從嵌入的程式碼檢索出來
   .外部VSYHC模式,來自外部攝像頭輸入的VSYHC訊號,根據VSYHC的上升沿或下降沿來產生SOF.
   
 39.4.2 結束幀中斷End of Frame Interrupt(EOF_INT)
  當一幀結束或者是一個在RxFIFO中的完整的幀資料被全部讀出時,EOF中斷就產生了,EOF並不在CSI的PrP模式中使用。
  
 39.4.3 改變幀中斷Change Of Field Interrupt(COF_INT)
  該中斷是用在CCIR奇偶域交錯的模式下使用,該中斷當Field 1 和Field 2交錯的時候產生。F1_INT和F2_INT會產生
 39.4.4 CCIR錯誤中斷(ECC_INT)
  CCIR中斷僅僅用在CCIR奇偶場交錯的模式下使用,因為如果沒有奇偶場交錯的話,不需要校驗該幀的奇偶幀,如果有的話,那麼如果是錯誤下,
  還將該奇偶場拼接進行合成的話,那麼畫面肯定出問題了。
 39.4.5 Data Packing Style資料打包格式
  由於影象在採集的過程中,不同的埠大小,不同的階段,資料的位元組順序是非常重要的。
  為了能夠靈活的對影象資料進行打包,CSI模組提供了資料交換空間,通過PACK_DIR和SWAP16_EN bits(包含在CSIRC1--CSI Control Register1中)
  資料在提交給RxFIFO之前,利用設定PACK_DIR的bit位來進行打包。
 39.4.6 RxFIFO路徑
  Bayer資料是一個從影象感測器獲得典型的行資料。該資料寬度一定要通過軟體轉化為RGB空間或者是YUV空間的資料格式。 
  PACK_DIR bit設定為0,表示系統是小端,不是大端系統。使用P0,P1,P2,P3存放了打包了的資料內容,P0是第一個Data,依次,P3是最後一個data.
  
 Page 1438
  39.4.6.1 RGB565資料
  (我們用的ov9660-0xd7[1:0]是選擇YUV還是RGB模式,YUV=00,RGB=01)
  RGB565資料是從影象感測器獲得的處理過的資料,該資料可以直接顯示到Video Buffer上面。
  這個資料格式是16-bits的寬度,該資料可以直接通過CSI給Memory,然後Memory給LCDC.
  39.4.6.2 RGB888資料格式 ----24位bit屏可用
  
 
 總結:
  MX27提供了一個非常專業的攝像頭CSI介面,可以配置相關的口進行介面匹配。
  我們的攝像頭是ov9660,輸出設定為YUV模式,因此,CSI獲取的資料也是YUV格式的資料,因此還需要通過軟體,將YUV的格式轉化為
  RGB565、RGB656、RGB888格式放到LCDC對應的Memory進行顯示輸出。

  轉化公式如下:
  From RGB to YUV
  Y = 0.299R + 0.587G + 0.114B
  U = 0.492 (B-Y)
  V = 0.877 (R-Y)
  It can also be represented as:
  Y =  0.299R + 0.587G + 0.114B
  U = -0.147R - 0.289G + 0.436B
  V =  0.615R - 0.515G - 0.100B
  From YUV to RGB
  R = Y + 1.140V
  G = Y - 0.395U - 0.581V
  B = Y + 2.032U

我的額外話題:

當前攝像頭的引數我們基本上主要看:

1.攝像頭畫素是多少萬的? 我這邊羅列了一部分

2560*1960 =4915200,也就是通常說的500W

1600*1200 =1920000,也就是200W

1280*960 =1228800,也就是130W畫素

640*480=307200,也就是30W

該畫素可以放映到你的抓圖上面的大小,該畫素就是說明你的CMOS或者是CCD感光元件的畫素點多少,可以想象在相同的面積上,數量越多,感光元件肯定要越小,感光元件小,那麼影象的質量其實會變差,這個當然可以理解,但是從大的方面來說,只要鏡頭好,光源充足,那麼效果也會變好,這樣畫面就比畫素低的更加的細膩,所以高畫素的好處就在這裡。有種專業上的說法,是你的攝像頭達到幾線幾線的?

2.幀率?也就是看你的最大解析度的時候能夠達到的最大幀率是多少?

像OV系列來說,一般最大的解析度下的幀率是30幀左右,也可以調頻率進行提高。我們人的眼睛一般情況下,只要影象能夠達到每秒30幀,那麼利用眼睛的視覺殘留,基本上可以感覺到影象是連續的,人眼的視覺殘留時間超過30ms。

我除錯攝像頭的時候,可以發現有個非常嚴重的現象就是,加開夜光模式的時候,幀率掉的非常嚴重,這個估計就是DSP後期處理的時候,處理不了每秒30幀,只能往下降了,黑白的話效果好一些。

3. 鏡頭也是非常關鍵的,這個就要看不同的廠家,不同的顯示效果

題外篇

我們買到的數碼相機,現在都是1300W以上的,但是並不是說我們的攝像模式下可以達到這個解析度,不信的話你可以去試試看,因為攝像要求比較高,需要達到每秒30幀以上,這個對DSP處理的負荷很重(RGB--顏色空間轉換----H264編碼/JPG編碼),有人說我們為什麼不利用數碼相機的連續抓拍功能,這樣既能保證解析度又可以攝像,其實原理是一樣的,抓拍也不可能高畫素下達到每秒30幀。

還有,我們有一些非常高的畫素是如何達到的呢?

其實現在的做法都是靠拼裝,也就是說兩塊CCD感光模組分別進行攝像,然後在末端進行同步,這樣就能提高畫素,而且DSP的負荷不用太過進行提升,但是這樣的拼裝方法有一個缺陷就是,如果模組太多,那麼在末端進行同步就很難把握了,所以現在一般都是2個CCD或者3個CCD,再多就不行了。

Chapter 40 
Video Codec 
該視訊編解碼模組是MX27的多媒體視訊處理器模組。參考圖40-1.
40.1特徵
視訊編解碼模組支援下面的多媒體視訊流處理:
 .多媒體標準視訊編碼
 -MPEG4 part-II 簡單類 編碼、解碼
 -H264/AVC 基本規範 編解碼
 -h263 P3編解碼
 -多方會議呼叫:最多可同時處理4路影象/位流的編解碼
 -全雙工多格式支援: 在做MPEG4編碼的同時可以做H264的解碼
 
 .Coding 工具
 ......
40.2
概括
視訊整合了H264 BP,MPEG4 SP,H263 P3( annex I,J,K,T)視訊處理標準
Video Codec使用兩個匯流排介面協議:IP暫存器通道和AHB資料通道。它使用了3個記憶體:嵌入的記憶體,系統內部的記憶體,以及系統外部的記憶體。

1.檔案位置:
  drivers/media/video/mxc/下有opl,output,capture三個檔案
  包含的驅動有mx27_csi.ko opl.ko ov9650_cam.ko mx27_capture.ko
  
2.mx27_csi.c----------------mx27 CSI硬體
  opl.c---------------------mx27 旋轉相關
  ov9650_cam.c--------------mx27 外接攝像頭的驅動,用i2c驅動
  mx27_v4l2_capture.c+mxc_prpsw.c...------mx27_caputre.ko 一些應用程式,記憶體相關比較複雜