久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

關于IIC通信格式的問題

查看數: 1908 | 評論數: 14 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2021-10-27 14:39

正文摘要:

如圖,iic通信有起始位,終止位,寫字節,讀字節,還有寫應答和讀應答 在讀字節里,一開始把數據線和時鐘線同時拉低,讀出的字節全部是00,而把數據線拉高,時鐘線拉低讀出的數據正常 或者只把時鐘線拉低 ...

回復

ID:123289 發表于 2021-10-29 09:57
本帖最后由 yzwzfyz 于 2021-10-30 11:19 編輯

樓主需要補一下硬件知識。硬件上0、1是如何表達的,重點是輸出端的電路形式,注意0、1輸出各是多少伏電壓。
當兩個輸出端口接在一起時呢?
ID:955673 發表于 2021-10-28 15:51
把 拉高 拉低的說法換成釋放和占用就好理解些吧
ID:23640 發表于 2021-10-28 14:03
信號輸入腳配置成了輸入模式,再設置輸出應該是沒用的啊
ID:624769 發表于 2021-10-28 13:05
zhangzhao2423 發表于 2021-10-28 10:07
電平只能被拉低不能被拉高,那為什么還要置1呢
不是說不能拉高嗎

你置了1 才能被拉低.

你置了0 永遠拉不高,

你不信邪可以做實驗, 置0以后, 用5V接限流電阻到IO, 看看能不能讀出個1 來?

評分

參與人數 1黑幣 +5 收起 理由
zhangzhao2423 + 5

查看全部評分

ID:401564 發表于 2021-10-28 10:36
zhangzhao2423 發表于 2021-10-28 10:10
我軟件置0,它硬件置1,數據線電平信號不會改變為1 嗎?

數據線置1只是8051的操作
SDA=1;可以讓8051內部讀取到這個端口的電平狀態,可以理解為釋放這個端口
而不是說讓這個端口輸出高電平
而別的單片機就不一定是這樣的了
所謂硬件置1......
24Cxx的數據輸出是OD輸出,它只能輸出低電平,也就是說它只能吸入電流,沒法輸出電流,這就是為什么要上拉電阻的原因
所以,軟件輸出0,端口就是0

評分

參與人數 1黑幣 +5 收起 理由
zhangzhao2423 + 5 很給力!

查看全部評分

ID:450037 發表于 2021-10-28 10:10
yzwzfyz 發表于 2021-10-28 09:41
A和B之間在一根線D上通訊。如果A出1,B出0,D上是1是0呢。
明白這個道理之后就知道【為什么不能把數據線拉 ...

我軟件置0,它硬件置1,數據線電平信號不會改變為1 嗎?
ID:450037 發表于 2021-10-28 10:07
188610329 發表于 2021-10-27 16:48
然后現在來回答,你的應答問題,
數據線時鐘線“ 同時拉低” 是不可以的,因為理論上是不存在“同時”的 ...

電平只能被拉低不能被拉高,那為什么還要置1呢
不是說不能拉高嗎
ID:123289 發表于 2021-10-28 09:41
A和B之間在一根線D上通訊。如果A出1,B出0,D上是1是0呢。
明白這個道理之后就知道【為什么不能把數據線拉低。】了。
ID:748788 發表于 2021-10-27 17:41
昨天有人發的“I2C總線讀寫應答機制詳解”,你不妨看看:
http://www.zg4o1577.cn/bbs/dpj-213612-1.html
ID:401564 發表于 2021-10-27 17:00
這IIC其實是很簡單的,把IIC協議秒一遍基本就能明白一個大概了
1,IIC沒有起始位和停止位,那叫起始信號,的停止信號,協議中有說明,這個信號由主機發送
2,應答信號,每次發送或者接收完一個字節的數據,后面要跟上一個一天天信號
發送數據的時候,應答信號由從機給出,用來告訴主機,已經接收完數據了,下一步要干嘛,這是接收到緩存而已,并沒有寫入IIC器件
讀取數據的時候,應答信號由主機給出,用來告訴已經讀取完數據了,下一步要干嘛
ID:624769 發表于 2021-10-27 16:48
然后現在來回答,你的應答問題,
數據線時鐘線“ 同時拉低” 是不可以的,因為理論上是不存在“同時”的必定有先后,正常操作,除了發送 開始/終止 信號, 都是必須先 拉低 時鐘線, 然后拉高/拉低數據線。
然后,接受應答信號時,其實就是返回 ACK/NAK  也就是說,會返回 0/1 , 我們知道電平只能被拉低不能被拉高,所以你必須先把數據線置1,然后發送時鐘后,客戶機才能返回 0/1,拉低/拉高數據線,讓你知道返回的是 ACK/NAK , 當然如果你不判斷是ACK/NAK 也沒有關系。這個位忽略,不讀結果就可以了。
ID:624769 發表于 2021-10-27 16:39
zhangzhao2423 發表于 2021-10-27 15:50
講啊,沒看協議我就不再上面問了。有時候你就是看十遍也不一定能想得通,但是經別人一點撥,就云開霧散了 ...

