亚洲av成人精品日韩一区,97久久久精品综合88久久,玩弄japan白嫩少妇hd,亚洲av片不卡无码久久,玩弄人妻少妇500系列

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第十六章 一文淺談I2C

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-28 16:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)

W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。

在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN68和QFN100。

W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、3個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN以及1個(gè)USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價(jià)比優(yōu)勢(shì)顯著,尤其適合網(wǎng)關(guān)模組等對(duì)空間布局要求較高的場(chǎng)景。緊湊的尺寸和精簡(jiǎn)化外設(shè)配置,使其能夠在有限空間內(nèi)實(shí)現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計(jì)算節(jié)點(diǎn)等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴(kuò)展的復(fù)雜工控場(chǎng)景,軟件使用方法一致。更多信息和資料請(qǐng)進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。

此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。

為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評(píng)估芯片性能。

若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZO2gbOfaAVPzkACJSygzv-rI600.png

第十六章 I2C

1 I2C簡(jiǎn)介

I2C(Inter-Integrated Circuit)總線是一種由 PHILIPS 公司開發(fā)的兩線式串行總線,用于連接微控制器以及其外圍設(shè)備。它是由數(shù)據(jù)線 SDA 和時(shí)鐘線 SCL 構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù),在 CPU 與被控 IC 之間、IC 與 IC 之間進(jìn)行雙向傳送。

I2C 總線有如下特點(diǎn):

?總線由數(shù)據(jù)線 SDA 和時(shí)鐘線 SCL 構(gòu)成的串行總線,數(shù)據(jù)線用來傳輸數(shù)據(jù),時(shí)鐘線用來同步數(shù)據(jù)收發(fā)。

?總線上每一個(gè)器件都有一個(gè)唯一的地址識(shí)別,所以我們只需要知道器件的地址,根據(jù)時(shí)序就可以實(shí)現(xiàn)微控制器與器件之間的通信。

?數(shù)據(jù)線 SDA 和時(shí)鐘線 SCL 都是雙向線路,都通過一個(gè)電流源或上拉電阻連接到正的電壓,所以當(dāng)總線空閑的時(shí)候,這兩條線路都是高電平。

?總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá) 100kbit/s 在快速模式下可達(dá) 400kbit/s 在高速模式下可達(dá) 3.4Mbit/s。

總線支持設(shè)備連接。在使用 I2C 通信總線時(shí),可以有多個(gè)具備 I2C 通信能力的設(shè)備掛載在上面,同時(shí)支持多個(gè)主機(jī)和多個(gè)從機(jī),連接到總線的接口數(shù)量只由總線電容 400pF 的限制決定。I2C 總線掛載多個(gè)器件的示意圖,如下圖所示:

wKgZO2g2wgaAZVJvAADwXFS4SfI745.png

I2C 總線掛載多個(gè)器件

下面來學(xué)習(xí)I2C 總線協(xié)議,I2C 總線時(shí)序圖如下所示:

wKgZPGg2wgeAFO7eAABoCRVyFR8348.png

I2C 總線時(shí)序圖

為了便于大家更好的了解 I2C 協(xié)議,我們從起始信號(hào)、停止信號(hào)、應(yīng)答信號(hào)、數(shù)據(jù)有效性、數(shù)據(jù)傳輸以及空閑狀態(tài)等 6 個(gè)方面講解。

① 起始信號(hào)

當(dāng) SCL 為高電平期間,SDA 由高到低的跳變。起始信號(hào)是一種電平跳變時(shí)序信號(hào),而不是一個(gè)電平信號(hào)。該信號(hào)由主機(jī)發(fā)出,在起始信號(hào)產(chǎn)生后,總線就處于被占用狀態(tài),準(zhǔn)備數(shù)據(jù)傳輸。

② 停止信號(hào)

當(dāng) SCL 為高電平期間,SDA 由低到高的跳變。停止信號(hào)也是一種電平跳變時(shí)序信號(hào),而不是一個(gè)電平信號(hào)。該信號(hào)由主機(jī)發(fā)出,在停止信號(hào)發(fā)出后,總線就處于空閑狀態(tài)。

③ 應(yīng)答信號(hào)

發(fā)送器每發(fā)送一個(gè)字節(jié),就在時(shí)鐘脈沖 9 期間釋放數(shù)據(jù)線,由接收器反饋一個(gè)應(yīng)答信號(hào)。應(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é)沒有成功。

觀察上圖標(biāo)號(hào)③就可以發(fā)現(xiàn),有效應(yīng)答的要求是從機(jī)在第 9 個(gè)時(shí)鐘脈沖之前的低電平期間將 SDA 線拉低,并且確保在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。如果接收器是主機(jī),則在它收到最后一個(gè)字節(jié)后,發(fā)送一個(gè) NACK 信號(hào),以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送,并釋放SDA 線,以便主機(jī)接收器發(fā)送一個(gè)停止信號(hào)。

④ 數(shù)據(jù)有效性

I2C 總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。數(shù)據(jù)在 SCL的上升沿到來之前就需準(zhǔn)備好。并在下降沿到來之前必須穩(wěn)定。

⑤ 數(shù)據(jù)傳輸

在 I2C 總線上傳送的每一位數(shù)據(jù)都有一個(gè)時(shí)鐘脈沖相對(duì)應(yīng)(或同步控制),即在 SCL 串行時(shí)鐘的配合下,在 SDA 上逐位地串行傳送每一位數(shù)據(jù)。數(shù)據(jù)位的傳輸是邊沿觸發(fā)。

