最近在搞一个PC端通过USB识别STM32F429的SD的功能,并能进行读写的案例,真是被坑惨了....
1、一开始用的野火挑战者F429和正点原子F407官方的例程,野火挑战者F429的例程(USB-SD-FLASH模拟U盘)对SPI FLASH的识别都没问题,但是移植了SD的读写后就出现了问题,就只能识别Flash,不能识别SD,我还一直以为是SD卡驱动的问题,但是单独的SD卡读写又是正常的,没有问题;试了了野火的驱动和正点原子的驱动,结果都是一样的,很纳闷了。也用正点原子的F407的开发板试了例程(实验51 USB读卡器(Slave)实验),能正常的识别SPI FLASH ,也能正常的识别SD卡(4G卡),这样换来换去的调试了很久,还对比了彼此的硬件,搞得差不多每个元件都搞成一样了。悲催了。但结论是应该不是SD卡驱动的问题。
2、继续用F429的板子调试,找问题。一开始用野火的F429的板子调试,就一直返回SD响应超时,但是SD卡驱动都是用的官方的,差点就放弃了。后来就慢慢调咯,也对它不报希望了,就用我们自己的板子调,一开始在结构体USBD_MICRO_SDIO_fops内,前几个都能循环的跑过,就是到了STORAGE_Read,就跑不到这步,然后仿真,是一直在USB的库函数SCSI_Read10()内返回错误-1,我都没改过USB的任何参数啊,苍天啊!调到这里就可以锁定在USB的问题了,驱动肯定没问题,那就是USB的其它问题了。
3、继续调试,找相关的文档,对比F429 与F427的区别。带着这两个问题去查看了参考