GPIO模擬IIC接口信號質量分析


信號質量有問題的波形001:

信號質量有問題的波形002:

從上圖可以看出,GPIO口模擬的I2C接口,電平都存在半高的情況。

因為I2C的接口是通過GPIO模擬實現的,該時鍾信號線SCL內部默認為下拉狀態,因而SCL對應的GPIO內部有下拉電阻,導致在輸出為高電平時,上升沿慢的台階出現。后把SCL腳的內部下拉disable之后,測試的波形如下圖所示,從下圖可以看出SCL時鍾信號已經正常。

 

但是SDA存在小的脈沖尖峰和ACK的半高情況。具體見圖中的紅色圈所示。

 

SDA小的脈沖尖峰出現在read_byte階段,是因為軟件在SCL無效狀態時,對SDA置為輸入狀態后,又對SDA置高處理,因硬件外部已有上拉電阻,SCL無效時,軟件無需對SDA置高處理。后軟件去除此部份操作后SDA小的脈沖尖峰消除了。

 

ACK半高電平,軟件在停止位結束后,SCL從高到低反轉一執行,馬上把SDA從輸出狀態改為輸入狀態,此時ACK就會馬上生效,SDA從而直接變為低電平,剩下的半高狀態,只有大約800us的時間。具體見下圖。

測試結果:軟件修改后,模擬SDA和SCL信號均滿足要求。

 

GPIO模擬IIC是需要注意:

1、GPIO內部的默認是上拉還是下拉,可以都采取disable內部上下拉,使用外部強上拉的方式。

2、每發送一個字節write_byte的過程中,最后一個bit在時鍾SCL為高電平時保持有效,SCL被拉低后,從機的SDA即有ACK響應,所以在最后一個bit,在SCL的低電平半周期即需要置位輸入狀態,否則如果最后一個bit為高電平時,則SDA則會被拉到半高。

3、read_byte的過程中,只需把SDA置為輸入狀態,不可以把管腳置為1狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM