《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于I2C接口EEPROM讀寫控制器設(shè)計
基于I2C接口EEPROM讀寫控制器設(shè)計
2015年微型機與應(yīng)用第10期
楊 帆
(貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴州 貴陽 550025)
摘要: 簡單介紹I2C總線協(xié)議,用Altera公司的FPGA(現(xiàn)場可編程門陣列)芯片設(shè)計I2C總線接口控制器,用于控制EEPROM(帶電可擦寫可編程只讀存儲器)的讀寫操作。
關(guān)鍵詞: I2C總線 FPGA EEPROM 編程門陣列
Abstract:
Key words :

  摘  要: 簡單介紹I2C總線協(xié)議,用Altera公司的FPGA(現(xiàn)場可編程門陣列)芯片設(shè)計I2C總線接口控制器,用于控制EEPROM(帶電可擦寫可編程只讀存儲器)的讀寫操作。

  關(guān)鍵詞: I2C總線;FPGA;EEPROM

0 引言

  隨著電子技術(shù)快速發(fā)展,有許多的IC需要相互之間進(jìn)行通信。為此,Philips公司開發(fā)了一種性能優(yōu)越的雙向兩線串行總線I2C(Inter-Integrated Circuit)總線。進(jìn)行FPGA設(shè)計時經(jīng)常需要與外圍提供I2C接口的芯片進(jìn)行通信,雖然市場上有專門的I2C總線接口芯片,但是大多性能指標(biāo)固定、功能單一、使用不方便。根據(jù)I2C總線協(xié)議和其電路的電氣特性,在Altera公司的EP4CE10F17C8N型號的FPGA芯片上可以方便地實現(xiàn)I2C總線接口,進(jìn)而實現(xiàn)EEPROM的讀寫操作。

1 I2C總線原理概述

  I2C總線有兩條串行總線,一條是串行時鐘線(SCL),一條是串行數(shù)據(jù)線(SDA),連接到總線上的每個器件既可以作為發(fā)送器又可以作為接收器,且每個器件都有唯一的地址識別。主機主要負(fù)責(zé)產(chǎn)生時鐘、初始化發(fā)送和終止發(fā)送等操作。從機則是被主機尋址的器件。典型的連接在I2C總線上的器件有LCD、EEPROM等??偩€的啟動信號條件是當(dāng)SCL為高電平時,SDA由高變?yōu)榈?;停止條件是當(dāng)SCL為高電平時,SDA電平由低變高。數(shù)據(jù)的變化只能發(fā)生在SCL為低電平期間[1]。

2 EEPROM讀寫控制器模塊的設(shè)計與實現(xiàn)

  在進(jìn)行數(shù)據(jù)傳輸時,讀寫控制器首先產(chǎn)生一個啟動信號(當(dāng)SCL為高電平時,SDA由高變?yōu)榈停?,接著發(fā)送控制字(即I2C總線器件的特征編碼和3 bit EEPROM的芯片地址)以及寫狀態(tài)R/W位為0到總線上。這里的總線器件特征碼為1010,而3 bit EEPROM的芯片地址為000。接著主控制器釋放總線,等待EEPROM發(fā)出的應(yīng)答信號,由于采用的EEPROM型號是24LC64,因此在控制器收到應(yīng)答后,將首先發(fā)送EEPROM高字節(jié)的存儲單元地址,當(dāng)控制器再次收到應(yīng)答后繼續(xù)發(fā)送EEPROM低字節(jié)的存儲單元地址,當(dāng)控制器再次收到應(yīng)答后,判斷是讀還是寫,如果是寫操作,則控制器發(fā)送數(shù)據(jù)字節(jié),并把數(shù)據(jù)寫入被尋址的存儲單元,EEPROM再次發(fā)送應(yīng)答信號,讀寫控制器收到應(yīng)答信號后,產(chǎn)生停止信號。如果之前判斷出是讀操作,則控制器會在收到應(yīng)答后產(chǎn)生一個重復(fù)起始條件,緊接著寫入讀控制字10100001,這里的最后一位1表示讀操作,前面的1010000和之前說的一樣,是器件特征編碼1010和3 bit EEPROM芯片地址000。當(dāng)控制器再次收到應(yīng)答后會產(chǎn)生一個釋放總線的動作,把總線留給EEPROM,控制器負(fù)責(zé)接收EEPROM發(fā)出的數(shù)據(jù)。當(dāng)控制器接收完數(shù)據(jù)后會占用總線,并發(fā)出一個非應(yīng)答信號,表示數(shù)據(jù)收到,最后控制器再產(chǎn)生停止信號,停止本次傳輸。模塊的主狀態(tài)機如圖1所示。