⑥ 空閑狀態(tài)

I2C 總線的 SDA 和 SCL 兩條信號(hào)線同時(shí)處于高電平時(shí),規(guī)定為總線的空閑狀態(tài)。此時(shí)各個(gè)器件的輸出級(jí)場(chǎng)效應(yīng)管均處在截止?fàn)顟B(tài),即釋放總線,由兩條信號(hào)線各自的上拉電阻把電平拉高。

了解前面的知識(shí)后,下面介紹一下 I2C 的基本的讀寫通訊過程,包括主機(jī)寫數(shù)據(jù)到從機(jī)即寫操作,主機(jī)到從機(jī)讀取數(shù)據(jù)即讀操作。下面先看一下寫操作通訊過程圖。

wKgZPGg2wgaADP-6AADbtV-EkSI654.png

寫操作通訊過程

主機(jī)首先在 I2C 總線上發(fā)送起始信號(hào),那么這時(shí)總線上的從機(jī)都會(huì)等待接收由主機(jī)發(fā)出的數(shù)據(jù)。主機(jī)接著發(fā)送從機(jī)地址+0(寫操作)組成的 8bit 數(shù)據(jù),所有從機(jī)接收到該 8bit 數(shù)據(jù)后,自行檢驗(yàn)是否是自己的設(shè)備的地址,假如是自己的設(shè)備地址,那么從機(jī)就會(huì)發(fā)出應(yīng)答信號(hào)。

主機(jī)在總線上接收到有應(yīng)答信號(hào)后,才能繼續(xù)向從機(jī)發(fā)送數(shù)據(jù)。

注意:I2C 總線上傳送的數(shù)據(jù)信號(hào)是廣義的,既包括地址信號(hào),又包括真正的數(shù)據(jù)信號(hào)。

接著講解一下 I2C 總線的讀操作過程,先看一下讀操作通訊過程圖。

wKgZPGg2wgaAOoDSAADL3zzPGJs353.png

讀操作通訊過程圖

主機(jī)向從機(jī)讀取數(shù)據(jù)的操作,一開始的操作與寫操作有點(diǎn)相似,觀察兩個(gè)圖也可以發(fā)現(xiàn),都是由主機(jī)發(fā)出起始信號(hào),接著發(fā)送從機(jī)地址+1(讀操作)組成的 8bit 數(shù)據(jù),從機(jī)接收到數(shù)據(jù)驗(yàn)證是否是自身的地址。 那么在驗(yàn)證是自己的設(shè)備地址后,從機(jī)就會(huì)發(fā)出應(yīng)答信號(hào),并向主機(jī)返回 8bit 數(shù)據(jù),發(fā)送完之后從機(jī)就會(huì)等待主機(jī)的應(yīng)答信號(hào)。假如主機(jī)一直返回應(yīng)答信號(hào),那么從機(jī)可以一直發(fā)送數(shù)據(jù),也就是圖中的(n byte + 應(yīng)答信號(hào))情況,直到主機(jī)發(fā)出非應(yīng)答信號(hào),從機(jī)才會(huì)停止發(fā)送數(shù)據(jù)。

2 I2C從模式

默認(rèn)情況下,I2C 接口總是工作在從模式。從從模式切換到主模式,需要產(chǎn)生一個(gè)起始條件。為了產(chǎn)生正確的時(shí)序,必須在 I2C_CR2 寄存器中設(shè)定該模塊的輸入時(shí)鐘。輸入時(shí)鐘的頻率必須至少是:

標(biāo)準(zhǔn)模式下為:2MHz

快速模式下為:4MHz

一旦檢測(cè)到起始條件,在 SDA線上接收到的地址被送到移位寄存器。然后與芯片自己的地址 OAR1和 OAR2(當(dāng) ENDUAL=1)或者廣播呼叫地址(如果 ENGC=1)相比較。

注:在 10 位地址模式時(shí),比較包括頭段序列(11110xx0),其中的 xx 是地址的兩個(gè)最高有效位。頭段或地址不匹配:I2C 接口將其忽略并等待另一個(gè)起始條件。

頭段匹配(僅 10 位模式):如果 ACK 位被置'1',I2C 接口產(chǎn)生一個(gè)應(yīng)答脈沖并等待 8 位從地址。地址匹配:I2C 接口產(chǎn)生以下時(shí)序:

如果 ACK 被置'1',則產(chǎn)生一個(gè)應(yīng)答脈沖硬件設(shè)置 ADDR 位;如果設(shè)置了 ITEVFEN 位,則產(chǎn)生一個(gè)中斷如果 ENDUAL=1,軟件必須讀 DUALF 位,以確認(rèn)響應(yīng)了哪個(gè)從地址。在 10 位模式,接收到地址序列后,從設(shè)備總是處于接收器模式。在收到與地址匹配的頭序列并且最低位為'1'(即 11110xx1)后,當(dāng)接收到重復(fù)的起始條件時(shí),將進(jìn)入發(fā)送器模式。在從模式下 TRA 位指示當(dāng)前是處于接收器模式還是發(fā)送器模式。

從發(fā)送器

在接收到地址和清除 ADDR 位后,從發(fā)送器將字節(jié)從 DR 寄存器經(jīng)由內(nèi)部移位寄存器發(fā)送到 SDA 線上。

