CH571做USB大容量存储器无法格式化磁盘,W25Q128 SPIFLASH
SPI CH571
CS PB12
CLK PB13
SO PB14
SI PB15
现象显示windows无法格式化
程序先初始化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信号波形正常
不确定是不是SPI FLASH的MISO和MOSI信号接反了,可以帮忙确认一下嘛
热门产品 :
CH32X035: 32位USB+USB PD单片机