日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MPU6050开发 -- 进阶之I2C/SPI通信协议

發(fā)布時(shí)間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MPU6050开发 -- 进阶之I2C/SPI通信协议 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如需轉(zhuǎn)載請注明出處:https://blog.csdn.net/qq_29350001/article/details/78611309

上一篇基本概念講了一通,大體上對MPU6050有了一個(gè)了解。對于MPU6050開發(fā)來講主要的應(yīng)該就是 I2C/SPI 通信和寄存器控制了吧。

接下來我們繼續(xù)看芯片手冊,簡單了解一下I2C/SPI通信協(xié)議。(S5PV210開發(fā)里再綜合詳講)

I2C 和SPI 都是串行同步通信,同步通信和異步通信區(qū)別是什么?這一點(diǎn)我們剛講過,參看:S5PV210開發(fā) -- 通信

?

一、I2C和SPI(僅限MPU-6000)串行接口

MPU-6000 / MPU-6050的內(nèi)部寄存器和存儲(chǔ)器可以使用400 kHz的I2C 或 1MHz的SPI(僅MPU-6000)訪問。 SPI工作在四線模式。

?

注意:
為了防止在使用SPI(MPU-6000)時(shí)切換到I2C模式,應(yīng)通過設(shè)置 I2C_IF_DIS 配置位來禁用 I2C 接口。 在等待 6.3節(jié)“寄存器讀/寫啟動(dòng)時(shí)間”指定的時(shí)間后,立即執(zhí)行該位設(shè)置。

?

二、I2C接口

I2C是由信號(hào)串行數(shù)據(jù)(SDA)和串行時(shí)鐘(SCL)組成的雙線接口。 一般來說,這些線路是開漏和雙向的。 在廣義的I2C接口實(shí)現(xiàn)中,連接的設(shè)備可以是主設(shè)備或從設(shè)備。 主設(shè)備將從設(shè)備地址放在總線上,并且具有匹配地址的從設(shè)備確認(rèn)主設(shè)備。
系統(tǒng)處理器(MPU-60X0)作為從設(shè)備與主系統(tǒng)處理器進(jìn)行通信。 SDA和SCL線通常需要上拉電阻(4.7k電阻)到VDD。 最大總線速度是400 kHz。
MPU-60X0的從機(jī)地址為 b110100X,長度為7位。
7位地址的LSB位由引腳AD0的邏輯電平?jīng)Q定。 這允許兩個(gè)MPU-60X0 連接到同一個(gè)I2C總線。在此配置中使用時(shí),其中一個(gè)設(shè)備的地址應(yīng)為b1101000(AD0引腳為邏輯低電平),另一個(gè)的地址應(yīng)為b1101001(AD0引腳為邏輯高電平)。

?

PS:講到這里就搞明白了,為什么AD0接地了!!

思考:這里只給出了從機(jī)地址?b110100X,那I2C的讀地址和寫地址是什么呢?

?

三、I2C通信協(xié)議

(1)開始(S)和停止(P)條件:

主機(jī)在總線上啟動(dòng) START 條件(S)時(shí)啟動(dòng) I2C 總線通信,總線定義為 SCL 線為高電平(見下圖)時(shí),SDA 線從高電平變?yōu)榈碗娖健?/strong> 總線被認(rèn)為是繁忙的,直到主機(jī)在總線上放置一個(gè)停止條件(P),在SCL為高電平(見下圖)時(shí),在SDA線路上定義為從低電平到高電平的跳變

?

?

此外,如果產(chǎn)生一個(gè)重復(fù)的START(Sr)而不是STOP條件,總線將保持忙碌狀態(tài)。

?

(2)數(shù)據(jù)格式/應(yīng)答

?

I2C 數(shù)據(jù)字節(jié)定義為8位長。 每個(gè)數(shù)據(jù)傳輸傳輸?shù)淖止?jié)數(shù)沒有限制。 傳輸?shù)拿總€(gè)字節(jié)必須跟一個(gè)應(yīng)答(ACK)信號(hào)應(yīng)答信號(hào)的時(shí)鐘由主器件產(chǎn)生,而接收器通過下拉 SDA 并在應(yīng)答時(shí)鐘脈沖的高電平期間保持低電平來產(chǎn)生實(shí)際的應(yīng)答信號(hào)。
如果一個(gè)從機(jī)處于繁忙狀態(tài),并且在某個(gè)其他任務(wù)執(zhí)行之前不能發(fā)送或接收另一個(gè)數(shù)據(jù)字節(jié),則它可以保持SCL為低電平,從而強(qiáng)制主機(jī)進(jìn)入等待狀態(tài)。 當(dāng)從站準(zhǔn)備好時(shí),正常的數(shù)據(jù)傳輸恢復(fù),并釋放時(shí)鐘線(參見下圖)。

?

?

擴(kuò)展:

應(yīng)答信號(hào)的時(shí)鐘由主器件產(chǎn)生,這句話讓我想起先前做 DM368 編碼的時(shí)候出現(xiàn)無應(yīng)答的問題。

參看:DM368開發(fā) -- 編碼并實(shí)時(shí)播放

(3)通信

