打印

关于SDIO时钟速度

[复制链接]
16851|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skyler|  楼主 | 2009-5-24 01:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用的芯片是STM32F103VET6接SD卡读数据,据um中原文是:Data transfer up to 48 MHz for the 8 bit mode.

我使cpu工作在72Mhz时(HCLK=72MHz),SDIO分频因子为0,即SD_CK=HCLK/2=36MHz,但此时发现SDIO工作并不好,数据传输很快就出现错误。
HCLK调到60MHz时,SD_CK=60MHz/2=30MHz是能比较可靠地工作。

也曾超频cpu使之工作在96和108MHz下,使用了2和3分频,但如此分频出来的SD_CK是非常不可靠。

想请问手册中说的48MHz是如何配置出来?
我有很多卡做测试,所以卡是没有问题的。
沙发
skyler|  楼主 | 2009-5-25 10:00 | 只看该作者

请问香主知道此问题吗?

使用特权

评论回复
板凳
香水城| | 2009-5-25 10:52 | 只看该作者

请问数据传输错误的原因是什么?软件错?SD卡错?SDIO模块

我使cpu工作在72Mhz时(HCLK=72MHz),SDIO分频因子为0,即SD_CK=HCLK/2=36MHz,但此时发现SDIO工作并不好,数据传输很快就出现错误。
HCLK调到60MHz时,SD_CK=60MHz/2=30MHz是能比较可靠地工作。

也曾超频cpu使之工作在96和108MHz下,使用了2和3分频,但如此分频出来的SD_CK是非常不可靠。


当SD_CK频率提供后,你是如何判断"SDIO工作不好"?如果表现为操作SD卡不正常,有没有可能是因为软件处理速度不够?有没有可能是因为SD卡不支持这么高的工作频率?

上面说高频下"分频出来的SD_CK是非常不可靠",非常不可靠的确切含义是什么?你用示波器看过吗?

使用特权

评论回复
地板
skyler|  楼主 | 2009-5-25 11:06 | 只看该作者

如下

工作不可靠,是我从现像来判断。

主要是因为高频下,读取数据就会异常退出,但我现在无法抓到在哪里退出,而且有时debug停下来时,发现是在HardFaultException,但不是必然。

我起初是用逻辑分析仪抓,但担心仪器对信号有影响,已经全部测试点取消。

我觉得可能是我配置得有问题,想知道配置更高时钟的方法。

使用特权

评论回复
5
香水城| | 2009-5-25 11:23 | 只看该作者

配置更高时钟的方法

关于手册中那句话的含义,我需要问了写手册的人才能得到确切答案,我怀疑是写错了,应该是"Data transfer up to 48 Mbs for the 8 bit mode",即48M位/秒。

那句话本身就有毛病,Data transfer怎么能用Hz来描述呢?

使用特权

评论回复
6
sonicll| | 2009-5-25 11:37 | 只看该作者

SD卡有8bit模式?

我怎么记得SD卡只能用1bit和4bit模式,楼主出现HardFaultException会不会就是这个原因啊?8bit模式是给别的卡用的吧?
老规范的SD卡时钟最高只能到25MHZ,SD2.0规范最高能到50MHZ,要切换到高速模式;
也许楼主的问题就是出在卡本身

使用特权

评论回复
7
skyler|  楼主 | 2009-5-25 12:27 | 只看该作者

依我理解

to香主,
原文是指48MHz还是48Mbit/S还请香主确认。
如果是48Mhz,则希望知道如何配置。

我目前使用最高的速度是32MHz的SD_CK(主频96MHz,3分频得到SD_CK),读卡速度可以到10MByte/S,并不十分稳定,而且再往上配置就失败。


to sonicll,
sd卡,包括sd,Minisd,MicorSD肯定都会支持spi mode。
而sdio模式的1bit,4bit是可选的。
8bit则是mmc的定义。

对于数据宽度及模式我的软件都是自适应,不会有错。而同样的代码,将clock降下来则不会出现HardFaultException

