整個的十月份一直都在研究camera的驅動,但收穫頗少,磕磕撞撞的沒有獲得多大的收穫。雖然目前工作的主要任務不在這一塊,但是還是想堅持下去,直到自己覺得camera驅動掌握到一定程度位置。由於camera驅動中使用了iic,而且發現現有camera驅動中,iic的部分出了問題,所以先入手掌握iic驅動。
為了能夠讓整體看著流暢,而且iic相關的知識不是特別多,所以從iic的基本知識到驅動原始碼的分析都做乙個介紹。 1
、iic
匯流排介紹
iic(inter-integrated circuit,內建積體電路匯流排)匯流排是一種由philips公司開發的兩線式序列匯流排,用於連線微控制器及其外圍裝置。iic匯流排占用的空間非常小,減少了電路板的空間和晶元管腳的數量,這對於緩解嵌入式系統資源少的缺陷有很大好處。匯流排的長度可高達25英呎,匯流排上的資料的傳輸速率在標準模式下達到100kb/s,在快速模式下可以達到400kb/s,在高速模式下達到3.4mb/s。iic匯流排支援多主控,其中任何能夠進行傳送和接收的裝置都可以成為主匯流排。 2
、iic
匯流排工作原理
iic 匯流排遵從同步序列傳輸協議,即各位序列(一位接一位)傳送,由時鐘(clock )線指示讀資料(data )線的時刻。每個資料報前有乙個位址,以指示由哪個器件來接收該資料。
iic採用兩根
i/o線
:一根時鐘線(scl序列時鐘線),一根資料線(sda序列資料線),實現全雙工的同步資料通訊。iic匯流排通過scl/sda兩根線使掛接到匯流排上的器件相互進行資訊傳遞。在資訊的傳輸過程中,i2c匯流排上並接的每一模組電路既是主控器(或被控器),又是傳送器(或接收器),這取決於它所要完成的功能。
sda和scl都是雙向線路,各通過乙個電流源或上拉電阻連線到正的電源電壓。當匯流排空閒時這兩條線路都是高電平,連線到匯流排的器件輸出必須是漏極開路或集電極開路才能執行線與的功能。
iic在資料傳輸過程總共產生三種訊號:開始訊號、結束訊號和應答訊號。
開始訊號:scl為高電平時,sda由高電平向低電平跳變,開始傳送資料。
結束訊號:scl為高電平時,sda由低電平向高電平跳變,結束傳送資料。
應答訊號:接收器在接收到8bit資料後,向傳送器發出特定的低電平脈衝,表示已收到資料。cpu向受控單元發出乙個訊號後,等待受控單元發出乙個應答訊號,cpu接收到應答訊號後,根據實際情況作出是否繼續傳遞訊號的判斷。若未收到應答訊號,由判斷為受控單元出現故障。
iic資料傳輸的兩種模式:主裝置傳送從裝置接收和從裝置傳送主裝置接收,這兩種模式都需要主機傳送開始訊號和結束訊號,應答訊號由接收器產生。從裝置的位址一般是1或2個位元組,用於區分連線在同一iic上的不同器件。 3
、s3c6410
的iic介面
s3c6410的iic匯流排介面有四種操作模式:主控制器傳送模式、主控制器接收模式、從屬器傳送模式和從屬器接收模式。
當乙個開始訊號產生後,iic匯流排獲得繁忙訊號,停止訊號將使iic匯流排空閒。在乙個開始訊號後,主控制將傳送乙個從屬器位址來通知從屬器裝置。乙個位元組的位址域包含7位位址和1位傳輸方向指示器,如果為0則表示寫操作(傳送操作),為1是讀操作(接收操作)。
在sda線上的每乙個位元組長度必須是8位,每乙個位元組後面跟隨乙個應答訊號ack位(acknowledgement)。ack脈衝在scl線的第9個時鐘產生。傳送器在收到ack訊號後,置sda為高電平來釋放sda線,接收器在ack傳送時鐘期間,置sda為低電平,以使sda在第9個scl時鐘的高電平期間保持低位。
在傳送模式下,當傳送資料時,iic匯流排介面保持等待,直到寫入新資料到iicds暫存器。在資料寫入iicds之前,scl一直保持低電平,之後將被釋放。6410支援通過中斷來判斷資料傳送是否完成,完成後才可以繼續寫新資料到iicds暫存器進行傳送。
在接收模式下,當接收資料時,iic匯流排介面保持等待,直到iicds暫存器被讀取。在資料從暫存器讀出之前,scl保持低電平,之後才被釋放。同樣6410支援通過中段來判斷資料接收是否完成,完成後便可以繼續從iicds中讀取新的資料。
s3c6410處理器有
4個暫存器
來控制iic匯流排的操作:iic匯流排控制暫存器(iiccon)、iic匯流排控制/狀態暫存器(iicstat)、iic匯流排傳送/接收資料移位暫存器(iicds)和iic匯流排位址暫存器(iicadd)。關於各個暫存器的說明請參看手冊。
今天先寫到這裡,改天上驅動的原始碼分析。
S3C6410的GPIO流驅動 WINCE600
論壇id sturtle 版權 xfdarm www.xfdarm.com 平台 芯飛達科技 xfd6410開發板 wince6.0 os 發布日期 2010 10 09 最後修改 寫前 控制gpio通常是用physical address和mmmapiospace,通俗的說就是通過virtuala...
S3C2410 WinCE6 0 OAL的快速除錯
檢視 183 評分 0 0 前文分析了s3c2410 wince6.0 oal的啟動 本文接著介紹oal的移植過程。在繼續之前,再明確一下wince6.0 oal的作用。在wince6.0中,oal首先起了穿針引線的作用,這一點可從其啟動 看出來。第二個作用,暴露一些oem函式供kernel呼叫,具...
WINCE6 0 S3C2443的啟動過程
2.6 oemlaunch bootloadermain函式接下來會呼叫oemlaunch函式,圖1下面來學習oemlaunch的主要函式體 2.6.1 writeosimagetobootmedia函式 圖2下面就進去學習writeosimagetobootmedia的主要函式體 圖3 標識nbo...