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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux i2c驱动协议

發(fā)布時(shí)間:2023/12/10 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux i2c驱动协议 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、I2C

I2C Bus(Inter-Integrated Circuit Bus)最早是由Philips半導(dǎo)體(現(xiàn)被NXP收購(gòu))開(kāi)發(fā)的兩線時(shí)串行總線,常用于微控制器與外設(shè)之間的連接。

2、硬件連接

I2C僅需兩根線就可以支持一主多從或者多主連接,I2C使用兩個(gè)雙向開(kāi)漏線,配合上拉電阻進(jìn)行連接,上拉電阻阻值大小有最大值和最小值的限制。

3、硬件拉低(Open-Drain Pulling Low)

????????下圖代表了總線電平拉低過(guò)程,當(dāng)總線要傳輸?shù)碗娖?時(shí),Logic會(huì)控制FET使其導(dǎo)通VBUS總線連接到地,將總線拉低,注意在快速模式下最大的灌電流不超過(guò)3mA,這限制了上拉電阻的最小值。

?

4、硬件拉高(Open-Drain Releasing Bus)

????????下圖代表了總線電平高電平過(guò)程,當(dāng)總線要傳輸高電平1時(shí),Logic會(huì)控制FET使其關(guān)斷VBUS總線上拉到電源,將總線拉高。

5、軟件通訊協(xié)議

????????I2C是串行傳輸總線,按照下面格式進(jìn)行一位一位傳輸,協(xié)議傳輸如下:

6、總線速度

雙向傳輸總線:

  • 標(biāo)準(zhǔn)模式(Standard-mode):速率高達(dá)100kbit/s
  • 快速模式(Fast-mode):速率高達(dá)400kbit/s
  • 快速模式+(Fast-mode Plus):速率高達(dá)1Mbit/s。
  • 高速模式(High-speed mode):速率高達(dá)3.4Mbit/s
  • 單向傳輸總線:

  • 超快速模式(Ultra Fast-mode):速率高達(dá)5Mbit/s
  • 7、起始和停止條件及重復(fù)起始條件

    起始和終止條件都是由主機(jī)(master)發(fā)起產(chǎn)生。總線在起始條件之后處于忙碌狀態(tài),在停止條件之后又處于空閑狀態(tài)。

  • 起始條件:SCL線是高電平時(shí),SDA線從高電平向低電平切換。
  • 停止條件:SCL線是高電平時(shí),SDA線從低電平向高電平切換。
  • 重復(fù)起始條件:和起始條件相似,重復(fù)起始條件發(fā)生在停止條件之前。主機(jī)想繼續(xù)給從機(jī)發(fā)送消息時(shí),一個(gè)字節(jié)傳輸完成后可以發(fā)送重復(fù)起始條件,而不是產(chǎn)生停止條件。
  • 8、字節(jié)格式

    ????????SDA數(shù)據(jù)線上的每個(gè)字節(jié)必須是8位,每次傳輸?shù)淖止?jié)數(shù)量沒(méi)有限制。每個(gè)字節(jié)后必須跟一個(gè)響應(yīng)位(ACK)。首先傳輸?shù)臄?shù)據(jù)是最高位(MSB),SDA上的數(shù)據(jù)必須在SCL高電平周期時(shí)保持穩(wěn)定,數(shù)據(jù)的高低電平翻轉(zhuǎn)變化發(fā)生在SCL低電平時(shí)期。

    ?

    9、響應(yīng)ACK和非響應(yīng)NACK

    ????????每個(gè)字節(jié)傳輸必須帶響應(yīng)位,相關(guān)的響應(yīng)時(shí)鐘也由主機(jī)產(chǎn)生,在響應(yīng)的時(shí)鐘脈沖期間(第9個(gè)時(shí)鐘周期),發(fā)送端釋放SDA線,接收端把SDA拉低。以上圖傳輸101010101為例,SCL第9位時(shí)鐘高電平信號(hào)期間,SDA拉低其代表了有ACK響應(yīng)位。

    當(dāng)在SCL第9位時(shí)鐘高電平信號(hào)期間,SDA仍然保持高電平,這種情況定義為NACK非響應(yīng)位。這種情況下,主機(jī)可以直接產(chǎn)生STOP條件終止以后的傳輸或者繼續(xù)重新START開(kāi)始一個(gè)新的傳輸。以下情況會(huì)導(dǎo)致出現(xiàn)NACK位:

  • 接收機(jī)沒(méi)有發(fā)送機(jī)響應(yīng)的地址,接收端沒(méi)有任何ACK發(fā)送給發(fā)射機(jī)
  • 由于接收機(jī)正在忙碌處理實(shí)時(shí)程序?qū)е陆訜o(wú)法接收或者發(fā)送
  • 傳輸過(guò)程中,接收機(jī)識(shí)別不了發(fā)送機(jī)的數(shù)據(jù)或命令
  • 接收機(jī)無(wú)法接收
  • 主機(jī)接收完成讀取數(shù)據(jù)后,要發(fā)送NACK結(jié)束告知從機(jī)
  • 10、7-bit地址格式和讀寫(xiě)位

    一個(gè)7-bit的地址是從最高位(MSB)開(kāi)始發(fā)送的,這個(gè)地址后面會(huì)緊跟1-bit(R/W)的操作符,1表示讀操作,0表示寫(xiě)操作。接下來(lái)的一個(gè)bit是NACK/ACK,當(dāng)這個(gè)幀中前面8 bit發(fā)送完后,接收端的設(shè)備獲得SDA控制權(quán),此時(shí)接收設(shè)備應(yīng)該在第9個(gè)時(shí)鐘脈沖之前回復(fù)一個(gè)ACK(將SDA拉低)以表示接收正常,如果接收設(shè)備沒(méi)有將SDA拉低,則說(shuō)明接收設(shè)備可能沒(méi)有收到數(shù)據(jù)(如尋址的設(shè)備不存在或設(shè)備忙)或無(wú)法解析收到的消息,如果是這樣,則由master來(lái)決定如何處理(stop或repeated start condition)。

    ?

    總結(jié)

    以上是生活随笔為你收集整理的linux i2c驱动协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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