1. 程式人生 > >IIC裝置驅動程式(六)————SMBus協議

IIC裝置驅動程式(六)————SMBus協議

1、介紹
系統管理匯流排(SMBus)是一個兩線介面。通過它,各裝置之間以及裝置與系統的其他部分之間可以互相通訊。它基於I2C操作原理。SMBus為系統和電源管理相關的任務提供一條控制匯流排。一個系統利用SMBus可以和多個裝置互傳資訊,而不需使用獨立的控制線路。
系統管理匯流排(SMBus)標準涉及三類裝置。從裝置,接收或響應命令的裝置。主裝置,用來發布命令,產生時鐘和終止傳送的裝置。主機,是一種專用的主裝置,它提供與系統CPU的主介面。主機必須具有主-從機功能,並且必須支援SMBus通報協議。在一個系統裡只允許有一個主機。

2、SMBus和I2C之間的相似點
2條線的匯流排協議(1個時鐘,1個數據) + 可選的SMBus提醒線
主-從通訊,主裝置提供時鐘
多主機功能
SMBus資料格式類似於I2C的7位地址格式

3、SMBus和I2C之間的不同點
下表為SMBus和I2C的不同點。

SMBus與I2C的比較
     SMBus                              I2C
最大傳輸速度  100kHz                 最大傳輸速度400kHz
最小傳輸速度  10kHz                  無最小傳輸速度
35ms時鐘低超時                       無時鐘超時
固定的邏輯電平                        邏輯電平由VDD決定
不同的地址型別(保留、動態等)            7位、10位和廣播呼叫從地址型別
不同的匯流排協議(快速命令、處理呼叫等)     無匯流排協議

4、SMBus應用用途
利用系統管理匯流排,裝置可提供製造商資訊,告訴系統它的型號/部件號,儲存暫停事件的狀態,報告不同型別的錯誤,接收控制引數,和返回它的狀態。SMBus為系統和電源管理相關的任務提供控制匯流排。

5、裝置標識
在系統管理總線上,任何一個作為從模式的裝置都有一個唯一的地址,叫做從地址。保留的從地址表請參考2.0版的SMBus規範

6、匯流排協議
SMBus技術規範支援9個匯流排協議。有關這些協議的詳細資料和SMBus地址型別,請參考2.0版的SMBus規範)。這些協議由使用者的軟體來執行。

7、地址解析協議(ARP)
SMBus從地址衝突可以通過給每個從裝置動態分配一個新的唯一地址來解決。ARP有以下的屬性:
地址分配利用標準SMBus物理層仲裁機制
當裝置維持供電期間,分配的地址仍保持不變,允許裝置在斷電時保留其地址。
在地址分配後,沒有額外的SMBus的打包開銷(也就是說訪問分配地址的裝置與訪問固定地址的裝置所用時間是一樣的)。
任何一個SMBus主裝置可以遍歷匯流排。

8、唯一的裝置識別符號(UDID)
為了提供一種為進行地址分配目的而區分每個裝置的機制,每個裝置必須擁有一個唯一的裝置識別符號。
關於在ARP上128位的UDID細節的資訊,參考2.0版的SMBus規範

9、SMBus提醒模式
SMBus提醒是一個帶中斷線的可選訊號,用於那些希望擴充套件他們的控制能力而犧牲一個引腳的裝置。SMBALERT和SCL和SDA訊號一樣,是一種線與訊號。SMBALERT通常和SMBus廣播呼叫地址一起使用。與SMBus有關的訊息為2位元組。單一的從裝置可以通過SMBALERT發訊號給主機表示它希望進行通訊,這可通過設定I2C_CR1暫存器上的ALERT位實現。主機處理該中斷並通過提醒響應地址ARA(Alert Response Address,地址值為0001100x)訪問所有SMBALERT裝置。只有那些將SMBALERT拉低的裝置能應答ARA。此狀態是由 I2C_SR1暫存器中的SMBALERT狀態標記來標識的。主機執行一個修改過的接收位元組操作。由從傳送裝置提供的7位裝置地址被放在位元組的7個最高位上,第八個位可以是0或1。如果多個裝置把SMBALERT拉低,最高優先順序裝置(最小的地址)將在地址傳輸期間通過標準仲裁贏得通訊權。在確認從地址後,此裝置不得再拉低它的SMBALERT,如果當資訊傳輸完成後,主機仍看到SMBALERT低,就知道需要再次讀ARA。沒有執行SMBALERT訊號的主機可以定期訪問ARA。有關SMBus提醒模式的更多詳細資料,請參考2.0版的SMBus規範

10、超時錯誤
在定時規範上I2C和SMBus之間有很多差別。SMBus定義一個時鐘低超時,35ms的超時。SMBus規定TLOW:SEXT為從裝置的累積時鐘低擴充套件時間。SMBus規定TLOW:MEXT為主裝置的累積時鐘低擴充套件時間。更多超時細節請參考2.0版的SMBus規範I2C_SR1中的狀態標誌Timeout或Tlow錯誤表明了這個特徵的狀態。

11、如何使用SMBus模式的介面
為了從I2C模式切換到SMBus模式,應該執行下列步驟:
設定I2C_CR1暫存器中的SMBus位
按應用要求配置I2C_CR1暫存器中的SMBTYPE和ENARP位。
如果你想把裝置配置成主裝置,產生起始條件的步驟見15.4.2 I2C主模式。否則,參見15.4.1I2C從模式。
軟體程式必須處理多種SMBus協議。
如果ENARP=1且SMBTYPE=0,使用SMB裝置預設地址。
如果ENARP=1且SMBTYPE=1,使用SMB主裝置頭欄位。
如果SMBALERT=1,使用SMB提醒響應地址。

**13、總結
I2C是多主控匯流排,所以任何一個裝置都能像主控器一樣工作,並控制匯流排;
SMBus 為系統和電源管理這樣的任務提供了一條控制匯流排,使用 SMBus 的系統,裝置之間傳送和接收訊息都是通過 SMBus,而不是使用單獨的控制線,這樣可以節省裝置的管腳數。
所以它們的區別很明顯了,一個是該總線上連線裝置自身可以控制匯流排(I2C,速率較高),想幹嘛就幹嘛,另一個是裝置之間可以通過它來傳送資訊,但是速率比較慢,比如用在檢測各元件狀態並更新硬體設定引腳等,同時廉價是它的優點。**

相關推薦

IIC裝置驅動程式————SMBus協議

1、介紹 系統管理匯流排(SMBus)是一個兩線介面。通過它,各裝置之間以及裝置與系統的其他部分之間可以互相通訊。它基於I2C操作原理。SMBus為系統和電源管理相關的任務提供一條控制匯流排。一個系統利用SMBus可以和多個裝置互傳資訊,而不

IIC裝置驅動程式————IIC匯流排驅動實現例項

#include <linux/kernel.h> #include <linux/module.h> #include <linux/i2c.h> #include <linux/init.h> #includ

linux 核心模組程式設計之LED驅動程式

我使用的是tiny6410的核心板,板子如下,淘寶可以買到 為了不與板子上的任何驅動發生IO衝突,我使用CON1那一排沒用到的IO口,引腳如下   LED1 LED2 LED3 LED4

如何寫DOS下的裝置驅動程式

基本上我寫的文章中的程式例項都是32位的,需要執行在保護模式下,但是不要祈求在DOS下可以寫32位的裝置驅動程式,因為DOS本身是16位真實模式下的作業系統,當然其驅動程式的機制也只能是真實模式下的,儘管在DOS下可以編防寫模式的程式,但這些程式亦可以通過DPMI呼叫真實模式

I/O體系結構和裝置驅動程式

