void spiFlashTest(void) { u32 FlashID = 0; u8 state[2] = {0}; u8 Rx_Buffer[22]; FlashID = spiFlashReadID(); printf("\r\n 芯片的ID是 0x%X", (int)FlashID); if (FlashID == 0xEF4015) { //擦除0x00扇区 flashEraseSector(FLASH_SECTORTOERASE); printf("\r\n 写入的数据为: %s", Tx_Buffer); spiFlashBufferWrite((u8*)Tx_Buffer, FLASH_WRITEADDR, sizeof(Tx_Buffer)); spiFlashBufferRead(Rx_Buffer, FLASH_READADDR, sizeof(Tx_Buffer)); printf("\r\n 读出的数据为: %s", Rx_Buffer); for (u16 i=0;i< 22;i++) { if (*(Tx_Buffer+i)!=*(Rx_Buffer+i)) { state[0] = 1; } } /* 擦除一个扇区 */ flashEraseSector(FLASH_SECTORTOERASE); /* 读取扇区数据 */ spiFlashBufferRead(Rx_Buffer, FLASH_READADDR, sizeof(Rx_Buffer)); /* 判断读取数据是否为0xff */ for (u8 Index = 0; Index < 22; Index++) { if (Rx_Buffer[Index] != 0xFF) { state[1] = 1; } } if(0 == state[1]) { printf("\r\n 读出数据都为 0xff\n\r"); } else { printf("\r\n 读出数据不都为 0xff\n\r"); } if(0 == (state[0]+state[1])) { printf("\r\n flash测试成功\n\r"); } else { printf("\r\n flash测试失败!\n\r"); } } else { printf("\r\n FLASH测试失败 \n\r"); } }
DSTATUS disk_initialize ( BYTE drv /* Physical drive nmuber */ ) { DSTATUS sta; uint32_t timeout = 0; uint32_t id; //card detect = GPB14 GCR->PB_H_MFP = (GCR->PB_H_MFP & ~PB14_MFP_MASK) | PB14_MFP_GPB14; GPIOB->PMD = (GPIOB->PMD & ~GPIO_PMD_PMD14_MASK) | GPIO_PMD_PMD14_INPUT; printf("Check SD Card insert ?\n"); while(GPIOBITB->GP_BIT14 == 1) { if(timeout++ > 0x200) break; } bUseSDCard = 0; if(GPIOBITB->GP_BIT14 != 1) { printf("Card Detected!!\n"); //power pin(GPE6) GCR->PE_L_MFP = (GCR->PE_L_MFP & ~PE6_MFP_MASK) | PE6_MFP_GPE6; GPIOE->PMD = (GPIOE->PMD & ~GPIO_PMD_PMD6_MASK) | GPIO_PMD_PMD6_OUTPUT; GPIOBITE->GP_BIT6 = 0; RoughDelay(100000); if(SDCARD_Open() == E_SUCCESS) { sta = RES_OK; printf("SDCard Open success\n"); bUseSDCard = 1; } else { sta = STA_NOINIT; printf("SDCard Open failed\n"); } } else { printf("Can't detect card !!\n"); /* Set SPI0 pin, GPE1->SS0; GPE2->CLK, GPE3->MISO0, GPE4->MOSI0 */ GCR->PE_L_MFP = GCR->PE_L_MFP & ~0x000ffff0|0x00066660; CLK->CLKSEL2 = (CLK->CLKSEL2 & CLK_CLKSEL2_SPI0_MASK) | CLK_CLKSEL2_SPI0_PLL; //can't find SD card, use SPI flash instead. spiFlashInit(SPI0); /* Check Flash ID */ if((id = spiFlashReadID()) == 0) { printf("Sorry!! The ID (0x%x)is wrong!!\n", id); sta = STA_NOINIT; } else sta = RES_OK; } return sta; }