關(guān)于I2C總線的基本操作
軟件實(shí)現(xiàn)I2C主模式通訊看似簡單,但實(shí)際應(yīng)用中最容易犯的錯(cuò)誤就是對(duì)SCL和SDA總線上高電平的實(shí)現(xiàn)過程。在硬件設(shè)計(jì)上,任意選擇單片機(jī)的兩個(gè)IO引腳分別指派為SCL和SDA,雖然不是必須的,但為方便軟件編程一般設(shè)于同一個(gè)端口,并在其上外接上拉電阻,至于ESD保護(hù)電阻和抗干擾濾波電容則為可選件,不影響I2C總線通訊。當(dāng)器件占用總線時(shí),需要在SCL或SDA引腳上輸出低電平, 軟件就將PORT寄存器相關(guān)位設(shè)定為0的同時(shí)對(duì)應(yīng)的TRIS寄存器位也設(shè)為0;當(dāng)釋放總線即總線上變?yōu)楦唠娖綍r(shí),注意不能直接從IO引腳上輸出高電平,而是應(yīng)該將TRIS位設(shè)為1,使引腳變成高阻輸入狀態(tài),通過外接的上拉電阻得到高電平。很多工程師沒有遵循這種操作規(guī)范,盡管在特定的應(yīng)用中也可以實(shí)現(xiàn)I2C通訊,但留有很多隱患,不可盲目照搬。 對(duì)于PIC單片機(jī)來說,I2C總線的控制基本上可以簡化到對(duì)TRIS寄存器相關(guān)位的控制。在初始化時(shí)先將數(shù)據(jù)端口寄存器PORTx |