camera sensor與主控芯片是通過(guò)i2c通信的慷彤,攝像頭讀id兔综,初始化寄存器次绘,開(kāi)啟流,寫(xiě)曝光都是通過(guò)i2c總線來(lái)控制的类浪,接下來(lái)我們研究下開(kāi)啟相機(jī)后i2c都做了哪些操作。
先通過(guò)網(wǎng)上的資料大概看下i2c的通信規(guī)則肌似,簡(jiǎn)單說(shuō)明下:i2c通信只需要兩條傳輸線费就,一條數(shù)據(jù)線SDA,一條時(shí)鐘線SCL川队,SCL拉高力细,SDA下降沿表示一個(gè)傳輸?shù)钠鹗夹盘?hào)睬澡,SCL為高時(shí)讀取數(shù)據(jù),有8 bit的數(shù)據(jù)位眠蚂,后面跟著一個(gè)ACK位煞聪,表示應(yīng)答信號(hào)。SCL拉高逝慧,SDA上升沿表示一個(gè)結(jié)束信號(hào)米绕。8 bit數(shù)據(jù)如果是地址的話,前7 bit表示i2c從地址馋艺,最后一個(gè)表示方向(R/W)栅干。數(shù)據(jù)傳輸期間,SDA位只允許在SCL為低時(shí)發(fā)生改變捐祠,SCL為高時(shí)必須穩(wěn)定碱鳞。
下面是測(cè)量的信號(hào),使用示波器測(cè)量的時(shí)候要記得接地踱蛀,否則測(cè)量的波形是呈波浪形的窿给,不好分析,接地后呈方塊形:
可以看出默認(rèn)待機(jī)狀態(tài)下SDA和SCL都處于高電平狀態(tài)率拒。分析第一幀數(shù)據(jù):
藍(lán)色信號(hào)表示SCL崩泡,黃色信號(hào)表示SDA,SCL高猬膨,SDA下降沿表示開(kāi)始角撞,第一個(gè)數(shù)據(jù)讀出是00100000,0x20,表示i2c地址為0x10勃痴,方向?yàn)閷?xiě)谒所,然而我們驅(qū)動(dòng)中配置的i2c地址一般都是加上了讀寫(xiě)方向的i2c地址,也即是0x20沛申,實(shí)際i2c地址應(yīng)該右移一位劣领,去掉方向位。地址后面緊跟一位0(ACK應(yīng)答信號(hào))铁材,是由從設(shè)備拉低的尖淘,表示從機(jī)接收到了主機(jī)信號(hào)。當(dāng)sensor未上電成功時(shí)著觉,該位為0村生,表示從機(jī)未響應(yīng),也就沒(méi)有后續(xù)寄存器地址數(shù)據(jù)傳輸了固惯。后續(xù)數(shù)據(jù)分別為0x20,0x30,0x0b.
在寫(xiě)入一個(gè)地址后梆造,SCL保持低電平狀態(tài),應(yīng)該是在等待從機(jī)回復(fù)數(shù)據(jù),上面是回復(fù)幀镇辉,第一個(gè)數(shù)據(jù)0x21屡穗,表示讀數(shù)據(jù),后面跟著數(shù)據(jù)0x75忽肛,最后的應(yīng)答位為1村砂,表示數(shù)據(jù)讀取結(jié)束。前面兩幀數(shù)據(jù)讀出來(lái)是start->0x20->ack(0)->0x30->ack(0)->0x0b->ack(0)->end 回復(fù)start->0x21->ack(0)->0x56->ack(1)->end start->0x20->ack(0)->0x30->ack(0)->0x0c->ack(0)->end 回復(fù)start->0x21->ack(0)->0x75->ack(1)->end.
查看代碼屹逛,剛好符合identify的流程础废。后續(xù)的操作就是初始化寄存器組,stream on了罕模。