從設(shè)備保持 SCL 為低電平,直到 ADDR 位被清除并且待發(fā)送數(shù)據(jù)已寫入 DR 寄存器。(見下圖中的EV1 和 EV3)。當(dāng)收到應(yīng)答脈沖時(shí):TxE 位被硬件置位,如果設(shè)置了 ITEVFEN 和 ITBUFEN 位,則產(chǎn)生一個(gè)中斷。

如果 TxE 位被置位,但在下一個(gè)數(shù)據(jù)發(fā)送結(jié)束之前沒有新數(shù)據(jù)寫入到 I2C_DR 寄存器,則 BTF 位被置位,在清除 BTF 之前 I2C 接口將保持 SCL 為低電平;讀出 I2C_SR1 之后再寫入 I2C_DR 寄存器將清除 BTF 位。

wKgZO2g2wgaAQrrFAADV5THmxDE819.png

從發(fā)送器的傳送序列圖

說明:S=Start(起始條件),S,=重復(fù)的起始條件,P=Stop(停止條件),A=應(yīng),NA=非響應(yīng) EVx=事件(ITEVFEN=1 時(shí)產(chǎn)生中斷)

EV1:ADDR=1,讀 SR1 然后讀 SR2 將清除該事件。

EV3-1:TxE=1,移位寄存器空,數(shù)據(jù)寄存器空,寫 DR。

EV3:TxE=1,移位寄存器非空,數(shù)據(jù)寄存空,寫 DR 將清除該事件。

EV3-2:AF=1,在 SR1 寄存器的 AF 位寫'0'可清除 AF 位。

注:

1-EV1 和 EV3 1 事件拉長(zhǎng) SCL 低的時(shí)間,直到對(duì)應(yīng)的軟件序列結(jié)束。

2-EV3 的軟件序列必須在當(dāng)前字節(jié)傳輸結(jié)束之前完成。

從接收器

在接收到地址并清除 ADDR 后,從接收器將通過內(nèi)部移位寄存器從 SDA 線接收到的字節(jié)存進(jìn) DR 寄存器。I2C 接口在接收到每個(gè)字節(jié)后都執(zhí)行下列操作:

如果設(shè)置了 ACK 位,則產(chǎn)生一個(gè)應(yīng)答脈沖硬件設(shè)置 RxNE=1。如果設(shè)置了 ITEVFEN 和 ITBUFEN 位,則產(chǎn)生一個(gè)中斷。

如果 RxNE 被置位,并且在接收新的數(shù)據(jù)結(jié)束之前 DR 寄存器未被讀出,BTF 位被置位,在清除BTF 之前 I2C 接口將保持 SCL 為低電平;讀出 I2C_SR1 之后再寫入 I2C_DR 寄存器將清除 BTF 位。

wKgZO2g2wgaAUcMZAACuNGLUlnc669.png

從接收器的傳送序列圖

說明:S=Start(起始條件),S,=重復(fù)的起始條件,P=Stop(停止條件),A=響應(yīng),NA=非響應(yīng),EVx=事件(ITEVFEN=1 時(shí)產(chǎn)生中斷)

EV1:ADDR=1,讀 SR1 然后讀 SR2 將清除該事件。

EV2:RxNE=1,讀 DR 將消除該事件。

EV4:STOPF=1,讀 SR1 然后寫 CR1 寄存器將清除該事件。

注:

1.EV1 事件拉長(zhǎng) SCL 低的時(shí)間,直到對(duì)應(yīng)的軟件序列結(jié)束。

2.EV2 的軟件序列必須在當(dāng)前字節(jié)傳輸結(jié)束之前完成。關(guān)閉從通信在傳輸完最后一個(gè)數(shù)據(jù)字節(jié)后,主設(shè)備產(chǎn)生一個(gè)停止條件,I2C 接口檢測(cè)到這一條件時(shí):

?設(shè)置 STOPF=1,如果設(shè)置了 ITEVFEN 位,則產(chǎn)生一個(gè)中斷。然后 I2C 接口等待讀 SR1 寄存器,再寫 CR1 寄存器。

3 I2C主模式

在主模式時(shí),I2C 接口啟動(dòng)數(shù)據(jù)傳輸并產(chǎn)生時(shí)鐘信號(hào)。串行數(shù)據(jù)傳輸總是以起始條件開始并以停止條件結(jié)束。當(dāng)通過 START 位在總線上產(chǎn)生了起始條件,設(shè)備就進(jìn)入了主模式。

以下是主模式所要求的操作順序:

1.在 I2C_CR2 寄存器中設(shè)定該模塊的輸入時(shí)鐘以產(chǎn)生正確的時(shí)序

2.配置時(shí)鐘控制寄存器

3.配置上升時(shí)間寄存器

4.編程 I2C_CR1 寄存器啟動(dòng)外設(shè)

5.置 I2C_CR1 寄存器中的 START 位為 1,產(chǎn)生起始條件

6.I2C 模塊的輸入時(shí)鐘頻率必須至少是:

7.標(biāo)準(zhǔn)模式下為:2MHz

8.快速模式下為:4MHz

9.起始條件

當(dāng) BUSY=0 時(shí),設(shè)置 START=1,I2C 接口將產(chǎn)生一個(gè)開始條件并切換至主模式(M/SL 位置位)。

注:在主模式下,設(shè)置 START 位將在當(dāng)前字節(jié)傳輸完后由硬件產(chǎn)生一個(gè)重開始條件。一旦發(fā)出開始條件:

SB 位被硬件置位,如果設(shè)置了 ITEVFEN 位,則會(huì)產(chǎn)生一個(gè)中斷。然后主設(shè)備等待讀 SR1 寄存器,緊跟著將從地址寫入 DR 寄存器。

從地址的發(fā)送

從地址通過內(nèi)部移位寄存器被送到 SDA 線上。

?在 10 位地址模式時(shí),發(fā)送一個(gè)頭段序列產(chǎn)生以下事件:

······ADD10 位被硬件置位,如果設(shè)置了 ITEVFEN 位,則產(chǎn)生一個(gè)中斷。然后主設(shè)備等待讀 SR1 寄存器,再將第二個(gè)地址字節(jié)寫入 DR 寄存器。

ADDR 位被硬件置位,如果設(shè)置了 ITEVFEN 位,則產(chǎn)生一個(gè)中斷。隨后主設(shè)備等待一次讀 SR1 寄存器,跟著讀 SR2 寄存器。

?在 7 位地址模式時(shí),只需送出一個(gè)地址字節(jié)。

······一旦該地址字節(jié)被送出:

? ADDR 位被硬件置位,如果設(shè)置了 ITEVFEN 位,則產(chǎn)生一個(gè)中斷。

隨后主設(shè)備等待一次讀 SR1 寄存器,跟著讀 SR2 寄存器。根據(jù)送出從地址的最低位,主設(shè)備決定進(jìn)入發(fā)送器模式還是進(jìn)入接收器模式。

?在 7 位地址模式時(shí)

······? 要進(jìn)入發(fā)送器模式,主設(shè)備發(fā)送從地址時(shí)置最低位為'0'。

······? 要進(jìn)入接收器模式,主設(shè)備發(fā)送從地址時(shí)置最低位為'1'。

?在 10 位地址模式時(shí)

? 要進(jìn)入發(fā)送器模式,主設(shè)備先送頭字節(jié)(11110xx0),然后送最低位為'0'的從地址。(這里 xx代表 10 位地址中的最高 2 位。)

? 要進(jìn)入接收器模式,主設(shè)備先送頭字節(jié)(11110xx0),然后送最低位為'1'的從地址。然后再重新發(fā)送一個(gè)開始條件,后面跟著頭字節(jié)(11110xx1)(這里 xx 代表 10 位地址中的最高 2位。)

TRA 位指示主設(shè)備是在接收器模式還是發(fā)送器模式。

主發(fā)送器

在發(fā)送了地址和清除了 ADDR 位后,主設(shè)備通過內(nèi)部移位寄存器將字節(jié)從 DR 寄存器發(fā)送到 SDA 線上。

主設(shè)備等待,直到 TxE 被清除。當(dāng)收到應(yīng)答脈沖時(shí):

TxE 位被硬件置位,如果設(shè)置了 INEVFEN 和 ITBUFEN 位,則產(chǎn)生一個(gè)中斷。如果 TxE 被置位并且在上一次數(shù)據(jù)發(fā)送結(jié)束之前沒有寫新的數(shù)據(jù)字節(jié)到 DR 寄存器,則 BTF 被硬件置位,在清除 BTF 之前 I2C 接口將保持 SCL 為低電平;讀出 I2C_SR1 之后再寫入 I2C_DR 寄存器將清除 BTF 位。

關(guān)閉通信

在 DR 寄存器中寫入最后一個(gè)字節(jié)后,通過設(shè)置 STOP 位產(chǎn)生一個(gè)停止條件,然后 I2C 接口將自動(dòng)回到從模式(M/S 位清除)。

注: 當(dāng) TxE 或 BTF 位置位時(shí),停止條件應(yīng)安排在出現(xiàn) EV8_2 事件時(shí)。

wKgZPGg2wgaAU7oQAADF7d_wKgk833.png

主發(fā)送器傳送序列圖

說明:S=Star(起始條件),S;=重復(fù)的起始條件,P=Stop(停止條件),A=響應(yīng),NA=非響應(yīng),EVx=事件(ITEVFEN=1 時(shí)產(chǎn)生中斷)。

EV5:SB=1,讀 SR1 然后將地址寫入 DR 寄存器將清除該事件。

EV6:ADDR=1,讀 SR1 然后讀 SR2 將清除該事件。

EV8 1:TxE=1,移位寄存器空,數(shù)據(jù)寄存器空,寫 DR 寄存器。

EV8:TxE=1,移位寄存器非空,數(shù)據(jù)寄存器空,寫入 DR 寄存器將清除該事件。

EV8 2:TxE=1,BTF=1,請(qǐng)求設(shè)置停止位。TxE 和 BTF 位由硬件在產(chǎn)生停止條件時(shí)清除。

EV9:ADDR10=1,讀 SR1 然后寫入 DR 寄存將清除該事件。

注:1-EV5、EV6、EV9、EV8 1 和 EV8 2 事件拉長(zhǎng) SCL 低的時(shí)間,直到對(duì)應(yīng)的軟件序列結(jié)束。

主接收器

在發(fā)送地址和清除 ADDR 之后,I2C 接口進(jìn)入主接收器模式。在此模式下,I2C 接口從 SDA 線接收數(shù)據(jù)字節(jié),并通過內(nèi)部移位寄存器送至 DR 寄存器。在每個(gè)字節(jié)后,I2C 接口依次執(zhí)行以下操作:

如果 ACK 位被置位,發(fā)出一個(gè)應(yīng)答脈沖。

硬設(shè)置 RxNE=1, 如果設(shè)置了 INEVFEN 和 ITBUFEN 位,則會(huì)產(chǎn)生一個(gè)中斷。

如果 RxNE 位被置位,并且在接收新數(shù)據(jù)結(jié)束前,DR 寄存器中的數(shù)據(jù)沒有被讀走,硬件將設(shè)置BTF=1,在清除 BTF 之前 I2C 接口將保持 SCL 為低電平;讀出 I2C_SR1 之后再讀出 I2C_DR 寄存器將清除 BTF 位。

關(guān)閉通信

主設(shè)備在從從設(shè)備接收到最后一個(gè)字節(jié)后發(fā)送一個(gè) NACK。接收到 NACK 后,從設(shè)備釋放對(duì) SCL 和SDA 線的控制;主設(shè)備就可以發(fā)送一個(gè)停止/重起始條件。為了在收到最后一個(gè)字節(jié)后產(chǎn)生一個(gè) NACK 脈沖,在讀倒數(shù)第二個(gè)數(shù)據(jù)字節(jié)之后(在倒數(shù)第二個(gè) RxNE 事件之后)必須清除 ACK 位。為了產(chǎn)生一個(gè)停止/重起始條件,軟件必須在讀倒數(shù)第二個(gè)數(shù)據(jù)字節(jié)之后(在倒數(shù)第二個(gè) RxNE事件之后)設(shè)置 STOP/START 位。只接收一個(gè)字節(jié)時(shí),剛好在 EV6 之后(EV6_1 時(shí),清除 ADDR 之后)要關(guān)閉應(yīng)答和停止條件的產(chǎn)生位。在產(chǎn)生了停止條件后,I2C 接口自動(dòng)回到從模式(M/SL 位被清除)。

wKgZPGg2wgaACav_AADM3TqHfo8855.png

主接收器傳送序列圖

說明:S=Start(起始條件),S:=重復(fù)的起始條件,P=Stop(停止條件),A=響應(yīng),NA=非響應(yīng),EVx=事件(ITEVFEN=1 時(shí)產(chǎn)生中斷)EV5:SB=1,讀 SR1 然后將地址寫入 DR 寄存器將除該事件。EV6:ADDR=1,讀 SR1 然后讀 SR2 將清除該事件。在 10位主接收模式下,該事件后應(yīng)設(shè)置 CR2的 START=1.EV6 1:沒有對(duì)應(yīng)的事件標(biāo)志,只適于接收 1 個(gè)字節(jié)的情況。恰好在 EV6 之后(即清除了 ADDR 之后),要潔除響應(yīng)和停止條件的產(chǎn)生。

EV7:RxNE=1,讀 DR 寄存器清除該事件。

EV7 1:RXNE=1,讀 DR 寄存器清除該事件。設(shè)置 ACK=0 和 STOP 請(qǐng)求。

EV9:ADDR10=1,讀 SR1 然后寫入 DR 寄存將清除該事件。

1. 如果收到一個(gè)單獨(dú)的字節(jié),則是 NA。

2. EV5、EV6 和 E事件拉長(zhǎng) SCL 低電平,直到對(duì)應(yīng)的軟件序列結(jié)束。

3. EV7 的軟件序列必須在當(dāng)前字節(jié)傳輸結(jié)束前完成。

EV6_1 或 EV7_1 的軟件序列必須在當(dāng)前傳輸字節(jié)的 ACK 脈沖之前完成。

4 SDA/SCL線控制

如果允許時(shí)鐘延長(zhǎng):

?發(fā)送器模式:如果 TxE=1 且 BTF=1:I2C 接口在傳輸前保持時(shí)鐘線為低,以等待軟件讀取SR1,然后把數(shù)據(jù)寫進(jìn)數(shù)據(jù)寄存器(緩沖器和移位寄存器都是空的)。

?接收器模式:如果 RxNE=1 且 BTF=1:I2C 接口在接收到數(shù)據(jù)字節(jié)后保持時(shí)鐘線為低,以等待軟件讀 SR1,然后讀數(shù)據(jù)寄存器 DR(緩沖器和移位寄存器都是滿的)。

?如果在從模式中禁止時(shí)鐘延長(zhǎng):

?如果 RxNE=1,在接收到下個(gè)字節(jié)前 DR 還沒有被讀出,則發(fā)生過載錯(cuò)。接收到的最后一個(gè)字節(jié)丟失。

?如果 TxE=1,在必須發(fā)送下個(gè)字節(jié)之前卻沒有新數(shù)據(jù)寫進(jìn) DR,則發(fā)生欠載錯(cuò)。相同的字節(jié)將被重復(fù)發(fā)出。

不控制重復(fù)寫沖突。

5 I2C中斷請(qǐng)求

下圖列出了所有的 I2C 中斷請(qǐng)求:

中斷事件 事件標(biāo)志 開啟控制位
起始位已發(fā)送 (主) SB ITEVFEN
地址已發(fā)送 (主) 或地址匹配 (從) ADDR ITEVFEN
10 位頭段已發(fā)送 (主) ADD10 ITEVFEN
已收到停止 (從) STOPF ITEVFEN
數(shù)據(jù)字節(jié)傳輸完成 BTF ITEVFEN
接收緩沖區(qū)非空 RxNE ITEVFEN 和 ITBUFEN
發(fā)送緩沖區(qū)空 TxE ITEVFEN 和 ITBUFEN
總線錯(cuò)誤 BERR ITERREN
仲裁丟失 (主) ARLO ITERREN
響應(yīng)失敗 AF ITERREN
過載 / 欠載 OVR ITERREN
PEC 錯(cuò)誤 PECERR ITERREN
超時(shí) / Tlow 錯(cuò)誤 TIMEOUT ITERREN
SMBus 提醒 SMBALERT -

注:

1.SB、ADDR、ADD10、STOPF、BTF、RxNE 和 TxE 通過邏輯或匯到同一個(gè)中斷通道中。

2.BERR、ARLO、AF、OVR、PECERR、TIMEOUT 和 SMBALERT 通過邏輯或匯到同一個(gè)中斷通道中。

wKgZO2g2wgaAKr6NAADr-JyyJxc766.png

I2C 中斷映射圖

6 例程設(shè)計(jì)

6.1 IIC_IntTransmit例程

1.UART 模塊:配置 USART1,將printf輸出重定向到該串口,用于與用戶交互和輸出調(diào)試信息。

2.I2C 配置模塊:使能 GPIOB 和 I2C1 時(shí)鐘,配置引腳,初始化 I2C1,設(shè)置工作模式、時(shí)鐘速度等參數(shù)。

void IIC_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    I2C_InitTypeDef  I2C_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 | RCC_APB1Periph_I2C2, ENABLE);

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_OD;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    //Enable internal pull-up function
    GPIO_ForcePuPdCmd(GPIOB, ENABLE);
    GPIO_ForcePullUpConfig(GPIOB, GPIO_Pin_6);
    GPIO_ForcePullUpConfig(GPIOB, GPIO_Pin_7);

    I2C_DeInit(I2C1);
    I2C_InitStructure.I2C_Mode                = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle           = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_OwnAddress1         = 0xA0;
    I2C_InitStructure.I2C_ClockSpeed          = 100000;
    I2C_InitStructure.I2C_Ack                 = I2C_Ack_Enable;

    I2C_Init(I2C1, &I2C_InitStructure);
    I2C_Cmd(I2C1, ENABLE);
}

	

3.主設(shè)備測(cè)試模塊:填充發(fā)送緩沖區(qū),生成 I2C 起始信號(hào),發(fā)送從設(shè)備地址和數(shù)據(jù),最后生成停止信號(hào)。

void IIC_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    I2C_InitTypeDef  I2C_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 | RCC_APB1Periph_I2C2, ENABLE);

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_OD;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    //Enable internal pull-up function
    GPIO_ForcePuPdCmd(GPIOB, ENABLE);
    GPIO_ForcePullUpConfig(GPIOB, GPIO_Pin_6);
    GPIO_ForcePullUpConfig(GPIOB, GPIO_Pin_7);

    I2C_DeInit(I2C1);
    I2C_InitStructure.I2C_Mode                = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle           = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_OwnAddress1         = 0xA0;
    I2C_InitStructure.I2C_ClockSpeed          = 100000;
    I2C_InitStructure.I2C_Ack                 = I2C_Ack_Enable;

    I2C_Init(I2C1, &I2C_InitStructure);
    I2C_Cmd(I2C1, ENABLE);
}

4.從設(shè)備測(cè)試模塊:使能 I2C 中斷,進(jìn)入循環(huán)等待接收數(shù)據(jù)。若接收完成,打印數(shù)據(jù)并比較是否與發(fā)送數(shù)據(jù)一致。

void IIC_SlaveTest(void)
{
    FillData();
    I2C_ITConfig(I2C1, I2C_IT_EVT | I2C_IT_BUF, ENABLE);
    I2C_ITConfig(I2C1, I2C_IT_ERR, ENABLE);

    while (1)
    {
        if (RecvFlag == 1)
        {
            DataPrintf(RecvBuff, BUFF_SIZE);
            if (memcmp(RecvBuff, SendBuff, BUFF_SIZE) == 0)
            {
                printf("IIC slave int receive data successn");
            }
            memset(RecvBuff, 0, BUFF_SIZE);
            RecvFlag = 0;
        }
    }
}

5.NVIC 配置模塊:配置 I2C1 的事件和錯(cuò)誤中斷優(yōu)先級(jí),使能相應(yīng)中斷通道。

6.數(shù)據(jù)處理模塊:包含數(shù)據(jù)填充、打印和獲取命令等功能。

6.2 IIC_Software例程

該例程通過軟件模擬I2C協(xié)議與EEPROM芯片通信,驗(yàn)證I2C驅(qū)動(dòng)的正確性。程序首先初始化系統(tǒng)時(shí)鐘并通過串口輸出SYSCLK/HCLK/PCLK1/PCLK2/ADCCLK頻率信息,隨后配置I2C所需GPIO引腳(SCL/SDA),調(diào)用`ee_Test()`執(zhí)行EEPROM測(cè)試:向指定地址寫入256字節(jié)數(shù)據(jù)塊,讀取數(shù)據(jù)并校驗(yàn)正確性,同時(shí)測(cè)試多字節(jié)讀寫及錯(cuò)誤處理以驗(yàn)證通信穩(wěn)定性。主循環(huán)保持程序運(yùn)行,確保測(cè)試持續(xù)進(jìn)行。工作流程如下:

