5分鐘完全了解I2C通訊介面!掌握I2C的核心概念

แชร์
ฝัง
  • เผยแพร่เมื่อ 29 ต.ค. 2024

ความคิดเห็น • 29

  • @Joyous-Code_Teacher
    @Joyous-Code_Teacher  6 หลายเดือนก่อน +17

    各位小夥伴,不好意思,在5:04時的SDA跟SCL在製作影片時兩個位置顛倒了,應該是SDA要比較寬才對喔~
    解答:A
    解析:因為當SCL的電位上升的瞬間,從機就有可能讀取資料了喔,所以為了避免有遺漏資料的可能,會將SDA提前上拉,這樣是最有保障不會出現資料錯誤的方法喔~

    • @哈庫那馬他他-b5i
      @哈庫那馬他他-b5i 6 หลายเดือนก่อน +2

      愛了~充滿學問

    • @竜肝油
      @竜肝油 5 หลายเดือนก่อน +1

      保持建立时间和保持时间的约束关系

    • @znji5704
      @znji5704 2 หลายเดือนก่อน

      不好意思, 不太明白你的說法, 照這麼說 不是B比較有保障嗎?
      "SCL的電位上升的瞬間,從機就有可能讀取資料了喔", 那如果選A, 不會誤判成起始或停止訊號嗎?

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  2 หลายเดือนก่อน +1

      @@znji5704 小夥伴,不好意思,在5:04時的SDA跟SCL在製作影片時兩個位置顛倒了,所以在SCL的上升邊緣 SDA已經升高了喔

    • @znji5704
      @znji5704 2 หลายเดือนก่อน +1

      @@Joyous-Code_Teacher 喔喔喔! 看懂了, 不好意思讓你再說一次 , 感謝解說

  • @RaulShaw
    @RaulShaw หลายเดือนก่อน +1

    最近在學MCU,正好需要學到這些東西
    看了頻道中的其他影片,真是太實用了!

  • @黃先生-d7o
    @黃先生-d7o 13 วันที่ผ่านมา +1

    Good~

  • @yhchoi7804
    @yhchoi7804 5 หลายเดือนก่อน +1

    4:53 讀取時,主機發送完暫存器地址和獲得 ACK / NACK 後,是否要加入 「STOP + START」 / 「REPEATED START」 才開始發送 「從機的I2C地址 + READ」 ?
    不然的話,從機分辨不了主機緊接著發送的byte是「主機寫入從機的資料」抑或是「從機的I2C地址 + READ」。

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  5 หลายเดือนก่อน +2

      以普通的I2C規範來說不需要喔~
      從機判斷讀取或是寫入,主要是靠暫存器位址對這個“命令”
      如果是寫入的命令就直接寫入即可,如果是讀取的命令,則需要加上「設備位址+R」,再讀取資料,起始為元跟停止位元只需要放在頭跟尾
      但是每一個設備的I2C規範竟不相同,還是要以設備規格書為止喔

  • @sctt160906
    @sctt160906 6 หลายเดือนก่อน +1

    您好,想請教一下,當主機發送完設備位置+W和暫存器位置後,接下來的收到的訊息從機如何分辨是欲寫入的data還是設備位置+R呢?

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  6 หลายเดือนก่อน

      通常主機發送設備位置+W後的暫存器位置會是一個"命令",如果是寫入數據的"命令"那從機就負責接收數據就好,反之是讀取數據的"命令",那從機就要先接收一個設備位置+R,才會開始傳送數據
      我自己跟學生的白話解釋是~
      寫入數據:
      主機:設備位置+W -> 暫存器位置「寫入命令」
      主機我現在要寫入資料了(寫入命令),從機你專心接收就好
      讀取數據:
      主機:設備位置+W -> 暫存器位置「讀取命令」 -> 設備位置+R -> 回傳資料
      主機我現在要讀取資料了(讀取命令),從機你請做好準備(設備位置+R),準備好就回傳資料

  • @哈庫那馬他他-b5i
    @哈庫那馬他他-b5i 6 หลายเดือนก่อน +3

    4:28分那邊(設備位置+R&W),圖下面的數字應該是0101011吧?而不是0000111

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  6 หลายเดือนก่อน +1

      沒錯,我在製作影片時粗心沒有注意到,謝謝你~

  • @ANYLER
    @ANYLER 6 หลายเดือนก่อน +1

    A,因為這樣就算有點沒對到也可以避免誤判嗎?
    另外想請問一下,為什麼讀取的時候不直接在第一次給設備位址時就直接R而要多再給一次設備位址才R呢?看起來有點多此一舉,還是單純就是協議這樣規定的?若是的話為什麼又要這樣規定呢?

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  6 หลายเดือนก่อน +2

      沒錯 這是協議規定的喔,你可以想像成
      主機要先告訴從機一個”命令”所以第一次設備位址要寫W,等從機確實接受命令任務後,主機再給設備位址R,從機才會給相對”命令”的回答

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  6 หลายเดือนก่อน +1

      解答我有放在留言置頂喔~
      沒錯,這是I2C的協議通常都是用這個方法規定的喔。
      你可以想像,主機第一次寫的 設備位址+W 是要發送從機一個"命令",確認從機成功接收命令後,主機再寫的 設備位址+R,讓從機可以依照剛才得到的命令,發送資料~

  • @sunnyyeung3733
    @sunnyyeung3733 5 หลายเดือนก่อน

    1:55 片中waveform 不對,應該是在clock rising edge 時才讀data 是0或1

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  5 หลายเดือนก่อน +1

      沒錯 時脈線在上升邊緣時就會讀取資料是否為0或1 所以資料線最好提前就要做變化
      但是為了教導新手在示波器上好判斷波形,所以採用影片中的說法

    • @sunnyyeung3733
      @sunnyyeung3733 5 หลายเดือนก่อน

      @@Joyous-Code_Teacher 那要開一集教什麼是flip flop了,clk 就像心跳很重要。

  • @yuan.pingchen3056
    @yuan.pingchen3056 5 หลายเดือนก่อน

    IPMB好像用的就是I2C,已經是超過15年前的事情了,有點忘記了,有沒有現在還在寫IPMI程序的人出來說一下

  • @PO-lk2zz
    @PO-lk2zz 7 วันที่ผ่านมา

    th-cam.com/video/5H3daBwJ31g/w-d-xo.html 晶片讀取要如何做?

  • @wangjack9641
    @wangjack9641 6 หลายเดือนก่อน +3

    A

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  6 หลายเดือนก่อน +1

      解答我有放在留言置頂喔~

    • @jimmychen4308
      @jimmychen4308 3 หลายเดือนก่อน +1

      為什麼I2c 讀取前要先說要寫、restart之後才說要讀、為什麼不一開始就說要讀就好了呢?

    • @Joyous-Code_Teacher
      @Joyous-Code_Teacher  3 หลายเดือนก่อน +1

      ⁠@@jimmychen4308
      這是I2C協議規定的喔,你可以想像成
      主機要先告訴從機一個”命令”所以第一次設備位址要寫W,等從機確實接受命令任務後,主機再給設備位址R,從機才會給相對”命令”的回答