紫光同创PGL22G开发平台试用连载(4)——用开源软件 opencores 上的 I2C master控制器去控制I2C接口

FPGA开发圈 2020-11-23 00:00

FPGA 芯片通过 I2C 总线连接 EEPROM 24LC04, I2C 的两根总线各上拉一个 4.7K的电阻到 3.3V,所以当总线上没有输出时会被拉高, 24LC04 的写保护没有使能,丌然 FPGA 会无法写入数据。因为在电路上 A0~A2 都为低,所以 24LC04 的设备地址为 0xA0。PGL12G 板子,是将FPGA芯片作为IIC 主站设备,将EEPROM作为了个从站设备;

原理图:

I2C 设备的操作可分为写单个存储字节,写多个存储字节,读单个存储字节和读多个存储字节。

①总线空闲状态
I2C 总线总线的 SDA 和 SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

②启动信号(Start)
在时钟线 SCL 保持高电平期间,数据线 SDA 上的电平被拉低(即负跳变),定义为 I2C 总线总线的启动信号,它标志着一次数据传输的开始。启动信号是由主控器主动建立的,在建立该信号前 I2C 总线必须处于空闲状态,在时钟线 SCL 保持高电平期间,数据线 SDA 被释放,使得 SDA 返回高电平(即正跳变),称为 I2C 总线的停止信号,它标志着一次数据传输的终止。停止信号也是由主   控器主动建立的,建立该信号后, I2C 总线将返回空闲状态。

④数据位传送
在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(戒同步控制),即在 SCL 串行时钟的配合下,在 SDA 上逐位地串行传送每一位数据。迚行数据传送时,在 SCL 呈现高电平期间,SDA 上的电平必须保持稳定,低电平为数据 0,高电平为数据 1。只有在 SCL 为低电平期间,才允许 SDA 上的电平改变状态。

⑤应答信号( ACK 和 NACK)
I2C 总线上的所有数据都是以 8 位字节传送的,収送器每収送一个字节,就在时钟脉冲 9 期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位( ACK 简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位( NACK),一般表示接收器接收该字节没有成功。对于反馈有效应答位 ACK 的要求是,接收器在第 9 个时钟脉冲乊前的低电平期间将 SDA 线拉低,并且确保在该时钟的高电平期间为稳定的低电平。如果接收器是主控器,则在它收到最后一个字节后,収送一个 NACK 信号,以通知被控収送器结束数据収送,并释放 SDA 线,以便主控接收器収送一个停止信号。

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


扫码免费申请试用

推荐阅读

紫光同创PGL22G开发平台试用连载(3)——驱动OV5640 摄像头实现sobel算子边缘检测算法

紫光同创PGL22G开发平台试用连载(2)——基于SD卡的音频MP3播放器

紫光同创PGL22G开发平台试用连载(1)——开发板硬件软件初步评估篇

紫光同创PGL22G开发平台试用连载-(4)以太网测试工程三

紫光同创PGL22G开发平台试用连载(3)---以太网测试工程二

紫光同创PGL22G开发平台试用连载-(2)以太网测试工程一

紫光同创PGL22G开发平台试用连载-(1)软硬件初步体验

紫光同创PGL22G开发平台试用连载(8)---程序密码之程序篇

紫光同创PGL22G开发平台试用连载(7)---程序密码之理论篇

紫光同创PGL22G开发平台试用连载(6)---边缘检测之综合篇

紫光同创PGL22G开发平台试用连载(5)---边缘检测之算法篇

紫光同创PGL22G开发平台试用连载(4)---边缘检测之串口通信篇

紫光同创PGL22G开发平台试用连载(3)---重点功能初探

紫光同创PGL22G开发平台试用连载(2)---基本流程dome

紫光同创PGL22G开发平台试用连载(1)---软件和器件

紫光同创PGL22G开发平台试用连载(1)-FPGA参数分析和对比

紫光同创PGL22G开发平台试用连载(2)---PDS软件试用

紫光同创PGL22G开发平台试用连载(3)---在FPGA上实现DW8051 MCU


FPGA开发圈 这里介绍、交流、有关FPGA开发资料(文档下载,技术解答等),提升FPGA应用能力。
评论
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 65浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 104浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 104浏览
  • 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进步,对于图像数据的采集、处理和分析的需求日益增长,这不仅要求我们拥有高性能的相机硬件,还要求我们能够高效地集成和测试各种算法。我们探索了一种多源相机数据采集与算法集成测试方案,能够满足不同应用场景下对图像采集和算法测试的多样化需求,确保数据的准确性和算法的有效性。一、相机组成相机一般由镜头(Lens),图像传感器(Image
    康谋 2024-12-12 09:45 63浏览
  • 首先在gitee上打个广告:ad5d2f3b647444a88b6f7f9555fd681f.mp4 · 丙丁先生/香河英茂工作室中国 - Gitee.com丙丁先生 (mr-bingding) - Gitee.com2024年对我来说是充满挑战和机遇的一年。在这一年里,我不仅进行了多个开发板的测评,还尝试了多种不同的项目和技术。今天,我想分享一下这一年的故事,希望能给大家带来一些启发和乐趣。 年初的时候,我开始对各种开发板进行测评。从STM32WBA55CG到瑞萨、平头哥和平海的开发板,我都
    丙丁先生 2024-12-11 20:14 58浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-11 17:58 75浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 60浏览
  • 铁氧体芯片是一种基于铁氧体磁性材料制成的芯片,在通信、传感器、储能等领域有着广泛的应用。铁氧体磁性材料能够通过外加磁场调控其导电性质和反射性质,因此在信号处理和传感器技术方面有着独特的优势。以下是对半导体划片机在铁氧体划切领域应用的详细阐述: 一、半导体划片机的工作原理与特点半导体划片机是一种使用刀片或通过激光等方式高精度切割被加工物的装置,是半导体后道封测中晶圆切割和WLP切割环节的关键设备。它结合了水气电、空气静压高速主轴、精密机械传动、传感器及自动化控制等先进技术,具有高精度、高
    博捷芯划片机 2024-12-12 09:16 69浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 80浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 95浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