iic通訊協議

IIC總線
一般串行數據通訊都有時鐘和數據之分,有異步和同步之別.
有單線,雙線和三線等.

I2C肯定是2線的(不算地線).

I2C協議確實很科學,比3/4線的SPI要好,當然線多通訊速率相對就快了.

I2C的原則是:

在SCL=1(高電平)時,SDA千萬別忽悠!!!

否則,SDA下跳則"判罰"為"起始信號S",SDA上跳則"判罰"為"停止信號P".

在SCL=0(低電平)時,SDA隨便忽悠!!!(可別忽悠過火到SCL跳高)

每個字節后應該由對方回送一個應答信號ACK做為對方在線的標志.

非應答信號一般在所有字節的最后一個字節后.一般要由雙方協議簽定.

SCL必須由主機發送,否則天下大亂.

首字節是"片選信號",即7位從機地址加1位方向(讀寫)控制.

從機收到(聽到)自己的地址才能發送應答信號(必須應答!!!)表示自己在線.

其他地址的從機不允許忽悠!!!(當然群呼可以忽悠但只能聽不許說話)

讀寫是站在主機的立場上定義的.

"讀"是主機接收從機數據,"寫"是主機發送數據給從機.

重復位主要用于主機從發送模式到接收模式的轉換"信號",由于只有2線,

所以收發轉換肯定要比SPI復雜,因為SPI可用不同的邊沿來收發數據,而I2C不行.

在硬件I2C模塊,特別是MCU/ARM/DSP等每個階段都會得到一個準確的狀態碼,

根據這個狀態碼可以很容易知道現在在什么狀態和什么出錯信息.

7位I2C總線可以掛接127個不同地址的I2C設備,0號"設備"作為群呼地址.

10位I2C總線可以掛接更多的10位I2C設備.

總之,只要掌握I2C的忽悠記,一般很容易掌控...??第一個字節(為slave address)由7位地址和一位R/W讀寫位組成的,這字節是個器件地址。
首先,你要知道:常用IIC接口通用器件的器件地址是由種類型號,及尋址碼組成的,共7位。
如格式如下:?
??D7 D6 D5 D4 D3 D2 D1 D0
1-器件類型由:D7-D4?共4位決定的。這是由半導公司生產時就已固定此類型的了,也就是說這4位已是固定的。

2-用戶自定義地址碼:D3-D1共3位。這是由用戶自己設置的,通常的作法如EEPROM這些器件是由外部IC的3個引腳所組合電平決定的(用常用的名字如A0,A1,A2)。這也就是尋址碼。
所以為什么同一IIC總線上同一型號的IC只能最多共掛8片同種類芯片的原因了。

3-最低一位就是R/W位。這位不用我多說了。
???在現代電子系統中,有為數眾多的IC需要進行相互之間以及與外界的通信。為了提供硬件的效率和簡化電路的設計,PHILIPS開發了一種用于內部IC控制的簡單的雙向兩線串行總線I2C。I2C總線支持任何一種IC制造工藝,并且PHILIPS和其他廠商提供了種類非常豐富的I2C兼容芯片。作為一個專利的控制總線,I2C已經成為世界性的工業標準。

?I2C總線進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩定,只有在時鐘線上的信號為低電平期間,數據線上的高電平或低電平狀態才允許變化。

?

圖片一

???????????????

起始和終止信號?:SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。

數據傳送格式

(1)字節傳送與應答

每一個字節必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節后面都必須跟隨一位應答位(即一幀共有9位)。如果一段時間內沒有收到從機的應答信號,則自動認為從機已正確接收到數據。

?????AT24C02的芯片地址如下圖,1010為固定,A0,A1,A2正好與芯片的1,2,3引角對應,為當前電路中的地址選擇線,三根線可選擇8個芯片同時連接在電路中,當要與哪個芯片通信時傳送相應的地址即可與該芯片建立連接,TX-1B實驗板上三根地址線都為0。最后一位R/W為告訴從機下一字節數據是要讀還是寫,0為寫入,1為讀出。

?

?

?

?

?

任一地址讀取數據格式

void init()??????????????//初始化

{

???????SCL=1;

???????delay();

???????SDA=1;

???????delay();

}

void start()?????????//啟動信號

{

???????SDA=1;

???????delay();

???????SCL=1;

???????delay();

???????SDA=0;

???????delay();

}

void stop()????????????//停止信號

{

???????SDA=0;

???????delay();

???????SCL=1;

???????delay();

???????SDA=1;

???????delay();

}

?

void respons()?????????????//回應信號

{

???????uchar i=0;SCL=1;delay();

while((SDA==1)&&(i<255))

i++;

???????SCL=0;

delay();

}

