0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【紫光同創(chuàng)國產(chǎn)FPGA教程】【第七章】I2C接口EEPROM實(shí)驗(yàn)

FPGA技術(shù)專欄 ? 來源:芯驛電子科技 ? 作者:芯驛電子科技 ? 2021-02-05 09:42 ? 次閱讀

原創(chuàng)聲明:

本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處(alinx.com)。

適用于板卡型號(hào):

PGL22G/PGL12G

1. 實(shí)驗(yàn)簡介

本實(shí)驗(yàn)通過使用開源軟件opencores上的I2C master控制器去控制I2C接口的EEPROM讀寫,練習(xí)如何有效的使用開源代碼提升開發(fā)效率。

2. 實(shí)驗(yàn)原理

2.1 硬件電路

在開發(fā)板上,FPGA芯片通過I2C總線連接EEPROM 24LC04, I2C的兩根總線各上拉一個(gè)4.7K的電阻到3.3V,所以當(dāng)總線上沒有輸出時(shí)會(huì)被拉高, 24LC04的寫保護(hù)沒有使能,不然FPGA會(huì)無法寫入數(shù)據(jù)。因?yàn)樵陔娐飞螦0~A2都為低,所以24LC04的設(shè)備地址為0xA0。

pIYBAGAY4jyAbtJYAAArzjqRVw0079.jpg

開發(fā)板部分電路

2.2 I2C的總線協(xié)議和時(shí)序

I2C標(biāo)準(zhǔn)速率為100kbit/s,快速模式400kbit/s,支持多機(jī)通訊, 支持多主控模塊,但同一時(shí)刻只允許有一個(gè)主控。由數(shù)據(jù)線SDA和時(shí)鐘SCL構(gòu)成串行總線; 每個(gè)電路和模塊都有唯一的地址。

在這里以AT24C04為例說明I2C讀寫的基本操作和時(shí)序,I2C設(shè)備的操作可分為寫單個(gè)存儲(chǔ)字節(jié),寫多個(gè)存儲(chǔ)字節(jié),讀單個(gè)存儲(chǔ)字節(jié)和讀多個(gè)存儲(chǔ)字節(jié)。各個(gè)操作如下圖所示。

o4YBAGAY4jyAWYkhAAB_hx6UQ0s734.jpg

下面對(duì)I2C總線通信過程中出現(xiàn)的幾種信號(hào)狀態(tài)和時(shí)序進(jìn)行分析。

①總線空閑狀態(tài)

I2C總線總線的SDA和SCL兩條信號(hào)線同時(shí)處于高電平時(shí),規(guī)定為總線的空閑狀態(tài)。此時(shí)各個(gè)器件的輸出級(jí)場(chǎng)效應(yīng)管均處在截止?fàn)顟B(tài),即釋放總線,由兩條信號(hào)線各自的上拉電阻把電平拉高。

②啟動(dòng)信號(hào)(Start)

在時(shí)鐘線SCL保持高電平期間,數(shù)據(jù)線SDA上的電平被拉低(即負(fù)跳變),定義為I2C總線總線的啟動(dòng)信號(hào),它標(biāo)志著一次數(shù)據(jù)傳輸?shù)拈_始。啟動(dòng)信號(hào)是由主控器主動(dòng)建立的,在建立該信號(hào)之前I2C總線必須處于空閑狀態(tài),如下圖所示。

pIYBAGAY4j2AM_kiAABw1zPNaUg528.jpg

③停止信號(hào)(Stop)

在時(shí)鐘線SCL保持高電平期間,數(shù)據(jù)線SDA被釋放,使得SDA返回高電平(即正跳變),稱為I2C總線的停止信號(hào),它標(biāo)志著一次數(shù)據(jù)傳輸?shù)慕K止。停止信號(hào)也是由主控器主動(dòng)建立的,建立該信號(hào)之后,I2C總線將返回空閑狀態(tài)。

④數(shù)據(jù)位傳送

在I2C總線上傳送的每一位數(shù)據(jù)都有一個(gè)時(shí)鐘脈沖相對(duì)應(yīng)(或同步控制),即在SCL串行時(shí)鐘的配合下,在SDA上逐位地串行傳送每一位數(shù)據(jù)。進(jìn)行數(shù)據(jù)傳送時(shí),在SCL呈現(xiàn)高電平期間,SDA上的電平必須保持穩(wěn)定,低電平為數(shù)據(jù)0,高電平為數(shù)據(jù)1。只有在SCL為低電平期間,才允許SDA上的電平改變狀態(tài)。

