tangdoudou_1 发表于 2023-12-7 11:52:22

STM32F103实现虚拟U盘功能时用闪迪的SD卡可以,但是用川宇、朗科品牌的SD卡不行

大家好,我们在用STM32F103对SD卡实现读写操作的时候,闪迪、川宇、朗科等品牌的16G的SD卡都可以,但是在实现虚拟U盘功能时用闪迪的SD卡可以,用川宇、朗科品牌的SD卡不行,可能的原因是什么?

eric2013 发表于 2023-12-7 14:19:17

SD卡驱动使用的那个版本的,标准库版本的bug略多,使用HAL版的测测

tangdoudou_1 发表于 2023-12-7 17:15:44

eric2013 发表于 2023-12-7 14:19
SD卡驱动使用的那个版本的,标准库版本的bug略多,使用HAL版的测测

感谢您的回复,我们用的是安富莱德开发板,目前的驱动是安富莱电子的2015~2016年的驱动

tangdoudou_1 发表于 2023-12-7 17:18:02

多谢回复,目前用的驱动是安富莱电子根据 stm3210e_eval_sdio_sd.c编写的驱动,

tangdoudou_1 发表于 2023-12-7 17:25:24

eric2013 发表于 2023-12-7 14:19
SD卡驱动使用的那个版本的,标准库版本的bug略多,使用HAL版的测测

目前正在用的驱动版本是下面这个:
模块名称:SDIO卡底层驱动
文件名称 :bsp_sdio_sd.c
版        本:v1.1       
说 明 :根据sT的资料整合并改编。
原始文件为:stm3210e_eval_sdio_sd.c
修改记录:
版本号:V1.0       
日期:2015-08-02        
作者:        armfly       
正式发布:       
V1.1        2015-08-06 armfly
说明:        修改数据超时的循环次数。没有卡插入时,可以快速返回       
//#define SD DATATIMEOUT((uint32 t)0xFFFFFFFF)
#define SD DATATIMEOUT        ((uint32 t)0x000FFFFF)       
Copyright (C),2015-2016,安富莱电子www.armfly.com

tangdoudou_1 发表于 2023-12-8 09:26:26

eric2013 发表于 2023-12-7 14:19
SD卡驱动使用的那个版本的,标准库版本的bug略多,使用HAL版的测测

如果您能帮着我们解决,我们可以给您费用。多谢,比较着急

eric2013 发表于 2023-12-8 09:36:12

tangdoudou_1 发表于 2023-12-8 09:26
如果您能帮着我们解决,我们可以给您费用。多谢,比较着急

我这边不做项目了。你可以移植下,看看有什么问题,我们再交流。

tangdoudou_1 发表于 2023-12-8 10:16:50

eric2013 发表于 2023-12-8 09:36
我这边不做项目了。你可以移植下,看看有什么问题,我们再交流。

我看了下,进入虚拟U盘,驱动就四个函数,SD_Init()这个函数,目前STM32F103对SD卡的读写一直可以成功,后面三个函数都是对USB进行操作的,我看有的人说中断设置,要把SDIO的优先级要高于USB的中断优先级,但是我试着改了改,好像没有用,在电脑上能出现一个U盘符,但是不能打开,没有SD卡的具体信息,比如说容量什么的。
//初始化SD卡
SD_Init();               
//设置USB时钟为48M
Set_USBClock();
//配置USB中断(包括sDIO中断)
USB_Interrupts_Config();
//USB初始化
USB Init();




void Set_USBClock(void)
{

RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
/* Enable the USB clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);

}


void USB_Interrupts_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USB_HP_CAN1_TX_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);


}



void USB_Init(void)
{
pInformation = &Device_Info;
pInformation->ControlState = 2;
pProperty = &Device_Property;
pUser_Standard_Requests = &User_Standard_Requests;
/* Initialize devices one by one */
pProperty->Init();
}
页: [1]
查看完整版本: STM32F103实现虚拟U盘功能时用闪迪的SD卡可以,但是用川宇、朗科品牌的SD卡不行