FPGA:SD卡

时间:2024-01-08来源:EPW编译

SD 卡可轻松与 FPGA 连接。我们的SD卡项目分为两部分:

SD 卡 1 - FPGA 连接

SD 卡可轻松与 FPGA 连接。 它们有不同的尺寸(标准、迷你和微型),但在电气上它们的工作方式相同。 让我们关注 micro-SD 卡,因为它们非常小且现在很受欢迎。

Micro-SD 卡有 8 个针脚。首先,电源连接在引脚 4 和 6 上。

然后,您需要 3 到 6 个 FPGA 引脚连接,具体取决于您决定使用的操作模式。

SPI模式

在SPI模式下,DI/DO线是单向的。这意味着:

SPI模式通常用于微控制器系统。 有了FPGA,我们可以更好地为...

SD 模式

在 SD 模式下,CMD/DATx 线是双向的。这意味着:

例如,我们需要在 SD 1 位模式下进行这些连接:

SD 卡 2 - 协议

SD 卡使用命令/响应方案。 例如,命令“17”允许读取卡内存的一个扇区(512字节)。 所有通信都与主机提供的时钟同步(在本例中为FPGA)。 启动时时钟应低于 400KHz,并且在一些卡初始化后可以更快。

所有命令和大多数响应的长度为 48 位(6 字节)。 扇区数据以 512 字节的倍数表示。 例如,这里有一个简单的代码,允许向 SD 卡发送命令。

// we use the Xylo-E FX2 FIFO2 as data source for "commanding" an SD card
// the SD card is used in one-bit SD mode

// first we are going to drive the SD card at a much slower speed than the FPGA itself
// let's create a "shift" signal that is asserted once every 64 clock periods
reg [5:0] cnt=0;  
always @(posedge clk) cnt <= cnt+1;
reg shift=0;  
always @(posedge clk) shift <= &cnt;

// now we serialize every byte we get from the FIFO2reg [2:0] cntbit=0;
reg shifting=0;
reg [7:0] data=0;
always @(posedge clk) if(shift) shifting <= shifting ? ~(&cntbit & ~FIFO2_data_available) : FIFO2_data_available;
always @(posedge clk) if(shift & shifting) cntbit <= cntbit+1;
always @(posedge clk) if(shift) data <= (FIFO2_data_available & (~shifting | &cntbit)) ? FIFO_DATAIN : {data[6:0],1'b0};
assign FIFO_RD = shift & (~shifting | &cntbit);

// and send the serial data to the SD cardassign SD_CLK = cnt[5];
assign SD_CMD = shifting ? data[7] : 1'bZ;

有些命令没有回复,而其他一些命令会在SD_DAT行发出响应。 例如,要初始化卡,我们从 CMD0 开始,然后是 CMD8:

  • CMD0 “GO_IDLE_STATE”

  • CMD8“SEND_IF_COND”,预期响应

以下是使用 Xylo-E 演示软件录制的会话:

❌SD.exeUSB driver opened
CMD0 400000000095
CMD8 48000001AA87... OK
CMD55 770000000065... OK
CMD41 694018000019... OK
CMD55 770000000065... OK
CMD41 694018000019... OK
SDHC/SDXC (high capacity) card
CMD2 42000000004D... OK
ASTC  3.4
CMD3 430000000021... OK
RCA=0100
CMD7 4700010000DD... OK
CMD13 4D0001000053... OK
CMD17 510000000055... OK
FAT32 detected
Reading 1 sector(s) starting at 8192
CMD17 5100002000B1... OK
Directory /

经过一些初始化后,卡接受 CMD17“READ_SINGLE_BLOCK”,以便可以从卡中读取文件。

关键词: FPGA SD卡

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版