SCCB协议Verilog HDL程序

这是一个使用Verilog HDL编写的SCCB协议控制器模块,适用于FPGA。该模块包含了SCCB协议的完整传输过程,包括开始信号、写操作、读操作以及结束信号的时序控制。

/*
SCCB协议  xyt-2015-11-11
SccbCter SccbCter(clk,sda,scl,addr,reg_addr,data,go,mode,read_data);
clk:输入50M时钟
sda:数据总线,注意需要设置上拉
scl:时钟总线
addr:写器件地址,前7位地址为+1位读写位,0写,1读
reg_addr:写寄存器地址,8位
data:写数据,8位
go:每当go上升沿进行一次操作,操作模式为输入3位mode中
mode:操作模式,00三相写,01二相写,10二相读,11二相读
read_data:当二相读时才会改变值,为读取数据寄存器,共8位
*/
module SccbCter(
clk,  //50M
sda_io,
scl,
addr,
reg_addr,
data,
go,    //上升沿发送
mode_i,  //2bit传送状态,00为三相写,01为二相写,10为二相读
read_data //读取数据
);

input clk;
inout sda_io;
output reg scl;
input [7:0]addr;   //前8位地址,其中最高位为读写控制位0w,1r
input [7:0]reg_addr;//前8位寄存器地址
input [7:0]data;//前8位数据位
input go;
input [1:0]mode_i;
reg [1:0]mode;
output reg [7:0]read_data;//前7位为读取数据有效位,最后一位为N/A位,主机必须置1
reg [7:0]buff;

//当该寄存器为0时sda_io输出sda
reg en_input,sda;
assign sda_io=en_input?1'bz:sda;

reg [8:0]current,next;
reg [5:0]cter; //位移计数器
reg [30:0]timcter;  //时间计数器

parameter idle=9'd0;
parameter start1=9'd1;
parameter start2=9'd2;
parameter start3=9'd3;
parameter start4=9'd4;
parameter start5=9'd5;

parameter last1=9'd6;
parameter last2=9'd7;
parameter last3=9'd8;
parameter last4=9'd9;
parameter last5=9'd10;
parameter last6=9'd11;

parameter w3t1=9'd12;
parameter w3t2=9'd13;
parameter w3t3=9'd14;
parameter w3t4=9'd15;
parameter w3t5=9'd16;
parameter w3t6=9'd17;
parameter w3t7=9'd18;
parameter w3t8=9'd19;
parameter w3t9=9'd20;
parameter w3t10=9'd21;
parameter w3t11=9'd22;
parameter w3t12=9'd23;
parameter w3t13=9'd24;
parameter w3t14=9'd25;
parameter w3t15=9'd26;
parame
1、SCCB协议简述 SCCB协议有两线也有三线,两线为SIO_C与SIO_D,三线为SIO_E、SIO_C与SIO_D。 2线的SCCB总线只能是一个主器件对一个从器件控制,但3线SCCB接口可以对多个从器件控制,因此当只有一个从机(slave device)时用两线,有多个从机时用三线。 其中SIO_C只能由主机配置(FPGA),SIO_D是一个三态门,双向数据线,既可以由主机控制,也可以由从机控制。 2、数据传输 当写数据到从机被定义为写传输(write transmission),当从机中读数据被定义为读传输 (read transmission),每一个传输都要有开始和结束来释放总线(start + sotp) 完整的数据传输包括两个或三个阶段,每一个阶段包含9位数据,其中高8位为所要传输的数据,最低位根据器件所处情况有不同的取值: 总结如下: 每一个阶段组成:8位数据+don't care/NA 如果是主机发送数据,即进行写操作,第九位就为don't care 如果是从机发送数据,即为读操作,第九位就为NA. 在进行主器件写操作时,全部阶段的最低位均是Don’t care bit 在进行主器件读操作时,第一阶段的最低位是自由位,第二阶段的最低位为NA,请结合第三部分好好理解 3、SCCB的读写操作 写操作是三个阶段构成一个传输的写,每一阶段都是9位,具体如下 ID地址(7位ID地址+1位读写控制+don't care) + 要写的寄存器地址(8位寄存器地址+don't care) +要写入的数据(8位数据+don't care) 要强调的是ID地址,写为8'h42,读为8'h42 , 8'h42即ID地址的读写控制位为0,8'h43即ID地址的读写控制位为1 总结为: start + ID地址(42)+ 寄存器地址 + 数据 + stop
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值