亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

I2C

2024-06-28 13:26:09
字體:
來源:轉載
供稿:網友
I2C

概述

I2C(Inter-Integrated Circuit)總線是由PHILipS公司開發的兩線式串行總線,用于連接微控制器及其外圍設備。是微電子通信控制領域廣泛采用的一種總線標準。具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優點。

I2C 總線通過串行數據(SDA)線和串行時鐘(SCL)線在連接到總線的器件間傳遞信息。每個器件都有一個唯一的地址識別(無論是微控制器——MCU、LCD驅動器、存儲器或鍵盤接口),而且都可以作為一個發送器或接收器(由器件的功能決定)。

I2C有四種工作模式:

1.主機發送

2.主機接收

3.從機發送

4.從機接收

以我們的S5PC100來說,我們主要討論的主機發送模式。

在傳輸數據的時候,串行數據線(SDA)必須在時鐘的高電平周期保持穩定,串行數據線(SDA)的高或低電平的狀態只有在串行時鐘線(SCL)的時鐘信號是低電平時才能改變。這是由于當處于時鐘的高電平周期時,串行數據線的電平變化具有特殊的含義。

串行時鐘線(SCL)是高電平時,串行數據線(SDA)從高電平向低電平切換,這種情況表示起始條件。

串行時鐘線(SCL)是高電平時,串行數據線(SDA)從低電平向高電平切換,這種情況表示停止條件。

在數據傳輸時,發送到SDA線上的每個字節必須是8位,每次數據可以發送的字節數量不受限制。并且每個字節后必須跟一個響應位。

在linux內核中定義了I2C驅動體系結構。我們通過一個圖來說明:

在Linux系統中,I2C驅動由三部分構成,即I2C核心、I2C總線驅動和I2C設備驅動。

I2C核心用于聯系I2C設備驅動與I2C控制驅動的紐帶。實現了一組和硬件無關的函數。

I2C總線驅動用于在I2C總線上產生相應的時序。

I2C設備驅動調用I2C core中的函數來完成I2C設備驅動的注冊以及I2C消息的封裝。這也是我們主要關心的部分。

在I2C子系統中實現I2C通用設備驅動,我們可以使用這個通過驅動來實現對I2C設備的控制,但是I2C消息就必須由用戶程序自己封裝,這絕對是不可行的。所以我們推薦自己實現對應的I2C特定驅動,從中封裝I2C消息。使用戶程序不需關心內部的細節。

但是我們還是首先需要了解一下如何使用這個通用的I2C驅動。

首先我們需要配置內核來添加I2C總線驅動。修改內容為:

首先修改配置文件,添加S5PC100的支持。然后執行make menuconfig來添加總線設備驅動和通過設備驅動。

之后編譯內核,運行內核后我們會發現在/dev/下多了兩個設備節點i2c-0和i2c-1.這是證明我們的通用設備驅動已經加載成功。

我們直接訪問這個設備文件就可以控制I2C設備。如何操作呢?

在應用程序中:

1.打開i2c設備文件。

2.構建消息

3.執行ioctl操作

打開i2c設備文件不用多說。構建什么消息呢?

我們首先需要來看兩個數據結構

i2c_rdwr_ioctl_data 用于給ioctl操作傳遞參數。當中有兩個成員。

第一個參數為msgs。即要傳遞的消息。它是一個指針,由于保存一個消息的首地址或者一組消息的數組首地址。

第二個參數為消息的個數。

接下來我們來看i2c_msg

該結構體用于封裝一個消息。

addr:即從設備的地址

flags:標志,下面定義了很多標志。0代表寫。1代表讀

len: 數據的長度

buf: 用于發送或者接收數據的緩沖區。

知道構建消息相關的兩個結構體了,那么接下來我們應該如何構建消息呢?這就需要查看對應要訪問的i2c設備的芯片手冊了。

打開lm75的芯片手冊。

首先我們需要找到lm75的從機地址。

i2c設備地址有7位構成高4位是固定的,低3位由設備的三個地址引腳來決定。

通過這里我們得知lm75溫度傳感器的i2c地址的高4位。低三位我們通過查看原理圖可以得知都為0.所以lm75的i2c地址為0x48.

