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