嵌入式的世界里面有幾個(gè)經(jīng)典的協(xié)議:IIC,SPI,UART,CAN,1-WIRE,這些協(xié)議都是低速的,而且而是必須要掌握的內(nèi)容,經(jīng)常在使用和面試中出現(xiàn)。
現(xiàn)在應(yīng)該是使用不成問(wèn)題,但是細(xì)節(jié)里面的諸多細(xì)節(jié)要考慮,而且在每次使用的時(shí)候在看時(shí)序圖時(shí)仍有若干疑惑的地方,協(xié)議除了傳感器和MCU之間的通訊,其本身也可以傳輸數(shù)據(jù),最終想實(shí)現(xiàn)的效果是可以在兩個(gè)MCU之間使用協(xié)議來(lái)傳輸自己的數(shù)據(jù)包。ElectronBot-數(shù)字舵機(jī)篇,就好像這篇文章里面寫(xiě)的一樣,自己封裝,自己定義。這樣的優(yōu)點(diǎn)就是若干個(gè)MCU可以組合在一起,真正的形成一種MCU傳感器網(wǎng)絡(luò)。當(dāng)然看起來(lái)很美好,但是可能實(shí)現(xiàn)起來(lái)由于各種原因可能會(huì)鴿。
但是無(wú)傷大雅,一些疑惑是肯定要解的。
佳能 EF 鏡頭 SPI詳細(xì)協(xié)議
MCP3421-18bit ADC 調(diào)試,不過(guò)這個(gè)ADC寫(xiě)的是真不錯(cuò)
Seeed-XIAO-ESP32-C3-ADS1115測(cè)試
ADS1115-16Bit ADC 調(diào)試.上
Ti.ADS1115-15Bit差分ADC,TI的ADC也是補(bǔ)足了一些疑惑
這也是是之前寫(xiě)的,感覺(jué)還是有點(diǎn)不求甚解了。
本來(lái)也想上示波器的,但是在家里面沒(méi)帶。
這次呢會(huì)使用一個(gè)ST家的傳感器(原因是便宜易得):
VL53L0X集成了領(lǐng)先的SPAD陣列(單光子雪崩二極管),并內(nèi)嵌意法半導(dǎo)體第二代FlightSense專利技術(shù)。 VL53L0X的940 nm VCSEL發(fā)射器(垂直腔面發(fā)射激光器)完全不為人眼所見(jiàn),加上內(nèi)置的物理紅外濾光片,使其測(cè)距距離更長(zhǎng),對(duì)環(huán)境光的免疫性更強(qiáng),對(duì)蓋片的光學(xué)串?dāng)_表現(xiàn)出更好的穩(wěn)定性。
NXP現(xiàn)在是IIC的協(xié)議的標(biāo)準(zhǔn)文檔
而且各家呢,因?yàn)橄胱兊糜胁町愋?,也?huì)起一些自己的名字,但是大體上是換湯不換藥的。就是IIC這個(gè)名字和SDA,SCL上面有改動(dòng)。
這個(gè)是一個(gè)傳感器的拓?fù)鋱D
以前問(wèn),IIC到底是幾根線,其實(shí)應(yīng)該是一個(gè)2線的協(xié)議,這里就不加電源和中斷線了。
SDA 和 SCL 都是雙向線路都通過(guò)一個(gè)電流源或上拉電阻連接到正的電源電壓,當(dāng)總線空閑時(shí)這兩條線路都是高電平連接到總線的器件輸出級(jí)必須是漏極開(kāi)路或集電極開(kāi)路才能執(zhí)行線與的功能。
I2C 總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá) 100kbit/s 在快速模式下可達(dá) 400kbit/s 在高速模式下可達(dá)4Mbit/s 連接到總線的接口數(shù)量只由總線電容是 400pF 的限制決定。
下面的這個(gè)圖就是全文最精華的圖,數(shù)據(jù)究竟是什么時(shí)候傳的?
看綠色的框,永遠(yuǎn)都是時(shí)鐘小于數(shù)據(jù)
數(shù)據(jù)的有效性在時(shí)鐘的HIGH時(shí)段,SDA線上的數(shù)據(jù)必須是穩(wěn)定的。
只有當(dāng)SCL線上的時(shí)鐘信號(hào)為L(zhǎng)OW時(shí),數(shù)據(jù)線的HIGH或LOW狀態(tài)才能改變(見(jiàn)圖上)。每傳輸一個(gè)數(shù)據(jù)位產(chǎn)生一個(gè)時(shí)鐘脈沖。
也就是另一個(gè)疑惑,時(shí)序圖里面這個(gè)互相交叉的線是什么意思,它在數(shù)據(jù)傳輸上的意思是,這個(gè)地方,進(jìn)行了高低電平的變換,1是高,0是低,在時(shí)序上的意思是,在時(shí)鐘信號(hào)為L(zhǎng)OW時(shí),數(shù)據(jù)可以進(jìn)行變化。
這個(gè)是MCP3421的時(shí)序圖
可以看到交叉是時(shí)鐘的LOW,在數(shù)據(jù)上的意思是,處于data和ACK的位置,自然是有不同的狀態(tài)。
我再換個(gè)說(shuō)法重復(fù)一次上面的內(nèi)容:
I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),在SCL的每個(gè)時(shí)鐘脈沖期間傳輸一個(gè)數(shù)據(jù)位,時(shí)鐘信號(hào)SCL為高電平期間,數(shù)據(jù)線SDA上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線SCL上的信號(hào)為低電平期間,數(shù)據(jù)線SDA上的高電平或低電平狀態(tài)才允許變化,因?yàn)楫?dāng)SCL是高電平時(shí),數(shù)據(jù)線SDA的變化被規(guī)定為控制命令(START或STOP,也就是前面的起始信號(hào)和停止信號(hào))。
數(shù)據(jù)有效傳輸在scl信號(hào)的高電平期間,sda數(shù)據(jù)線保持穩(wěn)定,在scl為低電平時(shí)允許sda數(shù)據(jù)線變化。
數(shù)據(jù)傳輸必須帶響應(yīng),相關(guān)的響應(yīng)SCL時(shí)鐘脈沖由主機(jī)產(chǎn)生,在響應(yīng)的時(shí)鐘脈沖期間,發(fā)送器釋放 SDA 線(輸出高阻態(tài)使SDA線被上拉電阻拉高)。在響應(yīng)的時(shí)鐘脈沖期間,接收器必須將 SDA 線拉低,使它在這個(gè)時(shí)鐘脈沖的高電平期間保持穩(wěn)定的低電平。必須考慮建立和保持時(shí)間。
我覺(jué)得是應(yīng)該是講明白了,以前這就是個(gè)疑惑沒(méi)有人告訴我。
接下來(lái)就是開(kāi)始和停止:
啟動(dòng)和停止條件所有事務(wù)都以START (S)開(kāi)始,并以STOP (P)終止(參見(jiàn)圖上)。SDA線上的HIGH到LOW轉(zhuǎn)換(SCL為HIGH)定義了START條件。
SCL為HIGH時(shí),SDA線上的LOW到HIGH轉(zhuǎn)換定義了一個(gè)停止條件。
這里的細(xì)節(jié)我覺(jué)得知道這些就可以了,在SDA拉低以后,這個(gè)通訊資源就相當(dāng)于是獨(dú)占了。
下面說(shuō)傳輸?shù)臄?shù)據(jù)格式:
這里也給一個(gè)中文的翻譯
byte組織:SDA上的數(shù)據(jù)傳輸是以8bit即一個(gè)字節(jié)為單位傳輸?shù)?,每一次傳輸?shù)淖止?jié)數(shù)沒(méi)有限制,每傳輸完一個(gè)字節(jié)后必須跟隨一個(gè)應(yīng)答位。 以01001001(0X49)為例,其時(shí)序圖如下:
放在SDA線路上的每個(gè)字節(jié)必須是8位長(zhǎng)。每次傳輸可以傳輸?shù)淖止?jié)數(shù)不受限制。每個(gè)字節(jié)后面必須跟一個(gè)確認(rèn)位。數(shù)據(jù)首先以最高有效位(MSB)傳輸。
如果目標(biāo)不能接收或傳輸另一個(gè)完整的數(shù)據(jù)字節(jié),直到它執(zhí)行了一些其他功能,例如服務(wù)內(nèi)部中斷,它可以保持時(shí)鐘線SCL LOW以迫使控制器進(jìn)入等待狀態(tài)。然后,當(dāng)目標(biāo)準(zhǔn)備好接收另一個(gè)字節(jié)數(shù)據(jù)并釋放時(shí)鐘線SCL時(shí),數(shù)據(jù)傳輸繼續(xù)進(jìn)行。
看懂了嗎?這就是一次傳多個(gè)字節(jié)的奧秘,在時(shí)鐘線上,拉低向MCU說(shuō)還沒(méi)有搞完,在準(zhǔn)備了,好了以后就把線拉高,開(kāi)始。
說(shuō)說(shuō)ACK,NACK信號(hào):
確認(rèn)發(fā)生在每個(gè)字節(jié)之后。確認(rèn)位允許接收方通知發(fā)送方該字節(jié)已成功接收,并且可以發(fā)送另一個(gè)字節(jié)??刂破鳟a(chǎn)生所有時(shí)鐘脈沖,包括確認(rèn)第九時(shí)鐘脈沖。
確認(rèn)信號(hào)的定義如下:在確認(rèn)時(shí)鐘脈沖期間,發(fā)射機(jī)釋放SDA線,因此接收器可以將SDA線拉低,并在該時(shí)鐘脈沖的高電平期間保持穩(wěn)定低電平。
就是這個(gè)圖
設(shè)置和保持時(shí)間也必須考慮在內(nèi)。當(dāng)SDA在第9個(gè)時(shí)鐘脈沖期間保持高電平時(shí),這被定義為不確認(rèn)信號(hào)。
然后控制器可以生成一個(gè)STOP條件來(lái)中止傳輸,或者一個(gè)重復(fù)的START條件來(lái)開(kāi)始新的傳輸。
也就是說(shuō)這個(gè)ack信號(hào)會(huì)影響之后的數(shù)據(jù)傳輸,也好理解,都沒(méi)有收到之后的發(fā)送都是無(wú)用功,就不發(fā)了??梢灾匦掳l(fā),也可以停掉。
有五個(gè)條件會(huì)導(dǎo)致NACK的產(chǎn)生:
1. 總線上不存在具有傳輸?shù)刂返慕邮掌?,因此沒(méi)有設(shè)備響應(yīng)確認(rèn)。
2. 接收器無(wú)法接收或發(fā)送,因?yàn)樗趫?zhí)行一些實(shí)時(shí)功能,還沒(méi)有準(zhǔn)備好開(kāi)始與控制器通信。
3. 在傳輸過(guò)程中,接收方接收到它不理解的數(shù)據(jù)或命令。
4. 在傳輸過(guò)程中,接收方不能再接收任何數(shù)據(jù)字節(jié)。
5. 控制器-接收器必須向目標(biāo)發(fā)送器發(fā)出傳輸結(jié)束的信號(hào)。
下面說(shuō)時(shí)鐘:
時(shí)鐘同步兩個(gè)控制器可以同時(shí)在空閑總線上開(kāi)始傳輸,并且必須有一種方法來(lái)決定哪一個(gè)控制總線并完成傳輸。這是通過(guò)時(shí)鐘同步和仲裁完成的。
在單控制器系統(tǒng)中,不需要時(shí)鐘同步和仲裁。時(shí)鐘同步是使用I2C接口到SCL線的有線與連接來(lái)執(zhí)行的。
這意味著SCL線上的HIGH到LOW轉(zhuǎn)換導(dǎo)致相關(guān)控制器開(kāi)始計(jì)數(shù)其LOW周期,一旦控制器時(shí)鐘已變?yōu)長(zhǎng)OW,它將SCL線保持在該狀態(tài),直到時(shí)鐘達(dá)到HIGH狀態(tài)(見(jiàn)圖上)。
然而,如果另一個(gè)時(shí)鐘仍在其LOW周期內(nèi),則該時(shí)鐘的LOW到HIGH轉(zhuǎn)換可能不會(huì)改變SCL線的狀態(tài)。因此,SCL線由具有最長(zhǎng)低電平周期的控制器保持低電平。低周期較短的控制器在此期間進(jìn)入高等待狀態(tài)。
這個(gè)是我沒(méi)有看到過(guò)的東西,就是兩個(gè)時(shí)鐘信號(hào)對(duì)協(xié)議信號(hào)的影響,不過(guò)就記住我上面的黑色部分就好。
當(dāng)所有相關(guān)的控制器都計(jì)算出它們的LOW周期時(shí),時(shí)鐘線被釋放并變?yōu)镠IGH。然后,控制器時(shí)鐘和SCL線的狀態(tài)之間沒(méi)有區(qū)別,并且所有控制器開(kāi)始計(jì)數(shù)它們的HIGH周期。第一個(gè)完成其HIGH周期的控制器再次將SCL線拉至LOW。這樣,就會(huì)生成一個(gè)同步的SCL時(shí)鐘,其LOW周期由時(shí)鐘LOW周期最長(zhǎng)的控制器決定,HIGH周期由時(shí)鐘HIGH周期最短的控制器決定。
一個(gè)IIC的信號(hào)周期的長(zhǎng)短由兩個(gè)MCU時(shí)鐘信號(hào)來(lái)決定。
這里的多傳感器數(shù)據(jù)沖突我就不講了,目前好像還沒(méi)有用到。
接下來(lái)說(shuō)數(shù)據(jù)傳輸,和上面有點(diǎn)一樣:
數(shù)據(jù)傳輸遵循圖上所示的格式,第二個(gè)字節(jié)有看頭
這個(gè)是MSB先行
在START條件(S)之后,發(fā)送一個(gè)目標(biāo)地址。這個(gè)地址有7位長(zhǎng),后面跟著第8位數(shù)據(jù)方向位(R/W)——“0”表示傳輸(WRITE),“1”表示數(shù)據(jù)請(qǐng)求(READ)
由控制器產(chǎn)生的停止條件(P)。但是,如果控制器仍然希望在總線上進(jìn)行通信,它可以生成重復(fù)的START條件(Sr),并在不首先生成STOP條件的情況下處理另一個(gè)目標(biāo)。在這樣的傳輸中,讀/寫(xiě)格式的各種組合是可能的。
接了個(gè)電話,思路都沒(méi)有了,撲街。。。
可能的數(shù)據(jù)傳輸格式有:
a,其實(shí)是A上面有一個(gè)橫杠,就是不響應(yīng)的意思,下面丟失了。產(chǎn)生這個(gè)信號(hào)以后,主機(jī)發(fā)出了停止信號(hào)。
控制器-發(fā)射機(jī)發(fā)送到目標(biāo)-接收機(jī)。傳輸方向沒(méi)有改變。目標(biāo)接收方確認(rèn)每個(gè)字節(jié)。
叨叨兩句吧,就是主機(jī)一直發(fā)數(shù)據(jù),傳感器就應(yīng)答收到了,像極了被罵的的我,是是是,對(duì)對(duì)對(duì)。
控制器在第一個(gè)字節(jié)之后立即讀取目標(biāo)。在第一次確認(rèn)的時(shí)刻,控制-發(fā)送者成為控制-接收者,目標(biāo)-接收者成為目標(biāo)-發(fā)送者。這個(gè)第一個(gè)確認(rèn)仍然由目標(biāo)生成??刂破魃珊罄m(xù)確認(rèn)。STOP條件由控制器生成,控制器在STOP條件之前發(fā)送一個(gè)不確認(rèn)(a)。
這個(gè)呢就是讀取傳感器的值,瘋狂的拿,必要時(shí)候會(huì)說(shuō),拿到了。
組合格式。在傳輸過(guò)程中改變方向時(shí),START條件和目標(biāo)地址都是重復(fù)的,但是R/W位顛倒了。如果控制器-接收器發(fā)送一個(gè)重復(fù)的START條件,它在重復(fù)的START條件之前發(fā)送一個(gè)nottacknowledge (a)。
復(fù)合格式:傳輸改變方向的時(shí)侯,起始條件和從機(jī)地址都會(huì)被重復(fù) 但 R/ W 位取反,如果主機(jī)接收器發(fā)送一個(gè)重復(fù)起始條件,它之前應(yīng)該發(fā)送了一個(gè)不響應(yīng)信號(hào) A。相當(dāng)于是沒(méi)搭理,信號(hào)斷了,傳感器主動(dòng)的找MCU。復(fù)合格式可以用于例如控制一個(gè)串行存儲(chǔ)器在第一個(gè)數(shù)據(jù)字節(jié)期間 要寫(xiě)內(nèi)部存儲(chǔ)器的位置在重復(fù)起始條件和從機(jī)地址后數(shù)據(jù)可被傳輸。
注:1. 例如,可以使用組合格式來(lái)控制串行存儲(chǔ)器。必須在寫(xiě)入第一個(gè)數(shù)據(jù)字節(jié)期間寫(xiě)入內(nèi)部存儲(chǔ)器位置。重復(fù)START條件和目標(biāo)地址后,即可傳輸數(shù)據(jù)。
2. 所有關(guān)于先前訪問(wèn)的內(nèi)存位置的自動(dòng)遞增或遞減的決定,等等,都是由設(shè)備的設(shè)計(jì)者做出的。
3. 每個(gè)字節(jié)后面跟著一個(gè)確認(rèn)位,由序列中的A或A塊表示。
4. pc總線兼容設(shè)備必須在接收到START或重復(fù)START條件時(shí)重置其總線邏輯,以便它們都預(yù)期目標(biāo)的發(fā)送地址,即使這些START條件沒(méi)有按照正確的格式定位。
5. START條件緊跟著STOP條件(無(wú)效消息)是一種非法格式。然而,許多設(shè)備被設(shè)計(jì)為在這種條件下正常運(yùn)行。
6. 連接到總線的每個(gè)設(shè)備都可以通過(guò)唯一的地址尋址。通常存在一個(gè)簡(jiǎn)單的控制器/目標(biāo)關(guān)系,但也可能有多個(gè)相同的目標(biāo)可以同時(shí)接收和響應(yīng),例如在組廣播中。
說(shuō)說(shuō)尋址:I2C總線的尋址過(guò)程是通常在起始條件后的第一個(gè)字節(jié)決定了主機(jī)選擇哪一個(gè)從機(jī)例外的情況是可以尋址所有器件的廣播呼叫地址使用這個(gè)地址時(shí) 理論上所有器件都會(huì)發(fā)出一個(gè)響應(yīng)但是也可以使器件忽略這個(gè)地址廣播呼叫地址的第二個(gè)字節(jié)定義了要采取的行動(dòng)。
總有人不回答,媽的。
從機(jī)地址由一個(gè)固定和一個(gè)可編程的部分構(gòu)成由于很可能在一個(gè)系統(tǒng)中有幾個(gè)同樣的器件從機(jī)地址的可編程部分使最大數(shù)量的這些器件可以連接到I2C總線上器件可編程地址位的數(shù)量由它可使用的管腳決定
例如:如果器件有 4 個(gè)固定的和 3 個(gè)可編程的地址位那么相同的總線上共可以連接8個(gè)相同的器件。
原來(lái)這些都是找過(guò)飛利浦買的
總結(jié)了I2C總線系統(tǒng)特性的規(guī)范要求,包括了強(qiáng)制和可選部分 Table 2 i2c總線協(xié)議特性的要求 M = 強(qiáng)制; O = 可選; n/a = 不適用
聽(tīng)累沒(méi)有?估計(jì)沒(méi)有幾個(gè)看到這里的。
來(lái)看一個(gè)真實(shí)的協(xié)議信號(hào)
IIC的輸入輸出結(jié)構(gòu)采用的是開(kāi)漏的結(jié)構(gòu)。開(kāi)漏結(jié)構(gòu)不能夠自主得到高電平,所以需要通過(guò)外部上拉電阻Rp來(lái)的實(shí)現(xiàn)IIC通信過(guò)程中的高電平。Rp的大小取決于IIC不同模式時(shí)的灌電流大小。 下面兩個(gè)圖是描述IIC獲得高低電平的情景。因?yàn)橐粭lIIC總線上面可能會(huì)同時(shí)連接上多個(gè)設(shè)備,如果IIC使用的是推挽輸出的話容易引起短路。 IIC設(shè)備可以通過(guò)控制N-MOS管的開(kāi)關(guān)來(lái)控制輸出信號(hào)的電平高低。當(dāng)MOS管G極為低電平時(shí)MOS管截止IIC總線上面由于有上拉電阻的存在而為高電平;當(dāng)MOS管G極為高電平時(shí)MOS管導(dǎo)通,IIC總線相當(dāng)于直接接地為低電平。 IIC的輸入是通過(guò)TTL肖特基觸發(fā)器將數(shù)據(jù)傳輸?shù)捷斎霐?shù)據(jù)寄存器當(dāng)中,再提供給處理器處理。
由于種類的設(shè)備都有可能連接到IIC總線上面,比如說(shuō)CMOS、NMOS等,所以IIC的高電平和低電平的標(biāo)準(zhǔn)是不一定的。高電平和低電平的值分別為0.7VDD和0.3VDD。
IIC的總線連接可以接受多主機(jī)的模式,也就是說(shuō)一條IIC總線上面可以有多個(gè)設(shè)備可以作為主機(jī)來(lái)使用,但是在一次數(shù)據(jù)的傳輸過(guò)程中只能有一個(gè)設(shè)備作為主機(jī)。一條IIC總線上面誰(shuí)是主機(jī)取決于總線上面的時(shí)鐘和數(shù)據(jù)信號(hào)由誰(shuí)控制。
如果兩個(gè)MCU同時(shí)發(fā)起開(kāi)始信號(hào)時(shí)(都試圖成為主機(jī)),這時(shí)候IIC的仲裁機(jī)制會(huì)發(fā)揮作用來(lái)判定誰(shuí)成為主機(jī)。
IIC的仲裁機(jī)制得益于其開(kāi)漏的輸入輸出結(jié)構(gòu)。例如如圖所示,當(dāng)SCL線上掛載的多個(gè)設(shè)備,其中的MCU2的SCL輸出低電平,那么這條IIC總線SCL就會(huì)被MCU2拉低,這也就是“與”的特性。 IIC上的仲裁主要是由兩部分組成SCL時(shí)鐘同步、SDA線仲裁。
如圖所示CLK1和CLK2都是連接在一條SCL線上的設(shè)備同時(shí)產(chǎn)生的時(shí)鐘信號(hào),由于IIC總線存在“與”的特性,所以兩個(gè)設(shè)備高電平相同的部分形成了SCL最終的時(shí)鐘,也就是說(shuō)同一條IIC總線上面的時(shí)鐘都是相同的。
那突然就理解了上面文章里面的時(shí)鐘是什么意思。
同樣SDA仲裁也是基于“與”的特性。如圖所示當(dāng)兩個(gè)設(shè)備同時(shí)發(fā)出開(kāi)始信號(hào)想要傳送數(shù)據(jù)時(shí),在第一個(gè)和第二個(gè)周期內(nèi)DATA1和DATA2的數(shù)據(jù)都是相同的,然后兩者繼續(xù)傳送數(shù)據(jù),當(dāng)在第三個(gè)時(shí)鐘周期時(shí)DATA2與SDA的數(shù)據(jù)不一致,這個(gè)時(shí)候設(shè)備2就會(huì)停止發(fā)送數(shù)據(jù),轉(zhuǎn)而啟動(dòng)接收模式。這樣SDA的數(shù)據(jù)就會(huì)與DATA1的數(shù)據(jù)保持一致,并且設(shè)備2停止發(fā)送數(shù)據(jù)也不會(huì)影響SDA的數(shù)據(jù)。
所示是示波器采集的IIC信號(hào),得到這一段IIC包含的信息,主機(jī)向地址為0XA0 的設(shè)備寫(xiě)入0X0C。
感謝夢(mèng)源得文章,通了這次。
OKOK,看傳感器吧,不想寫(xiě)了。
最大是400kHz
有中斷腳
XSHUT是可以控制功耗的引腳
上電和啟動(dòng)順序有兩個(gè)選項(xiàng)可用于設(shè)備上電/啟動(dòng)。
選項(xiàng)1:XSHUT引腳連接并從主機(jī)控制。此選項(xiàng)有助于優(yōu)化功耗,因?yàn)閂L53LOX可以在不使用時(shí)完全斷電,然后通過(guò)主機(jī)GPIO(使用XSHUT引腳)喚醒。
HW待機(jī)模式定義為AVDD存在且XSHUT處于低電平的時(shí)間段。
選項(xiàng)2:XSHUT引腳不受主機(jī)控制,通過(guò)上拉電阻連接到AVDD。如果XSHUT引腳不受控制,則上電順序如圖所示。在這種情況下,設(shè)備在FW啟動(dòng)后自動(dòng)進(jìn)入SW STANDBY,不進(jìn)入HW STANDBY。
SW是待機(jī)時(shí)刻。
也是IIC的接口,看時(shí)序圖吧,應(yīng)該很好懂了
信息被封裝在8位數(shù)據(jù)包(字節(jié))中,后面總是跟著一個(gè)確認(rèn)位,Ac表示VL53LOX確認(rèn),Am表示主確認(rèn)(主機(jī)總線主)。
內(nèi)部數(shù)據(jù)是在SCL上升沿采樣SDA產(chǎn)生的。在SCL的高峰期,外部數(shù)據(jù)必須是穩(wěn)定的。
例外情況是SDA下降或上升時(shí)的啟動(dòng)(S)或停止(P)條件,而SCL較高。消息包含一系列字節(jié),前面是開(kāi)始條件,后面是停止或重復(fù)開(kāi)始(另一個(gè)開(kāi)始條件,但沒(méi)有前面的停止條件),然后是另一個(gè)消息。第一個(gè)字節(jié)包含設(shè)備地址(Ox52),還指定了數(shù)據(jù)方向。如果最低有效位很低(即Ox52),則消息是主向從機(jī)寫(xiě)。如果設(shè)置了Isb(即Ox53),則消息是從從機(jī)讀取的主消息。
地址,MSB先行
寫(xiě),Ac是傳感器收到
當(dāng)數(shù)據(jù)被從機(jī)接收時(shí),它被一點(diǎn)一點(diǎn)地寫(xiě)入串行/并行寄存器。從服務(wù)器接收到每個(gè)數(shù)據(jù)字節(jié)后,將生成一個(gè)確認(rèn),然后將數(shù)據(jù)存儲(chǔ)在當(dāng)前索引尋址的內(nèi)部寄存器中。
在讀取消息期間,當(dāng)前索引所尋址的寄存器的內(nèi)容在設(shè)備地址字節(jié)后面的字節(jié)中讀出。該寄存器的內(nèi)容被并行加載到串行/并行寄存器中,并通過(guò)SCL的下降沿從設(shè)備中進(jìn)行時(shí)鐘輸出。
讀
在每個(gè)字節(jié)的末尾,在讀和寫(xiě)消息序列中,接收設(shè)備(即,用于寫(xiě)的VL53LOX和用于讀的主機(jī))發(fā)出確認(rèn)。
消息只能由總線主機(jī)在讀取操作期間讀取完整字節(jié)后,通過(guò)發(fā)出停止條件或通過(guò)負(fù)確認(rèn)(即不將SDA線拉低)來(lái)終止。
該接口還支持自動(dòng)增量索引。傳輸完第一個(gè)數(shù)據(jù)字節(jié)后,索引自動(dòng)加1。因此,主服務(wù)器可以連續(xù)地向從服務(wù)器發(fā)送數(shù)據(jù)字節(jié),直到從服務(wù)器無(wú)法提供確認(rèn)或者主服務(wù)器以停止條件終止寫(xiě)通信。如果使用了自動(dòng)增量特性,主機(jī)就不必發(fā)送地址索引來(lái)伴隨數(shù)據(jù)字節(jié)。
順序?qū)懭?/p>
順序讀
32bit寄存器實(shí)列
這個(gè)是比較奇怪的,API的文檔不在數(shù)據(jù)手冊(cè)里面。
寫(xiě)不動(dòng)了。。。太多了。
-
總線
+關(guān)注
關(guān)注
10文章
2900瀏覽量
88306 -
I2C
+關(guān)注
關(guān)注
28文章
1495瀏覽量
124339 -
IIC協(xié)議
+關(guān)注
關(guān)注
0文章
16瀏覽量
3951
原文標(biāo)題:IIC協(xié)議長(zhǎng)文詳解-解惑版
文章出處:【微信號(hào):TT1827652464,微信公眾號(hào):云深之無(wú)跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論