你在理解上, 有一個誤區,  那就是:   I2C 通信,不存在終止位,和起始位。

不同于 Uart 傳輸,有起始位,和終止位,因為他們是占位的,因此我們Uart傳輸一個字節的數據,需要10個bit傳輸,就是 起始位 + 8位數據 + 終止位。

但是,I2C 沒有 起始位,終止位,只存在 起始信號 和 終止信號 他們是不占位的。 換句話說,他們可以在任何時候發出。
只要  時鐘線(CLK) 在高電平, 這個時候數據線 從0=>1 就是終止信號, 數據線 從1=>0 就是起始信號,數據線 從1=>0=>1 就是再啟動信號(說白了,就是停了在開)。
因此,在I2C傳輸時,數據線是只能在 時鐘線(CLK)低電平時發生變化,不然,就是在發送 起始/終止信號,那么后續,你以為的“數據傳輸”,一定是不會正常發生的。
ID:450037 發表于 2021-10-27 15:50
笨笨兔 發表于 2021-10-27 15:29
你還是好好讀一讀I2C協議吧.

講啊,沒看協議我就不再上面問了。有時候你就是看十遍也不一定能想得通,但是經別人一點撥,就云開霧散了。言歸正傳。。。
在發送字節時,數據線和時鐘線我都拉低,然后字節的最高位與0X80按位與運算,給數據線,時鐘線拉高延時,時鐘線拉低,循環八次。沒問題
在讀字節時,為什么數據線不能拉高?比如我先發送字節(地址字節尋找從機),從機發送應答后數據線拉高,問題來了,我在讀字節里先給數據線拉低會是什么結果?請高手指點一下
ID:158375 發表于 2021-10-27 15:29
你還是好好讀一讀I2C協議吧.

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久 | 黄色a视频| 日韩中文字幕一区 | 一区二区三区视频免费看 | 成人在线视频网 | 日日夜精品视频 | 激情欧美一区二区三区中文字幕 | 亚洲一区二区免费 | 精品一区av | 国产欧美精品一区二区三区 | 亚洲欧美精品在线 | 国内精品视频免费观看 | 国产小u女发育末成年 | 亚洲国产黄 | 久久精品国产99国产精品 | 欧美综合一区 | 欧美日韩精品一区二区三区四区 | 国产精品99久久免费观看 | 亚洲人成人一区二区在线观看 | 午夜三级网站 | av免费在线播放 | 国产精品国产馆在线真实露脸 | 国产视频在线观看一区二区三区 | 看特级黄色片 | 黑人精品欧美一区二区蜜桃 | 国产一区日韩在线 | 亚洲精品免费在线 | 天久久| 欧美精品一区二区三区蜜桃视频 | www.夜夜骑 | 中文在线一区二区 | 99精品欧美一区二区蜜桃免费 | 国产精品久久久久久久久久免费看 | 国产成人综合在线 | 在线播放国产一区二区三区 | 午夜一区二区三区视频 | 久久久久资源 | 日本一区高清 | 91精品国产91久久久久久最新 | 国产91久久精品一区二区 | 久久国产视频播放 |