I2C總線串行輸入輸出結(jié)構(gòu)
IIC總線的串行輸入輸出結(jié)構(gòu)保證了IIC總線的數(shù)據(jù)寄存器中能保存總線上的最新數(shù)據(jù)。SDAT和ACK組成一個9為的移位寄存器,它組成一個環(huán)狀結(jié)構(gòu)。串行輸出的同時不斷采入總線上的數(shù)據(jù)。ACK標(biāo)志位由總線控制,并可以由CPU存取(存入1對應(yīng)的是非應(yīng)答,存入0對應(yīng)的應(yīng)答)。在SCL線上的時鐘脈沖的上升沿,串行數(shù)據(jù)通過ACK標(biāo)志位存入SDAT,串行數(shù)據(jù)在SCL時鐘脈沖下降沿沿BSD7移出當(dāng)一個字節(jié)數(shù)據(jù)移入SADT后,SDAT中的數(shù)據(jù)有效,控制邏輯在第9個時鐘脈沖周期送出應(yīng)答位。
為什么IIC總線進(jìn)行數(shù)據(jù)發(fā)送時,時鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持?jǐn)?shù)據(jù)穩(wěn)定???這是因為會在高電平期間采集總線上的數(shù)據(jù),如果此時總線上的數(shù)據(jù)不穩(wěn)定,會導(dǎo)致采集的數(shù)據(jù)和發(fā)送的數(shù)據(jù)不一致,從而關(guān)閉發(fā)送(類似仲裁失敗)。協(xié)議規(guī)定只有在時鐘信號為低電平期間,數(shù)據(jù)線上的高電平或低電平才允許變化,這是因為BSD7中的數(shù)據(jù)是在時鐘下降沿發(fā)出的,且不會在時鐘脈沖低電平期間采集總線上的數(shù)據(jù)。
在CPU對SDAT寫入時,SDAT7裝入BSD7,這是向SDA線上發(fā)送的第一位數(shù)據(jù),9個時鐘脈沖后SADT中的8位數(shù)據(jù)發(fā)送到SAD線上,應(yīng)答位出現(xiàn)在ACK中,這樣發(fā)送到總線上的數(shù)據(jù)又返回到SDAT中。
SDA寄存器,包含個待發(fā)送的數(shù)據(jù)或一個剛收到的數(shù)據(jù)字節(jié),發(fā)送時,數(shù)據(jù)總是從右向左移位。數(shù)據(jù)移出時,總線上的數(shù)據(jù)同時移入,移位寄存器的這種結(jié)構(gòu)保證了總線競爭失敗時數(shù)據(jù)不會丟失。它以并行的方式與內(nèi)部總線相連,以串行方式與SDA相連。發(fā)送數(shù)據(jù)時,由內(nèi)部總線裝入到SDAT中,發(fā)送時,數(shù)據(jù)以串行從串行通道返回SDAT中。接收時,裝入新接收的SDA線上的數(shù)據(jù)。
評論