簡要過程:
主機傳送起始位,這會通知匯流排上的所有裝置傳輸開始了,接下來主機傳送裝置位址+讀/寫訊號,與這一位址匹配的從裝置將成為從機並與主機進行傳輸,而其它從裝置將會退出此次通訊。
主機匹配到從機後,主機傳送它所要讀取或寫入的從機的內部暫存器位址;然後傳送資料;資料傳送完畢後,傳送停止位。
詳細過程:
簡要過程:
主機先向從機寫入其想要讀取從機內部暫存器的位址,再從從機中讀取資料。
詳細過程:
基於stm32f407zet6
//初始化iic
void
iic_init
(void
)
scl高電平期間,sda由高電平向低電平的轉換。
//產生iic起始訊號
void
iic_start
(void
)
scl高電平期間,sda線由低電平到高電平的轉換。
//產生iic停止訊號
void
iic_stop
(void
)
接收器在第9個時鐘脈衝之前的低電平期間將sda線拉低,並且確保在該時鐘scl的高電平期間為穩定的低電平。
//產生ack應答
void
iic_ack
(void
)
接收器在第9個時鐘脈衝之前的低電平期間將sda線拉高,並且確保在該時鐘scl的高電平期間為穩定的低電平。
//不產生ack應答
void
iic_nack
(void
)
//等待應答訊號到來
//返回值:1,接收應答失敗
// 0,接收應答成功
u8 iic_wait_ack
(void)}
iic_scl=0;
//釋放scl,等待下個指令的時鐘訊號
return0;
}
//傳送乙個位元組
void
iic_send_byte
(u8 txd)
}
//讀1個位元組,ack=1時,傳送ack,ack=0,傳送nack
u8 iic_read_byte
(unsigned
char ack)if(
!ack)
iic_nack()
;//傳送nack
else
iic_ack()
;//傳送ack
return receive;
//返回讀取的值 receive
}
IIC 通訊協議
原文 i2c匯流排進行資料傳送時,時鐘訊號為高電平期間,資料線上的資料必須保持穩定,只有在時鐘線上的訊號為低電平期間,資料線上的高電平或低電平狀態才允許變化。起始和終止訊號 scl線為高電平期間,sda線由高電平向低電平的變化表示起始訊號 scl線為高電平期間,sda線由低電平向高電平的變化表示終止...
IIC 通訊協議
i2c匯流排進行資料傳送時,時鐘訊號為高電平期間,資料線上的資料必須保持穩定,只有在時鐘線上的訊號為低電平期間,資料線上的高電平或低電平狀態才允許變化。起始和終止訊號 scl線為高電平期間,sda線由高電平向低電平的變化表示起始訊號 scl線為高電平期間,sda線由低電平向高電平的變化表示終止訊號。...
IIC通訊協議
i2c是一種同步通訊,以半雙工方式傳送的序列匯流排。由資料線sda和時鐘scl構成的,可傳送和接收資料。在cpu與被控ic之間 ic與ic之間進行雙向傳送,高速iic匯流排一般可達400kbps以上。1.讀資料 指mcu從器件的資料匯流排上根據一定的時序來讀取器件的資料。一般而言,mcu提供乙個邊沿...