一、程式說明:
本程式使用的MCU是Sonix SN8F27E65, 雖然該MUC的硬體本身也有IIC的介面; 不過本文的重點在於
如何使用GPIO PIN透過軟體來模擬IIC的介面與Microchip的EEROM(24AA128) 進行資料存取的溝通。
二、 IC腳位的設定
三、I2C的介面設計流程:
3.1 Start Condiftion -
將SCL、SDA設為High,等待20us後將SDA設為low作為Start Condition。
3.2 Write Data -
1、等待20us後將SCL設為Low後等待10us。
2、判斷傳送數據的第七個位元值並依照該值來設定SDA的狀態。
3、等待10us後將SCL設為High。
4、左旋傳送的數據(將第n-1個位元變成第n個位元),以便處理接下來的傳送。
5、以上述方式重覆傳送八個bits。
6、等待20us將SCL設為low並在10us後將SDA設為High且設為Input Mode。
7、等待10us將SCL設為High並在20us後判斷SDA的狀態來確認資料是否正確傳送。
(0: Success 1: Fail)
8、將SCL設為low且將SDA設為Output Mode。
3.3 - 在寫入資料後要讀取的資料前,必須再傳送一次Start Condition,才能傳送讀送的命令。
3.4 Read Mode -
1、將SDA的Pin設為High,並將該PIN設定為Input Mode。
2、等待20us後,將SCL設為low之後再等待20us將SCL設為High。
3、判斷SDA的狀態後,並將其狀態的值設為Carray Flag的值。
4、左旋接送的數據(將第n-1個位元變成第n個位元),以便儲存接下來的狀態值。
5、以上述方式重覆接收八個bits。
6、等後20us將SCL設為Low,並將該SDA設為Output Mode
7、判斷是否須要產生Ack,若是則將SDA設為Low,若否則將SDA設為High
8、最後將SCL設為High,並等待20us後將SCL再說為Low。
3.5 Stop Condition -
等待20us後將SCL設為High且再等後20us後將SDA設為High。
PS. 1、上述所設定的時間可視連接的設備進行調整。(本範例的頻率約為25khz)
2、由於該款MCU的GPIO PIN並沒有雙向的功能,因此在讀寫時必須進行切換。
四、IIC EEROM控制說明:
4-1、在不同的廠商的容量標記上有不同的方式,有的是以bits為單位,有的是以byte為單位。
4-2、當容量在低於等於2Kbyte(16Kbit)的EEROM,其定址通常只有一個,而大於2KByte(16Kbit)
容量的定址長度為 2 Bytes可表示的最大容量為64KByte(512Kbit)。
4-3、當每次傳送資料後必須等待EEROM將資料寫入的時間才能再繼續傳送下一筆的資料,不同的設備有
不同的等待時間。
五、執行畫面:
Download: Smpl_IIC.rar
留言列表