我們通過一個圖可以得知lm75溫度傳感器的內部寄存器的操作過程:

首先我們可以看到一個pointer 寄存器,它用于選擇到底要訪問哪個寄存器。

剩下四個寄存器分別有不同的功能。我們當前就是讀取溫度值,所以直接操作溫度寄存器即可。

如何操作我們需要查看lm75的訪問時序圖。

通過查看lm75的溫度寄存器可以得知溫度寄存器有16位,高8位表示對應的整數的溫度,第7位值為1,表示在高8位的溫度的基礎上加0.5攝氏度。并且如果最高位為1的話表示當前讀到的數值是一個負數的補碼。即零

下多少度。

所以如果想要讀取溫度的話我們至少需要讀取兩個字節的數據。

接下來我們來看時序圖。

根據時序圖我們就可以構建消息了。

首先我們需要設置pointer寄存器,指向lm75的溫度寄存器。

之后再構建一個消息用于讀取溫度的值

消息構建好后就可以執行ioctl操作了:

我們測試一下。。。

那么如何是我們自己編寫特定的i2c驅動怎么做呢?

首先我們需要在平臺代碼中加入lm75的設備信息。

type代表設備類型,addr:從設備號,platform_data平臺數據。irq中斷號。

添加設備信息后,在內核啟動后,會將數組中的所有設備全部注冊到內核中。

接下來我們來看如何編寫一個特定的i2c設備驅動:

1.構建i2c設備驅動結構體(i2c_driver)

1.PRobe/remove 對應之前的加載函數與卸載函數

2.driver成員。通用驅動屬性,我們需要設置name成員但不是用于匹配設備,那如何匹配設備呢?

3.id_table成員用于設置當前i2c_driver所支持的設備類型。

i2c_device_id結構體中有兩個成員name用于配置設備,driver_data驅動的私有數據,我們基本不會用,直接傳遞0即可。

并且要求,在設置完支持的設備后,需要在后面添加一個空成員用于結束標志

2.實現字符設備驅動模型(之前的加載函數用于probe,卸載函數用于remove)

3.實現讀操作用于讀取溫度。當中構建消息,發送消息:

i2c_transfer(適配器, 消息首地址, 數量);

適配器從何而來,當我們的i2c設備與驅動匹配后執行probe函數,第一個參數為client。它當中就包含了適配器,所以我們在probe函數中,將client的首地址保存起來,用于傳輸消息。

3.加載函數中注冊i2c設備驅動i2c_add_driver

4.卸載函數中注銷i2c設備驅動i2c_del_driver

文章來源:華清遠見嵌入式學院,原文地址:http://www.embedu.org/Column/Column853.htm

