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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1907|回復: 14
打印 上一主題 下一主題
收起左側

關于IIC通信格式的問題

[復制鏈接]
跳轉到指定樓層
樓主


如圖,iic通信有起始位,終止位,寫字節,讀字節,還有寫應答和讀應答
在讀字節里,一開始把數據線和時鐘線同時拉低,讀出的字節全部是00,而把數據線拉高,時鐘線拉低讀出的數據正常
或者只把時鐘線拉低,數據線不管也是可以正常讀取字節的,請問為什么不能把數據線拉低。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:158375 發表于 2021-10-27 15:29 | 只看該作者
你還是好好讀一讀I2C協議吧.
回復

使用道具 舉報

板凳
ID:450037 發表于 2021-10-27 15:50 | 只看該作者
笨笨兔 發表于 2021-10-27 15:29
你還是好好讀一讀I2C協議吧.

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

使用道具 舉報

地板
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)低電平時發生變化,不然,就是在發送 起始/終止信號,那么后續,你以為的“數據傳輸”,一定是不會正常發生的。
回復

使用道具 舉報

5#
ID:624769 發表于 2021-10-27 16:48 | 只看該作者
然后現在來回答,你的應答問題,
數據線時鐘線“ 同時拉低” 是不可以的,因為理論上是不存在“同時”的必定有先后,正常操作,除了發送 開始/終止 信號, 都是必須先 拉低 時鐘線, 然后拉高/拉低數據線。
然后,接受應答信號時,其實就是返回 ACK/NAK  也就是說,會返回 0/1 , 我們知道電平只能被拉低不能被拉高,所以你必須先把數據線置1,然后發送時鐘后,客戶機才能返回 0/1,拉低/拉高數據線,讓你知道返回的是 ACK/NAK , 當然如果你不判斷是ACK/NAK 也沒有關系。這個位忽略,不讀結果就可以了。
回復

使用道具 舉報

6#
ID:401564 發表于 2021-10-27 17:00 | 只看該作者
這IIC其實是很簡單的,把IIC協議秒一遍基本就能明白一個大概了
1,IIC沒有起始位和停止位,那叫起始信號,的停止信號,協議中有說明,這個信號由主機發送
2,應答信號,每次發送或者接收完一個字節的數據,后面要跟上一個一天天信號
發送數據的時候,應答信號由從機給出,用來告訴主機,已經接收完數據了,下一步要干嘛,這是接收到緩存而已,并沒有寫入IIC器件
讀取數據的時候,應答信號由主機給出,用來告訴已經讀取完數據了,下一步要干嘛
回復

使用道具 舉報

7#
ID:748788 發表于 2021-10-27 17:41 | 只看該作者
昨天有人發的“I2C總線讀寫應答機制詳解”,你不妨看看:
http://www.zg4o1577.cn/bbs/dpj-213612-1.html
回復

使用道具 舉報

8#
ID:123289 發表于 2021-10-28 09:41 | 只看該作者
A和B之間在一根線D上通訊。如果A出1,B出0,D上是1是0呢。
明白這個道理之后就知道【為什么不能把數據線拉低。】了。
回復

使用道具 舉報

9#
ID:450037 發表于 2021-10-28 10:07 | 只看該作者
188610329 發表于 2021-10-27 16:48
然后現在來回答,你的應答問題,
數據線時鐘線“ 同時拉低” 是不可以的,因為理論上是不存在“同時”的 ...

電平只能被拉低不能被拉高,那為什么還要置1呢
不是說不能拉高嗎
回復

使用道具 舉報

10#
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 嗎?
回復

使用道具 舉報

11#
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 很給力!

查看全部評分

回復

使用道具 舉報

12#
ID:624769 發表于 2021-10-28 13:05 | 只看該作者
zhangzhao2423 發表于 2021-10-28 10:07
電平只能被拉低不能被拉高,那為什么還要置1呢
不是說不能拉高嗎

你置了1 才能被拉低.

你置了0 永遠拉不高,

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

評分

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

查看全部評分

回復

使用道具 舉報

13#
ID:23640 發表于 2021-10-28 14:03 | 只看該作者
信號輸入腳配置成了輸入模式,再設置輸出應該是沒用的啊
回復

使用道具 舉報

14#
ID:955673 發表于 2021-10-28 15:51 | 只看該作者
把 拉高 拉低的說法換成釋放和占用就好理解些吧
回復

使用道具 舉報

15#
ID:123289 發表于 2021-10-29 09:57 | 只看該作者
本帖最后由 yzwzfyz 于 2021-10-30 11:19 編輯

樓主需要補一下硬件知識。硬件上0、1是如何表達的,重點是輸出端的電路形式,注意0、1輸出各是多少伏電壓。
當兩個輸出端口接在一起時呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色国产在线播放 | 在线不卡视频 | 久久伊人影院 | 青青99| 岛国av一区二区三区 | 国产精品国产三级国产aⅴ中文 | 久久综合久色欧美综合狠狠 | 国产欧美精品一区二区三区 | 欧美黄a | 免费一区在线 | 国产在线不卡 | 国产精品美女久久久久久免费 | 亚洲视频在线看 | 亚洲精品一区二区三区四区高清 | 伊人色综合久久久天天蜜桃 | 视频一区二区在线观看 | 成人自拍av | 色婷婷综合久久久中文字幕 | 91精品国产91久久久久久吃药 | 欧美日韩国产一区二区三区 | 亚洲不卡视频 | 国产一区在线看 | 韩国精品在线 | 国产精品亚洲第一区在线暖暖韩国 | 亚洲福利在线观看 | 日本三级电影免费观看 | 日本三级在线 | 日韩精品成人一区二区三区视频 | 国产精品夜色一区二区三区 | 日韩免费一区 | 国产一区二区三区久久久久久久久 | 日本久久久久久 | 国产亚洲精品精品国产亚洲综合 | 涩爱av一区二区三区 | 国产在线视频在线观看 | av资源中文在线 | www.99热这里只有精品 | 亚洲伊人久久综合 | 国产高清视频一区 | 免费成人av | av一区在线观看 |