使用特权

评论回复
8
香水城| | 2009-5-25 12:32 | 只看该作者

希望楼主能对问题根源有一个较为具体的判断

是软件的问题?SD卡的问题?还是SDIO模块的问题?

从现象上看,是否有可能是在SD_CK时钟频率较高时,软件上处理速度不协调,造成缓冲区访问冲突,而产生HardFaultException?

使用特权

评论回复
9
skyler|  楼主 | 2009-5-25 23:57 | 只看该作者

回香主

首先,没有理由认为是SD卡的问题,手上有十多种不同的卡,读卡器上速度大多超过20MByte/S。也不可能怀疑是SDIO模块的问题,我觉得ST法国在这上面不可能有问题。

所以,我认为可能是软件问题,也就是没有配对时钟,或layout较差所以跑不了48M.而软件处理不协调应该不会,目前我只纯粹地DMA到RAM,还没有去处理数据。

当然我自己思维还算清晰,每个时钟多少该如何配置都是基于经过思量的。不是随便乱试。而um多次提到48MHz,还请香主问一下ST法国寻求解决,如何在不超频的情况下配置SDIO_CK为48MHz。

使用特权

评论回复
10
ijk| | 2009-5-26 08:34 | 只看该作者

SDIO时钟速度

  看了一下,STM32的例子里面,SDIO时钟速度为24MHz(72M/(1+2)=24M)。um中原文是:Data transfer up to 48 MHz for the 8 bit mode。根据前面的描述8 bit mode显然是指MMC卡。Data transfer up to 48 MHz,应该是指SD_CK时钟,但不超频时最快为72M/(0+2)=36M;我的理解是,SDIO模块可以最高工作在48M的SD_CK时钟,但目前STM32总的来说无法支持48M的SD_CK时钟-因为CPU不支持,或许未来的STM32可以支持48M的SD_CK时钟-因为据说新的CPU工作频率是120M。
  另外,没有实际例子表明ST法国做过48M的SD_CK时钟的测试。

使用特权

评论回复
11
skyler|  楼主 | 2009-5-26 10:24 | 只看该作者

都在猜测

虽然原文48Mhz for the 8bit mode,但我目前的确没有条件去试8bit的情况。但我想硬件设计本身应该不会对这个进行限定。

um不会将未来的东西写进去的,所以目前cpu时钟不支持的说法很难说得通。

而且关键是
我总认为自己没有正确配置,um中提到passby以及CLKDIV。
无论是passby enable或CLKDIV设为0我一直都没有试成功,所以我始终觉得没有正确配置。

使用特权

评论回复
12
skyler|  楼主 | 2009-5-26 11:13 | 只看该作者

48MHz

其实根据分析,有条路径可以不超频配置出SDIO_CK为48Mhz
首先 SYSCLK=48MHz
接着HCLK=SYSCLK,也是48MHz
然后 SDIOCLK=HCLK
最后enable passby,这样SDIO_CK=SDIOCLK=48MHz

不过试了也是不行的

使用特权

评论回复
13
skyler|  楼主 | 2009-5-27 09:30 | 只看该作者

期待答覆

期待万能的香主解决此问题。

使用特权

评论回复
14
香水城| | 2009-5-27 11:25 | 只看该作者

了解过了,12楼的解释是正确的

因为要降低CPU的频率到48MHz,我个人认为这样配置的意义不是很大。


从另一个角度讲,这个SDIO模块在ST的数据库中是一个标准模块,所以11楼的猜测:将未来的东西写进去的,部分正确。实际上在以后有更高CPU频率的STM32时还会使用同样设计的模块,到那时CPU主频和SD_CK都可以同时达到最高速度。

使用特权

评论回复
15
skyler|  楼主 | 2009-5-27 22:10 | 只看该作者

如果

如果香主说得没说,那就表示st的um与产品严重不一致了。
这的确让人难以接受。

使用特权

