verilog中24LC04B iic(i2c)读写通信设计步骤,以及程序常见写法错误。

本文介绍了如何在Verilog中实现24LC04B I2C通信的详细步骤,包括写入和读取流程。通过分析时序,确定100kHz时钟符合要求,并提供了完整的写入和读取数据的流程图及Verilog代码实现。
摘要由CSDN通过智能技术生成

板子使用的是黑金的是xilinx spartan—6开发板,首先准备一份24LC04B芯片资料,读懂资料后列出关键参数。

如下:

1、空闲状态为SDA和SCL都为高电平

2、开始状态为:保持SCL,SDA高电平不变,SDA 保持最少4us,之后SDA为低,保持最少4us

3、结束状态为:保持SCL为高、SDA为低电平不变,保持最少4us,SDA为高保持最少4us

4、时间间隔4us要求来源(上面数据为24LC04,下面数据为24LC04B)

初步估算了一下时钟要求,100k(10us)符合要求,由于start有效位是在SCL高电平中间,所以SCL的上升沿和下降沿之间可以假设2个时钟周期,由上升沿触发,之后可以开始写程序了。

 

 一、写流程


写寄存器的标准流程为:
1.    Master发起START
2.    Master发送I2C addr(7bit)和w操作0(1bit),等待ACK
3.    Slave发送ACK
4.    Master发送reg addr(8bit),等待ACK
5.    Slave发送ACK
6.    Master发送data(8bit),即要写入寄存器中的数据,等待ACK
7.    Slave发送ACK
8.    第6步和第7步可以重复多次,即顺序写多个寄存器
9.    Master发起STOP

二、数据写入芯片时间

由芯片资料得到3ms,为了方便程序中设置为4ms,其中为了方便调试,放入了很多测试点以及led灯显示。

三、读流程

1.    Master发送I2Caddr(7bit)和 w操作0(1bit),等待ACK
2.    Slave发送ACK
3.    Master发送reg addr(8bit),等待ACK
4.    Slave发送ACK
5.    Master发起START
6.    Master发送I2C addr(7bit)和R读1位,等待ACK
7.    Slave发送ACK
8.   Slave发送data(8bit),即寄存器里的值
9.   Master发送ACK
10.    第8步和第9步可以重复多次,即顺序读多个寄存器

四、程序

top和iic文件,时钟文件自己写吧,采用10us为周期的时钟。

top文件

`timescale 1ns / 1ps

module model(
                        CLK_50M,
                        reset,
                        led,
                        SDA,SCL,
                        clk_1s,
                        clk_100ms,
                        clk_10ms,
                        clk_1ms,
                        clk_10us,
                        bit_state,
                        write_down,read_down,
                        test0,test1,test2,test3,test4,test5,test6,test7,test8,test9,
                        read_data
                        
);
input CLK_50M,reset;
output SCL,write_down,read_down,test0,test1,test2,test3,test4,test5,test6,test7,test8,test9;
output [3:0]led;
output [7:0]bit_state;
output [7:0]read_data;
inout SDA;
output clk_1s,clk_100ms,clk_10ms,clk_1ms,clk_10us;
//output [3:0] led; 
//output [5:0] sel;              
//output [7:0] LED;
wire clk_1s,clk_100ms,clk_10ms,clk_1ms,clk_10us;
//分析仪采样频率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值