NXP LPC55S06 I²C 章節介紹及基本程式範例

  • I²C 簡介
           
           1.    I2C 名為 I²C(Inter-Integrated Circuit)是一種串列通訊匯流排。
           2.    常見的I²C匯流排依傳輸速率的不同而有不同的模式,標準模式(100 Kbit/s)、快速模式(400 Kbit/s)、高速模式(4 Mbit/s)。
           3.    I2C 使用兩條雙向 open-drain channel,導通時是低電位,不導通時 float,所以利用電阻 ( pull up resistor ) 將電位拉高。
                  而兩條訊號線分別為 SDA ( 串列數據線 )、SCL ( 串列時鐘線 )。

           * 註 : 資料出處, 成大資工 WiKi "I2C: Inter-Integrated Circuit" ( http://wiki.csie.ncku.edu.tw/embedded/I2C )

  • I²C 訊號分析
           
           1.    
起始訊號 START : SCL 必須為 HIGH,且 SDA 為負緣。
           2.    起始訊號 STOP : SCL 必須為 LOW,且 SDA 為正緣。
           3.    SCL 為 HIGH 時,表示 SDA 上的資料為有效,此時 SDA 的值不能改變。
           4.    SCL 為 low 時,SDA 的狀態可以改變。

          * 註 : 資料出處, 成大資工 WiKi "I2C: Inter-Integrated Circuit" ( http://wiki.csie.ncku.edu.tw/embedded/I2C )

  • I2C 寫入 ( 以 8 bit 為例 )
           
           1.    Master 發起 START 狀態後,傳輸 7 bits slave address 以及 1 Write bit,到第 9 個 bit 時,會變成由 slave 向 master 傳送 ack bit。
           2.    Master 收到 ack 後,會繼續切換 SCL,並在每一個 SCL 爲 high 時,依序送出資料的每一個 bit,到第 9 個 bit 時,slave 會向 master 傳送 ack bit。
           3.    最後,master 送出 STOP 狀態結束這一回合的傳輸。

           * 註 : 資料出處, 雷克斯の生活日誌 "I2C的工作原理與技術分析" ( https://rexpighj123.pixnet.net/blog/post/219960237-i2c%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E8%88%87%E6%8A%80%E8%A1%93%E5%88%86%E6%9E%90 )

  • I2C 讀取 ( 以 8 bit 為例 )
           
           1.    
Master 發起 START 狀態後,傳輸 7bit slave address 以及 Read bit,到第 9 個 bit 時,會變成由 slave 向 master 傳送 ack bit。
           2.    Master 收到 ack 後,就會繼續切換 SCL,之後就是 slave 向 master 傳送 data,當 master 讀完後,會發 ack 告訴 slave 收到 data 了。
           3.    最後master 送出 STOP 狀態結束這一回合的傳輸。

          * 註 : 資料出處, 雷克斯の生活日誌 "I2C的工作原理與技術分析" ( https://rexpighj123.pixnet.net/blog/post/219960237-i2c%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E8%88%87%E6%8A%80%E8%A1%93%E5%88%86%E6%9E%90 )

  • I2C 方塊圖
           
           * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 565 ) 

           1.    支持標準模式 100 Kbits/s,快速模式 400 Kbits/s。在特定 I2C 腳位上支持快速模式 plus 1 Mbits/s, 高速模式4 Mbits/s(僅作為從機)。
           2.    支持數個 I2C 從機地址,從機地址可以選擇性地使用隱蔽位或地址範圍進行限定,以響應多個 I2C 總線地址。
           3.    支持系統管理總線 ( SMBus )。
           4.    對主機、從機和監控功能的單獨 DMA ( DIRECT MEMORY ACCESS ) 請求。

  • I2C SCL 計算
           1.    Flexcomm clock is 30 MHz , SCL rate 為 400 KHz , DIVVAL is 14
                  " Normal SCL rate = Flexcomm clock rate/ ( DIVVAL + 1) / ( SCL high time + SCL low time ) "
                  400 KHz = 30 MHz / ( 14 + 1) / ( SCL high time + SCL low time )
                  ( SCL high time + SCL low time ) = 5。MSTSCLHIGH is 0, MSTSCLLOW is 1

           
           * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 576 )

           
           * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 578 )

           
           * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 579 )

  • I2C 暫存器
           
           * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 566 ) 

           1.    CFG : I2C 功能配置
           2.    STAT : I2C 主機、從機和監控的狀態暫存器
           3.    INTENSET : I2C 中斷設置
           4.    INTENCLR : 清除 I2C 中斷設置
           5.    TIMEOUT : 超時暫存器
           6.    CLKDIV : I2C clock 除頻器

           
           * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 566 )

           7.    MSTCTL : I2C master 控制暫存器
           8.    MSTTIME : I2C master 時序配置
           9.    MSTDAT : I2C master 寫入 data


           
           * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 566 )

           10.    SLVCTL : I2C slave 控制暫存器
           11.    SLVDAT : I2C slave 寫入 data

           12.    SLVDR0~3 : I2C slave 位址
           13.    SLVQUAL0 : 可以改變 SLVDR0 的位址解釋方式

  • I2C 設定範例
           1.   設定 System control,AHBCLKCTRL 啟動 Flexcomm模塊的 clock,並於 PRESETCTRL 將其模塊重置。

                 

           2.   設定 System control,由 FCCLKSEL 暫存器將 FC clock 來源設為 FRO 12 MHz。設置 FRG 除頻器為 1 使 FCCLK 為 12 MHz。

                 

                 
                 * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 66 )

                 
                 * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 73 )
 
           3.    Flexcomm 功能選擇 I2C

                 

                 
                  * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 557 )

           4.    設定 I2C 為 master,預設 100 KHz 的 SCL
                  計算 :
                  100 KHz = 12 MHz / ( 11 +1 ) / ( SCL high time + SCL low time)
                  ( SCL high time + SCL low time) = 10

                 

                 
                 * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 567 )

  • I2C 寫入範例
           1.    寫入函式會帶入 3 個參數,分別是 slave address , data address , data length。
                  I2C bus 處於等待且是空閒狀態,將第一筆參數 7 bit slave address + 1 Write bit 寫入 data 並發送 start 狀態指令後寫入,待 slave 回復 ack MSTCODE 將轉為 TXREADY。相同流程再                      次發送第二筆參數 data address 並發送 continue 狀態指令,等待 slave 回復 ack。

                  

                  
                  * NXP LPC55S0x/LPC550x user maunal ( UM11424.pdf page 577 )

           2.    將第三個參數所有數據一一發送,數據結束發送後 master 將發送 MSTSTOP 狀態指令,結束通訊。

                       
 
  • I2C 讀取範例
           1.    寫入函式會帶入 4 個參數,分別是 slave address , data address , data , data length。前面步驟如同 I2C 寫入。
                  當 I2C bus 處於等待且是空閒狀態,將第一筆參數 7 bit slave address + 1 Write bit 寫入 data 並發送 start 狀態指令後寫入,
                  待 slave 回復 ack 後 MSTCODE 將轉為 TXREADY。相同流程再次發送第二筆參數 data address 並發送 continue 狀態指令,等待 slave 回復 ack。

                  
                  
           2.    收到 ack 後,將第一筆參數 7 bit slave address + 1 READ bit 寫入 data 並發送 continue 狀態指令,等待 slave 回復 ack 。

                  

           3.    當 slave 回復 ack 後,slave 便會將相對位址的數據發送出來,此時就能讀取到 bus 上由 slave 發送地的 data,當 data 傳送完 master 再發送 MSTSTOP 狀態指令,結束通訊。

                  
  • I2C 實測示波器波形
         1.    先對 slave 的 0x01 位址寫入有 5 筆數據的 txdata 字串。

                  

                  
                  

         
 2.    
再對 slave 的 0x01 位址讀取寫入的 5 筆數據。

                  
                  

         
 3.    
SCL high time 和 SCL low time 變更實測。

                  
                  

* 註一 : 圖片來源 NXP LPC55S0x/LPC550x User manual ( UM11424.pdf )

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論