评论回复
16
香水城| | 2009-5-27 22:43 | 只看该作者

楼主的理解好像不大对

首先你看的手册是(RM)Reference Manual,而不是UM(User Manual),这两者有很大区别:RM只是讲了所涉及部分的功能和特性,而不涉及如何达到这种功能和特性的问题,需要读者和用户综合其它部分介绍的功能和特性,实现相应的功能和特性。而UM是介绍如何实现某种功能和特性,按照UM操作一定可以达到相应的功能和特性。


Reference Manual中你提到的那句话:Data transfer up to 48 MHz for the 8 bit mode,实际上在把CPU频率调到48MHz时,SDIO模块是对外可以产生48MHz的SD_CK时钟,这怎么能说与产品严重不一致呢?


再举一个例子,STM32的GPIO端口在配置为输出模式时,可以选择3种之1的驱动电路,即2MHz、10MHz和50MHz,我们知道STM32的任何一个内置外设都不能产生50MHz的信号,你不能因此就说这个50MHz驱动电路的描述与产品严重不一致吧。这里的50MHz是指输出驱动电路的带宽,与信号源能不能产生这么高频率的信号相比,不是同一个问题。上面SDIO的问题,也是同一个道理。

使用特权

评论回复
17
skyler|  楼主 | 2009-5-28 00:29 | 只看该作者

不行

对于um及rm的区别此前还真没在意,st只有rm而没有针对SDIO的um,是否应该补齐?


此前12楼的贴子的确列出了方法,但香主是否有注意到最后一句“不过试了也是不行的”
16楼所指的“实际上在把CPU频率调到48MHz时,SDIO模块是对外可以产生48MHz的SD_CK时钟”,我现在手上没有仪器抓取,无法证明有无时钟产生,但结果的确是失败,读不到命令的响应。问题还是没有解决。


香主这么晚还回贴实在敬业,不知是否算加班?

使用特权

评论回复
18
香水城| | 2009-5-28 09:12 | 只看该作者

这个问题必须使用示波器观察才能下结论

在SDIO模块操作SD卡这个系统中,有三大部分,STM32的SDIO模块、软件和SD卡,你这种通过实际操作的测试,只能说明整个系统是否工作。如果整个系统能够正确工作,则说明各个部分都是正常的,但如果系统不能正常工作,问题则变得复杂,任何一个部分有问题都可以产生整个系统不工作的结果。

楼主依据系统测试有问题,而断言STM32的SDIO模块有问题,这样的结论是否太草率了?


关于是否算加班的问题,像我们这样的工作,不管算不算加班,反正是没有钱啦,哈哈~~~~~~~~~~~~

使用特权

评论回复
19
skyler|  楼主 | 2009-5-28 12:33 | 只看该作者

端午节快乐

我从未断言系统有问题,请看9楼“也不可能怀疑是SDIO模块的问题,我觉得ST法国在这上面不可能有问题。”

我的临时结论是:48M下无法正常工作。我一直怀疑自己配置有问题,或我的硬件问题,只是在寻求解决的方法。上文也有提到。

抛开我的因素,我想知道ST是否有做这样的实验,不仅是产生48MHz的时钟,而且是能正常工作的实验。

最好可以详细列出各关键寄存器的配置。




睡前和起早都上坛子溜达一下解决问题,实属好版主。希望能帮我好这个问题。

使用特权

评论回复
20
香水城| | 2009-5-28 13:07 | 只看该作者

哈哈,对我来说19楼这个问题很容易

STM32的SDIO模块只要能够输出SD_CK为48MHz的信号,就表示它符合设计要求,至于整个系统是否能够正常工作,则要看软件和SD卡是否能够很好地支持了。

有个请求:请楼主推荐几款能够正确工作在48MHz频率下、具有8位数据通道的SD卡的型号,我可以买来测试一下。数据的读写需要很多软件工作,我恐怕没有时间考虑,但读出个ID即可证明SDIO模块是否能在48MHz下操作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

57

帖子

1

粉丝