void writebyte(uchar date)//???????寫一個字節

{

???????uchar i,temp;

???????temp=date;

???????for(i=0;i<8;i++)

???????{

??????????????temp=temp<<1;

??????????????SCL=0;

??????????????delay();

??????????????SDA=CY;

??????????????delay();

??????????????SCL=1;

??????????????delay();??

???????}

???????SCL=0;

???????delay();

???????SDA=1;

???????delay();

}

?

任一地址寫入數據格式

uchar readbyte()

//讀一個字節

{

???????uchar i,j,k;

???????SCL=0;

???????delay();

???????SDA=1;

???????for(i=0;i<8;i++)

???????{

??????????????SCL=1;

??????????????delay();

??????????????if(SDA==1)

????????????????j=1;

??????????????else

????????????????j=0;

??????????????k=(k<<1)|j;

??????????????SCL=0;

??????????????delay();

???????}

???????delay();

???????return k;

}

Void write_add(uchar address,

uchar info)

//指定地址寫一個字節數據

{

???????start();

???????writebyte(0xa0);

???????respons();

???????writebyte(address);

???????respons();

???????writebyte(info);

???????respons();

???????stop();

}

uchar read_add(uchar address)

//指定地址讀一個字節數據

{

???????uchar dd;

???????start();

???????writebyte(0xa0);

???????respons();

???????writebyte(address);

???????respons();

???????start();

???????writebyte(0xa1);

???????respons();

???????dd=readbyte();

???????stop();

???????return dd;

}

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457930.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 Python 切割圖片

剛好我有張 PNG 圖片需要均勻切割&#xff0c;剛好我不會 PhotoShop&#xff0c;剛好我想用 Python 來練練手。 于是擼袖子碼腳本。 import os from PIL import Imagedef splitimage(src, rownum, colnum, dstpath):img Image.open(src)w, h img.sizeif rownum < h and co…

python數據分析知識點_Python數據分析--Pandas知識點(三)

本文主要是總結學習pandas過程中用到的函數和方法, 在此記錄, 防止遺忘. 下面將是在知識點一, 二的基礎上繼續總結. 前面所介紹的都是以表格的形式中展現數據, 下面將介紹Pandas與Matplotlib配合繪制出折線圖, 散點圖, 餅圖, 柱形圖, 直方圖等五大基本圖形. Matplotlib是python…

SPI通訊協議

SPI&#xff1a;高速同步串行口。是一種標準的四線同步雙向串行總線。 SPI&#xff0c;是英語Serial Peripheral interface的縮寫&#xff0c;顧名思義就是串行外圍設備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在 EEPROM&#xff0c;FLASH&#x…

基于MVVM的知乎日報應用安卓源碼

使用data binding , dagger2 , retrofit2和rxjava實現的&#xff0c;基于MVVM的知乎日報APP運行效果&#xff1a; <ignore_js_op> 使用說明&#xff1a; 項目結構android data binding來實現MVVM。dagger2來完成依賴注入。retrofit2rxjava實現restful的http請求。第三方類…

F#創建者Don Syme談F#設計原則

在.Net Fringe 2016大會上&#xff0c;F#創建者Don Syme談了他對F#現狀的看法以及F#的二元性。F#是以一個為面向對象語言構建的運行時為基礎構建的函數式語言。\\F#是2010年發布的&#xff0c;遵循開源許可協議。F#比.Net更早地踏上了開源之路&#xff0c;C#和.Net在2015年才開…

php簽入html出來的影響seo嗎_搜索引擎優化_SEO必備6大技能+SEO誤區講解!

大家好&#xff0c;我是逆冬&#xff0c;今天來分享一下實戰SEO需要掌握什么樣的技能以及SEO知識誤區&#xff0c;本篇文章僅代表逆冬本人幾年的經驗、不見得適合每一個SEOer!下面就讓逆冬本人來分析一下實戰型SEO到底需要掌握什么技能。第1點&#xff1a;SEO需要不需要熟練掌握…

編寫linux驅動程序步驟

一、建立Linux驅動框架&#xff08;裝載、卸載Linux驅動&#xff09; Linux內核在使用驅動時首先要裝載驅動&#xff0c;在裝載過程中進行一些初始化動作&#xff08;建立設備文件、分配內存等&#xff09;&#xff0c;在驅動程序中需提供相應函數來處理驅動初始化工作&#xf…

一種M2M業務的架構及實現M2M業務的方法

http://www.cnblogs.com/coryxie/p/3849764.html 技術領域 [0001] 本發明涉及通信技術領域&#xff0c;尤其涉及一種M2M業務的架構及實現M2M業務的方法。 背景技術 [0002] 隨著通信技術的飛速發展以及通信技術與互聯網技術的進一步融合&#xff0c;移動業務以及移動互聯網技術普…

