本節(jié)主題
- sensor的圖像數(shù)據(jù)到底是什么樣子的?
- 為什么V_Blank的長度只能增大不能減少?
- line_time(傳輸一行圖像數(shù)據(jù)需要的時(shí)間)怎么更直觀地看?
- 多個(gè)sensor之間的硬件幀同步怎么調(diào)?
sensor的圖像數(shù)據(jù)到底是什么樣子的
sensor圖像數(shù)據(jù)的采集,分為:曝光和數(shù)據(jù)讀出過程(readout階段)。我們用示波器去測量數(shù)據(jù)波形的數(shù)據(jù),一般采集到就是數(shù)據(jù)的讀出過程的數(shù)據(jù),即sensor的曝光過程無法體現(xiàn)。

如上圖,即為通過示波器測試sensor的一根mipi data線的圖像。
其中,
- 場消隱的時(shí)間 = V_Blank * line_time
- 數(shù)據(jù)讀出的時(shí)間 = V_Size * line_time = V_size × (line_length / pclk)= V_size × (HTS / pclk)= V_size ×((H_Size + H_Blank)/ pclk)
- 一幀的時(shí)間 = frame_length * line_time = VTS * line_time = (V_Size + V_Blank) * line_time.
舉例:如sc132gs這顆sensor輸出圖像尺寸大小為480*640(Weight × Height),其中 line_time = 13888ns, 此時(shí)的frame_length = 9600, 幀率=100000000/9600/13888=7.5fps。
需要指出的是,V_Size = Height = 640,H_Size = Weight = 480。
1. 有效數(shù)據(jù)讀出時(shí)間= V_Size * line_time = 640 * 13888ns = 8888320ns = 8888us = 8.8ms
2. 無效數(shù)據(jù)讀出時(shí)間 = V_Blank * line_time = (9600 - 640) * 13888ns = 124436480ns = 124436us = 124ms (V_Blank只能大于8960,不會小于這個(gè)數(shù),增大V_Blank可以降低幀率)
3. 幀率=1000ms/一幀圖像的傳輸時(shí)間=fps = 1000ms / (124ms + 8.8ms) = 1000ms / 133 ms = 7.5fps
為什么V_Blank的長度只能增大不能減少?
因?yàn)椋瑂ensor的setting中的幀率一般就是最大幀率了,也就是說在不更改setting的情況下,使用者只能降低幀率,不能增大幀率,即不會超過setting中給定的幀率。降低幀率的方法就是通過增大V_Blank
對于這顆7.5幀的sensor,他的曝光時(shí)間最長大約為133ms,此時(shí)他的dummy_line趨近于0。
因?yàn)椋?dāng)曝光時(shí)間為133ms時(shí),此時(shí)的曝光行exposure_line=133000000ns/13888ns=9576,
dummy_line = frame_length - exposure_line = 9600 - 9576 = 24,
注:對于幀率固定的sensor來說,
1. 它的frame_length值是固定的;
2. 它的V_Blank值是固定的, V_blanking = ((VTS – V_size) * line_time);
3. 增大曝光時(shí)間,即使增大到了極限(無限接近于frame_length),它的V_Blank也不會變;
4. dummy_line和V_Blank不是同一個(gè)東西;
5. 當(dāng)exposure + dummy_line 的和 大于 frame_length時(shí),此時(shí)V_Blank變大,增加的部分由dummy_line填充,同時(shí)幀率降低;當(dāng)exposure + dummy_line的和 小于 frame_length時(shí),此時(shí)V_Blank不變,生效的也依然是frame_length,則幀率不變。
line_time(傳輸一行圖像數(shù)據(jù)需要的時(shí)間)怎么更直觀地看?
-
一幀圖像數(shù)據(jù)的時(shí)間在示波器上怎么看?
圖2, 兩幀有效數(shù)據(jù)開始的時(shí)間差.jpg

以上兩個(gè)方法,都可以求出sensor一幀的時(shí)間為33ms左右,兩者相差不遠(yuǎn),一般來說以SOF的時(shí)間差計(jì)算幀間隔更準(zhǔn)確點(diǎn)。

如圖4,舉例來說,高電平部分是一行數(shù)據(jù)的有效部分,低電平部分是H_Blank。一個(gè)高電平+一個(gè)低電平部分即為一個(gè)line_time。
注:
1). 對于高精度的示波器,可以直接把一個(gè)高電平+一個(gè)低電平作為就是這顆sensor的line_time;
2). 或者用如下方式:line_time = 一幀的時(shí)間 / frame_length (一幀的時(shí)間可以用兩幀的SOF間隔計(jì)算,frame_length可以通過讀寄存器的方式得到)
多個(gè)sensor之間的硬件幀同步怎么調(diào)?

黃色的線是主sensor發(fā)送的FSYNC幀同步信號,紅色和綠色的線是輻sensor收到FSYNC信號后開始出幀。以主sensor為基準(zhǔn),調(diào)節(jié)兩個(gè)副sensor和主sensor的同步。(FSYNC是camera之間的通信和芯片沒有關(guān)系,同時(shí)主攝和輻攝的FSYNC是連在一起的)
注:
1). 主sensor先出幀的,所以副sensor想追上主sensor同步起來,一般需要比master sensor的幀率快一丟丟;
2). 對于硬件幀同步,主和副即使幀率不同,只要是整數(shù)倍,也能同步上。如圖5,兩個(gè)slave sensor無非是每4幀和主攝同步一次(主攝30fps, 副攝7.5fps)。
3). 對于軟件幀同步,主攝和輻攝的幀率相同的前提下,主攝和副攝的匹配最多有半幀的差距。比如以主圖時(shí)間為主,肯定是夾在副圖時(shí)間戳中間的,那么只有兩種情況,主圖和副圖m或m+1幀匹配。無論哪種情況,最多差半幀時(shí)間。當(dāng)n恰好在m和m+1中間時(shí),就剛好差半幀,此時(shí)和誰匹配都行。
4). 一般地,主攝和副攝的時(shí)間硬件幀同步時(shí)間相差控制在200us以內(nèi)。
5). 要在sensor stream on之前去設(shè)置幀同步寄存器。類似地,調(diào)節(jié)mirror或者flip也是在sensor stream on之前去設(shè)置,不可能出幀之后再設(shè)置mirror或者flip。
6). 調(diào)硬件幀同步,一般需要飛主副攝的mipi data線,以及同步信號線。
7). sensor 曝光之后才會去出流,對于出第一幀來說,要等1.5幀左右才會出來,這個(gè)1.5幀就是做曝光等動,所以第一幀會出的慢。但是,后面第二幀往后就依次循環(huán)起來了
8). 幀同步信號線和SoF信號線是兩個(gè)不同的信號,幀同步信號和SoF信號可以認(rèn)為是同時(shí)出來的,但是嚴(yán)格來說,幀同步信號要稍快于SoF信號!
打個(gè)比方:主sensor要出數(shù)據(jù)了,它會先發(fā)個(gè)幀同步信號出來,告訴副sensor:“我要出數(shù)據(jù)了,你們也收到信號后就開始出吧”!副sensor收到后,馬上開始出數(shù)據(jù),這時(shí)主副攝出幀就同步上了。
