Exynos 4412处理器IIC总线控制器(包括协议)
一、綜述
????? ? Exynos4412精簡(jiǎn)指令集微處理器支持4個(gè)IIC總線控制器。為了能使連接在總線上的主和從設(shè)備之間傳輸數(shù)據(jù),專用的數(shù)據(jù)線SDA和時(shí)鐘信號(hào)線SCL被使用,他們都是雙向的。
????? ? 如果工作在多主機(jī)的IIC總線模式,多個(gè)4412處理器將從從機(jī)那接收數(shù)據(jù)或發(fā)送數(shù)據(jù)給從機(jī)。在IIC總線上的主機(jī)端4412會(huì)啟動(dòng)或終止一個(gè)數(shù)據(jù)傳輸.4412的IIC總線控制器會(huì)用一個(gè)標(biāo)準(zhǔn)的IIC總線仲裁機(jī)制去實(shí)現(xiàn)多主機(jī)和多從機(jī)傳輸數(shù)據(jù)。
???? ? ?通過控制如下寄存器以實(shí)現(xiàn)IIC總線上的多主機(jī)操作:
控制寄存器: ? ? ? ? ? ? ? ?? I2CCON
狀態(tài)寄存器: ? ? ? ? ? ? ? ? ? I2CSTAT
Tx/Rx數(shù)據(jù)偏移寄存器: I2CDS
地址寄存器: ? ? ? ? ? ? ? ? ? I2CADD
? ??? ? 如果I2C總線空閑,那么SCL和SDA信號(hào)線將都為高電平。在SCL為高電平期間,如果SDA有由高到低電平的跳變,那么將啟動(dòng)一個(gè)起始信號(hào),如果SDA有由低到高電平的跳變,將啟動(dòng)一個(gè)結(jié)束信號(hào)。
??? ? 主機(jī)端的設(shè)備總是提供起始和停止信號(hào)的一端。在起始信號(hào)被發(fā)出后,一個(gè)數(shù)據(jù)字節(jié)的前7位被當(dāng)作地址通過SDA線被傳輸。這個(gè)地制值決定了總線上的主設(shè)備將要選擇那個(gè)從設(shè)備作為傳輸對(duì)象,bit8決定傳輸數(shù)據(jù)的方向(是 讀還是寫)。
???? ? I2C總線上的數(shù)據(jù)(即在SDA上傳輸?shù)臄?shù)據(jù))都是以8位字節(jié)傳輸?shù)?#xff0c;在總線上傳輸操作的過程中,對(duì)發(fā)送或接收的數(shù)據(jù)字節(jié)數(shù)是沒有限制的。I2C總線上的主/從設(shè)備發(fā)送數(shù)據(jù)總是以一個(gè)數(shù)據(jù)的最高位開始傳輸(即MSB方式),傳輸完一個(gè)字節(jié)后,應(yīng)答信號(hào)緊接其后。
二、I2C總線接口特性
????? 9個(gè)通道多主、從I2C總線接口。其中8個(gè)通道作為普通接口(即I2C0、I2C1....),1個(gè)通道作為HDMI的專用接口。
????? 7位地址模式。
????? 串行,8位單向或雙向的數(shù)據(jù)傳輸。
????? 在標(biāo)準(zhǔn)模式中,每秒最多可以傳輸100k位,即12.5kB的數(shù)據(jù)量。
????? 在快速模式中,每秒最多可以傳輸400k位,即50kB的數(shù)據(jù)量。
????? 支持主機(jī)端發(fā)送、接收,從機(jī)端發(fā)送、接收操作。
????? 支持中斷和查詢方式。
三、框圖
????? 從上圖可以看出,4412提供4個(gè)寄存器來完成所有的IIC操作。SDA線上的數(shù)據(jù)從IICDS寄存器經(jīng)過移位寄存器發(fā)出,或通過移位寄存器傳入IICDS寄器;IICADD寄存器中保存4412當(dāng)做從機(jī)時(shí)的地址;IICCON、IICSTAT兩個(gè)寄存器用來控制或標(biāo)識(shí)各種狀態(tài),比如選擇工作工作模式,發(fā)出S信號(hào)、P信號(hào),決定是否發(fā)出ACK信號(hào),檢測(cè)是否接收到ACK信號(hào)。
四、I2C總線接口操作??????
??????? 針對(duì)4412處理器的I2C總線接口,具備4種操作模式: ?主機(jī)發(fā)送模式、主機(jī)接收模式、從機(jī)發(fā)送模式、從機(jī)接收模式。下面將描述這些操作模式之間的功能關(guān)系:
1.? 開始和停止條件
? ? ?? 當(dāng)4412的I2C接口空閑時(shí),它往往工作在從機(jī)模式。或者說,4412的的i2c接口在SDA線上察覺到一個(gè)起始信號(hào)之前它應(yīng)該工作在從機(jī)模式。當(dāng)控制器改變4412的i2c接口的工作模式為主機(jī)模式后,SDA線上發(fā)起數(shù)據(jù)傳輸并且控制器會(huì)產(chǎn)生SCL時(shí)鐘信號(hào)。
????? 開始條件通過SDA線進(jìn)行串行的字節(jié)傳輸,一個(gè)停止信號(hào)終止數(shù)據(jù)傳輸,停止信號(hào)是指SCL在高電平器件SDA線有從低到高電平的跳變,主機(jī)端產(chǎn)生起始和停止條件。當(dāng)主、從設(shè)備產(chǎn)生一個(gè)起始信號(hào)后,I2C總線將進(jìn)入忙狀態(tài)。這里需要說明的是上述主從設(shè)備都有可能作為主機(jī)端。
???? ?當(dāng)一個(gè)主機(jī)發(fā)送了一個(gè)起始信號(hào)后,它也應(yīng)該發(fā)送一個(gè)從機(jī)地址以通知總線上的從設(shè)備。這個(gè)地址字節(jié)的低7位表示從設(shè)備地址,最高位表示傳輸數(shù)據(jù)的方向,即主機(jī)將要進(jìn)行讀還是寫。當(dāng)最高位是0時(shí),它將發(fā)起一個(gè)寫操作(發(fā)送操作);當(dāng)最高位是1時(shí),它將發(fā)起一個(gè)讀數(shù)據(jù)的請(qǐng)求(接收操作)。
????? 主機(jī)端發(fā)起一個(gè)結(jié)束信號(hào)以完成傳輸操作,如果主機(jī)端想在總線上繼續(xù)進(jìn)行數(shù)據(jù)的傳輸,它將發(fā)出另外一個(gè)起始信號(hào)和從設(shè)備地址。用這樣的方式,它們可以用各種各樣的格式進(jìn)行讀寫操作。下圖為起始和停止信號(hào):
2.? 數(shù)據(jù)傳輸格式
?????? 放到SDA線上的所有字節(jié)數(shù)據(jù)的長(zhǎng)度應(yīng)該為8位,在每次傳輸數(shù)據(jù)時(shí),對(duì)傳輸數(shù)據(jù)量沒有限制。在起始信號(hào)后的第一個(gè)數(shù)據(jù)字節(jié)應(yīng)該包含地址字段,當(dāng)4412的I2C接口被設(shè)置為主模式時(shí),地址字節(jié)應(yīng)該有控制器端發(fā)出。在每個(gè)字節(jié)后,應(yīng)該有一個(gè)應(yīng)答位。下面的圖中將說明數(shù)據(jù)傳輸格式:
???????? 上圖中說明,在傳輸完每個(gè)字節(jié)數(shù)據(jù)后,都會(huì)有一個(gè)應(yīng)帶信號(hào),這個(gè)應(yīng)答信號(hào)在第9個(gè)時(shí)鐘周期。具體過程如下(注意下面描述的讀寫過程都是針對(duì)Tiny4412處理器而言,當(dāng)有具體的I2C設(shè)備與4412相連時(shí),數(shù)據(jù)表示什么需要看具體的I2C設(shè)備,4412是不知道數(shù)據(jù)的含義的):
寫過程:主機(jī)發(fā)送一個(gè)起始信號(hào)S→發(fā)送從機(jī)7位地址和1位方向,方向位表示寫→主機(jī)釋放SDA線方便從機(jī)給回應(yīng)→有從機(jī)匹配到地址,拉低SDA線作為ACK→主機(jī)重新獲得SDA傳輸8位數(shù)據(jù)→主機(jī)釋放SDA線方便從機(jī)給回應(yīng)→從機(jī)收到數(shù)據(jù)拉低SDA線作為ACK告訴主機(jī)數(shù)據(jù)接收成功→主機(jī)發(fā)出停止信號(hào)。
讀過程:主機(jī)發(fā)送一個(gè)起始信號(hào)S→發(fā)送從機(jī)7位地址和1位方向,方向位表示讀→主機(jī)釋放SDA線方便從機(jī)給回應(yīng)→有從機(jī)匹配到地址,拉低SDA線作為ACK→從機(jī)繼續(xù)占用SDA線,用SDA傳輸8位數(shù)據(jù)給主機(jī)→從機(jī)釋放SDA線(拉高)方便主機(jī)給回應(yīng)→主機(jī)接收到數(shù)據(jù)→主機(jī)獲得SDA線控制并拉低SDA線作為ACK告訴從機(jī)數(shù)據(jù)接收成功→主機(jī)發(fā)出停止信號(hào)。
注意:在具體的I2C通信時(shí),要看I2C設(shè)備才能確定讀寫時(shí)序,比如下面即將描述的第七大點(diǎn)中的示例,讀寫EEPROM中就會(huì)說道具體的數(shù)據(jù)含義,讀寫過程。
3. 應(yīng)答信號(hào)的傳輸
??????? 為了完成一個(gè)字節(jié)數(shù)據(jù)的傳輸,接收方將發(fā)送一個(gè)應(yīng)答位給發(fā)送方。應(yīng)答信號(hào)出現(xiàn)在SCL線上的時(shí)鐘周期中的第九個(gè)時(shí)鐘周期,為了發(fā)送或接收1個(gè)字節(jié)的數(shù)據(jù),主機(jī)端會(huì)產(chǎn)生8個(gè)時(shí)鐘周期,為了傳輸一個(gè)ACK位,主機(jī)端需要產(chǎn)生一個(gè)時(shí)鐘脈沖。
??????? ACK時(shí)鐘脈沖到來之際,發(fā)送方會(huì)在SDA線上設(shè)置高電平以釋放SDA線。在ACK時(shí)鐘脈沖之間,接收方會(huì)驅(qū)動(dòng)和保持SDA線為低電平,這發(fā)生在第9個(gè)時(shí)鐘脈沖為高電平期間。 應(yīng)答信號(hào)為低電平時(shí),規(guī)定為有效應(yīng)答位(ACK簡(jiǎn)稱應(yīng)答位),表示接收器已經(jīng)成功地接收了該字節(jié);應(yīng)答信號(hào)為高電平時(shí),規(guī)定為非應(yīng)答位(NACK),一般表示接收器接收該字節(jié)沒有成功。 對(duì)于反饋有效應(yīng)答位ACK的要求是,接收器在第9個(gè)時(shí)鐘脈沖之前的低電平期間將SDA線拉低,并且確保在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。 如果接收器是主控器,則在它收到最后一個(gè)字節(jié)后,發(fā)送一個(gè)NACK信號(hào),以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送,并釋放SDA線,以便主控接收器發(fā)送一個(gè)停止信號(hào)P。
4. 讀寫操作
?????? 當(dāng)I2C控制器在發(fā)送模式下發(fā)送數(shù)據(jù)后,I2C總線接口將等待直到移位寄存器(I2CDS)接收到一個(gè)數(shù)據(jù)。在往此寄存器寫入一個(gè)新數(shù)據(jù)前,SCL線應(yīng)該保持為低電平,寫完數(shù)據(jù)后,I2C控制器將釋放SCL線。當(dāng)前正在傳輸?shù)臄?shù)據(jù)傳輸完成后,4412會(huì)捕捉到一個(gè)中斷,然后cpu將開始往I2CDS寄存器中寫入一個(gè)新的數(shù)據(jù)。
?????? 當(dāng)I2C控制器在接收模式下接收到數(shù)據(jù)后,I2C總線接口將等待知道I2CDS寄存器被讀。在讀到新數(shù)據(jù)之前,SCL線會(huì)被保持為低電平,讀到數(shù)據(jù)后I2C控制器將釋放掉SCL線。一個(gè)新數(shù)據(jù)接收完成后,4412將收到一個(gè)中斷,cpu收到這個(gè)中斷請(qǐng)求后,它將從I2CDS寄存器中讀取數(shù)據(jù)。
5. 總線仲裁機(jī)制
??? 總線上可能掛接有多個(gè)器件,有時(shí)會(huì)發(fā)生兩個(gè)或多個(gè)主器件同時(shí)想占用總線的情況,這種情況叫做總線競(jìng)爭(zhēng)。I2C總線具有多主控能力,可以對(duì)發(fā)生在SDA線上的總線競(jìng)爭(zhēng)進(jìn)行仲裁,其仲裁原則是這樣的:當(dāng)多個(gè)主器件同時(shí)想占用總線時(shí),如果某個(gè)主器件發(fā)送高電平,而另一個(gè)主器件發(fā)送低電平,則發(fā)送電平與此時(shí)SDA總線電平不符的那個(gè)器件將自動(dòng)關(guān)閉其輸出級(jí)。總線競(jìng)爭(zhēng)的仲裁是在兩個(gè)層次上進(jìn)行的。首先是地址位的比較,如果主器件尋址同一個(gè)從器件,則進(jìn)入數(shù)據(jù)位的比較,從而確保了競(jìng)爭(zhēng)仲裁的可靠性。由于是利用I2C總線上的信息進(jìn)行仲裁,因此不會(huì)造成信息的丟失。
6. 終止條件
?????? 當(dāng)一個(gè)從接收者不能識(shí)別從地址時(shí),它將保持SDA線為高電平。在這樣的情況下,主機(jī)會(huì)產(chǎn)生一個(gè)停止信號(hào)并且取消數(shù)據(jù)的傳輸。當(dāng)終止傳輸產(chǎn)生后,主機(jī)端接收器會(huì)通過取消ACK的產(chǎn)生以告訴從機(jī)端發(fā)送器結(jié)束發(fā)送操作。這將在主機(jī)端接收器接收到從機(jī)端發(fā)送器發(fā)送的最后一個(gè)字節(jié)之后發(fā)生,為了讓主機(jī)端產(chǎn)生一個(gè)停止條件,從機(jī)端發(fā)送者將釋放SDA線。
7. 配置I2C總線
????? 如果要設(shè)置I2C總線中SCL時(shí)鐘信號(hào)的頻率,可以在I2CCON寄存器中設(shè)置4位分頻器的值。I2C總線接口地址值存放在I2C總線地址寄存器(I2CADD)中,默認(rèn)值未知。
8. 每種模式下的操作流程圖
????? 在I2C總線上執(zhí)行任何的收發(fā)Tx/Rx操作前,應(yīng)該做如下配置:
(1)在I2CADD寄存器中寫入從設(shè)備地址
(2)設(shè)置I2CCON控制寄存器
???????? a. 使能中斷
???????? b. 定義SCL頻率
(3)設(shè)置I2CSTAT寄存器以使能串行輸出
???????? 下圖為主設(shè)備發(fā)送模式
?????? 下圖為主設(shè)備接收模式:
?????? 下圖為從設(shè)備發(fā)送模式:
?????? 下圖為從設(shè)備接收模式:
五、I/O描述
六、寄存器描述
1.? I2CCONn(n=0-7)寄存器
注意:
(1)當(dāng)EEPROM連接到I2C總線上時(shí),為了在接收模式中產(chǎn)生停止信號(hào),在讀最后一個(gè)數(shù)據(jù)之前ACK將被禁止產(chǎn)生。
(2)一個(gè)I2C中斷發(fā)生在以下三種情況:
?????? 當(dāng)發(fā)出地址信息或接收到一個(gè)從機(jī)地址并吻合時(shí),當(dāng)總線總裁失敗時(shí),當(dāng)發(fā)送/接收完一個(gè)字節(jié)的數(shù)據(jù)(包括ACK響應(yīng)位)時(shí)。當(dāng)發(fā)出地址信息或接收到一個(gè)從機(jī)地址并吻合時(shí)產(chǎn)生中斷,在中斷處理函數(shù)中要準(zhǔn)備發(fā)送或者接收數(shù)據(jù),即讀取或設(shè)備IICDS寄存器,或者發(fā)出P信號(hào)。當(dāng)總線總裁失敗時(shí)產(chǎn)生中斷,在中斷處理函數(shù)中決定時(shí)候延時(shí)后再次競(jìng)爭(zhēng)總線等。當(dāng)發(fā)送/接收完一個(gè)字節(jié)的數(shù)據(jù)(包括ACK響應(yīng)位)時(shí)產(chǎn)生中斷,在中斷處理函數(shù)中要準(zhǔn)備下次要發(fā)送或者接收數(shù)據(jù),即讀取或設(shè)備IICDS寄存器,或者發(fā)出P信號(hào)。
(3)基于SDA、SCL線上事件特性的考慮,要發(fā)送數(shù)據(jù)時(shí),先將數(shù)據(jù)寫入I2CDS寄存器,然后再清除中斷。清除中斷,即向I2CCON[4]寫入0,也就是將SCL線拉高,此時(shí)產(chǎn)生一個(gè)上升沿,將移位寄存器中的數(shù)據(jù)發(fā)送到SDA線。至于先將數(shù)據(jù)寫入I2CDS寄存器,然后再清除中斷,可能是數(shù)據(jù)穩(wěn)定需要一個(gè)時(shí)間。
(4)I2CCON[6] determines I2CCLK. Tx clock can vary by SCL transition time.When I2CCON[6] = 0, I2CCON[3:0] = 0x0 or 0x1 is not available.
(5)如果IICCON[5]==0,IICCON[4]將不能正常工作。所以,即使不使用IIC中斷,也要將IICCON[5]設(shè)為1。
2.? I2CSTATn(n=0-7)寄存器
3.? I2CADDn(n=0-7)寄存器
?????? 用到IICADD寄存器的位[7:1],表示從機(jī)地址。IICADD寄存器在串行輸出使能位IICSTAT[4]為0時(shí),才可以寫入;在任何時(shí)候都可以讀出。IICSTAT[4]為0時(shí),禁止接收/發(fā)送功能,即此時(shí)SCL線被拉低。
4.? I2CDSn(n=0-7)寄存器
????? 用到IICDS寄存器的位[7:0],其中保存的是要發(fā)送或已經(jīng)接收到的數(shù)據(jù)。IICDS寄存器在串行輸出使能位IICSTAT[4]為1時(shí)才可以寫入;在任何時(shí)候都可以讀出。IICSTAT[4]為1時(shí),使能接收/發(fā)送功能,也就是釋放了SCL線。
5.? I2CLCn(n=0-7)寄存器
七、實(shí)例(EEPROM)
1、I2C原理:
(1)IIC只有2條線,SDA(數(shù)據(jù)線)/SCL(時(shí)鐘線),分為主機(jī)(IIC控制器)和從機(jī)(EEPROM),即主從結(jié)構(gòu),所有的數(shù)據(jù)傳輸都是由主機(jī)發(fā)起,從機(jī)只能接收,2條線上可以掛很多 ? ? ? ? ? ? 從機(jī)設(shè)備。
(2)主機(jī)通過向從機(jī)發(fā)地址(每個(gè)I2C設(shè)備都有一個(gè)嵌入到芯片里的設(shè)備地址,并且每種I2C設(shè)備地址格式還不一樣,比如EEPROM的設(shè)備地址就由前面地址和后面格式構(gòu)成, ? ? ? ? ? ? 后面格式由根據(jù)硬件上的連線決定,Tiny4412上接的EEPROM的A0-2都被拉低,即地址為1010000的七位地址),哪個(gè)從機(jī)響應(yīng)了,就與哪個(gè)從機(jī)通信,具體是讀還是寫根據(jù) ? ? ? ? ? 第8位去區(qū)別。
(3)當(dāng)SCL/SDA都為高電平時(shí),拉低SDA作為起始信號(hào),? SCL為高,拉高SDA做為結(jié)束信號(hào),從機(jī)在收到8位數(shù)據(jù)后,在第9個(gè)時(shí)鐘周期拉底SDA作為ACK應(yīng)答信號(hào)。
(4)scl為低時(shí)可以傳送數(shù)據(jù),傳送完后SCL會(huì)被拉高,在scl上升沿開始傳數(shù)據(jù)。scl為高時(shí)要保持sda數(shù)據(jù)穩(wěn)定。
(5)發(fā)送完數(shù)據(jù),讀完數(shù)據(jù),發(fā)送完stop信號(hào),都要delay一會(huì),等設(shè)備反應(yīng)。
(6)傳送數(shù)據(jù)按芯片手冊(cè)的timing走,先傳地址,先傳數(shù)據(jù),每傳一個(gè)8位數(shù)據(jù),從機(jī)要發(fā)送一個(gè)ACK應(yīng)答。
(7)我們編程是以主機(jī)的角色,從機(jī)自己會(huì)拉高拉底scl/sda,主機(jī)也不用管怎么拉高拉低SCL/SDA,只需設(shè)置IIC控制器的寄存器就可以按timing傳數(shù)據(jù),如果沒有I2C控制器,需 ? ? ? ? ? ? 要用GPIO模擬時(shí)才需要自行控制scl/sda線。
(8)Tiny4412有一個(gè)直接連接CPU IIC0 信號(hào)引腳的EEPROM芯片AT24C08,主要是為了測(cè)試IIC總線用,我們看下往這個(gè)設(shè)備讀寫數(shù)據(jù)應(yīng)該怎么操作。
2、寫時(shí)序
????????? 在第四大點(diǎn)中描述了基于4412處理器I2C操作中讀寫時(shí)序,但是具體數(shù)據(jù)含義還得看具體I2C設(shè)備,比如這里的EEPROM。
?????? 當(dāng)4412要往EEPROM里寫一個(gè)字節(jié)數(shù)據(jù)時(shí),首先發(fā)start信號(hào),然后寫從機(jī)的8位設(shè)備地址(可以從AT24C08的手冊(cè)找到),最后1位用來標(biāo)識(shí)接下來是要寫還是讀從機(jī)設(shè)備,然后拉高SDA。從機(jī)收到地址后如果跟自己地址匹配,就發(fā)一個(gè)ACK應(yīng)答給主機(jī),即會(huì)拉低SDA線。
????? 從機(jī)里的數(shù)據(jù)是按addr(EEPROM芯片內(nèi)部的內(nèi)存地址)來index的,要往哪塊地址寫數(shù)據(jù),4412先發(fā)addr給從機(jī),從機(jī)準(zhǔn)備好后發(fā)ACK,然后主機(jī)就發(fā)8位data給從機(jī),從機(jī)應(yīng)答,然后主機(jī)發(fā)stop信號(hào)結(jié)束,主機(jī)在發(fā)送8位數(shù)據(jù)的8個(gè)clk里,SDA由主機(jī)驅(qū)動(dòng),第9個(gè)clk里,SDA由從機(jī)驅(qū)動(dòng)。
3、讀時(shí)序
???????? 當(dāng)4412要在EEPROM中讀一個(gè)字節(jié)時(shí),先發(fā)start信號(hào),發(fā)從機(jī)地址,最后1位標(biāo)識(shí)write(寫的這個(gè)地址即告訴從機(jī)后面將要在EEPROM里哪個(gè)地方讀取數(shù)據(jù)),拉高SDA方便從機(jī)回應(yīng),有從機(jī)匹配到從機(jī)地址后拉低SDA線回應(yīng)主機(jī);主機(jī)發(fā)要讀哪塊地址數(shù)據(jù)的addr數(shù)據(jù),從機(jī)收到主機(jī)發(fā)來的數(shù)據(jù)后給出回應(yīng);主機(jī)重新發(fā)start信號(hào),發(fā)從機(jī)地址,最后1位標(biāo)識(shí)read,然后4412讀數(shù)據(jù),讀完數(shù)據(jù)主機(jī)(4412)一般不會(huì)應(yīng)答(no ack),主機(jī)發(fā)stop信號(hào)結(jié)束。
?????? 在主機(jī)讀數(shù)據(jù)的那8個(gè)clk里,SDA由從機(jī)驅(qū)動(dòng),第9個(gè)CLK,SDA由主機(jī)驅(qū)動(dòng)。總的來說,誰收數(shù)據(jù),誰就要給出應(yīng)答信號(hào)(拉低SDA),因?yàn)橐嬖V發(fā)送方,數(shù)據(jù)已經(jīng)收到。
總結(jié)
以上是生活随笔為你收集整理的Exynos 4412处理器IIC总线控制器(包括协议)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现了私聊和群聊功能的聊天工具
- 下一篇: Android相机开发 延时摄影的一些实