在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

開源軟件opencores I2C master控制器控制I2C接口操作原理

YCqV_FPGA_EETre ? 來源:FPGA開發(fā)圈 ? 作者:FPGA開發(fā)圈 ? 2020-11-26 14:30 ? 次閱讀

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

原理圖:

I2C 設(shè)備的操作可分為寫單個(gè)存儲(chǔ)字節(jié),寫多個(gè)存儲(chǔ)字節(jié),讀單個(gè)存儲(chǔ)字節(jié)和讀多個(gè)存儲(chǔ)字節(jié)。

①總線空閑狀態(tài)
I2C 總線總線的 SDA 和 SCL 兩條信號(hào)線同時(shí)處于高電平時(shí),規(guī)定為總線的空閑狀態(tài)。此時(shí)各個(gè)器件的輸出級(jí)場效應(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),在時(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ù)。迚行數(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é)傳送的,収送器每収送一個(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é)后,収送一個(gè) NACK 信號(hào),以通知被控収送器結(jié)束數(shù)據(jù)収送,并釋放 SDA 線,以便主控接收器収送一個(gè)停止信號(hào)。

module i2c_eeprom_test(

input sys_clk,

input rst_n,

input key1,

inout i2c_sda,

inout i2c_scl,

output [3:0] led

);

localparam S_IDLE = 0;

localparam S_READ = 1;

localparam S_WAIT = 2;

localparam S_WRITE = 3;

reg[3:0] state;

wire button_negedge;

reg[7:0] read_data;

reg[31:0] timer;

wire scl_pad_i;

wire scl_pad_o;

wire scl_padoen_o;

wire sda_pad_i;

wire sda_pad_o;

wire sda_padoen_o;

reg[ 7:0] i2c_slave_dev_addr;

reg[15:0] i2c_slave_reg_addr;

reg[ 7:0] i2c_write_data;

reg i2c_read_req;

wire i2c_read_req_ack;

reg i2c_write_req;

wire i2c_write_req_ack;

wire[7:0] i2c_read_data;

assign led = ~read_data[3:0];

ax_debounce ax_debounce_m0

(

.clk (sys_clk),

.rst (~rst_n),

.button_in (key1),

.button_posedge (),

.button_negedge (button_negedge),

.button_out ()

);

always@(posedge sys_clk or negedge rst_n)

begin

