二線制I2C CMOS串行EEPROM是一種采用CMOS工藝制成的串行可用電擦除可編程隨機(jī)讀寫存儲(chǔ)器属瓣。
1静檬、I2C總線特征介紹
I2C(Inter Integrated Circuit)雙向二進(jìn)制總線,簡(jiǎn)而言之就是有兩根線次舌。一根是數(shù)據(jù)線(sda),另一根是時(shí)鐘線(scl)。
- scl疙咸,是輸入端口
-
sda,是輸出/輸出的雙向端口
I2C總線協(xié)議定義為:只有在總線處于“非忙”狀態(tài)時(shí)唇牧,數(shù)據(jù)傳輸才能開(kāi)始罕扎。數(shù)據(jù)傳輸期間,只要時(shí)鐘線為高電平丐重,數(shù)據(jù)線都必須保持穩(wěn)定腔召,否則數(shù)據(jù)線上任何變化都被當(dāng)做“啟動(dòng)”或者“停止”信號(hào)。下圖描述I2C雙向二進(jìn)制串行總線的協(xié)議波形圖扮惦。
- A:總線非忙狀態(tài)臀蛛,數(shù)據(jù)線(sda)和時(shí)鐘線(scl)都保持高電平。
- B:?jiǎn)?dòng)狀態(tài)崖蜜,數(shù)據(jù)線(sda)下降沿并且時(shí)鐘線(scl)處于高電平浊仆。只有“啟動(dòng)信號(hào)”發(fā)出以后,其他的命令才有效豫领。
- C:寫狀態(tài)抡柿,可以對(duì)數(shù)據(jù)線(sda)進(jìn)行數(shù)據(jù)的寫入修改,數(shù)據(jù)線(sda)可以變化并且時(shí)鐘線(scl)處于低電平狀態(tài)等恐。
- D:讀狀態(tài)洲劣,數(shù)據(jù)線(sda)的數(shù)據(jù)不能改變,數(shù)據(jù)線(sda)不變并且時(shí)鐘線(scl)處于高電平狀態(tài)课蔬。
-
E:停止?fàn)顟B(tài)囱稽,數(shù)據(jù)線(sda)上升沿并且時(shí)鐘線(scl)處于高電平狀態(tài)。
注意:
1二跋、每一個(gè)數(shù)據(jù)的傳輸都會(huì)開(kāi)始于“啟動(dòng)信號(hào)”战惊,結(jié)束于“停止信號(hào)”。
2扎即、每個(gè)正在接收數(shù)據(jù)的EEPROM在接收到一個(gè)字節(jié)的數(shù)據(jù)后吞获,通常需要發(fā)出一個(gè)應(yīng)答信號(hào),而每個(gè)正在發(fā)送數(shù)據(jù)的EEPROM在發(fā)出一個(gè)字節(jié)的數(shù)據(jù)后铺遂,通常要接收一個(gè)應(yīng)答信號(hào)衫哥。
3、所謂的應(yīng)答信號(hào)是將數(shù)據(jù)線拉低襟锐,也就是低電平信號(hào)撤逢,非應(yīng)答信號(hào)就是高電平信號(hào)。
4、在讀操作中蚊荣,結(jié)束時(shí)發(fā)送非應(yīng)答信號(hào)初狰,然后發(fā)送通知信號(hào)。
1.1 EEPROM的寫入和讀出方式
串行EEPROM一般具有兩種寫入方式:一種是字節(jié)寫入方式互例;一種是頁(yè)寫入方式奢入。允許在一個(gè)寫周期內(nèi)對(duì)一個(gè)字節(jié)到一頁(yè)的若干個(gè)字節(jié)進(jìn)行編程寫入。
為了程序的簡(jiǎn)單起見(jiàn)媳叨,我們這里只討論串行EEPROM的一個(gè)字節(jié)的寫入和讀出方式腥光。
1.2 寫操作
EEPROM的寫操作(字節(jié)編程方式):通過(guò)讀寫控制器把一個(gè)字節(jié)數(shù)據(jù)發(fā)送到EEPROM中指定地址的存儲(chǔ)單元。過(guò)程如下:EEPROM讀寫控制器發(fā)出啟動(dòng)信號(hào)糊秆,緊跟著是8位的控制字武福,然后接收到一個(gè)應(yīng)答信號(hào),接著是EEPROM存儲(chǔ)單元的地址痘番,然后接收到一個(gè)應(yīng)答信號(hào)捉片,接著是要寫入的8位數(shù)據(jù),然后接收到一個(gè)應(yīng)答信號(hào)汞舱,便產(chǎn)生停止信號(hào)伍纫。
在這里我還是想再次強(qiáng)調(diào)一下,sda上的應(yīng)答信號(hào)有效時(shí)是低電平昂芜,非應(yīng)答信號(hào)是高電平莹规。sda是雙向的,在進(jìn)行數(shù)據(jù)的寫入時(shí)泌神,應(yīng)答信號(hào)是接收到的,是輸入信號(hào)腻扇;在進(jìn)行控制字、地址和數(shù)據(jù)的寫入時(shí)砾嫉,是輸出信號(hào)。深入理解sda上的數(shù)據(jù)是怎樣來(lái)的是十分重要的焕刮,必須要徹底理清自己的思路才能著手寫代碼舶沿,要不然會(huì)十分混亂!
1.3 讀操作
EEPROM的讀操作:通過(guò)讀寫控制器讀取EEPROM中指定地址的存儲(chǔ)單元中的一個(gè)字節(jié)數(shù)據(jù)配并。串行EEPROM的讀操作分為兩步進(jìn)行括荡,讀寫控制器發(fā)送一個(gè)啟動(dòng)信號(hào),緊接著是控制字溉旋,然后接收到一個(gè)應(yīng)答信號(hào)畸冲,接著是EEPROM存儲(chǔ)單元指定地址,然后接收到一個(gè)應(yīng)答信號(hào),再接著發(fā)送一個(gè)啟動(dòng)信號(hào)邑闲,緊接著是控制字算行,接收應(yīng)答信號(hào),讀出數(shù)據(jù)苫耸,接收非應(yīng)答信號(hào)州邢,最后發(fā)出停止信號(hào)。
這里要強(qiáng)調(diào)一下褪子,在讀操作進(jìn)行時(shí)量淌,在讀出數(shù)據(jù)時(shí),sda是輸出端口并且接收一個(gè)非應(yīng)答信號(hào)嫌褪。
小結(jié):充分了解I2C總線協(xié)議是很必要的呀枢,特別是對(duì)sda這個(gè)雙向端口,何時(shí)是輸出端何時(shí)是輸入端更是對(duì)設(shè)計(jì)有著重要的影響渔扎。把握住全局硫狞,理清設(shè)計(jì)思路才能寫出優(yōu)秀的代碼。下面晃痴,我們就EEPROM 的Verilog HDL程序進(jìn)行一個(gè)專題的系列介紹残吩。參照了夏宇聞老師的《Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程》。