第二章 mybatis使用注解實現in查詢(mysql)

mybatis實現in查詢&#xff0c;兩種方法&#xff1a; xml形式&#xff08;推薦&#xff09;注解方式&#xff08;個人喜歡注解&#xff0c;但是in場景可能不太適合注解&#xff09;代碼&#xff1a; 1 Select("<script>" 2 "SELECT ID…

python面試代碼題_python面試基礎篇80題

1.為什么學習python?3.Python和Java、PHP、C、C#、C等其他語言的對比&#xff1f; C語言由于其底層操作特性和歷史的積累&#xff0c;在嵌入式領域是當之無愧的王者。 PHP跨平臺&#xff0c;性能優越&#xff0c;跟linux/unix結合比跟windows結合性能強45%,開發成本低,php5已經…

主設備號與次設備號以及申請

一個字符設備或者塊設備都有一個主設備號和次設備號。主設備號和次設備號統稱為設備號。主設備號用來表示一個特定的驅動程序。次設備號用來表示使用該驅動程序的各設備。例如一個嵌入式系統&#xff0c;有兩個LED指示燈&#xff0c;LED燈需要獨立的打開或者關閉。那么&#xf…

javascript 變量作用域

為什么80%的碼農都做不了架構師&#xff1f;>>> javascript中的變量的作用域不同于java/c的變量規則。 1、在java/c中&#xff0c;如果有一個全局變量與一個局部變量重名&#xff0c;那么在局部變量的作用域中&#xff0c;局部變量會覆蓋掉全局變量的值。當離開局部…

七月算法--12月機器學習在線班-第五次課筆記—回歸

七月算法--12月機器學習在線班-第五次課筆記—回歸 七月算法&#xff08;julyedu.com&#xff09;12月機器學習在線班學習筆記 http://www.julyedu.com 轉載于:https://www.cnblogs.com/sweet-dew/p/5491271.html

集合添加元素python_Python基礎:列表、字典、元組、集合、添加和刪除元素,增刪...

列表&#xff08;有序&#xff09; 添加 list.append(元素)&#xff1a;在列表末尾添加新的元素 list.extend(seq)&#xff1a;在列表末尾一次性追加另一個序列中的多個值 –seq可以是列表、元組、字典&#xff0c;若為字典,則僅會將鍵(key)作為元素依次添加至原列表的末尾。 l…

file_operations結構體分析 (設備文件的操作)

linux設備驅動中file_operations結構體分析 struct module *owner第一個 file_operations 成員根本不是一個操作; 它是一個指向擁有這個結構的模塊的指針. 這個成員用來在它的操作還在被使用時阻止模塊被卸載. 幾乎所有時間中, 它被簡單初始化為 THIS_MODULE, 一個在 <Linux…

公司網絡搭建及×××到公司配置

一、公司路由器及子網配置公司192.168.1.0/24子網用于服務器集群&#xff0c;192.168.0.0/24子網用于辦公子網&#xff0c;兩個子網物理上不在一塊。公司開業時&#xff0c;申請了電信40Mbps專線光纖&#xff0c;5個IP地址&#xff0c;網關&#xff1a;*.168.112.9 255.255.25…

js——全選框 checkbox

一直會碰見input 全選框的問題&#xff0c;先整理一種情況&#xff1a; 1. <input id"selectAll" type"checkbox" />全選 2. <input typecheckbox idid1 namecb value1 />value1 <input typecheckbox idid2 namecb value2 />value2 &…

手機編寫python程序_Python實現自動上京東搶手機

本文實例為大家分享了Python自動上京東搶手機的具體代碼&#xff0c;供大家參考&#xff0c;具體內容如下 上次搶榮耀V9&#xff0c;被京東給惡心到了&#xff0c;所以就寫了個簡單的Python來自動搶V9。雖然用的是比較蠢的方法&#xff0c;但覺得還是有可以學習的地方。所以在這…

struct cdev結構體和cdev_init和cdev_add函數

在Linux內核2.6版本以前&#xff0c;注冊一個字符設備的的經典方法是使用register_chrdev&#xff0c;相應的從設備中注銷字符設備的方法是unregister_chrdev&#xff0c;而在2.6版本以后&#xff0c;字符設備函數的注冊與注銷使用的是如下一套方法&#xff1a; #include<li…

藍鷗零基礎學習HTML5第五講 CSS的基礎樣式

藍鷗零基礎學習HTML5第五講 CSS的基礎樣式1.border<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>div {width:0px;height:0px;/*background: url("img/1.jpg…