FPGA的I2C協(xié)議實(shí)現(xiàn)(FPGA學(xué)習(xí)筆記)
參考資料:正點(diǎn)原子E2PROM讀寫測(cè)試


SCL為高電平時(shí),SDA產(chǎn)生下降沿表示I2C傳輸開(kāi)始,在傳輸完7位器件地址及一位寫命令(0)后,主機(jī)釋放SDA總線,從機(jī)拉低SDA應(yīng)答。對(duì)于16位器件存儲(chǔ)字地址而言,需要分兩次8位器件存儲(chǔ)字地址傳輸,等待從機(jī)應(yīng)答后再傳輸8位數(shù)據(jù),最后SDA在SCL為高電平時(shí)產(chǎn)生上升沿表示一次I2C單次傳輸結(jié)束。

I2C隨機(jī)讀操作與前面?zhèn)鬏斊骷刂泛蛡鬏?6位器件存儲(chǔ)字地址相同,在傳輸完器件存儲(chǔ)字地址后SDA會(huì)在次在SCL為高電平時(shí)產(chǎn)生下降沿(既起始信號(hào))和再次傳輸器件地址,只不過(guò)這次7位器件地址后面是讀命令(1),這種操作稱為虛寫,主要是為了使從機(jī)內(nèi)部指針指向需要讀取得存儲(chǔ)單元地址。

I2C驅(qū)動(dòng)時(shí)鐘頻率為scl頻率的4倍(便于SDA實(shí)現(xiàn)在SCL低電平中間(此時(shí)為dri_clk上升沿)改變數(shù)據(jù),并在SCL為高電平時(shí)保持?jǐn)?shù)據(jù)),dri_clk由輸入的50MHZ晶振分頻得到1000KHZ。初始狀態(tài)SCL與SDA保持高電平,當(dāng)收到外部I2C觸發(fā)信號(hào)i2c_exec高電平時(shí),SCL拉低啟動(dòng)I2C,接著后面狀態(tài)轉(zhuǎn)移分為8個(gè)部分。


由于SDA為雙向接口,所以要避免同時(shí)作為輸入與輸出

當(dāng)i2c_exec拉高時(shí),外部傳入I2C的控制信號(hào)通過(guò)寄存器臨時(shí)保存


后面由三段式狀態(tài)機(jī)實(shí)現(xiàn)I2C的狀態(tài)轉(zhuǎn)移
第一段時(shí)序電路描述狀態(tài)轉(zhuǎn)移
第二段邏輯電路描述狀態(tài)轉(zhuǎn)移條件
第三段時(shí)序電路描述狀態(tài)輸入與輸出
I2C寫操作



I2C讀操作

