




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、嵌入式技術(shù)與應(yīng)用課程設(shè)計報告題 目 STM32 I2C固件庫分析與應(yīng)用 學(xué) 院 專 業(yè) 班 級 姓 名 學(xué) 號 指導(dǎo)教師 年 月 日教師評語:總分:教師簽名:目錄1 I2C接口1.1介紹1.2主要特點1.3概述1.4功能描述 1.4.1I2C從模式 1.4.2I2C主模式 1.4.3錯誤條件 1.4.4SDA/SCL線控制 1.4.5SMBus 1.4.6DMA請求 1.4.7包錯誤校驗(PEC)1.5 中斷請求1.6 內(nèi)部集成電路(I2C) 1.6.1 I2C寄存器結(jié)構(gòu) 1.6.2 I2C庫函數(shù) 函數(shù)I2C_DeInit . 函數(shù)I2C_ Init 1.6.2
2、.3 函數(shù)I2C_ StructInit 函數(shù)I2C_ Cmd 函數(shù)I2C_ DMACmd 函數(shù)I2C_ DMALastTransferCmd 函數(shù)I2C_ GenerateSTART 函數(shù)I2C_ GenerateSTOP 函數(shù)I2C_ AcknowledgeConfig 0 函數(shù)I2C_ OwnAddress2Config 1 函數(shù)I2C_ DualAddressCmd 2 函數(shù)I2C_ GeneralCallCmd 3 函數(shù)I2C_ IT
3、Config 4 函數(shù)I2C_ SendData 5 函數(shù)I2C_ ReceiveData 6 函數(shù)I2C_ Send7bitAddress 7 函數(shù)I2C_ ReadRegister 8 函數(shù)I2C_ SoftwareResetCmd 9 函數(shù)I2C_ SMBusAlertConfig 0 函數(shù)I2C_ TransmitPEC 1 函數(shù)I2C_ PECPositionConfig 2 函數(shù)I2C_ CalculatePEC 3 函數(shù)I2C_ GetPEC
4、 4 函數(shù)I2C_ ARPCmd 5 函數(shù)I2C_ StretchClockCmd 6 函數(shù)I2C_ FastModeDutyCycleConfig 7 函數(shù)I2C_ GetLastEvent 9 函數(shù)I2C_ GetFlagStatus 0 函數(shù)I2C_ ClearFlag 1 函數(shù)I2C_ GetITStatus 2 函數(shù)I2C_ ClearITPendingBi1 2C接口1.1 介紹I2C 總線接口連接微控制器和 I2C 總線。它提供多主機功能,控制所有 I2C 總線特定的時
5、序、協(xié)議、仲裁和定時。支持標(biāo)準(zhǔn)和快速兩種模式,同時與 SMBus2.0 兼容。I2C 總線有多種用途,包括 CRC 碼的生成和校驗、SMBus(系統(tǒng)管總線 SystemManagement Bus)、PMBus(電源管總線 Power Management Bus)。根據(jù)特定設(shè)備的需要,可以使用 DMA 以減輕 CPU 的負擔(dān)。1.2 主要特點 并總線/I2C 總線協(xié)議轉(zhuǎn)換器 多主機功能:同一接口既可做主設(shè)備也可做從設(shè)備 I2C 主設(shè)備功能 產(chǎn)生時鐘 產(chǎn)生起始和停止信號 I2C 從設(shè)備功能 可編程的 I2C 地址檢測 可響應(yīng) 2 個從地址的雙地址能 停止位檢測 產(chǎn)生和檢測 7 位/10 位地址
6、和廣播呼叫 支持同的通訊速 標(biāo)準(zhǔn)速(高至 100 kHz) 快速(高至 400 kHz) 狀態(tài)標(biāo)志: 發(fā)送器/接收器模式標(biāo)志 字節(jié)發(fā)送結(jié)束標(biāo)志 I2C 總線忙標(biāo)志 錯誤標(biāo)志 主模式時的仲裁丟失 地址/數(shù)據(jù)傳輸后的應(yīng)答(ACK)錯誤 檢測到起始和停止錯位 禁止長時鐘功能后的上溢或下溢 2 個中斷向 1 個中斷用于地址/數(shù)據(jù)通訊成功 1 個中斷用于出錯 可選的長時鐘功能 具單字節(jié)緩沖器的 DMA 可配置的 PEC(信息包錯誤檢測)的產(chǎn)生或校驗: 發(fā)送模式中 PEC 值可以作為最后一個字節(jié)傳輸 用于最后一個接收字節(jié)的 PEC 錯誤校驗 兼容 SMBus 2.0 25 ms 時鐘低超時延時 10 ms
7、 主設(shè)備積時鐘低擴展時間 25 ms 從設(shè)備積時鐘低擴展時間 帶 ACK 控制的硬件 PEC 產(chǎn)生/校驗 支持地址分辨協(xié)議(ARP) 兼容 SMBus注意 是所有產(chǎn)品中都包含上述所有特性。請參考相關(guān)的數(shù)據(jù)手冊,確認該產(chǎn)品支持的 I2C 功能。1.3 概述I2C 接口接收和發(fā)送數(shù)據(jù),并將數(shù)據(jù)從轉(zhuǎn)換成并,或并轉(zhuǎn)換成??梢蚤_啟或禁止中斷。接口通過數(shù)據(jù)引腳(SDA)和時鐘引腳(SCL)連接到 I2C 總線。允許連接到標(biāo)準(zhǔn)(高至 100 kHz)或快速(高至 400 kHz)I2C 總線。模式選擇接口可以下述 4 種模式中的一種運: 從發(fā)送器模式 從接收器模式 主發(fā)送器模式 主接收器模式默認模式為從模式
8、。接口在生成起始條件后自動從從模式換到主模式;當(dāng)仲裁丟失或產(chǎn)生停止信號,則從主模式換到從模式。允許多主機功能。通信主模式時,I2C 接口啟動數(shù)據(jù)傳輸并產(chǎn)生時鐘信號。數(shù)據(jù)傳輸總是以起始條件開始和停止條件結(jié)束。主模式時,由軟件控制產(chǎn)生起始條件和停止條件。從模式時,I2C 接口能識別它自己的地址(7 位或 10 位)和廣播呼叫地址。軟件控制開啟或禁止廣播呼叫地址的識別。數(shù)據(jù)和地址按 8 位/字節(jié)進傳輸,高位在前。跟在起始條件后的第一、二個字節(jié)是地址(7 位模式為 1 個字節(jié),10 位模式為 2 個字節(jié))。地址只在主模式發(fā)送。在一個字節(jié)傳輸?shù)?8 個時鐘后的第 9 個時鐘期間,接收器必須回送一個應(yīng)答位
9、(ACK)給發(fā)送器。參考下圖。圖134 I2C 總線協(xié)議軟件可以開啟或禁止應(yīng)答(ACK),I2C 接口的地址(7 位、10 位地址或廣播呼叫地址)可通過軟件設(shè)置。I2C接口的功能框圖示于 圖 135。圖135 I2C 的功能框圖注: 在 SMBus 模式下,SMBALERT 是可選信號。如果 SMBus 被禁止,則該信號可使用。1.4 功能描述默認情況下,I2C 接口總是工作在從模式。從默認的從模式換到主模式,需要產(chǎn)生一個起始條件。1.4.1 I2C從模式為產(chǎn)生正確的時序,必須在 I2C_CR2 寄存器中設(shè)定外設(shè)輸入時鐘。外設(shè)輸入時鐘的頻必須至少是: 標(biāo)準(zhǔn)模式下為:2MHz 快速模式下為:4M
10、Hz一旦檢測到起始條件,在 SDA 線上接收到的地址被送到移位寄存器。然后與芯片自己的地址 OAR1 和 OAR2(當(dāng) ENDUAL=1)或者廣播呼叫地址(如果 ENGC=1)相比較。注: 在 10-bit 地址模式時,比較包括頭段序(11110xx0),其中的 xx 是地址的兩個最高有效位。頭段或地址匹配:接口將其忽視并等待另一個起始條件。頭段匹配(僅 10 位模式):如果 ACK 位被置 1,接口產(chǎn)生一個應(yīng)答脈沖并等待 8位從地址。地址匹配:接口產(chǎn)生以下時序: 如果 ACK 被置 1,則產(chǎn)生一個應(yīng)答脈沖 硬件設(shè)置 ADDR 位,如果設(shè)置 ITEVFEN 位,則產(chǎn)生一個中斷 如果 ENDUA
11、L=1,軟件必須讀 DUALF 位,以確認響應(yīng)哪個從地址。在 10 位模式,接收到地址序后,從設(shè)備總是處于接收器模式。在收到與地址匹配的頭序并且最低位為 1(即 11110xx1)后,當(dāng)接收到重復(fù)的起始條件時,將進入發(fā)送器模式。TAR 位在從模式下指示當(dāng)前是處于接收器模式還是發(fā)送器模式。從發(fā)送器在接收到地址和清除 ADDR 位后,從發(fā)送器將字節(jié)從 DR 寄存器經(jīng)由內(nèi)部移位寄存器發(fā)送到 SDA 線上。從設(shè)備保持SCL為低電平,直到ADDR位被清除并且待發(fā)送數(shù)據(jù)已寫入DR寄存器。(見 圖 136 中發(fā)送序EV1 EV3)。當(dāng)收到應(yīng)答脈沖時: TxE 位被硬件置位,如果設(shè)置 ITEVFEN 和 IT
12、BUFEN 位,則產(chǎn)生一個中斷。如果 TxE 位被置位,但在上一次數(shù)據(jù)發(fā)送結(jié)束之前沒有數(shù)據(jù)寫入到 DR 寄存器,則 BTF 位被置位,接口將保持 SCL 為低電平,以等待寫入 DR 寄存器。 圖136 從發(fā)送器的傳送序圖說明:S=Start(起始條件),Sr=重復(fù)的起始條件,P=Stop(停止條件),A=響應(yīng),NA=非響應(yīng),EVx=事件(ITEVFEN=1時產(chǎn)生中斷)EV1:ADDR=1,讀SR1然后讀SR2將清除該事件EV3-1:TxE=1,移位寄存器空EV3:TxE=1,讀DR將清除該事件;移位寄存器非空EV3-2:AF=1,在SR1寄存器的AF位寫0可以清除AF位從接收器在接收到地址和清
13、除 ADDR 后,從接收器將通過內(nèi)部移位寄存器從 SDA 線接收到的字節(jié)存進 DR 寄存器。接口在接收到每個字節(jié)后都生成以下時序: 如果設(shè)置 ACK 位,則產(chǎn)生一個應(yīng)答脈沖 硬件置位 RxNE。如果設(shè)置 ITEVFEN 和 ITBUFEN 位,則產(chǎn)生一個中斷。如果RxNE被置位,并且在接收新的數(shù)據(jù)結(jié)束之前DR寄存器未被讀出,BTF位被置位,接口保持SCL為低電平,等待讀DR寄存器(見 圖 137 傳送序)。 圖137 從接收器的傳送序圖說明:S=Start(起始條件),Sr=重復(fù)的起始條件,P=Stop(停止條件),A=響應(yīng),NA=非響應(yīng),EVx=事件(ITEVFEN=1時產(chǎn)生中斷)EV1:A
14、DDR=1,讀SR1然后讀SR2將清除該事件EV2:RxNE=1,讀DR將清除該事件EV4:STOPF=1,讀SR1然后寫CR1寄存器將清除該事件關(guān)閉從通信在最后一個數(shù)據(jù)字節(jié)被發(fā)送后,主設(shè)備產(chǎn)生一個停止條件。 接口檢測到這一條件時: STOPF 位被置位,如果設(shè)置 ITEVFEN 位,則產(chǎn)生一個中斷,然后接口等待讀SR1 寄存器,然后寫CR1 寄存器。(見 圖 137 傳送時序EV4)。1.4.2 I2C主模式在主模式時,I2C 接口啟動數(shù)據(jù)傳輸并產(chǎn)生時鐘信號。數(shù)據(jù)傳輸總是以起始條件開始和以停止條件結(jié)束。當(dāng)用 START 位在總線上產(chǎn)生起始條件,設(shè)備就進入主模式。以下是主模式所要求的時序: 在
15、 I2C_CR2 寄存器中設(shè)定外設(shè)時鐘以產(chǎn)生正確的時序 配置時鐘控制寄存器 配置上升時間寄存器 編程 I2C_CR2 寄存器啟動外設(shè) 置 I2C_CR2 寄存器中的 START 位為 1,用于產(chǎn)生起始條件外設(shè)輸入時鐘頻必須至少是: 標(biāo)準(zhǔn)模式下為:2MHz 快速模式下為:4MHz起始條件當(dāng) BUSY 位處于清除狀態(tài)時對 START 位置位,使接口產(chǎn)生一個開始條件并換到主模式(M/SL 位置位)。注: 在主模式下,設(shè)置 START 位將在當(dāng)前字節(jié)傳輸完后由硬件產(chǎn)生一個重開始條件。一旦開始條件發(fā)出: SB 位被硬件置位,如果設(shè)置 ITEVFEN 位,則會產(chǎn)生一個中斷。然后主設(shè)備等待讀SR1 寄存器,
16、緊跟著將從地址寫入DR寄存器(見 圖 138 和 圖139 傳送時序EV5)。從地址的發(fā)送從地址通過內(nèi)部移位寄存器被送到 SDA 線上。 在 10 位地址模式時,發(fā)送一個頭段序產(chǎn)生以下事件: ADD10 位被硬件置位,如果設(shè)置 ITEVFEN 位,則產(chǎn)生一個中斷。 然后主設(shè)備等待一次讀SR1 寄存器,跟著將第二個地址字節(jié)寫入DR寄存器(見 圖 138 和 圖 139 傳送時序)。 ADDR 位被硬件置位,如果設(shè)置 ITEVFEN 位,則產(chǎn)生一個中斷。 隨后主設(shè)備等待一次讀SR1 寄存器,跟著讀SR2 寄存器(見 圖 138 和 圖139 傳送時序)。 在 7 位地址模式時,將送出一個地址字節(jié)。
17、一旦該地址字節(jié)被送出, ADDR 位被硬件置位,如果設(shè)置 ITEVFEN 位,則產(chǎn)生一個中斷。隨后主設(shè)備等待一次讀SR1 寄存器,跟著讀SR2 寄存器(見 圖 138 和 圖 139 傳送時序)。根據(jù)送出從地址的 LSB 位,主設(shè)備決定進入是發(fā)送器模式還是接收器模式。 在 7 位地址模式時, 要進入發(fā)送器模式,主設(shè)備發(fā)送從地址時讓 LSB 等于 0。 要進入接收器模式,主設(shè)備發(fā)送從地址時讓 LSB 等于 1。 在 10 位地址模式時 要進入發(fā)送器模式,主設(shè)備先送頭字節(jié)(11110xx0),然后送 LSB 位等于 0的從地址。(頭段字節(jié)中的 xx 是 10 位地址中的最高 2 位。) 要進入接收
18、器模式,主設(shè)備先送頭字節(jié)(11110xx0),然后送 LSB 位等于 0的從地址。然后再重新發(fā)送一個開始條件,后面跟著頭字節(jié)(11110xx1)。(頭字節(jié)中的 xx 是 10 位地址中的最高 2 位)。TRA 位指示主設(shè)備是在接收器模式還是發(fā)送器模式。主發(fā)送器在發(fā)送地址和清除 ADDR 位后, 主設(shè)備通過內(nèi)部移位寄存器將字節(jié)從 DR 寄存器發(fā)送到 SDA 線上。主設(shè)備等到TxE被清除,(見 圖 138 傳送時序EV8)。當(dāng)收到應(yīng)答脈沖時: TxE 位被硬件置位,如果設(shè)置 INEVFEN 和 ITBUFEN 位,則產(chǎn)生一個中斷。如果 TxE 被置位并且在上一次數(shù)據(jù)發(fā)送結(jié)束之前沒有寫數(shù)據(jù)字節(jié)到 D
19、R,則 BTF被置位,接口等待 BTF 被清除。關(guān)閉通信在DR寄存器中寫入最后一個字節(jié)之后,通過將STOP位置位產(chǎn)生一個停止條件(見圖 138 傳送時序EV8_2)。然后接口自動回到從模式(M/S位清除)。注: 當(dāng) TxE 或 BTF 位置位時,停止條件應(yīng)安排在出現(xiàn) EV8_2 事件時。圖138 主發(fā)送器傳送序圖說明:S=Start(起始條件),Sr=重復(fù)的起始條件,P=Stop(停止條件),A=響應(yīng),NA=非響應(yīng),EVx=事件(ITEVFEN=1時產(chǎn)生中斷)EV5:SB=1,讀SR1然后將地址寫入DR寄存器將清除該事件EV6:ADDR=1,讀SR1然后讀SR2將清除該事件EV8_1:TxE=
20、1,移位寄存器空EV8:TxE=1,寫入DR寄存器將清除該事件EV8_2:TxE=1,BTF=1,產(chǎn)生停止條件時由硬件清除EV9:ADDR10=1,讀SR1然后寫入DR寄存器將清除該事件主接收器在發(fā)送地址和清除 ADDR 之后,I2C 接口進入主接收器模式。在此模式時,接口從 SDA 線接收數(shù)據(jù)字節(jié),并通過內(nèi)部移位寄存器將其送進 DR 寄存器。在每個字節(jié)后,接口依次生成以下事件: 如果 ACK 位被置位,發(fā)出一個應(yīng)答脈沖。 RxNE位被硬件置位,如果INEVFEN和ITBUFEN位被置起位,則會產(chǎn)生一個中斷(見 圖 139 傳輸時序EV7)。如果 RxNE 位被置位,并且在上一次數(shù)據(jù)接收之后
21、DR 寄存器中的數(shù)據(jù)沒有被讀走,硬件將置起 BTF 位,接口等待讀 DR 寄存器。關(guān)閉通信主設(shè)備在從從設(shè)備接收到的最后一個字節(jié)后發(fā)送一個 NACK。從設(shè)備接收到NACK 后,釋放對 SCL 和 SDA 線的控制。主設(shè)備就可以發(fā)送一個停止/重起始(Stop/Re-Start)條件。 為在收到最后一個字節(jié)后產(chǎn)生一個 NACK 脈沖,在讀倒數(shù)第二個數(shù)據(jù)字節(jié)之后(在倒數(shù)第二個 RxNE 事件之后)必須清除 ACK 位。 為產(chǎn)生一個停止/重起始條件,軟件必須在讀倒數(shù)第二個數(shù)據(jù)字節(jié)之后(在倒數(shù)第二個 RxNE 事件之后)設(shè)置 STOP/START 位。在產(chǎn)生停止條件后,接口自動回到從模式(M/SL 位被清
22、除)。 圖139 主接收器傳送序圖說明:S=Start(起始條件),Sr=重復(fù)的起始條件,P=Stop(停止條件),A=響應(yīng),NA=非響應(yīng),EVx=事件(ITEVFEN=1時產(chǎn)生中斷)EV5:SB=1,讀SR1然后將地址寫入DR寄存器將清除該事件EV6:ADDR=1,讀SR1然后讀SR2將清除該事件。在10位主接受模式下,該事件后應(yīng)設(shè)置CR2的START=1。EV7:RxNE=1,讀DR寄存器清除該事件EV7_1:RxNE=1,讀DR寄存器清除該事件。設(shè)置ACK=0和STOP請求EV9:ADDR10=1,讀SR1然后寫入DR寄存器將清除該事件1.4.3 錯誤條件以下條件可能造成通訊失敗??偩€錯
23、誤(BERR)在一個字節(jié)傳輸期間,當(dāng) I2C 接口檢測到一個停止或起始條件則產(chǎn)生此錯誤。此時: BERR 位被置位,如果設(shè)置 ITERREN 位,則產(chǎn)生一個中斷; 在從模式情況下,數(shù)據(jù)被丟棄,硬件釋放總線: 在錯誤的開始條件情況下,從設(shè)備認為是一個重啟動,并等待地址和停止條件。 在錯誤的停止條件情況下,從設(shè)備與正常停止表現(xiàn)得一樣,同時硬件釋放總線。應(yīng)答錯誤(AF)當(dāng)接口檢測到一個無應(yīng)答位時,產(chǎn)生此錯誤。此時: AF 位被置位,如果設(shè)置 ITERREN 位,則產(chǎn)生一個中斷; 當(dāng)發(fā)送器接收到一個 NACK 時,必須復(fù)位通訊。 如果是處于從模式,硬件釋放總線 如果是處于主模式,必須用軟件生成一個停止
24、條件仲裁丟失(ARLO)當(dāng) I2C 接口檢測到一個仲裁丟失時產(chǎn)生此錯誤,此時: ARLO 位被硬件置位,如果設(shè)置 ITERREN 位,則產(chǎn)生一個中斷 I2C 接口自動回到從模式(M/SL 位被清除) 硬件釋放總線過載/欠載錯誤(OVR)在從模式下,時鐘延長被禁止同時 I2C 接口正在接收數(shù)據(jù)時,當(dāng)接口已經(jīng)接收到一個字節(jié)(RxNE=1),但在 DR 寄存器中上一個字節(jié)的數(shù)據(jù)還沒有被讀走,則可能發(fā)生過載錯。此時: 上次接收的數(shù)據(jù)被丟棄 在過載錯時,軟件應(yīng)清除 RxNE 位,發(fā)送器應(yīng)該重新發(fā)送上一次發(fā)送的字節(jié)。在從模式下,時鐘延長被禁止同時 I2C 接口正在發(fā)送數(shù)據(jù)時,在下一個字節(jié)的時鐘到達之前,下
25、一個字節(jié)的數(shù)據(jù)還未寫入新 DR(TxE=1),則可能欠載錯。此時: 在 DR 寄存器中的上一個字節(jié)將被重發(fā) 用戶應(yīng)該確定在發(fā)生欠載錯時,接收端應(yīng)丟棄重復(fù)接收到的數(shù)據(jù)。發(fā)送端應(yīng)按 I2C 總線標(biāo)準(zhǔn)在規(guī)定的時間新 DR。1.4.4 SDA/SCL線控制 如果允許時鐘延長: 發(fā)送器模式:如果 TxE=1 且 BTF=1:接口在傳輸前保持時鐘線為低,以等待軟件讀取 SR1,然后把字節(jié)寫進數(shù)據(jù)寄存器(緩沖器和移位寄存器都是空的)。 接收器模式:如果 RxNE=1 且 BTF=1:接口在接收到數(shù)據(jù)字節(jié)后保持時鐘線為低,以等待軟件讀 SR1,然后讀數(shù)據(jù)寄存器 DR(緩沖器和移位寄存器都是滿的)。 如果在從模
26、式中禁止時鐘延長: 如果 RxNE=1,在接收下個字節(jié)前 DR 還沒有被讀走,則發(fā)生過載錯。接收到的最后一個字節(jié)丟失。 如果 TxE=1,在下個字節(jié)必須發(fā)送之前卻沒有字節(jié)寫進 DR,則發(fā)生欠載錯。相同的字節(jié)將被重發(fā)。 無寫沖突管1.4.5 SMBus介紹系統(tǒng)管總線(SMBus)是一個兩線接口。通過它,各設(shè)備之間以及設(shè)備與系統(tǒng)的其他部分之間可以互相通信。它基于 I2C 操作原。SMBus 為系統(tǒng)和電源管相關(guān)的任務(wù)提供一條控制總線。一個系統(tǒng)用 SMBus 可以和多個設(shè)備互傳信息,而需使用獨的控制線。系統(tǒng)管總線(SMBus)標(biāo)準(zhǔn)涉及三類設(shè)備。從設(shè)備,接收或響應(yīng)命的設(shè)備。主設(shè)備,用來發(fā)布命,產(chǎn)生時鐘和
27、終止發(fā)送的設(shè)備。主機,是一種專用的主設(shè)備,它提供與系統(tǒng) CPU 的主接口。主機必須具有主-從機功能,并且必須支持SMBus 通報協(xié)議。在一個系統(tǒng)只允許有一個主機。SMBus和I2C之間的相似點 2 條線的總線協(xié)議(1 個時鐘,1 個數(shù)據(jù)) + 可選的 SMBus 提醒線 主-從通信,主設(shè)備提供時鐘 多主機功能 SMBus數(shù)據(jù)格式類似于I2C的 7 位地址格式(見 圖 133)SMBus和I2C之間的同點 下表為 SMBus 和 I2C 的同點。SMBus2I C最大傳輸速度100kHz最大傳輸速度400kHz最小傳輸速度10kHz無最小傳輸速度35ms時鐘低超時無時鐘超時固定的邏輯電平邏輯電平
28、由VDD決定不同的地址類型(保留、動態(tài)等)7位、10位和廣播呼叫從地址類型不同的總線協(xié)議(快速命令、處理呼叫等)無總線協(xié)議SMBus應(yīng)用用途用系統(tǒng)管總線,設(shè)備可提供制造商信息,告訴系統(tǒng)它的型號/部件號,保存暫停事件的狀態(tài),報告同類型的錯誤,接收控制參數(shù),和返回它的狀態(tài)。SMBus為系統(tǒng)和電源管相關(guān)的任務(wù)提供控制總線。設(shè)備標(biāo)識在系統(tǒng)管總線上,任何一個作為從模式的設(shè)備都有一個唯一的地址,叫做從地址。保的從地址表請參考 2.0 版的SMBus規(guī)范(/specs/)??偩€協(xié)議SMBus技術(shù)規(guī)范支持 9 個總線協(xié)議。有關(guān)這些協(xié)議的詳細資和SMBus地址類型,請參考 2.0
29、版的SMBus規(guī)范(/specs/)。這些協(xié)議由用戶的軟件來執(zhí)。地址解析協(xié)議(ARP)SMBus 從地址沖突可以通過給每個從設(shè)備動態(tài)分配一個新的唯一地址來解決。ARP 有以下的屬性: 地址分配用標(biāo)準(zhǔn) SMBus 物層仲裁機制 當(dāng)設(shè)備維持供電期間,分配的地址仍保持變,允許設(shè)備在斷電時保其地址。 在地址分配后,沒有額外的 SMBus 的打包開銷(也就是說訪問分配地址的設(shè)備與訪問固定地址的設(shè)備所用時間是一樣的)。 任何一個 SMBus 主設(shè)備可以遍歷總線。唯一的設(shè)備標(biāo)識符(UDID)為提供一種為進地址分配目的而區(qū)分每個設(shè)備的機制,每個設(shè)備必須擁有一個唯一的設(shè)備標(biāo)識符。關(guān)
30、于在ARP上 128 位的UDID細節(jié)的信息,參考 2.0 版的SMBus規(guī)范(/specs/)。SMBus提醒模式SMBus 提醒是一個帶中斷線的可選信號,用于那些希望擴展他們的控制能而犧牲一個引腳的設(shè)備。SMBALERT 和 SCL 和 SDA 信號一樣,是一種線與信號。SMBALERT 通常和 SMBus 廣播呼叫地址一起使用。與 SMBus 有關(guān)的消息為 2字節(jié)。單一的從設(shè)備可以通過 SMBALERT 發(fā)信號給主機表示它希望進通信,這可通過設(shè)置 I2C_CR1 寄存器上的 ALERT 位實現(xiàn)。主機處該中斷并通過提醒響應(yīng)地址 ARA(Alert Respon
31、se Address,地址值為 x)訪問所有 SMBALERT 設(shè)備。只有那些將 MBALERT 低的設(shè)備能應(yīng)答 ARA。此狀態(tài)是由 I2C_SR1 寄存器中的 SMBALERT 狀態(tài)標(biāo)記來標(biāo)識的。主機執(zhí)一個修改過的接收字節(jié)操作。由從發(fā)送設(shè)備提供的 7 位設(shè)備地址被放在字節(jié)的 7 個最高位上,第八個位可以是 0 或 1。如果多個設(shè)備把 SMBALERT 低,最高優(yōu)先級設(shè)備(最小的地址)將在地址傳輸期間通過標(biāo)準(zhǔn)仲裁贏得通信權(quán)。在確認從地址后,此設(shè)備得再低它的SMBALERT,如果當(dāng)信息傳輸完成后,主機仍看到 SMBALERT 低,就知道需要再次讀 ARA。沒有執(zhí)SMBALERT信號的主機可以定期
32、訪問ARA。有關(guān)SMBus提醒模式的多詳細資,請參考 2.0 版的SMBus規(guī)范(/specs/)。超時錯誤在定時規(guī)范上 I2C 和 SMBus 之間有很多差別。SMBus定義一個時鐘低超時,35ms的超時。SMBus規(guī)定TLOW:SEXT為從設(shè)備的積時鐘低擴展時間。SMBus規(guī)定TLOW:MEXT為主設(shè)備的積時鐘低擴展時間。多超時細節(jié)請參考 2.0 版的SMBus規(guī)范(/specs/)。I2C_SR1 中的狀態(tài)標(biāo)志 Timeout 或 Tlow 錯誤表明這個特征的狀態(tài)。如何使用SMBus模式的接口為從 I2C 模式換到 SMBus
33、模式,應(yīng)該執(zhí)下步驟: 設(shè)置 I2C_CR1 寄存器中的 SMBus 位 按應(yīng)用要求配置 I2C_CR1 寄存器中的 SMBTYPE 和 ENARP 位。如果你想把設(shè)備配置成主設(shè)備,產(chǎn)生起始條件的步驟見 15.4.2 I2C主模式。否則,參見 1.4.1 I2C從模式。軟件程序必須處多種 SMBus 協(xié)議。 如果 ENARP=1 且 SMBTYPE=0,使用 SMB 設(shè)備默認地址。 如果 ENARP=1 且 SMBTYPE=1,使用 SMB 主設(shè)備頭字段。 如果 SMBALERT=1,使用 SMB 提醒響應(yīng)地址。1.4.6 DMA請求DMA 請求(當(dāng)被使能時)僅用于數(shù)據(jù)傳輸。發(fā)送時數(shù)據(jù)寄存器變空
34、或接收時數(shù)據(jù)寄存器變滿,則產(chǎn)生 DMA 請求。當(dāng)為相應(yīng) DMA 通道設(shè)置的數(shù)據(jù)傳輸已經(jīng)完成時,DMA 控制器發(fā)送傳輸結(jié)束信號 ETO 到 I2C 接口,并且在中斷允許時產(chǎn)生一個傳輸完成中斷: 主發(fā)送器:在 EOT 中斷服務(wù)程序中,需禁止 DMA 請求,然后在等到 BTF事件后設(shè)置停止條件。 主接收器:DMA 控制器發(fā)送一個硬件信號 EOT_1,它對應(yīng) DMA 傳輸(字節(jié)數(shù)1)。如果在 I2C_CR2 寄存器中設(shè)置 LAST 位,硬件在發(fā)送完 EOT_1后的下一個字節(jié),將自動發(fā)送 NACK。在中斷允許的情況下,用戶可以在DMA 傳輸完成的中斷服務(wù)程序中產(chǎn)生一個停止條件。注: 請參考產(chǎn)品手冊以確認
35、您所選用型號有 DMA 控制器。如果 DMA 可用,用戶該如前面所描述的方法使用 I2C。在 I2C ISR 中,可以清除 TxE/RxNE 標(biāo)記以達到連續(xù)的通信。用DMA發(fā)送DMA 模式可以通過設(shè)置 I2C_CR2 寄存器中的 DMAEN 位來激活。在接收到地址序后并清除 ADDR 位,才能設(shè)置 DMAEN 位。只要 TxE 位被置位,數(shù)據(jù)將由 DMA 從預(yù)置的存儲區(qū)裝載進 I2C_DR 寄存器。為 I2C 分配一個 DMA 通道,須執(zhí)以下步驟。(x 是通道號)1.在DMA_CPARx寄存器中設(shè)置I2C_DR寄存器地址。數(shù)據(jù)將在每個TxE事件后從存儲器送進這個地址。2.在DMA_CMARx寄
36、存器中設(shè)置存儲器地址。數(shù)據(jù)在每個TxE事件后從這個存儲區(qū)裝載進I2C_DR。3.在DMA_CNDTRx寄存器中設(shè)置所需的傳輸字節(jié)數(shù)。在每個TxE事件后,此值將被遞減。4.利用DMA_CCRx寄存器中的PL0:1位配置通道優(yōu)先級。5.設(shè)置DMA_CCRx寄存器中的DIR位,并根據(jù)應(yīng)用要求可以配置在整個傳輸完成一半或全部完成時發(fā)出中斷請求。6.通過設(shè)置DMA_CCTx寄存器上的EN位激活通道。當(dāng) DMA 控制器中設(shè)置的數(shù)據(jù)傳輸數(shù)目已經(jīng)完成時,DMA 控制器給 I2C 接口發(fā)送一個傳輸結(jié)束的 EOT/ EOT_1 信號。在中斷允許的情況下,將產(chǎn)生一個 DMA 中斷。注:如果使用DMA進行發(fā)送時,不要
37、設(shè)置I2C_CR2寄存器的ITEVTEN位。用DMA接收DMA 接收模式可以通過設(shè)置 I2C_CR2 寄存器中的 DMAEN 位激活。只有在接收到地址序后并且 ADDR 為被清除后,才能設(shè)置 DMAEN 位。接收到數(shù)據(jù)字節(jié)時,數(shù)據(jù)將由 DMA 從 I2C_DR 寄存器傳送到設(shè)置的存儲區(qū)(參考 DMA 說明)。設(shè)置 DMA 通道進 I2C 接收,須執(zhí)以下步驟。(x 是通道號)1 在DMA_CPARx寄存器中設(shè)置I2C_DR寄存器的地址。數(shù)據(jù)將在每次 RxNE事件后從此地址傳送到存儲區(qū)。2 在DMA_CMARx寄存器中設(shè)置存儲區(qū)地址。數(shù)據(jù)將在每次RxNE事件 后從I2C_DR寄存器傳送到此存儲區(qū)。
38、3 在DMA_CNDTRx寄存器中設(shè)置所需的傳輸字節(jié)數(shù)。在每個RxNE事件 后,此值將被遞減。4 用DMA_CCRx寄存器中的PL0:1配置通道優(yōu)先級。5 清除DMA_CCRx寄存器中的DIR位,根據(jù)應(yīng)用要求可以設(shè)置在數(shù)據(jù)傳 輸完成一半或全部完成時發(fā)出中斷請求。6 設(shè)置DMA_CCRx寄存器中的EN位激活該通道。當(dāng) DMA 控制器中設(shè)置的數(shù)據(jù)傳輸數(shù)目已經(jīng)完成時,DMA 控制器給 I2C 接口發(fā)送一個傳輸結(jié)束的 EOT/ EOT_1 信號。在中斷允許的情況下,將產(chǎn)生一個 DMA 中斷。注: 如果使用 DMA 進接收時,要設(shè)置 I2C_CR2 寄存器的 ITEVTEN 位。1.4.7 包錯誤校驗(
39、PEC)包錯誤校驗(PEC)計算器是用于提高通信的可靠性,這個計算器使用一個可編程的多項式對每一位數(shù)據(jù)進計算。 PEC 計算由 I2C_CR1 寄存器的 ENPEC 位激活。PEC 使用 CRC-8 算法對所有信息字節(jié)進計算,包括地址和讀/寫位在內(nèi)。 在發(fā)送時:在最后一個 TxE 事件時設(shè)置 I2C_CR1 寄存器中的 PEC 傳輸位,PEC 將在當(dāng)前字節(jié)后被發(fā)送。 在接收時:在最后一個 RxNE 事件時設(shè)置 I2C_CR1 寄存器中的 PEC 位,如 果 下 個 接 收 到 的 字 節(jié) 等 于 內(nèi) 部 計 算 的 PEC , 接 收 器 發(fā) 送 一 個NACK 。 如 果 是 主 接 收 器
40、 , 管 校 對 的 結(jié) 果 如 何 , PEC 后 都 將 發(fā) 送NACK。 在 I2C_SR1 寄存器中可獲得 PECERR 錯誤標(biāo)記/中斷。 如果 DMA 和 PEC 計算器都被激活: 在發(fā)送時:當(dāng) I2C 接口從 DMA 控制器處接收到 EOT 信號時,它在最后一個字節(jié)后自動發(fā)送 PEC。 在接收時:當(dāng) I2C 接口從 DMA 處接收到一個 EOT_1 信號時,它將自動把下一個字節(jié)作為 PEC,并且將檢查它。在接收到 PEC 后產(chǎn)生一個DMA 請求。 為允許中間 PEC 傳輸,在 I2C_CR2 寄存器中有一個控制位(LAST 位)用于判別是否 真是最后一 個 DMA 傳輸。如果確 實
41、是最后一 個主接收器的DMA 請求,在接收到最后一個字節(jié)后自動發(fā)送 NACK。 仲裁丟失時 PEC 計算失效。1.5 中斷請求 表46 I2C 中斷請求表:中斷事件事件標(biāo)志開啟控制位起始位已發(fā)送(主)SBITEVFEN地址已發(fā)送(主) 或 地址匹配(從)ADDR10位頭段已發(fā)送(主)ADD10已收到停止(從)STOPF數(shù)據(jù)字節(jié)傳輸完成BTF接收緩沖區(qū)非空RxNEITEVFEN 和ITBUFEN發(fā)送緩沖區(qū)空TxE總線錯誤BERRITERREN仲裁丟失(主)ARLO響應(yīng)失敗AF過載/欠載OVRPEC錯誤PECERR超時/Tlow錯誤TIMEOUTSMBus提醒SMBALERT注: 1 SB、ADD
42、R、ADD10、STOPF、BTF、RxNE、TxE 通過邏輯或匯到同一個中斷通道中。2 BERR、ARLO、AF、OVR、PECERR、TIMEOUT、SMBALERT 通過邏輯或匯到同一個中斷通道中。圖140 I2C 中斷映射圖1.6 內(nèi)部集成電路(I2C)I2C 總線接口連接微控制器和串行 I2C 總線。它提供多主機功能,控制所有 I2C 總線特定的時序、協(xié)議、仲裁和定時。支持標(biāo)準(zhǔn)和快速兩種模式,同時與 SMBus 2.0 兼容。I2C 總線有多種用途,包括 CRC 碼的生成和校驗、SMBus(系統(tǒng)管理總線 System Management Bus) PMBus(電源管理總線 Powe
43、r Management Bus)。I2C 驅(qū)動可以用來通過 I2C 界面發(fā)送和接收數(shù)據(jù),還可以返回傳輸操作的狀態(tài)。Section 11.1 I2C 寄存器結(jié)構(gòu)描述了固件函數(shù)庫所使用的數(shù)據(jù)結(jié)構(gòu),Section 11.2 固件庫函數(shù)介紹了函數(shù)庫里的所有函數(shù)。1.6.1 I2C寄存器結(jié)構(gòu)I2C 寄存器結(jié)構(gòu),I2C_TypeDeff,在文件“stm32f10x_map.h”中定義如下:typedef structvu16 CR1;u16 RESERVED0;vu16 CR2;u16 RESERVED1;vu16 OAR1;u16 RESERVED2;vu16 OAR2;u16 RESERVED3;v
44、u16 DR;u16 RESERVED4;vu16 SR1;u16 RESERVED5;vu16 SR2;u16 RESERVED6;vu16 CCR;u16 RESERVED7;vu16 TRISE;u16 RESERVED8; I2C_TypeDef;Table 204.例舉了 I2C 所有寄存器Table 204. I2C 寄存器寄存器描述CR1I2C 控制寄存器 1CR2I2C 控制寄存器 2OAR1I2C 自身地址寄存器 1OAR2I2C 自身地址寄存器 2DRI2C 數(shù)據(jù)寄存器SR1I2C 狀態(tài)寄存器 1SR2I2C 狀態(tài)寄存器 2CCRI2C 時鐘控制寄存器TRISEI2C 上升
45、時間寄存器2 個 I2C 外設(shè)聲明于文件“stm32f10x_map.h”:.#define PERIPH_BASE (u32)0x)#define APB1PERIPH_BASE PERIPH_BASE#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000).#define I2C1_BASE (APB1PERIPH_BASE + 0x5400)#define I2C2_BASE (APB1PERIPH_BASE + 0x5800).#ifndef DEBUG.#
46、ifdef _I2C1#define I2C1 (I2C_TypeDef *) I2C1_BASE)#endif /*_I2C1 */#ifdef _I2C2#define I2C2 (I2C_TypeDef *) I2C2_BASE)#endif /*_I2C2 */.#else /* DEBUG */.#ifdef _I2C1EXT I2C_TypeDef *I2C1;#endif /*_I2C1 */#ifdef _I2C2EXT I2C_TypeDef *I2C2;#endif /*_I2C2 */.#endif使用 Debug 模式時,初始化指針 I2C1, I2C2 于文件“stm
47、32f10x_lib.c”:.#ifdef _I2C1I2C1 = (I2C_TypeDef *) I2C1_BASE;#endif /*_I2C1 */#ifdef _I2C2I2C2 = (I2C_TypeDef *) I2C2_BASE;#endif /*_I2C2 */.為了訪問 I2C 寄存器,_I2C,_I2C1, _I2C2 必須在文件“stm32f10x_conf.h”中定義如下:.#define _I2C#define _I2C1#define _I2C2.16.2 I2C庫函數(shù)Table 205. 例舉了 I2C 的庫函數(shù)Table 205. I2C 庫函數(shù)函數(shù)名描述I2C
48、_DeInit將外設(shè) I2Cx 寄存器重設(shè)為缺省值I2C_Init根據(jù) I2C_InitStruct 中指定的參數(shù)初始化外設(shè) I2Cx 寄存器I2C_StructInit把 I2C_InitStruct 中的每一個參數(shù)按缺省值填入I2C_Cmd使能或者失能 I2C 外設(shè)I2C_DMACmd使能或者失能指定 I2C 的 DMA 請求I2C_DMALastTransferCmd使下一次 DMA 傳輸為最后一次傳輸I2C_GenerateSTART產(chǎn)生 I2Cx 傳輸 START 條件I2C_GenerateSTOP產(chǎn)生 I2Cx 傳輸 STOP 條件I2C_AcknowledgeConfig使能或
49、者失能指定 I2C 的應(yīng)答功能I2C_OwnAddress2Config設(shè)置指定 I2C 的自身地址 2I2C_DualAddressCmd使能或者失能指定 I2C 的雙地址模式I2C_GeneralCallCmd使能或者失能指定 I2C 的廣播呼叫功能I2C_ITConfig使能或者失能指定的 I2C 中斷I2C_SendData通過外設(shè) I2Cx 發(fā)送一個數(shù)據(jù)I2C_ReceiveData返回通過 I2Cx 最近接收的數(shù)據(jù)I2C_Send7bitAddress向指定的從 I2C 設(shè)備傳送地址字I2C_ReadRegister讀取指定的 I2C 寄存器并返回其值I2C_SoftwareRes
50、etCmd使能或者失能指定 I2C 的軟件復(fù)位I2C_SMBusAlertConfig驅(qū)動指定 I2Cx 的 SMBusAlert 管腳電平為高或低I2C_TransmitPEC使能或者失能指定 I2C 的 PEC 傳輸I2C_PECPositionConfig選擇指定 I2C 的 PEC 位置I2C_CalculatePEC使能或者失能指定 I2C 的傳輸字 PEC 值計算I2C_GetPEC返回指定 I2C 的 PEC 值I2C_ARPCmd使能或者失能指定 I2C 的 ARPI2C_StretchClockCmd使能或者失能指定 I2C 的時鐘延展I2C_FastModeDutyCycl
51、eConfig選擇指定 I2C 的快速模式占空比I2C_GetLastEvent返回最近一次 I2C 事件I2C_CheckEvent檢查最近一次 I2C 事件是否是輸入的事件I2C_GetFlagStatus檢查指定的 I2C 標(biāo)志位設(shè)置與否I2C_ClearFlag清除 I2Cx 的待處理標(biāo)志位I2C_GetITStatus檢查指定的 I2C 中斷發(fā)生與否I2C_ClearITPendingBit清除 I2Cx 的中斷待處理位 函數(shù)I2C_DeInitTable 206. 描述了函數(shù) I2C_DeInitTable 206. 函數(shù) I2C_DeInit函數(shù)名I2C_DeIni
52、t函數(shù)原形void I2C_DeInit(I2C_TypeDef* I2Cx)功能描述將外設(shè) I2Cx 寄存器重設(shè)為缺省值輸入?yún)?shù)I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)輸出參數(shù)無返回值無先決條件無被調(diào)用函數(shù)RCC_APB1PeriphClockCmd().例:/* Deinitialize I2C2 interface*/I2C_DeInit(I2C2); 函數(shù)I2C_ InitTable 207. 描述了函數(shù) I2C_InitTable 207. 函數(shù) I2C_Init函數(shù)名I2C_Init函數(shù)原形void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct)功能描述根據(jù) I2C_InitStruct 中指定的參數(shù)初始化外設(shè) I2Cx 寄存器輸入?yún)?shù) 1I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)輸入?yún)?shù) 2I2C_InitStruct:指向結(jié)構(gòu) I2C_InitTypeDef
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 印刷油墨采購合同范本
- 和會計簽合同范例
- 商場活動合作合同范本
- 廚師技術(shù)入股權(quán)合同范本
- 勘察設(shè)計服務(wù)合同范本
- 商鋪借用合同范例
- 互聯(lián)網(wǎng)+智慧旅游
- 養(yǎng)殖合作入股合同范本
- 商鋪冰箱出租合同范本
- 供暖安裝費合同范本
- 醫(yī)療器械生產(chǎn)中的人工智能應(yīng)用技巧
- 回奶介紹演示培訓(xùn)課件
- 2024年福建福州地鐵集團招聘筆試參考題庫含答案解析
- 社會心理學(xué)-社會心理學(xué)的研究方法
- 綠色施工環(huán)境保護應(yīng)急預(yù)案
- (完整)TRD工法樁施工方案
- 2023靜脈治療護理技術(shù)操作標(biāo)準(zhǔn)解讀
- 某物業(yè)管理月度品質(zhì)管理考核標(biāo)準(zhǔn)
- 新民主主義革命理論(教學(xué)案例)
- 基礎(chǔ)日語1學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
- 客源國概況-韓國課件
評論
0/150
提交評論