標(biāo)題: 關(guān)于我對(duì)IIC協(xié)議的一些理解 [打印本頁]
作者: 云為衣兮風(fēng)飄飄 時(shí)間: 2020-7-30 21:13
標(biāo)題: 關(guān)于我對(duì)IIC協(xié)議的一些理解
在談IIC前,我們先將IIC的通信分為三步,準(zhǔn)備、通信、結(jié)束階段
1. 通信準(zhǔn)備IIC通信至少要兩條通道,一條時(shí)鐘線SCL,一條數(shù)據(jù)線SDA,而這兩條線可以連接很多的設(shè)備。雖然IIC連接著很多的設(shè)備,但是在IIC沒有與各個(gè)設(shè)備通信時(shí),IIC均處于休眠狀態(tài),這時(shí)候就需要通過主機(jī)來喚醒設(shè)備了。
我們首先看時(shí)序圖,怎么開始IIC的動(dòng)作,及怎么結(jié)束II:
然后再看代碼(somenop()為延時(shí)函數(shù),延時(shí)時(shí)間主要是看單片的時(shí)鐘周期,我所使用的單片機(jī)芯片是IAP15F2K6102)
void somenop(void)
{
uchar t;
_nop_();
_nop_();
t = 12;
while(--t);
}
void IIC_Start(void)
{
SDA = 1;SCL = 1;
somenop();
SDA = 0;
somenop();
SCL = 0;
}
void IIC_Stop(void)
{
SDA = 0; SCL = 1;
somenop();
SDA = 1;
somenop();
}
當(dāng)我們啟動(dòng)IIC后,下一步就是尋找設(shè)備了,于是我們發(fā)送一個(gè)地址,像PCF8591,喚醒它的地址就是0x90(二進(jìn)制數(shù)1001 0000),喚醒AT24C02的地址則是0xa0(二進(jìn)制數(shù)1010 0000)這時(shí)候需要設(shè)備給一個(gè)響應(yīng)來說明設(shè)備收到消息了,然后由單片機(jī)接受即可,所以設(shè)備與單片機(jī)達(dá)成通信的條件了,然后兩邊建立了通信通道后,單片機(jī)就開始選用所需設(shè)備的功能端口地址了。
如:選擇PCF8591的A0、A1、A2、A3通道的話,就可以分別發(fā)送0x00、0x01、0x10、0x11;選擇AT24C02的A0、A1、A2通道的話,就可以分別發(fā)送對(duì)應(yīng)地址(因?yàn)锳T24C02還帶有讀/寫地址,該地址是在最后一位,這里就不詳細(xì)談了)。
在IIC開始,選擇設(shè)備地址以及,選擇使用那個(gè)通道以及選擇讀數(shù)據(jù)還是寫數(shù)據(jù)后,通信準(zhǔn)備階段完成。
2. 開始通信首先我們要知道IIC是半雙工通信,同一時(shí)刻只有一個(gè)設(shè)備發(fā)送數(shù)據(jù)個(gè)另一個(gè)設(shè)備,兩個(gè)設(shè)備開始通信時(shí),主機(jī)一直控制SCL時(shí)鐘線并由它來產(chǎn)生出時(shí)鐘信號(hào)(也就是脈沖信號(hào)),然后,兩設(shè)備通過SDA線發(fā)送數(shù)據(jù)來互相通信。
當(dāng)主機(jī)接受從機(jī)數(shù)據(jù)時(shí)(也就是主機(jī)讀取從機(jī)數(shù)據(jù)),時(shí)鐘信號(hào)的電平為低的時(shí)間內(nèi),從機(jī)通過數(shù)據(jù)線發(fā)出高低電平的信號(hào);當(dāng)時(shí)鐘信號(hào)為高電平期時(shí),主機(jī)讀取讀取信號(hào),此時(shí)數(shù)據(jù)線的電平不能改變。發(fā)送八位數(shù)據(jù)后,主機(jī)會(huì)收到從機(jī)的應(yīng)答,也就是第九個(gè)脈沖的時(shí)候是應(yīng)答時(shí)間,從機(jī)將SDA數(shù)據(jù)線置為低電平,此時(shí)被主機(jī)檢測到。于是一個(gè)數(shù)據(jù)就傳輸成功了,主機(jī)收到的數(shù)據(jù)是一個(gè)二進(jìn)制,數(shù)據(jù)如果為00101101,轉(zhuǎn)換十六進(jìn)制是0x2D,然后多做幾個(gè)這樣的步驟,數(shù)據(jù)就讀取到了。
同理從機(jī)接受主機(jī)的數(shù)據(jù)時(shí)(主機(jī)寫數(shù)據(jù)給從機(jī)),時(shí)鐘信號(hào)還是主機(jī)產(chǎn)生的,然后數(shù)據(jù)是由從機(jī)發(fā)給主機(jī),發(fā)送8位數(shù)據(jù)后,主機(jī)發(fā)給從機(jī)應(yīng)答信號(hào),此時(shí)一個(gè)數(shù)據(jù)也就成功發(fā)送了。
3. 結(jié)束通信主機(jī)再數(shù)據(jù)發(fā)送完后(即應(yīng)答時(shí)間內(nèi))給從機(jī)一個(gè)非應(yīng)答信號(hào)(主機(jī)將SDA電平拉高)后解釋IIC,這時(shí)候IIC通信告一段落了,最后也就完成了一次通信,數(shù)據(jù)傳輸進(jìn)行完畢。
4. 注意點(diǎn)
IIC開始、結(jié)束及SCL的時(shí)鐘周期是必須合適的,一般都大于5us就可以了(這個(gè)時(shí)間也可能和設(shè)備有關(guān))。時(shí)間太短會(huì)導(dǎo)致數(shù)據(jù)傳輸有問題,或者從機(jī)來不急應(yīng)答;時(shí)間太長的話……可能數(shù)據(jù)傳輸太慢吧(知識(shí)盲區(qū)了)。
以上就是我對(duì)IIC的理解了,這也僅僅是我個(gè)人的理解,避免不了錯(cuò)誤之處,也希望諸位指正。(2020年7月30日寫)
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
黄色网络在线观看
|
一本色道精品久久一区二区三区
|
国产视频久久久
|
日韩在线国产
|
熟女毛片|
国产高清视频一区二区
|
久久国产精品一区
|
欧美综合久久久
|
四虎国产|
九九热国产视频
|
五月天婷婷狠狠
|
在线观看日韩精品视频
|
亚洲欧美日韩国产
|
成人精品一区亚洲午夜久久久
|
亚洲国产精品久久久
|
国内精品久久精品
|
亚洲精品www久久久久久广东
|
91精品国产乱码麻豆白嫩
|
久久久久国产
|
a级毛片国产
|
精品日韩欧美一区二区
|
国产视频2021
|
99精品一级欧美片免费播放
|
caoporn免费在线视频
|
国产欧美精品一区二区
|
日韩欧美在线视频一区
|
黑人精品xxx一区一二区
|
亚洲免费一区二区
|
国产日韩欧美一区
|
国产精品影视在线观看
|
亚洲一级在线
|
国产日韩精品视频
|
999www视频免费观看
|
亚洲激情在线观看
|
欧美一区二区精品
|
亚洲成人综合社区
|
久久久精品网
|
欧美中文字幕一区二区
|
成人免费视频网站在线看
|
97国产精品视频人人做人人爱
|
一级欧美一级日韩片
|