⑤應(yīng)答信號(hào)(ACK和NACK)

I2C總線上的所有數(shù)據(jù)都是以8位字節(jié)傳送的,發(fā)送器每發(fā)送一個(gè)字節(jié),就在時(shí)鐘脈沖9期間釋放數(shù)據(jù)線,由接收器反饋一個(gè)應(yīng)答信號(hào)。應(yīng)答信號(hào)為低電平時(shí),規(guī)定為有效應(yīng)答位(ACK簡稱應(yīng)答位),表示接收器已經(jīng)成功地接收了該字節(jié);

應(yīng)答信號(hào)為高電平時(shí),規(guī)定為非應(yīng)答位(NACK),一般表示接收器接收該字節(jié)沒有成功。對(duì)于反饋有效應(yīng)答位ACK的要求是,接收器在第9個(gè)時(shí)鐘脈沖之前的低電平期間將SDA線拉低,并且確保在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。

如果接收器是主控器,則在它收到最后一個(gè)字節(jié)后,發(fā)送一個(gè)NACK信號(hào),以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送,并釋放SDA線,以便主控接收器發(fā)送一個(gè)停止信號(hào)。

o4YBAGAY4j6ASBL_AABF6_Zp98o380.jpg

3. 程序設(shè)計(jì)

I2C時(shí)序雖然簡單,但是寫的不好也會(huì)出現(xiàn)很多問題,在開源網(wǎng)站opencores.org/上我們可以找到很多非常好的代碼,這些代碼大部分都提供詳細(xì)的文檔和仿真。俗話說,他山之石,可以攻玉,恰當(dāng)?shù)氖褂瞄_源代碼,不光能提升我們的開發(fā)效率,也能學(xué)習(xí)別人的開發(fā)思路。由于代碼大部分都是經(jīng)過很長時(shí)間反復(fù)修改,反復(fù)精煉后的,所以有些代碼理解起來可能比較困難,在不能很好的理解別人代碼的時(shí)候,最好的辦法就是仿真。

pIYBAGAY4j6AUwJLAACw8mPKMHE747.jpg

從IP core文檔得知,i2c_master_byte_ctrl模塊主要完成一個(gè)字節(jié)的讀寫,我們只需要按照I2C讀寫的要求,完成設(shè)備地址、寄存器地址、數(shù)據(jù)等讀寫即可。

i2c_master_top模塊是對(duì)i2c_master_byte_ctrl模塊的再次封裝,完成一個(gè)寄存器的讀寫,由于不同的設(shè)備寄存器可能是8bit,也可能是16bit,這里i2c_addr_2byte信號(hào)來控制寄存器地址是8位還是16位。

i2c_master_top模塊狀態(tài)機(jī),如果是寫寄存器操作,先寫一個(gè)字節(jié)設(shè)備地址(寫操作),再寫1個(gè)字節(jié)或2個(gè)字節(jié)的寄存器地址,再寫一個(gè)字節(jié)的數(shù)據(jù);如果是讀操作,先寫一個(gè)字節(jié)的設(shè)備地址(寫操作),再寫1個(gè)字節(jié)或2字節(jié)的寄存器地址,完成地址的寫入,再次寫設(shè)備地址(讀操作),然后讀取一個(gè)字節(jié)的數(shù)據(jù)。不管怎么說,程序設(shè)計(jì)都是要滿足芯片時(shí)序要求的,所以在閱讀程序之前最好先把芯片的數(shù)據(jù)手冊(cè)仔細(xì)閱讀一遍。

o4YBAGAY4j-AYMPeAAAyMM8wJzg755.jpg

i2c_master_top狀態(tài)機(jī)

