2C通訊協(xié)議具有運行可靠、成本低廉、占用IO資源少等優(yōu)點,廣泛應用于多級通訊中;中穎芯片硬件TWI(兩線串行接口)接口完全兼容I2C總線協(xié)議。中穎芯片硬件TWI支持功能:
- 開漏輸出,通訊電平不受VDD影響;支持主機模式和從機模式;各個模式均支持發(fā)送和接受;支持多級通訊的仲裁功能;具有SCL低電平/高電平超時判斷;器件地址可編程,帶多個地址屏蔽位,支持廣播功能;支持標準模式(100K)和快速模式(400K);支持Clock Stretch功能支持內部上拉電阻功能
中穎芯片硬件TWI注意事項:
- 硬件TWI在傳輸ACK/NACK響應信號時,在SCL由低跳高后產生TWI中斷標志(TWINT),并在SCL由高跳低時拉低SCL,在TWI中斷標志清除后釋放SCL;TWI中斷標志(TWINT)在被清除前,TWI通訊會暫停,應用程序必須在TWI中斷標志(TWINT)清除前決定后續(xù)的動作;硬件TWI規(guī)定通訊過程中SCL總線維持高電平超過TFREE定義的時鐘個數時為“空閑”狀態(tài),釋放總線;此功能無法關閉。硬件TWI規(guī)定參與傳輸的所有器件,將時鐘線SCL維持低電平超過CNT定義的時鐘個數時為“總線超時”,釋放總線;此功能無法關閉。
硬件TWI通訊注意事項:
- TWI中斷標志(TWINT)置起后,軟件配置TWI即將執(zhí)行的動作(如發(fā)送數據、回應ACK/NACK、發(fā)送STO/清除STA信號等)后方可清除TWI中斷標志(TWINT);硬件TWI作為從機時,在每次通訊開始前,提前將應答信號準備好(AA=1);為了增強通訊抗干擾能力,程序中建議增加SCL高電平超時判斷、總線超時判斷、特殊狀態(tài)機(00H)判斷;
硬件TWI操作流程示意圖:
硬件TWI出錯案例:
- 硬件TWI通信錯誤(從機)原因:外界存在干擾。當從機TWI狀態(tài)機為B8時,從機繼續(xù)向主機發(fā)送數據,且準備NACK信號,此時若外接干擾造成從機識別主機回傳的信號非正常信號,則從機狀態(tài)機會跳到非正常狀態(tài)機中,此時程序中未對應答信號做處理,造成當此輪通訊結束后,在開始下一輪通訊時,從機無ACK信號造成無法響應主機通訊。TWI默認開啟SCK高電平超時功能,待發(fā)送完最后一個字節(jié),此時AA清零;此時若存在因主機通訊或干擾造成SCK高電平超時時,TWI模塊會自動釋放總線,此時AA仍然保持為之前的NACK狀態(tài),造成在下一輪通訊時無法響應主機通訊,通訊異常;
改善方案:在傳輸完成最后一個字節(jié)數據后AA置位,這樣即使發(fā)生異常情況,待下一組時序到來時,從機仍能夠正常響應主機;在程序其他異常狀態(tài)下置位AA,即使通信受到干擾,跳轉到異常狀態(tài),仍能進行下一次的通訊響應。下圖列出TWI中斷代碼改善前后的代碼。
圖1改善前
圖2改善后
閱讀全文