[單晶片]-寫I2C通訊(MPU6050為範例)
因為使用到MPU6050因此自己寫了I2C的架構 主要參考網路上許多範例 在此把學習到的東西寫下 I2C架構 主要是利用兩條線 SCL // I2C 的CLK SDA // I2C 的DATA線 每次要傳送1Byte資料的時候前後都得加上開始和結束訊號 每個晶片通訊都有自己特殊的規範,可以參考晶片的datasheet 以下介紹為一般I2C的架構,地址等函式設定則針對MPU6050做優化 一般而言需要開始信號和結束信號才代表一次的command傳遞完成 上圖代表著開始訊號和結束訊號 開始訊號是由SDA和SCL拉HIGH後,之後SDA拉到LOW 結束訊號是由SCL為高位時,將SDA從LOW拉到HIGH 開始訊號程式碼範例: delay一段時間讓晶片確認收到 SDA=1 SCL=1; delay(20); SDA=0; delay(20); SCL=0; 結束訊號程式碼範例: delay(20); SDA=0; delay(20); SCL=1; delay(20); SDA=1; delay(20); 之後我們必須做一個寫資料和讀資料的動作 資料的輸出和輸入都是從最前面的BIT開始 當SCL=0時 SDA資料是混亂的,因此改變SDA的值 當SCL=1時 SDA資料是穩定的,因此接收SDA的值 利用此方式寫下讀取和寫入 另外需要注意的是I2C傳送中確認是否收到資料 會利用ACK或是NACK來確認 ACK為將SDA拉到HIGH後 晶片會將腳位拉回LOW 表示成功接收資料 NACK為 傳送資料完畢後,將SDA拉到HIGH表示成功傳送資料 WRITE_BYTE的範例程式碼 void i2c_write_byte(char address,int mode) { int count=0; //計數用 char temp=0,ACK; //因為address 只有7bit+1biy(R
留言
張貼留言