001.jpg

  這里寫入的地址是2 B的地址,且分兩次寫,因為此EEPROM的地址是16 bit的。

  2.1 控制器的總線時鐘SCL產(chǎn)生

  由于FPGA開發(fā)板的時鐘是50 MHz,這里先將輸入的50 MHz時鐘進(jìn)行分頻產(chǎn)生400 kHz時鐘,利用400 kHz的時鐘去產(chǎn)生總線時鐘SCL。具體方法是:在400 kHz時鐘的下降沿對SCL進(jìn)行翻轉(zhuǎn)操作,這樣能很好地實現(xiàn)I2C總線時序要求。這里生成的SCL是200 kHz時鐘。其Verilog代碼如下:

  always@(negedge clk_400k or negedge rst_n)

  begin

  if(!rst_n)

  scl<=0;

  else

  scl<=~scl;

  end

  時序圖如圖2所示。

002.jpg

  由圖2可知,在SCL為高電平時,SDA由高變低會產(chǎn)生一個開始信號,而在SCL為高電平時,SDA由低變高會產(chǎn)生一個停止信號,而數(shù)據(jù)的改變只能在SCL為低電平期間發(fā)生,在SCL為高電平時,數(shù)據(jù)要保持穩(wěn)定。數(shù)據(jù)采樣時使用400 kHz時鐘的上升沿采樣,并且是在SCL為高電平時才能采數(shù)據(jù),因為這時的數(shù)據(jù)穩(wěn)定。

  2.2 I2C總線數(shù)據(jù)輸入輸出

  電路的輸出采用三態(tài)數(shù)據(jù)通路設(shè)計,如圖3所示。

003.jpg

  其Verilog代碼如下:

  assign sda=link_sda?sda_buf:1′bz;

  由圖3可知,sda的I/O類型為inout,當(dāng)開關(guān)link_sda為1時,讀寫控制器上的數(shù)據(jù)可以發(fā)送到sda上,實現(xiàn)控制器占用總線進(jìn)行寫操作,當(dāng)link_sda為0時,輸出為高阻態(tài),而此時外部的sda上的數(shù)據(jù)可以讀進(jìn)來,實現(xiàn)了控制器釋放總線,將總線交由從機EEPROM,進(jìn)而可將EEPROM發(fā)出的數(shù)據(jù)讀進(jìn)來[2]。

  數(shù)據(jù)的輸出涉及并串轉(zhuǎn)換,因為數(shù)據(jù)寄存器中的數(shù)據(jù)是8 bit,而I2C總線上傳輸?shù)臄?shù)據(jù)sda為1 bit,其Verilog代碼如下:

  if(count1<8)

  begin

  data<={data[6:0],data[7]};

  sda_buf<=data[7];

  count1<=count1+1;

  state<=t2;

  end

  設(shè)計采用循環(huán)移位的方式將8 bit的并行data數(shù)據(jù)一位一位地移到sda_buf線上送出去。

  相反,I2C總線數(shù)據(jù)的輸入涉及串轉(zhuǎn)并操作,Verilog代碼如下:

  if(count1 <8)

  begin

  link_sda <= 0;//讀寫控制器釋放總線

  if(scl)

  begin

  data<={data[6:0],sda};//串轉(zhuǎn)并

  count1<=count1+1;

  state<=r2;

  end

  end

3 仿真驗證

  仿真平臺的搭建如圖4所示。

