EK-stm32SD卡调试

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

存在问题:访问速度偏慢

回复评论 (5)

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

                                 郁闷之中~~~
点赞  2007-12-28 04:05

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

                                 所以会比并行的慢! 
点赞  2007-12-28 07:22

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

                                 串行并不会比并行慢,现在几乎所有的告诉接口全部采用串行的
点赞  2007-12-28 08:35

并行的肯定比串行的快

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

光盘中附带的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卡都能读取正确了。
点赞  2007-12-28 13:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复