1、I/O體系結構 為確保計算機能夠正常工作,必須提供資料通路,讓資訊在連線到計算機的CPU、RAM、和I/O裝置之間流動,這些資料通路總稱為匯流排,擔當計算機內部主通訊通道的作用。 所有計算機都擁有一條系統匯流排,它連線大部分內部硬體裝置,一種典型的系統匯流排是PCI(

Linux 網卡驅動學習應用層、tcp 層、ip 層、設備層和驅動層作用解析

local acc 每次 letter auto sizeof style article inode 本文將介紹網絡連接建立的過程、收發包流程,以及當中應用層、tcp層、ip層、設備層和驅動層各層發揮的作用。 1、應用層 對於使用socket進行網絡連接的serv

Linux 字元裝置驅動結構—— 自動建立裝置節點

      上一篇我們介紹到建立裝置檔案的方法,利用cat /proc/devices檢視申請到的裝置名,裝置號。 第一種是使用mknod手工建立:mknod filename type major minor 第二種是自動建立裝置節點:利用u

Linux 字元裝置驅動結構—— cdev 結構體、裝置號相關知識解析

一、字元裝置基礎知識 1、裝置驅動分類       linux系統將裝置分為3類:字元裝置、塊裝置、網路裝置。使用驅動程式: 字元裝置:是指只能一個位元組一個位元組讀寫的裝置,不能隨機讀取裝置記憶體中的某一資料,讀取資料需要按照先後資料。

Java圖書管理系統練習程式

本部分內容,主要實現對資料庫的基本操作,並更換資料訪問部分,將原來的使用檔案儲存更換為資料庫進行資料的儲存 在專案中,要引入mysql的驅動程式 在專案根目錄下,建立lib資料夾,將mysql的驅動程式複製到lib目錄下,然後在專案中引用 一、建立資料庫與資料表 資料庫名稱:d

程式設計菜鳥到大佬之路:C語言程式

第六天學習精要 if語句 條件分支結構之if 語句 有時,並非所有的程式語句都要被順序執行到,會希望滿足某種條件就執行這部分語句,滿足另一條件就執行另一部分語句,這就需要“條件分支結構”。 依次計算表示式1、表示式2…只要碰到一個表示式i為真,則執行語

Linux I2C裝置驅動編寫

在Linux驅動中I2C系統中主要包含以下幾個成員: I2C adapter 即I2C介面卡 I2C driver 某個I2C裝置的裝置驅動,可以以driver理解。 I2C client 某個I2C裝置的裝置宣告,可以以device理解。 I2C adapter 是

微信小程式——禁止頁面滾動

▍寫在前面(來訪者請直接瀏覽下一條) 最近在做一個美食類小程式的時候,需要用到一個購物車,自己不好構思,就仿照美團的購物車寫了一個,然後就在這卡了一下:購物車列表是fixed脫離文字流的,在上下滾動購物車列表的時候,底部的頁面竟然也會跟著滾動,這怎麼成,所以我就找了一下關於

嵌入式Linux裝置驅動開發

上一篇中介紹到裝置驅動如何匹配裝置以及繫結裝置的,在Linux系統下進行註冊,這裡將繼續介紹probe函式的功能。 5、probe函式 Probe()函式必須驗證指定裝置的硬體是否真的存在,probe()可以使用裝置的資源,包括時鐘,platform_dat

Exynos4412 IIC匯流排驅動開發—— IIC 驅動開發

         首先看一張程式碼層次圖,有助於我們的理解        上面這些程式碼的展示是告訴我們:linux核心和晶片提供商為我們的的驅動程式提供了 i2c驅動的框架,以及框架底層與硬體相關的程式碼的實現。    剩下的就是針對掛載在i2c兩線上的i2c裝置

Windows驅動學習-- FSD鉤子

教程參考自:https://www.bilibili.com/video/av26193169/?p=8 程式碼地址:https://github.com/G4rb3n/Windows-Driver/tree/master/MT_FSDHook 1. 概述 FSD鉤子是一種較實用

Linux 網路裝置驅動開發 —— 網路裝置驅動基本原理和框架

一、協議棧層次對比 二、Linux網路子系統     Linux網路子系統的頂部是系統呼叫介面層。它為使用者空間提供的應用程式提供了一種訪問核心網路子系統的方法(socket)。位於其下面是一個協議無關層,它提供一種通用的方法來使用傳輸層協議。然後是具體協議的實現,在Lin

Linux 字元裝置驅動結構—— file、inode結構體及chardevs陣列等相關知識解析

       先看下面這張圖,這是Linux 中虛擬檔案系統、一般的裝置檔案與裝置驅動程式值間的函式呼叫關係;         上面這張圖展現了一個應用程式呼叫字元裝置驅動的過程, 在裝置驅動程式的設計中,一般而言,會關心 file 和 inode 這兩個結構體  

[ODBC]讀Excel時報錯:外部資料庫驅動程式1中的意外錯誤解決方案

在MFC下使用ODBC讀取Excel資料庫,之前用著還好好的,突然就用不了了,幾經查詢發現是Windows安全更新的補丁搞的鬼。 出現錯誤: 解決方案: 1. 在控制面板——解除安裝——已

Linux I2C裝置驅動編寫-例項分析AM3359

TI-AM3359 I2C介面卡例項分析 I2C Spec簡述 特性: 相容飛利浦I2C 2.1版本規格支援標準模式(100K bits/s)和快速模式(400K bits/s)多路接收、傳送模式支援7bit、10bit裝置地址模式32位元組FIFO緩衝區可程式設計時鐘發生

Linux I2C裝置驅動編寫

在(一)中簡述了Linux I2C子系統的三個主要成員i2c_adapter、i2c_driver、i2c_client。三者的關係也在上一節進行了描述。應該已經算是對Linux I2C子系統有了初步的瞭解。下面再對他們之間的關係進行程式碼層的深入分析,我認為對他們的關係