004.jpg

  由圖4可知,電路的仿真驗證模塊分為I2C接口控制器模塊、ROM模塊、地址發(fā)生器模塊、按鍵模塊、EEPROM模塊和數(shù)碼管顯示模塊。其中,按鍵模塊用于產(chǎn)生I2C接口控制器的讀寫操作信號;地址發(fā)生器模塊用于產(chǎn)生ROM和I2C接口控制器的地址信息;ROM模塊中事先存儲了一定量的數(shù)據(jù),并將這些數(shù)據(jù)發(fā)送給I2C接口控制器,用來寫入EEPROM;I2C接口控制器負(fù)責(zé)EEPROM的讀寫操作;數(shù)碼管顯示模塊負(fù)責(zé)將讀寫控制器從EEPROM中讀出的數(shù)據(jù)顯示出來,用來查看數(shù)據(jù)是否正確。

  電路的仿真波形如圖5、圖6所示。

  由圖5可知,在寫EEPROM操作時,讀寫控制器在開始信號后首先寫入1 B的控制字10100000(前面的1010是器件特征碼,000表示EEPROM的芯片地址,最后一位0表示寫操作),緊接著控制器釋放總線,等待EEPROM給它的應(yīng)答。因為仿真只是模擬,并沒有接入EEPROM,所以應(yīng)答位呈現(xiàn)高阻態(tài)。在應(yīng)答的后面就是高字節(jié)的地址,等到再次收到應(yīng)答信號時,控制器繼續(xù)發(fā)送低字節(jié)的地址位。這里的地址為0000_0000_0000_ 0000,共2 B,等再次收到應(yīng)答信號時,控制器會發(fā)送單字節(jié)的數(shù)據(jù)0000_0001,將其寫入相應(yīng)的存儲空間上。收到來自EEPROM的應(yīng)答后,控制器產(chǎn)生停止信號,結(jié)束操作。圖6是控制器讀EEPROM操作,它與寫操作不同的是在寫入控制字和高低字節(jié)地址后,控制器會產(chǎn)生新的啟動信號,緊接著寫入1010_0001,最后的1表示是讀操作,這時控制器會釋放總線,等收到應(yīng)答后繼續(xù)釋放總線,以讀取EEPROM中的數(shù)據(jù);1 B的數(shù)據(jù)收完后,控制器產(chǎn)生一個非應(yīng)答信號并緊接著產(chǎn)生停止信號,表示讀數(shù)據(jù)任務(wù)結(jié)束。

4 結(jié)論

  利用I2C總線協(xié)議設(shè)計出EEPROM讀寫控制器,與專用的I2C接口芯片相比,有配置靈活、使用方便、可移植性強的特點,除了滿足EEPROM的讀寫操作,還可滿足其他I2C總線器件的讀寫要求。電路仿真完成后,在FPGA上成功實現(xiàn)EEPROM的讀寫操作,通信正常,滿足要求。

