FPGA-SDcard-Reader icon indicating copy to clipboard operation
FPGA-SDcard-Reader copied to clipboard

fpga-sdcard-reader按照扇区读卡问题

Open Neverforgetme opened this issue 2 years ago • 1 comments

大佬好,我是刚入学学习artix-7 100t的新手。 问题是,利用您(1bit sd 总线制)fpga-sdcard-reader按照扇区读卡,card_state插入sdcard slot卡槽瞬间,显示是0011对应状态为acmd41 获取sd卡电压测试当前sd卡的协议 按下reset复位以后,显示0010 对应状态cmd55_41,我google或baidu给我的解释时我买的sdcard不被100tfpga所兼容 (32gb sandisk牌 sdhc uhs-1) 但是我又利用官方文档中的sd卡读取top.bit文件,发现程序也能运行,现在我就迷茫了,为什么一直卡在了 cmd55_41状态,一直在检测sd卡电压? 一开始我以为是您用的ddr我用的100t引起的问题,可是我对照了官方xdc发现这个sd卡应用程序中使用xdc是一样的

我利用您的iverilog仿真程序可以显示出来hello world it works 现在我也不太清楚哪里出现了问题,硬件出问题了,还是程序不适应我的100tfpga? image

image

Neverforgetme avatar Jul 28 '22 04:07 Neverforgetme

您好,我刚刚上板测了一下,确实有卡在 ACMD41 的问题。我在今年4月对本库进行规范化修改,但当时没有实物所以没有测试,只是进行了仿真,没想到改出了问题…… 我现在初步定位问题出在 sdcmd_ctrl.sv ,这个问题必须解决 ,但我一个月后才有时间。 所以目前:

  1. 暂时地,我已将本库回退到 2021 年的旧版,我确定它能在 SDv1, SDv2, SDHCv2 上运行,且在 Xilinx 和 Altera 上都测试过。

  2. 推荐一下这个库: https://github.com/lizhirui/AXI-SDCard-High-Speed-Controller

最后,期待您加我的QQ聊一下: 629708558

WangXuan95 avatar Aug 28 '22 02:08 WangXuan95

大佬好,一个月之期已到,我想您应该有些时间了,我是这么解决acmd41问题的,使用256mb 初代版本老sdcard,我发现一切运行正常(可以正常读取文件并且显示文本),所以我怀疑是sdcmd_ctrl.sv对SDHC/XC 2.0代码的部分修改导致了acmd41的bug出现,我建议代码可以增加一些注释并且补上状态图,一个假期看的真的是脑子痛的厉害 祝您学业进步或是工作顺利!!! image

Neverforgetme avatar Sep 26 '22 02:09 Neverforgetme

//-------------------------------------------------------------------------------------------------------- // Module : sd_reader // Type : synthesizable, IP's top // Standard: SystemVerilog 2005 (IEEE1800-2005) // Function: A SD-host to initialize SDcard and read sector // Compatibility: CardType : SDv1.1 , SDv2 not for SDHCv2. Unknown bug inside! //--------------------------------------------------------------------------------------------------------

ACMD41 : if(~timeout && ~syntaxe && resparg[31]) begin cardtype <= (cardtype==SDv1Maybe) ? SDv1 : (resparg[30] ? SDHCv2 : SDv2); card_state <= CMD2; //根据我的sdhc 测试,此时 ~timeout/ ~syntaxe /resparg[31]全部都为1,但card_state就是无法跳转到CMD55_41 //After my test using sdhc ,~timeout/ ~syntaxe /resparg[31] are all one but card_state can not jump to CMD55_41 end else card_state <= CMD55_41;

Neverforgetme avatar Sep 26 '22 02:09 Neverforgetme

你好,我已经找出原因了,目前已更新,能在 SDv1, SDv2, SDHCv2 卡上跑了。

问题出在在SD模式下,需要把三个我没用到的引脚 sddat[3:1] 拉高,这样它才能进入 SD 模式,否则它进的是 SPI 模式。

WangXuan95 avatar Sep 28 '22 12:09 WangXuan95