CMOS Sensor Interface(CSI)

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,再多就不行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章