使用SPI FLASH模拟U盘遇到连接不上的问题。

2019-07-20 03:00发布

1.问题描述,我移植例程做SPI FLASH模拟U盘,但是一直检测到U盘连接和断开连接提示,而且不断重复提示。从HAL库,移植到标准库上。  在电脑设备管理能看到分配的驱动器号,但是看不到U盘容量,且格式化失败。
2.现象截图如下:

2.jpg
3.由于图1,不断出现连接又断开的情况,应该是检测到USB接线引脚电平的变化,然后中断中不断判断U盘状态,但是我设置引脚模式也不见效果,相关的设置代码如下:
/**
  * @brief  USB_OTG_BSP_Init
  *         Initilizes BSP configurations
  * @param  None
  * @retval None
  */
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{       
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
        RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE);                 //开启FS时钟
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
       
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
       
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_OTG1_FS);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_OTG1_FS);
}

/**
  * @brief  USB_OTG_BSP_EnableInterrupt
  *         Configures USB Global interrupt
  * @param  None
  * @retval None
  */
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
       
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}



/**
  * @brief  SPI5初始化,SCLK MOSI MISO引脚以及SPI基本模式
  * @param  
  * @retval
  */
void SPI5_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        SPI_InitTypeDef        SPI_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);                       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI5, ENABLE);                        

        GPIO_PinAFConfig(GPIOF, GPIO_PinSource7, GPIO_AF_SPI5);                
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource8, GPIO_AF_SPI5);                
        GPIO_PinAFConfig(GPIOF, GPIO_PinSource9, GPIO_AF_SPI5);                
               
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                //CS       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;               
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;               
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;               
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;       
       
        GPIO_Init(GPIOF, &GPIO_InitStructure);


        //设置SCLKMISOMOSI引脚模式(复用推挽输出)
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_Init(GPIOF, &GPIO_InitStructure);
                                                                                                       
        //SPI模式配置
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;       
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial = 7;
        SPI_Init(SPI5, &SPI_InitStructure);
}

麻烦大家帮忙分析分析,谢谢!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
美丽的时光机器
1楼-- · 2019-07-21 05:18
edmund1234 发表于 2019-3-6 20:24
你有单独的试过通过SPI读写Flash吗?
这现象似是读写Flash出问题

这个今天还没时间测试读写,不过SPI通信我测试过,是上电初始化时候可以读到外部挂接SPI FLASH的ID,暂时排除掉是SPI引脚设置的问题了,你提出的点我明天测试一下。谢谢
美丽的时光机器
2楼-- · 2019-07-21 09:22
edmund1234 发表于 2019-3-6 20:24
你有单独的试过通过SPI读写Flash吗?
这现象似是读写Flash出问题

写入整数,小数,读出来都是正常的。擦除也是正常的。问题还没找到原因,积分先给你。谢谢!
yklstudent
3楼-- · 2019-07-21 13:30
 精彩回答 2  元偷偷看……
美丽的时光机器
4楼-- · 2019-07-21 15:22
 精彩回答 2  元偷偷看……

一周热门 更多>