上一篇文章【Maker電子學】I2C 界面解密 — PART 2,我們聊了 I2C(以下寫作 I2C) 界面的底層時序以及它基本的定址方法,接下來我們繼續探討在這個底層的邏輯上要如何傳輸資料、控制不同的週邊晶片。
從點名開始
(圖片來源:Bird)
上次我們說過,I2C 的傳輸由 master device 在 bus 上造出 START 狀態開始,緊接著是要接收訊號裝置的 I2C 地址;由於接收訊號的裝置是 slave,因此這個裝置的地址又稱為 slave address。
Slave address 包含了 7 個 bit 的地址以及 1 個 bit 的 R/W bit,這個 R/W bit 代表接下來資料傳輸的方向,而對 master 來說,讀取是 1、寫入是 0。
緊接著 slave address 後,就是一個 byte 一個 byte 的資料。我們來看一下這些資料的基本格式。
基本格式
下面是 I2C master 對 slave 寫入一個 byte 資料的格式:
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
1
免費電子報
2
會員搶先看
3
主題訂閱
4
好文收藏
2023/07/13
不好意思,有一處不理解。
在”而讀取週期的狀況一樣很類似:”下面那張圖,讀取為什麼跟寫入一樣是用W=0? 讀取不是應該為1嗎,感謝釋疑
2021/09/07
前篇說到master傳送資料/地址到slave時
ack方向是slave寫入master
ACK=1: slave表示「出錯了、沒有人在家、不要繼續」
ACK=0: salve表示「好、OK、收到、請繼續」
請問這段
「至於可以連續寫入多少筆資料,則要看 slave 這邊晶片的設計,當寫入太多,超過 slave 可以允許的範圍,它就會用 ACK=0來喊停,告訴 master 不要再寫了。」
ACK是不是應該是1?
2021/09/07
嗯,以邏輯準位來說,ACK 是 0,NAK 是 1,您是正確的,謝謝指正。
2020/07/29
“如果 master 在讀完某筆資料後,送出 ACK=0 告訴 slave 它後面還要繼續讀,”
請問這邊master要繼續讀的話應該是ACK=1嗎?
另外很感謝您寫的各篇文章,幫助很多
2021/06/16
這個部分我也有點疑慮,我使用24C32的EEPROM,說明書上是寫
master要繼續讀的話應該是ACK=0。
另外想說很感謝原PO,這篇文章對我很有幫助。
2021/06/17
多謝指正,是我筆誤,已修正。謝謝!
很高興文章能對您有幫助。
2021/06/17
多謝指正,是我筆誤,已修正。謝謝!