參考文獻(xiàn)

  [1] Philips Semiconductors. The I2C-bus Specification Version 2.1[Z]. 2000.

  [2] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京:北京航空航天大學(xué)出版社,2013.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲午夜一区二区| 亚洲精品偷拍| 亚洲精品久久久久久下一站| 国产一区二区三区精品久久久| 国产精品久久二区| 欧美三级网址| 欧美日韩一二三四五区| 欧美日韩国产va另类| 欧美另类99xxxxx| 欧美精品一区在线观看| 欧美国产先锋| 欧美激情影音先锋| 欧美国产一区视频在线观看| 欧美fxxxxxx另类| 欧美国产一区二区在线观看| 欧美电影免费网站| 欧美成人精品h版在线观看| 欧美成人午夜77777| 欧美高清视频一区| 欧美激情综合| 欧美日韩在线观看一区二区三区 | 亚洲国产高清在线| 亚洲国产视频直播| 亚洲免费av观看| 一区二区电影免费观看| 亚洲在线一区二区| 欧美一区二区私人影院日本| 亚洲国产成人久久综合一区| 亚洲精品欧美日韩专区| 中文久久乱码一区二区| 午夜精品电影| 久久五月激情| 欧美理论视频| 国产精品一二三四区| 国产欧美精品一区| 激情欧美日韩| 日韩亚洲欧美高清| 亚洲欧美日韩精品综合在线观看| 欧美在线免费播放| 亚洲精品乱码久久久久久按摩观| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧美日韩在线综合| 久久久亚洲欧洲日产国码αv| 免费在线视频一区| 欧美日韩亚洲一区三区| 国产伦精品一区二区三区视频孕妇 | 亚洲在线中文字幕| 亚洲高清视频在线| 国产精品99久久久久久久女警| 性18欧美另类| 免费成人黄色片| 欧美亚洲成人免费| 狠狠干狠狠久久| 宅男噜噜噜66一区二区| 亚洲成人自拍视频| 亚洲影视九九影院在线观看| 久久久欧美精品sm网站| 欧美久久久久久久久久| 国产欧美视频一区二区三区| 亚洲国产午夜| 欧美一区1区三区3区公司| 日韩视频不卡| 久久精品国产成人| 欧美日韩午夜| 一区精品久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲国产中文字幕在线观看| 亚洲午夜电影| 美国十次了思思久久精品导航| 国产精品第2页| 亚洲国产一区二区精品专区| 亚洲一区二区在线| 日韩写真视频在线观看| 久久精品国产欧美激情| 欧美日韩一区不卡| 在线观看福利一区| 香港久久久电影| 中文国产成人精品| 噜噜噜久久亚洲精品国产品小说| 国产精品久久久久久av福利软件 | 这里只有精品在线播放| 久久综合网色—综合色88| 国产精品九九久久久久久久| 亚洲国产视频一区| 亚洲国产91精品在线观看| 午夜精品久久久久久久99热浪潮| 欧美激情综合色| 黄色成人在线网址| 亚洲欧美国产77777| 亚洲色无码播放| 欧美黄网免费在线观看| 狠狠色综合网| 午夜日韩av| 亚洲专区欧美专区| 欧美人与禽猛交乱配视频| 国内精品久久久| 先锋影音久久| 午夜精品久久久久久久蜜桃app | 欧美暴力喷水在线| 国内精品久久久久影院色| 亚洲女同在线| 亚洲欧美日韩精品在线| 欧美三日本三级三级在线播放| 亚洲国产欧美久久| 91久久精品美女| 噜噜噜噜噜久久久久久91| 国产日韩欧美综合一区| 亚洲一区二区三区视频播放| 亚洲永久免费观看| 国产精品v日韩精品| 日韩一区二区精品视频| 亚洲精品永久免费精品| 欧美xart系列高清| 亚洲成人在线网| 亚洲高清av在线| 久久综合九九| 一区在线免费| 亚洲国产精品一区二区www| 久热精品视频在线观看一区| 国产综合av| 久久国产精品久久精品国产 | 国产精品乱人伦一区二区| 一本久道久久综合婷婷鲸鱼| 中文成人激情娱乐网| 欧美日韩一级黄| 亚洲视频图片小说| 午夜在线a亚洲v天堂网2018| 国产精品乱码一区二区三区| 亚洲性线免费观看视频成熟| 性欧美xxxx大乳国产app| 国产乱码精品1区2区3区| 亚洲综合色丁香婷婷六月图片| 午夜精彩国产免费不卡不顿大片| 国产精品视频观看| 午夜日韩在线观看| 蜜桃久久精品乱码一区二区| 亚洲激情电影中文字幕| 亚洲三级免费电影| 欧美日韩1080p| 亚洲深夜福利| 久久久久久一区二区| 亚洲第一精品影视| 在线亚洲欧美| 国产精品丝袜xxxxxxx| 久久成人综合网| 欧美成人精品在线| 99在线观看免费视频精品观看| 亚洲一区综合| 国产一区二区毛片| 亚洲欧洲美洲综合色网| 欧美剧在线观看| 亚洲在线日韩| 麻豆精品一区二区av白丝在线| 91久久久一线二线三线品牌| 亚洲一区二区三区高清| 国产日韩欧美精品一区| 亚洲大片在线| 欧美日韩国产成人在线91| 亚洲午夜久久久久久久久电影院| 欧美在线观看你懂的| 一区二区三区在线看| 一区二区精品| 国产人成一区二区三区影院| 亚洲国产一区视频| 国产精品国产三级国产专播品爱网| 午夜精品一区二区在线观看| 欧美成人性网| 亚洲深夜福利在线| 免费亚洲视频| 亚洲一区二区精品视频| 麻豆久久婷婷| 夜夜爽www精品| 久久亚洲国产精品日日av夜夜| 亚洲伦伦在线| 久久久久久久97| 日韩视频免费在线观看| 久久精品最新地址| 亚洲免费观看高清完整版在线观看熊| 久久国产主播| 一区二区三区视频观看| 久久一区欧美| 亚洲一区二区三区四区五区午夜 | 欧美激情一区二区三区在线| 性久久久久久久| 欧美视频成人| 亚洲黄色尤物视频| 国产精品亚洲第一区在线暖暖韩国| 亚洲国产日韩欧美一区二区三区| 国产精品毛片在线看| 亚洲精品男同| 国内精品国语自产拍在线观看| 亚洲一区二区免费| 亚洲国产美女| 久久久久久久久伊人| 中文日韩在线| 欧美精品首页| 亚洲国产精品va| 国产女主播在线一区二区| 一区二区三区国产在线| 在线成人av|