信號(hào)名稱 方向 說明
clk in 時(shí)鐘輸入
rst in 異步復(fù)位輸入,高復(fù)位
clk_div_cnt in I2C時(shí)鐘分頻因子,等于系統(tǒng)時(shí)鐘頻率/(5 * I2C時(shí)鐘頻率) - 1。例如50Mhz系統(tǒng)時(shí)鐘,100Khz的I2C,配置為99,400Khz的I2C,配置為24。
scl_pad_i in I2C時(shí)鐘數(shù)據(jù)輸入,本實(shí)驗(yàn)可忽略
scl_pad_o out I2C時(shí)鐘輸出
scl_padoen_o out I2C時(shí)鐘輸出使能,低有效,I2C外部有上拉電阻,如果輸出高阻態(tài),則會(huì)被拉到高電平,在本實(shí)驗(yàn)中,高電平輸出時(shí)輸出高阻
sda_pad_i in I2C數(shù)據(jù)輸入
sda_pad_o out I2C數(shù)據(jù)輸出
sda_padoen_o out I2C數(shù)據(jù)輸出使能,低有效。在本實(shí)驗(yàn)中,高電平輸出時(shí)輸出高阻。
i2c_addr_2byte in 寄存器地址是8位還是16位,1:16位,0:8位
i2c_read_req in I2C寄存器讀請(qǐng)求
i2c_read_req_ack out I2C寄存器讀請(qǐng)求應(yīng)答
i2c_write_req in I2C寄存器寫請(qǐng)求
i2c_write_req_ack out I2C寄存器寫請(qǐng)求應(yīng)答
i2c_slave_dev_addr in I2C設(shè)備地址,8bit,最低位忽略,有效數(shù)據(jù)位是高7位。
i2c_slave_reg_addr in 寄存器地址,8位地址時(shí),低8位有效
i2c_write_data in 寫寄存器數(shù)據(jù)
i2c_read_data out 讀寄存器數(shù)據(jù)
error out 設(shè)備無應(yīng)答錯(cuò)誤

i2c_master_top模塊端口

i2c_eeprom_test模塊完成EEPROM的讀寫,EEPROM設(shè)備地址是A0,程序中將地址00的數(shù)據(jù)讀出,然后通過LED顯示,在KEY2 按下時(shí),數(shù)字加一并再次寫入EEPROM并顯示出來。在I2C控制器中,代碼的大部分功能在備注中也有很多批注。

4. 實(shí)驗(yàn)現(xiàn)象

下載實(shí)驗(yàn)程序后,可以看到LED顯示一個(gè)二進(jìn)制數(shù)字,這個(gè)數(shù)字是存儲(chǔ)在EEPROM中00地址的數(shù)據(jù),數(shù)據(jù)是隨機(jī)的,這個(gè)時(shí)候按鍵KEY2按下,數(shù)字加一,并寫入了EEPROM,再次下載程序,可以看到直接顯示更新后的數(shù)據(jù)。

5. 使用在線調(diào)試Fabric Debugger觀察信號(hào)

使用Fabric Debugger可以非常直觀的看到程序在開發(fā)板上運(yùn)行時(shí)各個(gè)信號(hào)的變化,在本例程中添加一個(gè)Debug Core來觀察程序運(yùn)行時(shí)各數(shù)據(jù)線的變化情況。

按紅色標(biāo)記,在單擊“Inserter":

o4YBAGAY4kCAE8uJAAApfPo1Z3A751.jpg

在彈出如下界面下選擇New DebugCore Unit來新建一個(gè)Debug Core:

pIYBAGAY4kGALwZxAABYWgrK6eM037.jpg

單擊U0:DebugCore:

o4YBAGAY4kGATsdaAAB1MTrlaPg201.jpg

會(huì)跳到參數(shù)設(shè)置界面,在"Trigger Parameters"欄中Sample Depth采樣深度自己根據(jù)需求選擇,這里選擇默認(rèn),其它的設(shè)置保持不變。

pIYBAGAY4kKAR27nAADaHVS3Jf4184.jpg

在"Net Connections"欄中選擇Modify Connections,進(jìn)行Net修改;

o4YBAGAY4kOAPmPtAACBDH-f8ks677.jpg

彈出的界面中首先對(duì)TriggerPort欄中觀測(cè)信號(hào)關(guān)聯(lián),在這里,選擇左側(cè)read_data,然后單擊Make Connections,可以在TriggerPort欄中看到關(guān)聯(lián)的觀測(cè)信號(hào)read_data;

pIYBAGAY4kSARs8eAACkcbG_e00375.jpg

