SD卡时钟切换问题
最近在搞fpga的sd卡读写,使用的是SD bus模式,不过在时钟切换方面出了点问题,如下图,sd卡有两种频率,fod(用于初始化),fpp(用于数据传输).SD模式的初始化流程如下:
如果初始化和数据传输都使用fod的话,一切都没有问题,能够正常读写数据.
但是这样子的话读写速度太慢了,只要400KHz.所以我在使用fod完成初始化即到达cmd3后就切换时钟,使用25MH的.但是,切换时钟后发送读指令cmd17后,虽然有返回r1,,但是data线上却没有数据传过来,一直为高电平.
这是发送cmd17后的时序图,里面我把data0连到了led以便观察:
请问哪位大虾知道哪里出现问题了? learningAVR 发表于 2012-12-23 15:25 static/image/common/back.gif
对了.我在SD卡里面放的数据时"00 01 02 03 04 05 06 07 08 09 0A 0B .......",从波形可以看出,数据时没什么 ...
SD_DAT0是不是连接到FPGA pin上看到的波形?FPGA这边采样AD_DAT0的Timing是不是有问题呢 400kHz只是在初始化SD卡时候使用的
fpp在发送Send_CSR(CMD9)后才切换, fpp也并非总是25MHz
CSR寄存器中的TRAN_SPEED会指明SD card支持的speed
SD Host应该通过TRAN_SPEED来确定fpp的频率 我试了一下,发送了cmd9后TRAN_SPEED是32H,说明最高支持25M的时钟,于是我增加了cmd4设置DSR,然后才改变时钟,不过还是不行.后来我把时钟频率慢慢降低,发现降到2M的时候才可以,再提高就不行了.哦,对了我的电路里没有增加10pf的去耦电容,这个有没有关系? CMD9之后 SD卡进入Standby mode,尝试使用CMD7 CMD7我用了但是,貌似切换时钟后就cmd7就没有打出来了
围观!
个人感觉25M估计是达不到的2M也太低了估计能高点 CMD7发不出来,有确认过SD clk的频率吗?
SD clk应该是FPGA控制切换的, FPGA时钟源是多少Hz? 在上面的工程中,FPGA的时钟源是100M,所以提供给sd卡的时钟是10M,用示波器量了SD卡的时钟管脚,的确是10M,只不过波形不是很平整. 难道是这种时钟切换方法有问题? SD clk 10MHz不平整是指有glitch,400kHz或2MHz也存在这种不平整吗?
CMD设计应该是与SD clk同步的,因此控制逻辑应该是一致的啊 只要时钟没问题,不至于连CMD都发不出来啊 如果此时仍然使用400kHz SD clk,CMD7能否发送 NemoGu 发表于 2012-11-28 00:41 static/image/common/back.gif
SD clk 10MHz不平整是指有glitch,400kHz或2MHz也存在这种不平整吗?
CMD设计应该是与SD clk同步的,因此控 ...
不止是边缘有毛刺,就是高低电平不是横线,而是像一个波浪那样子的。400k的时候只是电平切换的时候有毛刺而已。 NemoGu 发表于 2012-11-28 01:02 static/image/common/back.gif
如果此时仍然使用400kHz SD clk,CMD7能否发送
使用低频的话是没问题的,我试过初始化和传输数据都用2M也是没问题的。 这样看来是SD clk的问题啊
仿真时候 2MHz以上 能看的毛刺吗?
PCB layout有检查吗? 本帖最后由 learningAVR 于 2012-12-1 16:18 编辑
NemoGu 发表于 2012-11-29 16:31 static/image/common/back.gif
这样看来是SD clk的问题啊
仿真时候 2MHz以上 能看的毛刺吗?
PCB layout有检查吗? ...
这是2M和10M的时钟管脚的波形,貌似区别很大:
我只负责软件程序的开发,pcb不是我做的,pcb layout这方面我不是很清楚.请问要检查哪方面的东西,去耦电容?布线? 千山万水js 发表于 2012-12-3 22:55 static/image/common/back.gif
哇都用vhdl写的。我用的是opencores上的一个ip核,很难调试
很难调试但还是可以弄的,我这个都不知道出了什么问题...... learningAVR 发表于 2012-12-1 14:41 static/image/common/back.gif
这是2M和10M的时钟管脚的波形,貌似区别很大:
10M的波形看起来也还可以啊,10MHz时候SD CMD的波形有看过吗?
能否多试验几张其他的SD card, 现在试验中无法切换SD clk的SD card在读卡器上能否正常切换SD clk? NemoGu 发表于 2012-12-4 17:42 static/image/common/back.gif
10M的波形看起来也还可以啊,10MHz时候SD CMD的波形有看过吗?
能否多试验几张其他的SD card, 现在试验中 ...
不好意思,最近忙别的事情去了,好久没弄SD卡,那张卡在电脑上读写是没问题的. learningAVR 发表于 2012-12-14 21:27 static/image/common/back.gif
不好意思,最近忙别的事情去了,好久没弄SD卡,那张卡在电脑上读写是没问题的. ...
SD Specification所说的"The clock rate is also switched from fOD to fPP at that point"中"at that point"应该是指在Data Transfer Mode
所以当CMD7将Stand-by Mode切换到Data Transfer Mode之后, 才能切换SD_CLK时钟频率
这样试试看 NemoGu 发表于 2012-12-14 22:35 static/image/common/back.gif
SD Specification所说的"The clock rate is also switched from fOD to fPP at that point"中"at that po ...
貌似还是不行,切换时钟后,发送读一块指令有返回,状态位没错,但是数据线就是没有数据过来.时序图如下,
本帖最后由 NemoGu 于 2012-12-15 20:58 编辑
learningAVR 发表于 2012-12-15 17:54 static/image/common/back.gif
貌似还是不行,切换时钟后,发送读一块指令有返回,状态位没错,但是数据线就是没有数据过来.时序图如下,
...
CMD17之后 SD_CLK一直继续toggle吗?如果有应该可以看到DAT0上有数据的,DAT1~DAT3没有也正常(在CMD17之前没有ACMD6,bus width还是default 1-bit) NemoGu 发表于 2012-12-15 20:57 static/image/common/back.gif
CMD17之后 SD_CLK一直继续toggle吗?如果有应该可以看到DAT0上有数据的,DAT1~DAT3没有也正常(在CMD17之 ...
如上上楼,为了方便查看,我把DATA的四条线连到了led了,其中led0对应的就是data0,可以看到那是没有数据的,toggle是指一直有时钟振荡吗?切换到10M以后,我的时钟就是一直提供10M的,没有停下来. learningAVR 发表于 2012-12-17 12:40 static/image/common/back.gif
如上上楼,为了方便查看,我把DATA的四条线连到了led了,其中led0对应的就是data0,可以看到那是没有数据的,t ...
CMD17的状态正常是不是指CMD线上看到的Response正常?
10MHz是指SD的CLK信号?
以上截图逻辑分析仪抓取到的SD Card Pin上面的波形吗?
DAT0有没有一直被FPGA drive?还是高阻上拉? luhuo{:smile:} NemoGu 发表于 2012-12-17 12:57 static/image/common/back.gif
CMD17的状态正常是不是指CMD线上看到的Response正常?
10MHz是指SD的CLK信号?
是的,CMD17的状态正常是指CMD线上看到的Response正常,显示处于transfer转态.
10Mhz就是指SD的CLK信号;
上面的截图用的是xilinx那个chipscope捕获的,类似逻辑分析仪吧.
data线没有设置上拉,端口类型为inout,也没有赋给默认值. learningAVR 发表于 2012-12-19 18:12 static/image/common/back.gif
是的,CMD17的状态正常是指CMD线上看到的Response正常,显示处于transfer转态.
10Mhz就是指SD的CLK信号;
上 ...
如果CMD17的Response都是正常的话 SD_CLK也一直存在的话,DAT0应该是有数据出来的
更换CMD17的地址参数,DAT0也是没有数据处理?
可以尝试只连接SD_CLK和SD_CMD, DAT0~DAT3悬空,在测试下SD Card的DAT0信号是不是一直没有数据出来 NemoGu 发表于 2012-12-19 23:09 static/image/common/back.gif
如果CMD17的Response都是正常的话 SD_CLK也一直存在的话,DAT0应该是有数据出来的
更换CMD17的地址参数, ...
我今天用示波器量了半天SDDATA0,终于看到数据了,果然是有数据过来的,而且没有错误:
但是,那个chipscope捕捉到的波形中SDdata0还是没有数据.奇怪了,我检查了管脚约束,也没有错误. 对了.我在SD卡里面放的数据时"00 01 02 03 04 05 06 07 08 09 0A 0B .......",从波形可以看出,数据时没什么问题的.但是,FPGA这边就是收不到....{:mad:} NemoGu 发表于 2012-12-23 18:02 static/image/common/back.gif
SD_DAT0是不是连接到FPGA pin上看到的波形?FPGA这边采样AD_DAT0的Timing是不是有问题呢 ...
不是的,data0的数据,我是直接用示波器在sd卡的管脚上量到的,我也觉得很可能是FPGA的采样问题,难道是时钟切换后还是用原来的200k时钟进行采样,我再看看。 NemoGu 发表于 2012-12-23 18:02 static/image/common/back.gif
SD_DAT0是不是连接到FPGA pin上看到的波形?FPGA这边采样AD_DAT0的Timing是不是有问题呢 ...
问题终于解决了,原来一直都是有数据过来的,只不过是要等一段时间,我在chipscope的采样窗口设置得太小了,并且在代码里面有一个等待数据过来的时间也设定得太小了,所以一直看不到数据,加大以后就有了.多谢NemoGu的帮助{:lol:}
learningAVR 发表于 2012-12-27 14:11 static/image/common/back.gif
问题终于解决了,原来一直都是有数据过来的,只不过是要等一段时间,我在chipscope的采样窗口设置得太小了, ...
一起学习 共同进步 {:victory:} 顶一下这个帖子的楼主和NemoGu,感谢你们的执着。 学习了! {:smile:}{:smile:}{:smile:}学习了
页:
[1]