imx385驱动、imx307驱动、imx327驱动调试记录
前言
imx385 是一款原本用在安防行業(yè)的專業(yè)超星光夜視模組,因項目需要,將其移植高通 MSM8953、Android P(9.0) 平臺,僅做記錄。
后續(xù)也調(diào)試過imx307、imx327、這三款芯片通過查看規(guī)格書,發(fā)現(xiàn)從寄存器到IC特性相差不大,因此放在一起進行記錄。
硬件平臺:MSM8953
軟件平臺:Android P(9.0)
最終配置:CSI-2、2lane、RAW10、37.125Mhz、全像素掃描模式、1080p@30fps
目錄
前言
?IMX327?IC?特性
?重要屬性說明
從機地址和ID匹配
上電時序
?輸出格式配置
?輸出長寬及增益配置
曝光增益配置
輸出信息配置
vt clock
op?clock?
增益精度
DB?精度
TABLE 精度
AE?計算,都是用線性的倍數(shù)gain
IMX327?增益曝光配置
雪山千古冷,獨照峨嵋峰
IMX327?IC?特性
?再列出imx327一些重要屬性:
重要屬性說明
移植的過程遇到了很多問題,分析過程就不一 一表述了。這里結(jié)合IC datasheet 和驅(qū)動文件對一些重要屬性做一些說明。
從機地址和ID匹配
從機地址直接可以從手冊查到
?ID 匹配機制,在android系統(tǒng)cam 驅(qū)動中,開機時會從 cam sensor 主動讀取一個寄存器的值和驅(qū)動中的 id 屬性進行對比,一致則認為識別 cam 正常。
由于 imx327 沒有專門的 id 寄存器,這里使用了一個普通的寄存器,用其默認值當(dāng)作了 id 值。
上電時序
?注意,這里使用了 37.125Mhz的 mclk,內(nèi)核驅(qū)動和這里都要修改。
?輸出格式配置
?輸出長寬及增益配置
長寬寄存器:按照手冊填寫。正常來說,x_output,y_output這兩個寄存器的值對應(yīng)輸出幀的長寬。但其實在整個cam框架中,不會去讀取這兩個寄存器,因此這兩個屬性幾乎無影響。這里將 win crop 模式下的長寬寄存器填了上去,實際上是不對的。
line_length_pclk = 0x301B, 表示每行有多少個像素
frame_length_lines = 0x3018, 表示每幀有多少行
在設(shè)置不同的分辨率的時候,這兩個值可能會有所變化。
曝光增益配置
global_gain_addr:增益 gain 的設(shè)置地址及范圍大小都是IC的默認屬性,IC手冊可查。
coarse_int_time_addr:積分時間,對應(yīng)曝光時間,單位為line,有范圍限制。
?從這個表格可以得出另一個屬性,vert_offset 偏移量為2。
最大最小gain:并且在寫入寄存器和實際的gain之間也有轉(zhuǎn)換關(guān)系。
模擬增益在29.4db 以下使用,數(shù)字增益在29.7db及其以上生效。
寄存器值和實際gain的轉(zhuǎn)換關(guān)系:
?
輸出信息配置
line_length_pclk = 2200,
frame_length_lines = 1125,
這兩個值是按照1080p@30fps的規(guī)定值填寫的。
??
?
vt clock
> 用于曝光時間計算
> 用于 AEC 算法的 banding 糾正
1. 計算方式 vt_pixel_clk = line_length_pclk * frame_length_lines * frame_rate;
2. 也是曝光時間的參考時鐘, (video timing clk value) – Virtual clock value used for calculating shutter time,and used by AEC for correcting banding artifacts;
3. 平臺根據(jù)寫入不同的 [曝光行] 來控制幀率,比如在暗處希望犧牲一點幀率,讓Gain值更高,就用這個公式來計算,最后計算的 frame_length_lines 寫入相應(yīng)寄存器;
4. 注意一點的是不同的平臺需要一個最小的 blanking time,所以 frame_length_lines 是要大于真實有效數(shù)據(jù)行 y_output,而且差值一般16對齊;
op?clock?
op clock 就是手冊上給出的值 222.75 Mhz。
? qcom 的解釋:
? * vendor\qcom\proprietary\mm-camerasdk\sensor\includes\sensor_lib.h
? * vt_pixel_clk: sensor scanning rate (cycles / sec)
? * op_pixel_clk: actual sensor output rate (cycles / sec)
? 作用:
? > VFE 時鐘,表示每秒 VFE 處理數(shù)據(jù)量
? 1. 計算方式 op_pixel_clk = (sensor 輸出實際比特率)/ bits-per-pixel;
? // 比如,MIPI DDR 時鐘值(MIPI clk 值)是 300MHz, 且 camera 使用 4 lane,每 lane 是 600MHz 的速率, 那么總的數(shù)據(jù)速率是2400MHz。
? // 因為 mipi 是差分信號, 每個時鐘信號在上升沿和下降沿都可以傳輸數(shù)據(jù),所以 each_lane_rate = clk_rate * 2;
? // 例子: 對于一個 10bit/pixel 總速率為 2400MHz 的 sensor, 這個 op_pixel_clk = 2400MHz / 10 = 240MHz.
? 1.? 這個是 camera mipi csi 的 clock
? 2. 這個值必須根據(jù) sensor 的實際特性填寫,一般 IC 規(guī)格書會給出數(shù)據(jù),如 IMX307 給出 1080p@30fps 4lane 輸出,Mbps/Lane = 222.75MHz;
? 3. 這個時鐘決定了 sensor mipi data lane 吐出數(shù)據(jù)的帶寬;不同的平臺的處理能力不一樣,所以這個值不能超過平臺規(guī)范定義的值。
? 4. 這個是 camera mipi 的 clock,我們這里配置的是 254.4MHz,單位一定要注意,有一次FAE把這個值誤寫,造成camera功耗增大,功耗測試了很久才發(fā)現(xiàn)是這個地方寫錯了
? 5. 這個的解釋是 VFE 時鐘,表示每秒 VFE 處理的數(shù)據(jù)量(in pixel),就是一個表示處理數(shù)據(jù)快慢的單位,
? 如果是全尺寸的話,那么就要配置的大一些; 如果是小尺寸的話,就沒必要配置很大
? 6. 這個 op_pixel_clk 會影響功耗,注意這個配置不能和天線初一同一個頻段,或者說這個頻率的倍數(shù)不能落到天線的頻段里面去,否則就會對天線干擾。
增益精度
? ? ? ? 大部分增益的精度均可歸結(jié)為線性精度、DB 精度和 TABLE 精度這幾類。線性精度指的是增益的倍數(shù)均勻增加。例如 sensor 能支持的 again 為 1 倍,1(1+1/16)倍,1(1+2/16)倍……這種情況下,精度類型可以設(shè)定為 AE_ACCURACY_LINEAR,精度值設(shè)置為 0.0625,在這種精度下,again 為 32 則表示 32*0.0625= 2 倍增益。
DB?精度
? ? ? ? DB 精度指的是增益的倍數(shù)以倍增的形式增加。例如 sensor 的芯片手冊說明能支持的 again 為 0db,0.3db,0.6db……這種情況下,精度類型可以設(shè)定為 AE_ACCURACY_DB,精度值設(shè)置為 0.3,在這種精度下,again 為 80 則表示 80*0.3db=24db,24db 是 16 倍增益。
? ? ? ?再例如 sensor 能支持的 again 為 1 倍,2 倍,4 倍,8 倍……這種情況下,對應(yīng)為 db 則為 0db,6db,12db,18db,所以精度類型設(shè)定為 AE_ACCURACY_DB,精度值設(shè)置為 6。由于 AE 算法內(nèi)部實現(xiàn)線性轉(zhuǎn)DB 時計算精度存在誤差,當(dāng) DB 精度較高(小于 1)時,建議采用 TABLE 精度來實現(xiàn)。
TABLE 精度
? ? ? ? ?x1024的原因
? ? ? ? ?TABLE 精度指增益的倍數(shù)是通過查表的形式獲得,表格統(tǒng)一使用 10bit 精度,即1024 表示 1 倍增益。當(dāng)某些 sensor 的增益值的增加規(guī)律不線性或者 DB 精度較高時,可以使用 TABLE 方式,AE 算法計算出需要的模擬增益/數(shù)字增益的數(shù)值,用查詢 sensor 增益表格中最接近的值作為數(shù)字增益/模擬增益的值。使用 TABLE 模式時,需要相應(yīng)的初始化回調(diào)結(jié)構(gòu)體 AE_SENSOR_EXP_FUCN_S 中的回調(diào)函數(shù)。
AE?計算,都是用線性的倍數(shù)gain
? ? ? ?曝光時間與 sensor 增益保持線性關(guān)系是 AE 曝光量分配的前提,即認為曝光量一定的情況下,曝光時間和 sensor 增益可以相互轉(zhuǎn)換而保持圖像亮度基本不變。比如說曝光量為 4096,那么分配為曝光時間(2)*增益(2048),也可以分配為曝光時間(4)*增益(1024),這 2 種情況下圖像亮度應(yīng)該基本不變。若不滿足這種線性關(guān)系,在高亮環(huán)境下,由于曝光時間很短,1 行曝光時間的變化也容易使畫面發(fā)生閃爍。
? ? ? ?某些 sensor,如 Panasoni MN34220 采用 1080p@30fps 的初始化序列配置時,曝光時間必須偏移 0.8018 行之后才與 sensor 增益有線性關(guān)系,因此增加了 f32Offset 這個變量,它為 float 型變量,以行為單位,將 f32Offset 設(shè)置成 0.8018,AE 算法內(nèi)部即可完成偏移處理。一般 sensor 的曝光時間和增益不存在這種偏移關(guān)系,需在代碼?中將該值配為 0。
IMX327?增益曝光配置
使用查表法配置
#define IMX327_GAIN_TABLE 239 static uint32_t imx327_gain_table[IMX327_FACE_GAIN_TABLE]= {1024, 1060, 1097, 1136, 1176, 1217, 1260, 1304, 1350, 1397, 1446, 1497, 1550, 1604, 1661, 1719, 1780, 1842, 1907, 1974, 2043, 2115, 2189, 2266, 2346, 2428, 2514, 2602, 2693, 2788, 2886, 2987, 3092, 3201, 3314, 3430, 3551, 3675, 3805, 3938, 4077, 4220, 4368, 4522, 4681,4845, 5015, 5192, 5374, 5563, 5758, 5961, 6170, 6387, 6611, 6844, 7084, 7333, 7591, 7858,8134, 8420, 8716, 9022, 9339, 9667, 10007, 10359, 10723, 11099, 11489, 11893, 12311, 12744, 13192,13655, 14135, 14632, 15146, 15678, 16229, 16800, 17390, 18001, 18634, 19289, 19966, 20668, 21394, 22146,22925, 23730, 24564, 25427, 26321, 27246, 28203, 29194, 30220, 31282, 32382, 33520, 34698, 35917, 37179,38486, 39838, 41238, 42687, 44188, 45740, 47348, 49012, 50734, 52517, 54363, 56273, 58251, 60298, 62417,64610, 66881, 69231, 71664, 74182, 76789, 79488, 82281, 85173, 88166, 91264, 94471, 97791, 101228, 104785,108468, 112279, 116225, 120310, 124537, 128914, 133444, 138134, 142988, 148013, 153215, 158599, 164172, 169942, 175914,182096, 188495, 195119, 201976, 209074, 216421, 224027, 231900, 240049, 248485, 257217, 266256, 275613, 285299, 295325,305703, 316446, 327567, 339078, 350994, 363329, 376097, 389314, 402995, 417157, 431817, 446992, 462700, 478961, 495793,513216, 531251, 549921, 569246, 589250, 609958, 631393, 653582, 676550, 700326, 724936, 750412, 776783, 804081, 832338,861589, 891867, 923209, 955652, 989236, 1024000, 1059986, 1097236, 1135795, 1175709, 1217026, 1259795, 1304067, 1349895, 1397333,1446438, 1497269, 1549887, 1604353, 1660734, 1719095, 1779508, 1842044, 1906777, 1973786, 2043149, 2114949, 2189273, 2266209, 2345848,2428287, 2513622, 2601956, 2693394, 2788046, 2886024, 2987445, 3092431, 3201105, 3313599, 3430046, 3550585, 3675361, 3804521 };cmos的gain增益本質(zhì)是電壓的放大,所以使用以下的倍數(shù)和db的轉(zhuǎn)換公式。
電壓(電流)放大倍數(shù)分貝數(shù)定義:
(db)K=20lg(Vo/Vi),其中K為放大倍數(shù)的分貝數(shù),Vo為放大信號輸出,Vi為信號輸入。
即這個表的使用方式是這樣的:
第1個表格參數(shù):
gain?db:20log(1024/1024)= 0
第2個表格參數(shù):
gain?db:20log(1060/1024)= 0.300?db
依次類推
正好也是這顆sensor的最小db精度。
雪山千古冷,獨照峨嵋峰
總結(jié)
以上是生活随笔為你收集整理的imx385驱动、imx307驱动、imx327驱动调试记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [超享]linux共享3160命令
- 下一篇: 0限流电阻 stm32_上/下拉电阻