8104|5

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

EK-stm32SD卡调试 [复制链接]

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);
    。。。。。。

存在问题:访问速度偏慢
此帖出自stm32/stm8论坛

最新回复

                                 我放入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卡都能读取正确了。   详情 回复 发表于 2007-12-28 13:00
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

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

                                 郁闷之中~~~
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

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

                                 所以会比并行的慢! 
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 

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

                                 串行并不会比并行慢,现在几乎所有的告诉接口全部采用串行的
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 

并行的肯定比串行的快

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

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 

光盘中附带的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卡都能读取正确了。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表