失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > SD-Host SD_CLK模块

SD-Host SD_CLK模块

时间:2024-06-19 11:21:15

相关推荐

SD-Host  SD_CLK模块

hclk的分频电路,得到的分频时钟作为sd卡时钟。

SD 2.0规范中要求SD卡在identification阶段时钟频率不得超过400KHz,而在数据传输阶段时钟频率最高可达50MHz(高速传输模式),因此SD卡控制器输出的SD CLK频 必须是可控的。

由于系统AHB的时钟频率通常远高于SD卡工作的时钟频率, 因此可将AHB时钟分频的来实现对SDCLK频率的控制。 除控制SDCLK频率外,该模块还可以在适当的时候将SD CLK输出锁定为低电平,并在恰当的时候解除锁定。

如在发送数据时如果CPU向FIFO 中填充数据的速度不够快将导致FIFO被读空,若继续输出SDCLK时钟脉冲将导 致SD卡采到错误的数据,此时SDCLK控制模块会将SDCLK输出锁定在低电平使传输暂停,直到CPU向FIFO中填入新数据后再输出SD CLK时钟

信号描述:

代码实现:

module sd_clk(hclk,hrst_n,in_clk_divider,in_sd_clk_enable,hw_stop_clk,out_sd_clk_dft,fifo_sd_clk,in_TestMode);input in_TestMode;input hclk;input hrst_n;input [7:0] in_clk_divider;input in_sd_clk_enable;input hw_stop_clk;outputfifo_sd_clk;outputout_sd_clk_dft;reg out_sd_clk;reg [7:0] div_counter;wire divider_0_val;wire out_sd_clk_tp;wire clk_ena_stop;assign divider_0_val = (in_clk_divider == 8'b0 );assign clk_ena_stop = (!in_sd_clk_enable || hw_stop_clk);always@(posedge hclk or negedge hrst_n) beginif(!hrst_n)out_sd_clk <= 8'b0;else if (clk_ena_stop)out_sd_clk <= out_sd_clk;else if (divider_0_val)out_sd_clk <= hclk;else if (div_counter == in_clk_divider-1)out_sd_clk <= ~out_sd_clk;endalways@(posedge hclk or negedge hrst_n) beginif(!hrst_n)div_counter <= 8'b0;else if ( clk_ena_stop || div_0_val)div_counter <= 8'b0;else beginif(div_counter == in_clk_divider-1)div_counter <= 8'b0;elsediv_counter <= div_counter + 1;endendassign fifo_sd_clk = divider_0_val? hclk : out_sd_clk;assign out_sd_clk_dft = (!in_sd_clk_enable || hw_stop_clk) ? 1'b0 : (in_TestMode) ? hclk : (in_clk_divider == 8'b0) ?hclk : out_sd_clk;endmodule

如果觉得《SD-Host SD_CLK模块》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。