sd卡SD模式操作
这个表述太难理解了。把命令续写先写清楚,然后另起段进行解释和问题描述。
小编是用FPGA在调试,还是PCB板级,很可能是板子的问题
我用fpga调试的。用的是opencores上面的sd卡控制器的ip核,请问你看过这个么?
我仔细说下吧!我用fpga调试的,用的是sd卡控制器的ip核。我在wishbone总线上发送命令给sd卡。我写的状态机,发送命令顺序就是上面所说的。我现在sd卡的初始换基本完成了。发送ACMD6命令,sd卡的响应也是正确的。但是我再继续写下面的命令,然后运行,sd卡cmd8命令的响应就会出错?不知道为什么,不知道你明白了没有?
SD 是 1bit还是4bit?SD_1bit就是 spi 模式.
你的 SD IP 是硬核还是软核?软核友晶有这方面资料.
我用的是sd模式4位数据线!我用的是软核啊。你有那个软核代码么,可以给我参考一下么,谢谢了
some CMD can be ignored!
you should not code your driver sheerly following the specification!
找一个小于2GB的卡试试
ok,thank you alot
现在手上只有一个4G的卡,我再调一下试试吧。
发送了ACMD6后怎么又发送CMD8?不是很理解!
LZ把命令顺序写清楚点或者把出问题地方的命令写出来大家看看。
因为从spec上看,CMD8只能在卡的IDEL状态接受,而ACMD6只能在卡的TRAN状态接受,因此我在想,LZ是不是在卡的相应状态送错了命令而被卡错误解释了。
看看高手怎么处理
首先CMD0,然后发送CMD8 参数0x000001aa ,响应0x000001aa
CMD55,参数0x0,响应0x00000120
first ACMD41 ,参数0x00100000 , 响应0x00ff8000 ,BUSY位没有置1
CMD55,参数0x0,响应0x00000120
second ACMD41,参数0x00000000,响应0xC0ff8000 ,BUSY拉高了
CMD2>CMD3>CMD7这些命令的响应都是正确。
然后就要就写数据读写操作了。
先说一下,我用fpga调的,用的是opencores上面的sd卡控制器的ip核。
接着,我就要送出要读sd卡blcok的地址,和把读取的数据存储到ram的地址,控制器里面不断的查询状态,当监视到有地址信息时,控制器自动发送cmd17命令。现在问题出现了,就在我发送地址信息时,sd卡就会卡在cmd8命令上,sd卡没有响应,也就不能执行下面的命令。
ps:cmd8命令指的是上面说的发送的那个命令,不是在cmd7命令之后发送的,我的意思是我要进行数据读写的时候就会在cmd8命令上卡住,不知道为什么,求解答
仔细扣扣协议吧,之前搞过这玩意,现在都忘了。Busy状态,忘了,和IDE有点混。你还是好好看看协议。
太复杂了。
查一下opencore的代码看看问题出在哪里
我一直在研究这个代码呢,找不到问题在哪。
没太看懂,CMD8不是在初始化时只能跟在CMD0后面的吗?发CMD17怎么会和CMD8有关系?发个CMD17就该给数据了
不是在cmd17命令之后发送的cmd8。是我要进行读数据的时候,初始化的时候那个cmd8的命令就没响应了。
初始化一次不就行了,读数据时候干嘛还要初始化?
但是我继续写程序的时候,重新下载程序,肯定又要重新运行啊。程序肯定又从头开始执行啊
再一次就不行了?有点怪,我原来是直接FPGA产生的时序,只要先发cmd0,再发cmd8都可以阿.有可能的话,可以用示波器看看cmd线有啥区别
我也是直接fpga产生的时序,所以说每加一条命令,又要重新综合布线什么的,重新下载,从头开始运行!我现在cmd17命令发送下去了,但是sd卡没有传输数据,数据线一直为高!那个cmd17的参数设置(也就是sd卡的地址)应该怎么设置,我直接设置成0x000000了,也就是读取第一个扇区的值。不知道地址设置的对不对呢?
协议看的不够仔细,这些东西不能猜的。
对的呀,不论是大容量卡还是原来的标准卡都是可以的,cmd17没有响应,可能是本身命令发的不对
也可能是上一个命令发的不对,可以仔细查一下上一个命令的响应码,有明确的错误代码的
响应是正确的。我发送ACMD6设置四位模式。响应是0x0920,处于transfer状态。发送CMD17命令,响应是0x0900,也处于transfer状态,应该也是正确的,因为如果在数据传输过程中应该是在data state,传输之前和传输完成之后应该就是在transfer tate,我现在发送cms17命令,还没开始数据传输,sd卡处在transfer state也应该是正确的,现在就是不知道为什么没开始数据传输,cmd17读命令发送下去之后,一般在100ms内,sd卡就会启动数据传输的!
没有猜的,我都是按照协议写的,sd卡的地址最后9位为0,前面的地址是扇区的地址。
那往里面写过数据吗?最好先擦除后再写点数据
现在读都读不出来数据,写更不行了。还是先把读数据测通!
