高清視頻監(jiān)控中的I2C總線云臺電機控制設計
1引言
本文引用地址:http://m.butianyuan.cn/article/274483.htm近年來,隨著視頻技術發(fā)展,網絡穩(wěn)定性能快速提高,視頻監(jiān)控需求越來越大,其應用領域也越來越廣泛。社會的發(fā)展,汽車增量不斷增多,道路上各種違章的車輛也逐漸增多,為了構建一個平安交通和智能交通,視頻監(jiān)控系統(tǒng)在交通行業(yè)的應用也越來越多,為了能全方位的對高速公路進行監(jiān)控,視頻監(jiān)控的高速球也應用越來越廣泛。
本文將研究詳細分析I2C的工作原理和通信協議和Linux的I2C總線驅動程序,設計一個應用在高速公路視頻監(jiān)控的基于I2C云臺電機驅動系統(tǒng),為高速公路的全方位視頻監(jiān)控提供一個設計方案。
2高速公路視頻監(jiān)控系統(tǒng)以及云臺電機整體設計
本研究課題的高速公路高清視頻監(jiān)控系統(tǒng)采用TI公司的TMS320DM368,DM368是一款面向多媒體技術應用的高性能芯片,功能強大,集成了ARM926EJ-S內核、硬件編碼協處理引擎( HDVICP)、圖像處理子系統(tǒng)( VPSS)。DM368頻率高達432MH,支持多格式解碼、多速率以及高清多通道功能,最高可以支持H.264編碼1080P格式30幀/s的速度,而且還可提供多種獨立式音頻、語音以及高清視頻編解碼器(H.264)。該處理器有I2C總線等外圍接口等,其中ARM9運行開源、性能穩(wěn)定安全Linux嵌入式操作系統(tǒng)。
視頻監(jiān)控系統(tǒng)中云臺電機控制的設計采用DM368的I2C總線接口,設計基于ARM9的I2C云臺電機,完成驅動程序設計和應用程序設計,以及應用程序控制電機轉動,應用于視頻監(jiān)控系統(tǒng)中,達到全方位的高速公路視頻監(jiān)控。
3 I2C硬件構成和通信協議
I2C總線是由雙向數據線和時鐘線構成的二線制串行總線,總線采用主從雙向通信,即總線上在某一時刻只有一個主設備總線上的其他設備都作為從設備,任何能夠進行發(fā)送和接收的設備都可以成為主設備,但是在同一時間內只能有一個設備作為主設備,通常為處理器,其他器件作為從設備與主設備進行通信,采用唯一的I2C地址識別。
圖1 I2C時序
如圖1I2C的工作時序圖所示,I2C總線在傳送數據過程中使用了三種信號。(1)開始信號:SCL為高電平時,SDA由高電平向低電平跳變,表示將要開始傳送數據;(2)應答信號:從設備在接收到1個字節(jié)數據后向主設備發(fā)出一個低電平脈沖應答信號,表示已收到數據,主設備根據從設備的應答信號做出是否繼續(xù)傳輸數據的操作(I2C總線每次數據傳輸時字節(jié)數不限制,但是每發(fā)送都要有一個應答信號);(3)結束信號:為低電平時由低電平向高電平跳變,表示數據傳送結束。
總線具體的通信工作原理:主設備首先發(fā)出開始信號,接著發(fā)送的1個字節(jié)的數據,其由高7位地址碼和最低1位方向位組成(方向位表明主設備與從設備間數據的傳送方向)。系統(tǒng)中所有從設備將自己的地址與主設備發(fā)送到總線上的地址進行比較,如果從設備地址與總線上的地址相同,該設備就是與主設備進行數據傳輸的設備。接著進行數據傳輸,根據方向位,主設備接收從設備數據或發(fā)送數據到從設備。當數據傳送完成后,主設備發(fā)出一個停止信號,釋放I2C總線,然后所有從設備等待下一個開始信號的到來。
4 I2C的Linux和ARM驅動設計
(1)Linux2.6.32的I2C驅動分析。
I2C由主設備和從設備構成,通信上通過識別I2C地址進行通信,即可以存在多個i2c adapter適配器和多個外設i2c device,Linux的I2C驅動采用分層設計實現的思想,層與層之間不存在耦合,增加adapter和增加device不會影響其他驅動,具體分層如下。
第一層:提供i2c adapter的硬件驅動,探測、初始化i2c adapter(如申請i2c地址和中斷號),驅動處理器控制的i2c adapter在硬件上產生信號(start、stop、ack)以及處理i2c中斷,涉及圖2中的硬件實現層。
第二層:提供i2c adapter的algorithm,用具體適配器的xxx_xfer()函數來填充i2c_algorithm的master_xfer函數指針,并把賦值后的i2c_algorithm,再賦值給i2c_adapter的成員指針,主要涉及圖2中訪問抽象層、i2c核心層。
第三層:實現i2c設備驅動中的i2c_driver接口,用具體的i2c device設備的i2c_add_driver ()、i2c_del_driver ()方法賦值給i2c_driver的成員函數指針,采用Probe探尋方式實現設備device與總線的掛接,涉及圖2中的driver驅動層,此層是本文實現的驅動部分。
第四層:實現i2c設備所對應的具體device的驅動,i2c_driver只是實現設備與總線的掛接,掛接在總線上的設備千差萬別的,所以要實現具體設備device的write()、read()、ioctl()等方法,賦值給file_operations,然后注冊字符設備,涉及圖2中的driver驅動層,此層是本文實現的驅動部分。
第一層和第二層又叫i2c總線驅動(bus driver),第三層和第四層屬于i2c設備驅動(device driver)。在Linux驅動架構中,不需要再開發(fā)總線驅動,因為Linux內核幾乎集成所有總線驅動,驅動設計主要是實現第三層和第四層的設備驅動。
圖2 I2c驅動架構圖
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關文章:linux教程
評論