iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0
IoT

玩玩 BLE系列 第 22

[Day 22] 晶片間的通訊-I2C

昨天有兩個戰友不幸挑戰失敗,在此為他們默哀3秒,3,2,1。

在寫上一篇文章時,
剛好翻到TI 的SDK資料夾中有I2C 的驅動程式,
一般在晶片之間常用的通訊協定有I2C、UART、SPI,
我們這篇就來介紹一下晶片之間的通訊方式吧。

I2C

全名 Inter-Integrated Circuit,縮寫成IIC或是I2C或是I2C,
讀作"I-square-C"或是"I-two-C"或是"I方C"。
是一種串流通訊匯流排,裝置分為主機和從機,(如下圖,取自成大資工wiki)
一串I2C的通訊串流排中只能有一個主機,
每個從機都有一個位址,通常稱作I2C Address,
主機就是透過位址來點名,來確認現在要對哪個從機發送或讀取資料,
所以串流排上不能接具有相同位址的從機。

常見的I2C傳輸速率有100Kbit/s、400Kbit/s,
按照TI 官方論壇的回應,CC2642R理論上可支持更高速的傳輸速率,不過他們僅針對100Kbit/s和400Kbits進行驗證。

以硬體的角度來看,
兩個裝置之間需要用兩條線來當作通訊的橋梁,
這兩條橋的名字分別是(如下圖,取自成大資工wiki)

  • SDA(Serial Data Line, holds Data or address signal),簡單來說就是用來傳輸資料的線路,雙向傳輸,收發都靠這條
  • SCL(Serial Clock Line, holds Clock signal),用來同步通訊時序的線,這條線的震盪速度就代表傳輸速度
    成大圖

下面這張是某裝置透過I2C與DAC晶片(TC1321)進行通訊的實況(取自microchip論壇),
可以看到有兩個通道,上面是SDA,下面震盪比較規律的是SCL,
按照I2C的通訊規範可以得到下列結果:

  • 左邊第一個綠點代表I2C通訊的開始,
  • 第一個位元組代表要對某從機寫入,從機位址為0x90
  • 第二到第四個位元組則是要寫入的資料
  • 最後紅色的點代表I2C通訊結束

看了一堆似懂非懂的東西,
不過沒關係我們只要會使用bsp_i2c的函式就好,
今天我的能量消耗殆盡,我們明日再來。

參考文章:


上一篇
[Day 21] TI-RTOS 執行緒的同步(Thread Synchronization)
下一篇
[Day 23] TI-RTOS Driver - bsp_i2c
系列文
玩玩 BLE27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言