IIC時序詳解


Verilog IIC通信實驗筆記

Write by Gianttank

我實驗的是 AT24C08的單字節讀,單字節寫,頁讀和頁寫,在高於3.3V系統中他的通信速率最高400KHZ的,我實驗里用的是100KHZ的速率。圖1是硬件原理圖clip_image002[5] 

圖1

 clip_image004

 圖2

圖2是器件地址,我的原理圖是A2接高。

IIC通信協議中要注意的地方:

1. 當時鍾線SCL 高電平時,如果把數據線SDA 從高電平拉到低電平,則表示通信開始(START);如果把數據線SDA 從低電平拉到高電平,則表示通信結束(STOP)。SDA數據不變,視為數據采樣。

2. 前一個STOP 結束后。與下一個START開始要保證5ms的間隔。

3. 頁寫有字節限制,而頁讀沒有,可以一次讀出所有的數據。

4. SDA信號在FPGA為接受方時要設置為高阻態。

5. 應答信號永遠是接收方發送的,這個很重要,我就是卡在這里幾天沒找到原因。FPGA在讀數據的時候,第9個周期是FPGA發低電平給EEPROM的。

圖3為RTL視圖clip_image006

圖3

引腳定義

信號名稱

方向

描述

clk

input

50M的主時鍾

rst_n

input

復位信號

sw1

input

按鍵1 低電平有效 按下執行字節寫

sw2

input

按鍵2 低電平有效 按下執行字節讀

sw3

input

按鍵3 低電平有效 按下執行頁寫

sw4

input

按鍵4 低電平有效 按下執行頁寫

SDA

inout

IIC數據端口

SCL

output

IIC時鍾端口

leddata

output

數碼管段選

ledcom

output

數碼管位選

代碼中分了兩個模塊,iic_com 模塊除了執行和I2C 通信有關的代碼設計外,還有按鍵檢測部分,而ledshow 模塊只是驅動數碼管顯示讀出的數據。對於這個通信的過程,內部使用了一段式狀態機進行設計。圖4是狀態機的狀態圖。具體每個狀態見程序。

 clip_image008

4

1.字節寫

clip_image010

5

Modelsim后仿真的圖

clip_image012

藍色為sda數據線高阻態,fpga接受eeprom應答。寫入數據88h。

2.字節讀

clip_image014

6

Modelsim后仿真的圖

clip_image016

3.頁寫

clip_image018

7

因為我只有8個數碼管,所以我程序里的頁寫,頁讀都只有4個數據。

 

Modelsim后仿真的圖

clip_image020

可以看到寫入數據位21h,43h,65h,87h。

4.頁讀

clip_image022

8

隨機字節讀和當前字節讀都能觸發頁讀,我只做了隨機字節讀

Modelsim后仿真的圖

clip_image024

這里就是 應答是fpga應答給eeprom的。

最后希望這篇文檔能幫助對IIC協議還不夠了解的同學。

源程序在下一篇文章中。


免責聲明!

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



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