更多相關嵌入式免費資料查看華清遠見講師博文>>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国内产的精品视频在线观看| 亚洲自拍小视频| 91国内精品久久| 欧美高清在线视频观看不卡| 国产精品∨欧美精品v日韩精品| 亚洲午夜久久久久久久| 欧美超级免费视 在线| 57pao国产精品一区| 草民午夜欧美限制a级福利片| 国产精品永久免费| 久久久人成影片一区二区三区观看| 欧美色xxxx| 国产欧美久久久久久| 国产大片精品免费永久看nba| 一区二区中文字幕| 日日骚久久av| 国产精品久久久久av| 91高清视频免费观看| 亚洲欧洲在线免费| 国产美女91呻吟求| 国产mv久久久| 日韩在线观看你懂的| 亚洲欧美成人精品| 91精品国产电影| 97在线看免费观看视频在线观看| 欧美大片免费观看在线观看网站推荐| 欧美一级视频免费在线观看| 欧美日韩在线免费| 国产精品国产三级国产aⅴ浪潮| 欧美自拍大量在线观看| 亚洲97在线观看| 国产福利精品视频| 日韩av影片在线观看| 久久这里只有精品视频首页| 日韩电影中文字幕一区| 亚洲区在线播放| 日韩av在线看| 国产精品久久久久久网站| 欧美黑人xxx| 高清在线视频日韩欧美| 欧美一区二三区| 日韩激情av在线免费观看| 久久国产精品免费视频| 日韩欧美国产黄色| 亚洲精品在线91| 亚洲成人动漫在线播放| 97免费中文视频在线观看| 98午夜经典影视| 精品国产欧美一区二区三区成人| 亚洲精品自拍偷拍| 亚洲天堂av图片| 国产精品v片在线观看不卡| 色偷偷88888欧美精品久久久| 一区二区成人精品| 亚洲精品国产电影| 成人午夜两性视频| 久热精品视频在线免费观看| 国产精品99蜜臀久久不卡二区| 动漫精品一区二区| 日韩成人网免费视频| 宅男66日本亚洲欧美视频| 欧美多人乱p欧美4p久久| 欧美成人sm免费视频| 欧美色视频日本版| 亚洲综合一区二区不卡| 91精品视频专区| 国产视频在线观看一区二区| 91sao在线观看国产| 日韩欧美在线中文字幕| 欧美一级高清免费播放| 亚洲片av在线| 精品国偷自产在线视频| 欧美日韩免费在线| 国产成人拍精品视频午夜网站| 欧美成年人在线观看| 日韩中文字幕在线精品| www.亚洲成人| 国语自产精品视频在线看抢先版图片| 97在线看福利| 欧美激情奇米色| 中文字幕亚洲一区二区三区| 日韩电影免费在线观看| 日韩av片电影专区| 日韩欧美在线视频| 97人洗澡人人免费公开视频碰碰碰| 亚洲一区久久久| 91高清视频在线免费观看| 日韩精品中文字幕视频在线| 国产一区二区三区直播精品电影| 自拍偷拍亚洲区| 一区二区三区国产在线观看| 日本高清久久天堂| 成人乱色短篇合集| 欧美视频在线观看免费网址| 国产亚洲精品激情久久| 亚洲人午夜精品免费| www日韩欧美| 国产免费久久av| 成人精品网站在线观看| 在线播放国产精品| 国产在线视频91| 久久精品国产免费观看| 国产精品久久久久久久久久| 亚洲精品国产精品久久清纯直播| 日韩精品福利在线| 精品国产一区二区三区久久久| 5278欧美一区二区三区| 日韩欧美在线免费| 91亚洲精品久久久| 粉嫩av一区二区三区免费野| 97超级碰在线看视频免费在线看| 精品久久香蕉国产线看观看gif| 久久免费视频网站| 欧美国产日产韩国视频| 成人精品视频99在线观看免费| 成人性生交xxxxx网站| 97免费视频在线播放| 久久久精品视频在线观看| 日本aⅴ大伊香蕉精品视频| 日韩精品在线免费观看视频| 51久久精品夜色国产麻豆| 国产精品视频免费在线观看| 欧洲午夜精品久久久| 精品中文字幕视频| 亚洲国产私拍精品国模在线观看| 日韩欧美主播在线| 欧美精品中文字幕一区| 午夜精品久久久久久久久久久久| 国内精品视频一区| 91精品国产自产在线老师啪| 亚洲2020天天堂在线观看| 色天天综合狠狠色| 欧美黑人巨大xxx极品| 久久视频免费观看| 91免费国产视频| 欧美老女人bb| 亚洲性日韩精品一区二区| 最近2019好看的中文字幕免费| 狠狠躁夜夜躁人人爽超碰91| 久久久精品久久久久| 欧美亚洲国产另类| 成人有码视频在线播放| 一本大道久久加勒比香蕉| 日韩av免费在线| 成人精品视频99在线观看免费| 久久久久久久久久国产| 亚洲第一视频在线观看| 日韩欧美在线第一页| 日本三级久久久| 欧美日韩精品在线| 91精品国产高清自在线看超| 国产精品视频区| 国产精品久久久久久久久久东京| 成人黄色在线播放| 午夜免费久久久久| 上原亚衣av一区二区三区| 欧美日韩成人黄色| 日韩精品中文在线观看| 亚洲sss综合天堂久久| 欧美一级片久久久久久久| 亚洲精品久久久久久久久久久久久| 国产精品高清免费在线观看| 久久久久日韩精品久久久男男| 国产精品久久一区|