1.初始化系統(tǒng):配置串口(波特率 115200)輸出系統(tǒng)時(shí)鐘頻率(SYSCLK/HCLK/PCLK1/PCLK2/ADCCLK)。

2.I2C 配置:通過i2c_CfgGpio()初始化 I2C 所需 GPIO 引腳(如 SCL/SDA)。

 
// main函數(shù)中的I2C GPIO配置調(diào)用
int main(void)
{
    // ...(初始化代碼略)...

    i2c_CfgGpio(); // 初始化I2C所需的GPIO引腳(如SCL/SDA)

    ee_Test(); // 執(zhí)行EEPROM測(cè)試

    while (1);
}

// 假設(shè)i2c_CfgGpio()函數(shù)實(shí)現(xiàn)(示例,實(shí)際在bsp_i2c_gpio.h中)
void i2c_CfgGpio(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 假設(shè)I2C使用GPIOB引腳

    // 配置SCL和SDA引腳為開漏輸出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // 假設(shè)SCL=PB6,SDA=PB7
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;       // 開漏輸出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    // 上拉電阻使能(根據(jù)硬件設(shè)計(jì)選擇)
    GPIO_SetBits(GPIOB, GPIO_Pin_6 | GPIO_Pin_7);
}

3.EEPROM 測(cè)試:調(diào)用ee_Test()執(zhí)行軟件 I2C 與 EEPROM 的通信測(cè)試(可能包括讀寫驗(yàn)證)。

// main函數(shù)中的EEPROM測(cè)試調(diào)用
int main(void)
{
    // ...(初始化代碼略)...

    ee_Test(); // 執(zhí)行EEPROM讀寫測(cè)試

    while (1);
}

// 假設(shè)ee_Test()函數(shù)實(shí)現(xiàn)(示例,實(shí)際在bsp_i2c_ee.h中)
void ee_Test(void)
{
    uint8_t write_buf[BUFF_SIZE] = {0};
    uint8_t read_buf[BUFF_SIZE] = {0};
    uint16_t i;

    // 初始化數(shù)據(jù)緩沖區(qū)
    for (i = 0; i < BUFF_SIZE; i++)
    {
        write_buf[i] = i % 256; // 寫入測(cè)試數(shù)據(jù)(0~255循環(huán))
    }

    // 通過I2C寫入EEPROM
    i2c_WriteBytes(EEPROM_ADDR, 0x00, write_buf, BUFF_SIZE);

    // 延時(shí)等待寫入完成(EEPROM寫入需要時(shí)間)
    delay_ms(10);

    // 通過I2C讀取EEPROM數(shù)據(jù)
    i2c_ReadBytes(EEPROM_ADDR, 0x00, read_buf, BUFF_SIZE);

    // 驗(yàn)證數(shù)據(jù)一致性(示例:打印前10字節(jié))
    printf("EEPROM Test: ");
    for (i = 0; i < 10; i++)
    {
        printf("%02X ", read_buf[i]);
    }
    printf("n");
}

4.主循環(huán):保持程序運(yùn)行,維持測(cè)試狀態(tài)。

7 下載驗(yàn)證

7.1 IIC_IntTransmit例程

程序啟動(dòng)

?串口輸出系統(tǒng)時(shí)鐘頻率信息,可確認(rèn)時(shí)鐘配置是否正確。

?顯示測(cè)試提示,告知用戶可通過輸入 m 或 r 選擇主設(shè)備發(fā)送或從設(shè)備接收測(cè)試模式。

主設(shè)備發(fā)送測(cè)試(輸入 m)

?串口輸出確認(rèn)信息。

?顯示即將發(fā)送的十六進(jìn)制數(shù)據(jù)。

程序控制 I2C 總線完成起始信號(hào)、地址及數(shù)據(jù)發(fā)送,最后發(fā)送停止信號(hào)。

從設(shè)備接收測(cè)試(輸入 r)

?串口輸出確認(rèn)信息。

?使能 I2C 中斷并進(jìn)入等待。

?接收到 256 字節(jié)數(shù)據(jù)后,顯示接收到的十六進(jìn)制數(shù)據(jù)。

?比較接收和發(fā)送數(shù)據(jù),若一致則輸出成功信息,清空接收緩沖區(qū)并重置標(biāo)志位。

7.2 IIC_Software例程

程序運(yùn)行后,先完成延時(shí)與串口初始化,接著通過串口輸出系統(tǒng)時(shí)鐘頻率信息,包括SYSCLK、HCLK、PCLK1、PCLK2和ADCCLK頻率,并提示進(jìn)行IIC軟件測(cè)試。隨后進(jìn)行I2C所需GPIO引腳初始化,調(diào)用函數(shù)執(zhí)行與EEPROM的通信測(cè)試,可能包含向指定地址寫入數(shù)據(jù)塊、讀取數(shù)據(jù)并校驗(yàn)以及測(cè)試通信穩(wěn)定性等操作。若測(cè)試正常,可認(rèn)為I2C驅(qū)動(dòng)功能正確;若有異常,可能會(huì)在后續(xù)測(cè)試流程中體現(xiàn)出來。最后程序進(jìn)入無限循環(huán),維持當(dāng)前運(yùn)行狀態(tài):

wKgZPGg2wgeAAbqlAANffv4bCrE520.png

WIZnet 是一家無晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。

WIZnet 在全球擁有 70 多家分銷商,在香港、韓國(guó)、美國(guó)設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營(yíng)銷。

