打印
[活动]

关于STM32 USB SD和USB FSMC NAND

[复制链接]
2348|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxj19901115|  楼主 | 2014-1-16 21:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一:这个代码在不做任何修改的情况下,默认使用SDIO 模式驱动SD卡,用USB链接电脑,能立即发现SD卡,能正常读写和格式话文件
第二:我的目的是想用STM32 的USB做一个NAND的U盘测试程序,针对这个目的,看了下工程里面的代码,发现
void MAL_Config(void)
{
  MAL_Init(0);

#ifdef STM32F10X_HD
#ifdef USE_NAND_FLASH
  /* Enable the FSMC Clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  MAL_Init(1);
#endif
#endif /* STM32F10X_HD */
}
这个函数里面,看语法理解,只要屏蔽  MAL_Init(0);,定义STM32F10X_HD 和USE_NAND_FLASH,这两个宏和,FSMC的硬件接口接上512M BIT的NAND,应该能使用,
但是实际情况是,仿真发现,即使开放了这两个宏,针对USB NAND 的枚举一直不成功????

第三:在测试好FSMC NAND 能正常读写擦,NAND 之后,我就立马写了一个SPI 接口的NAND的驱动,同样能实现读写擦,底层API接口,正确,ECC,SPARE都能正确读取
在测试SPI NAND的驱动之后,我将USB U盘,针对NAND的驱动调用的FSMC NAND的接口函数如,WARITE,READ,ERASE函数,将FSMC NAND 的驱动函数全部替换成SPI NAND的接口函数
在将NAND_IF的里面的底层调用驱动调换后,全局编译,通过,并且USB枚举成功了,但是,无法格式化!!!
第四,在做第三的测试的时候发现,在HW_CONFIG.c文件中,有这么一个变量
#ifdef USE_STM3210B_EVAL
u32 Max_Lun = 0;
#elif defined (USE_STM3210E_EVAL)
#ifdef USE_NAND_FLASH
u32 Max_Lun = 1;
#else
u32 Max_Lun = 0;
#endif
#elif defined (USE_STM3210C_EVAL)
u32 Max_Lun = 0;
#endif
这个MAX_Lun 干嘛用的,如果将MAX_Lun默认配置的话,也就是0的话,那么在USB链接电脑后,无法发现NAND U盘,只发现一个无效的盘的符号,但是将MAX_Lun 配置为1的话,就能发现两个盘,NAND 的盘,能被电脑发现,这个MAX_Lun到底干啥用的?
在我将MAX_Lun配置为1的时候,能发现两个盘,但是,在程序开始运行到电脑发现磁盘的话,中间花费的时间差不多有1分钟,但是如果MAX_Lun配置为0的话,发现电脑发现磁盘的话,几秒钟,就可以了,

以上是我碰到的一些问题,望做过NAND U盘的人,指点下

STM32_USB_SD.rar

4.73 MB

attach://

相关帖子

沙发
IJK| | 2014-2-24 11:19 | 只看该作者
MAX_Lun 是MAX Logic Unit Number的意思,可以看USB mass storage的相关文档,接PC时出现的盘符数量等于 MAX_Lun+1

使用特权

评论回复
板凳
IJK| | 2014-2-24 11:22 | 只看该作者
“如果将MAX_Lun默认配置的话,也就是0的话,那么在USB链接电脑后,无法发现NAND U盘,只发现一个无效的盘的符号”
这说明MCU对下层媒介(这里是NAND)的访问有一定问题。涉及的USB mass storage命令有,读容量、test unit ready、读具体的数据。

使用特权

评论回复
地板
lxj19901115|  楼主 | 2014-3-26 10:46 | 只看该作者
谢谢大神指点,我自己多琢磨琢磨

使用特权

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

本版积分规则

5

主题

94

帖子

1

粉丝