以同樣的方式對(duì)Clock欄中時(shí)鐘信號(hào)關(guān)聯(lián),選擇左側(cè)sys_clk_c,然后單擊Make Connections,可以在Clock欄中看到關(guān)聯(lián)的觀測(cè)信號(hào)sys_clk_c,然后單擊OK;

o4YBAGAY4kSARM_YAAClyFBzCI0926.jpg

再在如下界面中單擊保存按鈕進(jìn)行保存并關(guān)閉即可。

pIYBAGAY4kWAacckAACTgiyhlYI046.jpg

接下來重新生成.sbit文件,雙擊Generate Bitstream,會(huì)生成帶有在線調(diào)試的DebugCore。

o4YBAGAY4kWAauX4AAGn6bk40JQ667.jpg

上面的工作準(zhǔn)備好后,接下來才是正式開始調(diào)試, 單擊Debugger(確保開發(fā)板上電并連接了下載器),

pIYBAGAY4kaAUMpIAAA22_Ktv5o848.jpg

單擊JTAG 掃描按鈕,在找到后單擊OK;

o4YBAGAY4kaATttDAACF6e35YHo365.jpg

右擊DEV:0MyDevice0,在下拉菜單中單擊Configure Bitstream File

pIYBAGAY4keAHqLoAAAR6eAfc8g548.jpg

再按如下圖中進(jìn)行設(shè)置,設(shè)置完成后按OK鍵;

o4YBAGAY4kiAZQVlAAC0YUTb01Q425.jpg

到此,程序已下載到FPGA 中,可以在線觀察所需要的信號(hào),選擇 Waveform,選擇觸發(fā)模式為連續(xù),并單擊run;

pIYBAGAY4kiAViXpAAAozdlW7DQ576.jpgo4YBAGAY4kmAHQ-hAAAJFyUSGbo803.jpg

可以看到read_data數(shù)據(jù),每按一次KEY2鍵運(yùn)行一次可以看到數(shù)據(jù)增加1。

