SD controller CRC error 分析

来源:互联网 发布:淘宝订单体检清洗过期 编辑:程序博客网 时间:2024/05/21 19:25

最近做自己公司芯片的sd/mmc 模块,在enable SD高速模式下时会出现crc 错误。可气的是做为公司的fae竟然没有除datasheet之外的资料!这个fae也太可怜了。。。。

现象为:SD速度较低的SDclk=31Mhz会出现writing CRC error.但高速mode下(通过cmd6,switch command设置)clk>31Mhz以及SD低速mode就不会出现问题。

怀疑:1. 高速mode timing

            2. Nac超时

   3. DMA错误


高速mode timing要求Twl Twh 最小为7ns. Ttlh,Tthl最大为3ns,抓图如下:


            31Mhz


                                50Mhz


                                  330Mhz


都为TTL电平,低=0.7V,高=>2.4V.

发现timing满足高速要求。


继续发现DMA也没有问题。而且系统也没有报nac之类的time out,应该不是超时。

那究竟是什么问题呢,在read时没有问题,write缺会crc error! 

继续说代码检查,发现发cmd12时会disable clock frozen ! 会不会出现这样的问题?用实验说明问题,cmd12是multi-block时,发stop command来停止读写的。如果全部使用single block问题会消失的话,应该就是它的问题。

实验发现single block问题解除。看来就是multi-block的问题。继续究。


《后记》

问题解决,原来是在sd的data transfer的dma结束时没有等待sd card data transfer complete所致。dma已经传输结束,但是在写数据时,数据还没有传到sd card memory里的flash中,如果此时再次起动sd传输,就会导致写入错误数据。

解决方法:在dma结束的callback中,等待sd_status_dd.



原创粉丝点击