【RA-Eco-RA4E2-64PIN开发板试用】I2C与I3C通信协议的应用。


瑞萨RA4E2开发板集成32位的Arm Cortex-M33单片机,
时钟主频:100MHz,
128KB字节的Flash存储,
40KB字节的SRAM静态内存,
支持I3C总线接口应用

封装型式为:QFP-64pin管脚
其中第22脚和第23脚用于IIC接口,对应的编号为:P206和P205,
当用于I2C时,需要将P205和P206输出信号电平,用两个1.5KΩ欧姆电阻拉高至3.3V,
用于I3C时,P205和P206输入信号不需要拉高设置。

I2C设备可以接带日历功能的时钟芯片SD2405ALPI模块,
也可以接AT24C64D这样的EEPROM可擦写的存储设备。
以下代码的作用就是生成驱动I2C操作的驱动时钟dri_clk=1Mhz。
系统时钟是50MHz,因此对系统分频就需要计算到25的计数器。
assign语句得到clk_divide=50,这里的>>2'd2,是1/4倍频的作用。
else if()中的语句是得到clk_cnt=25,这里的clk_divide[8:1]和上面的作用一样,是1/2北平。
这里得到计数器25,每0~24对系统时钟翻转一次,从而得到50分频的驱动时钟dri_clk用于后续操作。
Parameter CLK FREQ =26'd50 000 000,//模块输入的时钟频率
Parameter I2C FREQ =18'd250 000 //IIC_SCL的时钟频率
Assign clk_divide=(CLK FREQ/I2C FREQ)>>2'd2 ; //模块驱动时钟的分频系数
//生成IIC的SCL的四倍频率的驱动时钟用于驱动iic的操作
Always @(posedge clk or negedge rst_n)begin
if(!rst_n) begin
Dri_clk <=1'b0;
Clk_cnt<= 10'd0:
end
else if(clk_cnt==(clk divide[8:1]-9'd1))begin
Clk_cnt<= 10'd0;
Dri_clk<= ~dri clk;
end
else
Clk_cnt<= clk cnt + 10'b1;
end
|