在開始與起始條件(S)的通信之后,主機(jī)發(fā)送一個(gè)7位從機(jī)地址,然后是第8位(讀/寫位)。 讀/寫位指示主器件是從正在接收數(shù)據(jù)還是正在寫入從器件。 然后,主器件釋放SDA線并等待來自從器件的應(yīng)答信號(hào)(ACK)。 傳輸?shù)拿總€(gè)字節(jié)后面都必須有一個(gè)應(yīng)答位。 為了應(yīng)答,從器件將SDA線拉低并在SCL線的高電平期間保持低電平。
數(shù)據(jù)傳輸始終由具有STOP條件(P)的主機(jī)終止,從而釋放通信線路。 但是,主器件可以產(chǎn)生一個(gè)重復(fù)的起始條件(Sr),并在不首先產(chǎn)生停止條件(P)的情況下尋址另一個(gè)從器件。 SCL為高電平時(shí),SDA線上的低電平至高電平轉(zhuǎn)換定義停止條件。 除了啟動(dòng)和停止條件之外,所有SDA變化都應(yīng)在SCL低電平時(shí)進(jìn)行

===============================

翻譯的真亂,簡單點(diǎn)說就是:

數(shù)據(jù)傳輸:SCL為高電平時(shí),SDA線若保持穩(wěn)定,那么SDA上是在傳輸數(shù)據(jù)bit;若SDA發(fā)生跳變,則用來表示一個(gè)會(huì)話的開始或結(jié)束。應(yīng)答(ADC)為SDA為低電平。
數(shù)據(jù)改變:SCL為低電平時(shí),SDA線才能改變傳輸?shù)腷it。

===============================

?

為了寫入內(nèi)部MPU-60X0寄存器,主機(jī)發(fā)送開始條件(S),然后是I2C地址和寫入位(0)。 在第9個(gè)時(shí)鐘周期(時(shí)鐘為高電平),MPU-60X0確認(rèn)傳輸。 然后主機(jī)把寄存器地址(RA)放在總線上。 在MPU-60X0確認(rèn)接收到寄存器地址后,主機(jī)將寄存器數(shù)據(jù)放到總線上。 接著是ACK信號(hào),數(shù)據(jù)傳輸可以由停止條件(P)結(jié)束。 為了在最后的ACK信號(hào)之后寫入多個(gè)字節(jié),主機(jī)可以繼續(xù)輸出數(shù)據(jù)而不是發(fā)送停止信號(hào)。 在這種情況下,MPU-60X0自動(dòng)遞增寄存器地址并將數(shù)據(jù)裝載到適當(dāng)?shù)募拇嫫鳌O聢D顯示了單字節(jié)和雙字節(jié)寫入序列:

要讀取內(nèi)部MPU-60X0寄存器,主機(jī)將發(fā)送一個(gè)開始條件然后是I2C地址和寫入位,然后是要讀取的寄存器地址。 主機(jī)收到來自MPU-60X0的ACK信號(hào)后,發(fā)送一個(gè)起始信號(hào)隨后是從機(jī)地址和讀取位。 結(jié)果,MPU-60X0發(fā)送一個(gè)ACK信號(hào)和數(shù)據(jù)。 通信以無應(yīng)答(NACK)結(jié)束信號(hào)和來自主機(jī)的停止位。 定義NACK條件,使得SDA線在第9個(gè)時(shí)鐘周期保持高電平。 下圖顯示了單字節(jié)和雙字節(jié)讀取序列。

四、I2C術(shù)語

五、SPI接口(僅限MPU-6000)

SPI 是一個(gè) 4 線同步串行接口,使用兩根控制線和兩根數(shù)據(jù)線。 標(biāo)準(zhǔn)主從SPI操作期間,MPU-6000始終作為從設(shè)備運(yùn)行。

對于主設(shè)備,串行時(shí)鐘輸出(SCLK),串行數(shù)據(jù)輸出(SDO)和串行數(shù)據(jù)輸入(SDI)在從設(shè)備之間共享每個(gè)SPI從器件都需要自己的片選(/ CS)線
/ CS 在傳輸開始時(shí)變?yōu)榈碗娖?#xff08;有效),在結(jié)束時(shí)變?yōu)楦唠娖?#xff08;無效)。 一次只有一個(gè)/ CS線路處于活動(dòng)狀態(tài),確保在任何給定時(shí)間只有一個(gè)從站被選中。 未選中的從器件的 / CS 線保持高電平,使 SDO 線保持高阻態(tài)(高阻態(tài)),從而不會(huì)干擾任何有源器件。

SPI操作特性

1、數(shù)據(jù)首先傳遞 MSB(最高位),最后傳遞 LSB(最低位)
2、數(shù)據(jù)在SCLK的上升沿鎖存
3、數(shù)據(jù)應(yīng)在SCLK的下降沿進(jìn)行轉(zhuǎn)換
4.、SCLK的最大頻率是1MHz
5.、SPI讀寫操作在16個(gè)或更多時(shí)鐘周期(兩個(gè)或多個(gè)字節(jié))內(nèi)完成。 第一個(gè)字節(jié)包含SPI地址,下一個(gè)字節(jié)包含SPI數(shù)據(jù)。 第一個(gè)字節(jié)的第一位包含讀/寫位,并指示讀(1)或?qū)?#xff08;0)操作。
以下7位包含寄存器地址。 在多字節(jié)讀/寫的情況下,數(shù)據(jù)是兩個(gè)或多個(gè)字節(jié):

6、支持單個(gè)或雙個(gè) 讀/寫

如需轉(zhuǎn)載請注明出處:https://blog.csdn.net/qq_29350001/article/details/78611309

?

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的MPU6050开发 -- 进阶之I2C/SPI通信协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。