pIYBAGAY4kqAa-mDAABcm-3IY-8798.jpg

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21539

    瀏覽量

    600533
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1007

    瀏覽量

    81225
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3185

    瀏覽量

    42241
  • I2C接口
    +關(guān)注

    關(guān)注

    1

    文章

    124

    瀏覽量

    25078
  • 紫光同創(chuàng)
    +關(guān)注

    關(guān)注

    5

    文章

    78

    瀏覽量

    27467
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ALINX亮相2024紫光同創(chuàng)FPGA技術(shù)研討會(huì)

    “2024 紫光同創(chuàng) FPGA 技術(shù)研討會(huì)”系列活動(dòng)在全國多地繼續(xù)開展,作為紫光同創(chuàng)官方合作伙伴,ALINX 亮相 6 月下旬深圳、廣州兩地
    的頭像 發(fā)表于 08-29 14:36 ?472次閱讀

    使用C2000 I2C模塊連接EEPROM

    電子發(fā)燒友網(wǎng)站提供《使用C2000 I2C模塊連接EEPROM.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 09:53 ?0次下載
    使用<b class='flag-5'>C</b>2000 <b class='flag-5'>I2C</b>模塊連接<b class='flag-5'>EEPROM</b>

    盤古200K開發(fā)板,紫光同創(chuàng)PG2L200H,Logos2系列,資源豐富,功能強(qiáng)大

    器件,推出100%國產(chǎn)化高性能盤古系列FPGA方案和開發(fā)套件,為客戶提供專業(yè)且高效的FPGA產(chǎn)品和服務(wù)支持。 紫光同創(chuàng)Logos
    發(fā)表于 06-14 16:26

    國產(chǎn)FPGA核心板!米爾紫光同創(chuàng)Logos-2和Xilinx Artix-7核心板

    PG2L100H的MYC-J2L100H核心板及開發(fā)板、基于Xilinx Artix-7系列的MYC-J7A100T核心板及開發(fā)板。 國產(chǎn)FPGA開發(fā)平臺(tái)
    發(fā)表于 05-31 17:40

    紫光同創(chuàng)盤古PGX-Nano教程】——(盤古PGX-Nano開發(fā)板/PG2L50H_MBG324第七章)序列檢測(cè)器實(shí)驗(yàn)例程

    適用于板卡型號(hào):紫光同創(chuàng)PG2L50H_MBG324開發(fā)平臺(tái)(盤古PGX-Nano) 一:盤古盤古PGX-Nano開發(fā)板簡介PGX-Nano 是一套以紫光
    發(fā)表于 05-23 14:45

    紫光同創(chuàng)PGL22G開發(fā)板|盤古22K開發(fā)板,國產(chǎn)FPGA開發(fā)板,接口豐富,高性價(jià)比

    盤古22K開發(fā)板是基于紫光同創(chuàng)Logos系列PGL22G芯片設(shè)計(jì)的一款FPGA開發(fā)板,全面實(shí)現(xiàn)國產(chǎn)化方案,板載資源豐富,高容量、高帶寬,外圍接口
    發(fā)表于 05-23 10:04

    紫光同創(chuàng)FPGA有哪些型號(hào)

    請(qǐng)問紫光同創(chuàng)FPGA有哪些型號(hào)?分別用于什么場(chǎng)景?
    發(fā)表于 01-24 10:48

    國產(chǎn)FPGA介紹-紫光同創(chuàng)

    ,該型號(hào)產(chǎn)品去年全年銷售額近1億元。 今年3月,紫光同創(chuàng)推出Logos-2系列高性價(jià)比FPGA,采用28nm CMOS工藝,相較上一代40nm Logos系列
    發(fā)表于 01-24 10:45

    【重磅新品】盤古100K開發(fā)板,紫光同創(chuàng)PG2L100H,Logos2系列,性能全面提升

    豐富,可以充分滿足高速數(shù)據(jù)的緩存處理需求 海量的外圍接口,充分滿足多方位開發(fā)需求 三:核心板產(chǎn)品概述 盤古100K核心板是基于紫光同創(chuàng)Logos2系列(PG
    發(fā)表于 12-29 16:31

    2024新品推薦|盤古100K開發(fā)板,紫光同創(chuàng)PG2L100H,Logos2系列,性能全面提升

    FPGA迎來迅猛發(fā)展。國產(chǎn)FPGA由于擁有高性價(jià)比、完整自主可控知識(shí)產(chǎn)權(quán)產(chǎn)業(yè)鏈,越來越成為行業(yè)熱門選擇。 作為國產(chǎn)FPGA專業(yè)廠商
    發(fā)表于 12-28 18:09

    2024新品推薦|盤古200K開發(fā)板,紫光同創(chuàng)PG2L200H,Logos2系列,資源豐富,功能強(qiáng)大

    器件,推出100%國產(chǎn)化高性能盤古系列FPGA方案和開發(fā)套件,為客戶提供專業(yè)且高效的FPGA產(chǎn)品和服務(wù)支持。 紫光同創(chuàng)Logos
    發(fā)表于 12-28 17:05

    2024新品|紫光同創(chuàng)盤古系列FPGA開發(fā)板套件,100%國產(chǎn)化方案

    專業(yè)廠商紫光同創(chuàng)生態(tài)合作伙伴,小眼睛科技一直深耕FPGA產(chǎn)品和解決方案,基于紫光同創(chuàng)器件,推出100%
    發(fā)表于 12-28 14:18

    紫光同創(chuàng)FPGA開發(fā)套件,高性能國產(chǎn)FPGA方案

    紫光同創(chuàng)FPGA開發(fā)套件,高性能國產(chǎn)FPGA方案,100%國產(chǎn)化,全系列產(chǎn)品,方案可定制,滿足多
    發(fā)表于 11-16 17:25

    CW32單片機(jī)I2C接口讀寫EEPROM芯片介紹

    CW32單片機(jī)I2C接口讀寫EEPROM芯片介紹
    的頭像 發(fā)表于 11-09 17:42 ?947次閱讀
    CW32單片機(jī)<b class='flag-5'>I2C</b><b class='flag-5'>接口</b>讀寫<b class='flag-5'>EEPROM</b>芯片介紹

    基于紫光同創(chuàng)PGL50H-6IFBG484的光端機(jī)方案

    基于紫光同創(chuàng)PGL50H-6IFBG484的光端機(jī)方案展示#小眼睛FPGA#紫光同創(chuàng)#國產(chǎn)
    發(fā)表于 11-02 17:44