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);
。。。。。。
存在问题:访问速度偏慢
前些日子用2148的SSP访问SD卡也是速度慢,一直不解~~~
郁闷之中~~~
串行并不会比并行慢,现在几乎所有的告诉接口全部采用串
串行并不会比并行慢,现在几乎所有的告诉接口全部采用串行的
并行的肯定比串行的快
只要SD卡(包括miniSD和microSD以及 SDHC)支持,并行的存取方式肯定比串行的快,这应该是勿庸置疑的。
另外要注意的是,不同的SD卡的最大速度是不同的:比如以“sd卡 速度”在google上搜索,可以看到有的速度相当于相当于32x,有的相当于120x、150x等等...
假如瓶颈不在SD卡,等支持4位总线的STM32出来后,大家就知道并行存取方式的优势了...
光盘中附带的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卡都能读取正确了。