if(rst_n == 1'b0)

begin

state <= S_IDLE;

i2c_write_req <= 1'b0;

read_data <= 8'h00;

timer <= 32'd0;

i2c_write_data <= 8'd0;

i2c_slave_reg_addr <= 16'd0;

i2c_slave_dev_addr <= 8'ha0;//1010 000 0

i2c_read_req <= 1'b0;

end

else

case(state)

S_IDLE:

begin

if(timer >= 32'd12_499_999)//250ms

state <= S_READ;

else

timer <= timer + 32'd1;

end

S_READ:

begin

if(i2c_read_req_ack)

begin

i2c_read_req <= 1'b0;

read_data <= i2c_read_data;

state <= S_WAIT;

end

else

begin

i2c_read_req <= 1'b1;

i2c_slave_dev_addr <= 8'ha0;

i2c_slave_reg_addr <= 16'd0;

end

end

S_WAIT:

begin

if(button_negedge)

begin

state <= S_WRITE;

read_data <= read_data + 8'd1;

end

end

S_WRITE:

begin

if(i2c_write_req_ack)

begin

i2c_write_req <= 1'b0;

state <= S_READ;

end

else

begin

i2c_write_req <= 1'b1;

i2c_write_data <= read_data;

end

end

default:

state <= S_IDLE;

endcase

end

assign sda_pad_i = i2c_sda;

assign i2c_sda = ~sda_padoen_o ? sda_pad_o : 1'bz;

assign scl_pad_i = i2c_scl;

assign i2c_scl = ~scl_padoen_o ? scl_pad_o : 1'bz;

i2c_master_top i2c_master_top_m0

(

.rst(~rst_n),

.clk(sys_clk),

.clk_div_cnt(16'd500), //Standard mode:100Khz

// I2C signals

// i2c clock line

.scl_pad_i(scl_pad_i), // SCL-line input

.scl_pad_o(scl_pad_o), // SCL-line output (always 1'b0)

.scl_padoen_o(scl_padoen_o), // SCL-line output enable (active low)

// i2c data line

.sda_pad_i(sda_pad_i), // SDA-line input

.sda_pad_o(sda_pad_o), // SDA-line output (always 1'b0)

.sda_padoen_o(sda_padoen_o), // SDA-line output enable (active low)

.i2c_addr_2byte(1'b0),

.i2c_read_req(i2c_read_req),

.i2c_read_req_ack(i2c_read_req_ack),

.i2c_write_req(i2c_write_req),

.i2c_write_req_ack(i2c_write_req_ack),

.i2c_slave_dev_addr(i2c_slave_dev_addr),

.i2c_slave_reg_addr(i2c_slave_reg_addr),

.i2c_write_data(i2c_write_data),

.i2c_read_data(i2c_read_data),

.error()

);

endmodule

責(zé)任編輯:PSY

原文標(biāo)題:紫光同創(chuàng)PGL22G開發(fā)平臺(tái)試用連載(4)——用開源軟件 opencores 上的 I2C master控制器去控制I2C接口

文章出處:【微信公眾號(hào):FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    112

    文章

    16361

    瀏覽量

    178030
  • 開源軟件
    +關(guān)注

    關(guān)注

    0

    文章

    210

    瀏覽量

    15904
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8596

    瀏覽量

    151147
  • 操作
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    18872

原文標(biāo)題:紫光同創(chuàng)PGL22G開發(fā)平臺(tái)試用連載(4)——用開源軟件 opencores 上的 I2C master控制器去控制I2C接口

文章出處:【微信號(hào):FPGA-EETrend,微信公眾號(hào):FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    實(shí)現(xiàn)I2C總線控制器的VHDL源代碼

    I2C總線控制器 altera提供 The I2C Controller was designed for the MC68307 uC, provides a simplified
    發(fā)表于 05-20 10:25 ?251次下載

    I2C總線接口模塊設(shè)計(jì)

    本實(shí)驗(yàn)是基于EasyFPGA030的I2C總線接口模塊設(shè)計(jì),用EasyFPGA030開發(fā)套件通過I2C協(xié)議實(shí)現(xiàn)對(duì)二線制I2C串行EEPROM的讀寫
    發(fā)表于 11-02 17:01 ?41次下載

    LM3S系列微控制器I2C應(yīng)用文檔

    LM3S系列微控制器I2C應(yīng)用文檔基于LM5749的I2C從機(jī)功能,模擬24C02傳輸協(xié)議操作
    發(fā)表于 04-03 14:29 ?52次下載

    I2C總線在Linux系統(tǒng)中的驅(qū)動(dòng)設(shè)計(jì)

    介紹I2C總線的基本概念和工作原理,敘述I2C總線擴(kuò)展器件ZLG7290的功能特點(diǎn)。在以S3C2410為微控制器,ZLG7290為I2C總線
    發(fā)表于 12-29 16:52 ?40次下載

    I2C控制lP在成像系統(tǒng)中的應(yīng)用

    1 IP的硬件結(jié)構(gòu)及寄存 1.1 IP硬件結(jié)構(gòu) IP內(nèi)部結(jié)構(gòu)如圖1所示。主要由波特率時(shí)鐘寄存、寄存控制器、并行I/O
    發(fā)表于 07-01 09:10 ?1425次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>控制</b>lP在成像系統(tǒng)中的應(yīng)用

    基于CPLD的I2C總線接口設(shè)計(jì)

    在電路設(shè)計(jì)中,I2C總線是比較常用的兩線式串行通信方式,大多數(shù)的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備
    發(fā)表于 02-12 16:11 ?95次下載
    基于CPLD的<b class='flag-5'>I2C</b>總線<b class='flag-5'>接口</b>設(shè)計(jì)

    基于Verilog的I2C控制器的設(shè)計(jì)與綜合

    為滿足嵌入式系統(tǒng)中專用芯片功能不能達(dá)到系統(tǒng)要求的現(xiàn)狀,設(shè)計(jì)出一種功能可擴(kuò)展的I2C slave控制器,這種控制器與傳統(tǒng)的專用I2C芯片不同。專用的I
    發(fā)表于 10-25 16:58 ?60次下載
    基于Verilog的<b class='flag-5'>I2C</b><b class='flag-5'>控制器</b>的設(shè)計(jì)與綜合

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)i2c總線操作
    發(fā)表于 05-17 11:09 ?35次下載

    I2C總線控制器的工作原理及EEPROM的Linux驅(qū)動(dòng)程序的設(shè)計(jì)

    、器件封裝形式小、通信速率較高等優(yōu)點(diǎn)。在主從通信中,可有多個(gè)I2C總線器件同時(shí)接到I2C總線上,通過地址來識(shí)別通信對(duì)象。筆者在開發(fā)基于MPC8250的嵌入式Linux系統(tǒng)的過程中發(fā)現(xiàn)I2C總線在嵌入式系統(tǒng)中應(yīng)用廣泛,
    發(fā)表于 10-26 15:37 ?7次下載
    <b class='flag-5'>I2C</b>總線<b class='flag-5'>控制器</b>的工作原理及EEPROM的Linux驅(qū)動(dòng)程序的設(shè)計(jì)

    i2c總線用來做什么_i2c總線數(shù)據(jù)傳輸過程

    I2C總線控制器為微控制器或微處理提供控制I2C總線的接口
    發(fā)表于 11-24 14:16 ?7277次閱讀

    硬件I2C與模擬I2C

    配置;而軟件I2C是沒有寄存這個(gè)概念的。 軟件I2C一般是使用GPIO管腳,用軟件
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    Gowin I2C Master/Slave用戶指南

    Gowin I2C Master 和 Slave 用戶指南主要包括功能簡介、信號(hào)定義、工 作原理、實(shí)例化等,旨在幫助用戶快速了解 Gowin I2C Master IP 和 Slav
    發(fā)表于 09-15 10:07 ?1次下載
    Gowin <b class='flag-5'>I2C</b> <b class='flag-5'>Master</b>/Slave用戶指南

    Linux I2C驅(qū)動(dòng)入門知識(shí)科普

    I2C 總線驅(qū)動(dòng), I2C總線驅(qū)動(dòng)就是SOC的 I2C控制器驅(qū)動(dòng),也叫做 I2C適配器驅(qū)動(dòng)。
    的頭像 發(fā)表于 12-29 13:59 ?1690次閱讀

    I2C控制器驅(qū)動(dòng)介紹

    (控制器)抽象成 i2c_adapter。 對(duì)于一個(gè) I2C 適配器,肯定要對(duì)外提供讀寫 API 函數(shù),設(shè)備驅(qū)動(dòng)程序可以使用這些 API 函數(shù)來完成讀寫操作
    的頭像 發(fā)表于 07-22 15:38 ?1493次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>控制器</b>驅(qū)動(dòng)介紹

    I2C子系統(tǒng)SW Architecture

    適配器(控制器)驅(qū)動(dòng),這里用到兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu):i2c_adapter 和 i2c_algorithm。其中,Linux 內(nèi)核將 SOC 的 I2C 適配器(
    的頭像 發(fā)表于 07-22 16:01 ?955次閱讀
    <b class='flag-5'>I2C</b>子系統(tǒng)SW Architecture
    主站蜘蛛池模板: 香蕉婷婷| 激情网五月| se94se亚洲欧美在线| 国产午夜小视频| 有码日韩| 国产色噜噜| 国产小视频在线观看| 综合婷婷丁香| 狠狠激情五月综合婷婷俺| 久久夜夜视频| 亚洲香蕉毛片久久网站老妇人| 狠狠色狠狠色综合| 成人午夜视频免费看欧美| 亚洲人成电影在线小说网色| 国产精品李雅在线观看| 91福利免费视频| 手机在线小视频| 午夜一级影院| 老司机精品视频免费| 开心激情小说| 国产大片黄在线观看| 午夜影网| 亚欧精品一区二区三区| 欧美xxxxbbbb在线播放| 免费国产99久久久香蕉| 夜夜橹橹网站夜夜橹橹| 第一页综合| 天天翘夜夜洗澡天天做| 久久精品国产四虎| 在线视频永久在线视频| 色妞色综合久久夜夜| 日日搞夜夜操| 亚洲jjzzjjzz在线观看| 一级特黄视频| 国产美女精品一区二区三区| 国产乱码免费卡1卡二卡3卡四| 黑人性xx| 黄色短视频免费看| 岛国大片在线播放| 明日花绮罗在线观看| jiucao在线观看精品|