CH571做USB大容量存储器无法格式化磁盘

CH571做USB大容量存储器无法格式化磁盘,W25Q128 SPIFLASH

SPI        CH571

CS         PB12

CLK       PB13

SO         PB14

SI           PB15

捕获3.JPG


现象显示windows无法格式化

1675825573120643.jpg

1675825573193307.jpg

1675825573155615.jpg

程序先初始化SPI读取ID测试是否正常之后再显示到LCD,已注意到SPI的IO切换

SPIFlash_Init();

    LCD_Init();
    LCD_Fill(0, 0, 240, 240, BLACK);

    LCD_ShowString(0, 0, "Speaker Engine V1.5", 16, RED);
    show_str(0, 16, "Hello 固件升级", 16, BLUE);
    char buf[16];
    sprintf(buf,"F:%04X",flash_id);
    LCD_ShowString(0, 16, buf, 16, RED);
void SPIFlash_Init(void)
{
    GPIOB_SetBits( GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14 );
    GPIOB_ModeCfg( GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14, GPIO_ModeOut_PP_5mA );	// MOSI/SCK/CS
    GPIOB_SetBits( GPIO_Pin_15 );
    GPIOB_ModeCfg( GPIO_Pin_15, GPIO_ModeIN_PU );	// MISO

    R16_PIN_ALTERNATE |= RB_PIN_SPI0;//PB12~15

    //SPI0_MasterDefInit();
    R8_SPI0_CLOCK_DIV = 4; // 主频时钟4分频
    R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR;
    R8_SPI0_CTRL_MOD = RB_SPI_MOSI_OE | RB_SPI_MISO_OE | RB_SPI_SCK_OE;
    R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF;     // 访问BUFFER/FIFO自动清除IF_BYTE_END标志
    R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE; // 不启动DMA方式

    SPI0_DataMode( Mode3_HighBitINFront );//高位在前——W25Q64均支持模式0/3
    SPI0_CLKCfg( 4 );
    flash_id = SPIFlash_ReadID();
    //printf("id:0x%04x\n", SPIFlash_ReadID() );
}

LCD之后切换回SPI IO用于驱动LCD

void LCD_GPIO_Init(void)
{
    if(0)
    {
        //背光
        GPIOA_ResetBits(GPIO_Pin_10);
        GPIOA_ModeCfg(GPIO_Pin_10, GPIO_ModeOut_PP_5mA);
    }
    LCD_CS_Set();
    LCD_DC_Set();
    LCD_RES_Set();

    GPIOB_ModeCfg(GPIO_Pin_7, GPIO_ModeOut_PP_5mA);
    GPIOA_ModeCfg(GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15, GPIO_ModeOut_PP_5mA);

    R16_PIN_ALTERNATE &= ~RB_PIN_SPI0;

    R8_SPI0_CLOCK_DIV = 4; // 主频时钟4分频
    R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR;
    R8_SPI0_CTRL_MOD = RB_SPI_MOSI_OE | RB_SPI_SCK_OE;
    R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF;     // 访问BUFFER/FIFO自动清除IF_BYTE_END标志
    R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE; // 不启动DMA方式

    SPI0_DataMode(Mode3_HighBitINFront);
}

测试读取到ID为0xFFFF,SPI FLASH右侧连接的IO已设置浮空输入,SPI信号波形正常

IMG_20230208_111348.jpg

不确定是不是SPI FLASH的MISO和MOSI信号接反了,可以帮忙确认一下嘛

飞线调整了一下MISO和MOSI引脚,可以读出EF17,存储器功能也可以正常格式化使用了


只有登录才能回复,可以选择微信账号登录