打印
[应用相关]

EK-stm32 SD卡调试

[复制链接]
7790|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elecbug|  楼主 | 2007-12-27 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、hw_config.c文件:修改USB时钟相关配置、USB使能脚输出模式(参考Joystick);
2、usb_desc.c文件:修改PID为0x5721(或其它,0x5720似乎是内置ST-LINK的,待验证);
3、msd.c文件:在u8 MSD_GoIdleState(void)函数中,MSD_CS_LOW();后加一点延时
u8 MSD_GoIdleState(void)
{
  u32 dlyCount = 0x100;
  /* MSD chip select low */
  MSD_CS_LOW();
  while(--dlyCount);
  /* Send CMD0 (GO_IDLE_STATE) to put MSD in SPI mode */
  MSD_SendCmd(MSD_GO_IDLE_STATE, 0, 0x95);
    。。。。。。

存在问题:访问速度偏慢
来自 2楼
lut1lut| | 2007-12-28 13:00 | 只看该作者

光盘中附带的sd卡作为mass storage的例子

我放入panasonic的16M的sd时,可以正确读写u盘;其他两个sandisk的256M和128M的sd,容量没有正确读出,后来的u盘访问自然有问题。

进去看了一下代码,在<main.c>的
  MSD_Init(); --〉一直循环出不来
    进去看到是MSD_GoIdleState --〉MSD_GetResponse老是返回读错。
  Get_Medium_Characteristics(); --〉读容量出错

经过调试,发现MSD_GoIdleState()函数的do-while循坏体有点问题:
msd片选拉高--〉发送一次dummy--〉马上把msd片选拉低--〉发送后续真正的sd卡的命令。有可能dummy的数据还在总线的时候,msd片选就拉低了,对sd卡造成了影响,于是:

在<msd.c>的void MSD_WriteByte(u8 Data)函数的结尾处加上一句:  // wait for send complete
  while (SPI_GetFlagStatus(SPI1, SPI_FLAG_BSY) == RESET);等发送结束才返回。

这样,我手上的三张sd卡都能读取正确了。

使用特权

评论回复
板凳
hotpower| | 2007-12-28 04:05 | 只看该作者

前些日子用2148的SSP访问SD卡也是速度慢,一直不解~~~

郁闷之中~~~

使用特权

评论回复
地板
lianshumou| | 2007-12-28 07:22 | 只看该作者

因为是利用串行接口SPI的!

所以会比并行的慢! 

使用特权

评论回复
5
kingpoo| | 2007-12-28 08:35 | 只看该作者

串行并不会比并行慢,现在几乎所有的告诉接口全部采用串

串行并不会比并行慢,现在几乎所有的告诉接口全部采用串行的

使用特权

评论回复
6
ijk| | 2007-12-28 09:24 | 只看该作者

并行的肯定比串行的快

  只要SD卡(包括miniSD和microSD以及 SDHC)支持,并行的存取方式肯定比串行的快,这应该是勿庸置疑的。
  另外要注意的是,不同的SD卡的最大速度是不同的:比如以“sd卡 速度”在google上搜索,可以看到有的速度相当于相当于32x,有的相当于120x、150x等等...
  假如瓶颈不在SD卡,等支持4位总线的STM32出来后,大家就知道并行存取方式的优势了...

使用特权

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

本版积分规则

3

主题

13

帖子

0

粉丝