香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國(guó)和日本除外)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44976

    瀏覽量

    650157
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1541

    瀏覽量

    127739
  • SDA
    SDA
    +關(guān)注

    關(guān)注

    0

    文章

    125

    瀏覽量

    28813
  • SCL
    SCL
    +關(guān)注

    關(guān)注

    1

    文章

    243

    瀏覽量

    17549
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    詳解I2C接口

    I2C與SPI類似,I2C常用來為電路板層次的集成電路、傳感器等元件的連接提供短程接口。
    發(fā)表于 03-15 17:05 ?1.8w次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>詳解<b class='flag-5'>I2C</b>接口

    I2C讀寫時(shí)序分析和實(shí)現(xiàn)思路

    上篇推對(duì)I2C總線的特性進(jìn)行了介紹和描述。對(duì)于開發(fā)者而言,最重要的是編碼I2C的讀寫時(shí)序驅(qū)動(dòng)。本篇推主要總結(jié)和分享I2C總線主機(jī)端通信的
    發(fā)表于 10-01 16:54 ?3019次閱讀
    <b class='flag-5'>I2C</b>讀寫時(shí)序分析和實(shí)現(xiàn)思路

    至芯科技之a(chǎn)ltera 系列FPGA教程 第十六篇 下載配置文件

    至芯科技之a(chǎn)ltera 系列FPGA教程 第十六篇 下載配置文件
    發(fā)表于 08-11 03:35

    視頻詳解:上海尤老師verilog入門到實(shí)戰(zhàn)第十六

    上海尤老師verilog入門到實(shí)戰(zhàn)第十六課——漢明糾錯(cuò)碼原理以及步分析實(shí)現(xiàn)糾錯(cuò)碼; 百度云網(wǎng)盤鏈接后綴:/s/1hshW2ck,
    發(fā)表于 10-11 09:19

    s3c2410中資料下載

    s3c2410中資料手冊(cè):2.1概述:有第1章,第2章,第十六章,第五章,第六章. S3C2
    發(fā)表于 07-10 23:52 ?1584次下載

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    發(fā)表于 04-23 13:55 ?36次下載

    第十六講 編碼器

    第十六講 編碼器 編碼編碼器編碼原則6.3.1 二進(jìn)制編碼器、定義二、邏輯電路圖三、輸出邏輯函數(shù)四、列真值
    發(fā)表于 03-30 16:21 ?6451次閱讀
    <b class='flag-5'>第十六</b>講 編碼器

    單片機(jī)c語言教程第十六章--C51指針的使用

    單片機(jī)c語言教程第十六章--C51指針的使用 指針就是指變量或數(shù)據(jù)所在的存儲(chǔ)區(qū)地址。如個(gè)字符型的變量 STR 存放在內(nèi)存單元DATA 區(qū)的 51H 這個(gè)地址中,那么 DATA 區(qū)
    發(fā)表于 04-15 09:44 ?2117次閱讀
    單片機(jī)<b class='flag-5'>c</b>語言教程<b class='flag-5'>第十六章</b>--<b class='flag-5'>C</b>51指針的使用

    模擬電路網(wǎng)絡(luò)課件 第十六節(jié):多級(jí)放大電路

    模擬電路網(wǎng)絡(luò)課件 第十六節(jié):多級(jí)放大電路 3.9 多級(jí)放大電路
    發(fā)表于 09-17 10:22 ?5991次閱讀
    模擬電路網(wǎng)絡(luò)課件 <b class='flag-5'>第十六</b>節(jié):多級(jí)放大電路

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;
    發(fā)表于 05-17 11:09 ?35次下載

    視頻_高速放大器設(shè)計(jì)指南 第十六

    視頻_高速放大器設(shè)計(jì)指南 第十六
    發(fā)表于 03-05 15:34 ?0次下載

    看懂I2C協(xié)議

    文章目錄I2C是什么5種速率4種信號(hào)起始信號(hào)停止信號(hào)數(shù)據(jù)有效性應(yīng)答信號(hào)非應(yīng)答信號(hào)讀寫時(shí)序7位和10位地址I2C保留字節(jié)FPGA實(shí)測(cè)I2C波形SPI和I2C的對(duì)比官方標(biāo)準(zhǔn)文檔下載1.
    發(fā)表于 12-05 19:21 ?15次下載
    <b class='flag-5'>一</b><b class='flag-5'>文</b>看懂<b class='flag-5'>I2C</b>協(xié)議

    硬件I2C與模擬I2C

    硬件I2C對(duì)應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動(dòng)電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于軟件模擬的I2C;
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    看懂I2C協(xié)議

    電子行業(yè)最常用的3種串行通訊協(xié)議:UART、SPI和I2C。前面介紹了串口通訊協(xié)議及其FPGA實(shí)現(xiàn),SPI協(xié)議。本篇文章介紹I2C通訊協(xié)議及其FPGA實(shí)...
    發(fā)表于 01-25 18:32 ?40次下載
    <b class='flag-5'>一</b><b class='flag-5'>文</b>看懂<b class='flag-5'>I2C</b>協(xié)議

    2023第十六屆北京國(guó)際人工智能展覽會(huì)

    2023第十六屆北京國(guó)際人工智能展覽會(huì)
    的頭像 發(fā)表于 07-18 15:57 ?1345次閱讀
    2023<b class='flag-5'>第十六</b>屆北京國(guó)際人工智能展覽會(huì)