初级会员

- 积分
- 87
- 金钱
- 87
- 注册时间
- 2019-10-16
- 在线时间
- 35 小时
|
1金钱
只加载了一个spinandflash 没有sd卡,能识别盘符,提示格式化,然后windows无法格式化。哥哥们,帮忙看看啥毛病?
//×î´óÖ§³ÖµÄÉ豸Êý,2¸ö
#define STORAGE_LUN_NBR 1
////////////////////////////×Ô¼º¶¨ÒåµÄÒ»¸ö±ê¼ÇUSB״̬µÄ¼Ä´æÆ÷///////////////////
//bit0:±íʾµçÄÔÕýÔÚÏòSD¿¨Ð´ÈëÊý¾Ý
//bit1:±íʾµçÄÔÕý´ÓSD¿¨¶Á³öÊý¾Ý
//bit2:SD¿¨Ð´Êý¾Ý´íÎó±ê־λ
//bit3:SD¿¨¶ÁÊý¾Ý´íÎó±ê־λ
//bit4:1,±íʾµçÄÔÓÐÂÖѯ²Ù×÷(±íÃ÷Á¬½Ó»¹±£³Ö×Å)
vu8 USB_STATUS_REG=0;
////////////////////////////////////////////////////////////////////////////////
//USB Mass storage ±ê×¼²éѯÊý¾Ý(ÿ¸ölunÕ¼36×Ö½Ú)
const int8_t STORAGE_Inquirydata[] = {
/* LUN 0 */
0x00,
0x80,
0x02,
0x02,
(USBD_STD_INQUIRY_LENGTH - 4),
0x00,
0x00,
0x00,
/* Vendor Identification */
'A', 'L', 'I', 'E', 'N', 'T', 'E', 'K', ' ',//9×Ö½Ú
/* Product Identification */
'S', 'P', 'I', ' ', 'F', 'l', 'a', 's', 'h',//15×Ö½Ú
' ','D', 'i', 's', 'k', ' ',
/* Product Revision Level */
'1', '.', '0', ' ', //4×Ö½Ú
};
int8_t STORAGE_Init (uint8_t lun);
int8_t STORAGE_GetCapacity (uint8_t lun,uint32_t *block_num,uint32_t *block_size);
int8_t STORAGE_IsReady (uint8_t lun);
int8_t STORAGE_IsWriteProtected (uint8_t lun);
int8_t STORAGE_Read (uint8_t lun,uint8_t *buf,uint32_t blk_addr,uint16_t blk_len);
int8_t STORAGE_Write (uint8_t lun,uint8_t *buf,uint32_t blk_addr,uint16_t blk_len);
int8_t STORAGE_GetMaxLun (void);
//USB Device Óû§»Øµ÷º¯Êý½Ó¿Ú
USBD_STORAGE_cb_TypeDef USBD_MICRO_SDIO_fops =
{
STORAGE_Init,
STORAGE_GetCapacity,
STORAGE_IsReady,
STORAGE_IsWriteProtected,
STORAGE_Read,
STORAGE_Write,
STORAGE_GetMaxLun,
(int8_t *)STORAGE_Inquirydata,
};
USBD_STORAGE_cb_TypeDef *USBD_STORAGE_fops=&USBD_MICRO_SDIO_fops;//Ö¸ÏòUSBD_MICRO_SDIO_fops½á¹¹Ìå.
//³õʼ»¯´æ´¢É豸
//lun:Âß¼­µ¥Ôª±àºÅ,0,SD¿¨;1,SPI FLASH
//·µ»ØÖµ:0,³É¹¦;
// ÆäËû,´íÎó´úÂë
int8_t STORAGE_Init (uint8_t lun)
{
// SD_Init();
W25QXX_Init();
return 0;
}
//»ñÈ¡´æ´¢É豸µÄÈÝÁ¿ºÍ¿é´óС
//lun:Âß¼­µ¥Ôª±àºÅ,0,SD¿¨;1,SPI FLASH
//block_num:¿éÊýÁ¿(ÉÈÇøÊý)
//block_size:¿é´óС(ÉÈÇø´óС)
//·µ»ØÖµ:0,³É¹¦;
// ÆäËû,´íÎó´úÂë
int8_t STORAGE_GetCapacity (uint8_t lun, uint32_t *block_num, uint32_t *block_size)
{
if(lun==0)
{
*block_size=4096;
*block_num=64*2048; //SPI FLASHµÄÇ°Ãæ12M×Ö½Ú,ÎļþϵͳÓÃ
}
return 0;
}
//²é¿´´æ´¢É豸ÊÇ·ñ¾ÍÐ÷
//lun:Âß¼­µ¥Ôª±àºÅ,0,SD¿¨;1,SPI FLASH
//·µ»ØÖµ:0,¾ÍÐ÷;
// ÆäËû,δ¾ÍÐ÷
int8_t STORAGE_IsReady (uint8_t lun)
{
// USB_STATUS_REG|=0X10;//±ê¼ÇÂÖѯ
return 0;
}
//²é¿´´æ´¢É豸ÊÇ·ñд±£»¤
//lun:Âß¼­µ¥Ôª±àºÅ,0,SD¿¨;1,SPI FLASH
//·µ»ØÖµ:0,ûÓÐд±£»¤;
// ÆäËû,д±£»¤(Ö»¶Á)
int8_t STORAGE_IsWriteProtected (uint8_t lun)
{
return 0;
}
//´Ó´æ´¢É豸¶ÁÈ¡Êý¾Ý
//lun:Âß¼­µ¥Ôª±àºÅ,0,SD¿¨;1,SPI FLASH
//buf:Êý¾Ý´æ´¢ÇøÊ×µØÖ·Ö¸Õë
//blk_addr:Òª¶ÁÈ¡µÄµØÖ·(ÉÈÇøµØÖ·)
//blk_len:Òª¶ÁÈ¡µÄ¿éÊý(ÉÈÇøÊý)
//·µ»ØÖµ:0,³É¹¦;
// ÆäËû,´íÎó´úÂë
//int8_t STORAGE_Read (uint8_t lun,uint8_t *buf,uint32_t blk_addr,uint16_t blk_len)
int8_t STORAGE_Read (uint8_t lun,uint8_t *buf,uint32_t blk_addr,uint16_t blk_len)
{
NAND_ADDRESS a;
a.Block=blk_addr/64;
a.Page=blk_addr%64;
// int8_t res=0;
USB_STATUS_REG|=0X02;//±ê¼ÇÕýÔÚ¶ÁÊý¾Ý
if(lun==0)
{
SPI_NAND_ReadToCatch(a);
SPI_NAND_ReadFromCatch(buf,0,blk_len*4096);
}
return 0;
}
//Ïò´æ´¢É豸дÊý¾Ý
//lun:Âß¼­µ¥Ôª±àºÅ,0,SD¿¨;1,SPI FLASH
//buf:Êý¾Ý´æ´¢ÇøÊ×µØÖ·Ö¸Õë
//blk_addr:ҪдÈëµÄµØÖ·(ÉÈÇøµØÖ·)
//blk_len:ҪдÈëµÄ¿éÊý(ÉÈÇøÊý)
//·µ»ØÖµ:0,³É¹¦;
// ÆäËû,´íÎó´úÂë
int8_t STORAGE_Write (uint8_t lun,uint8_t *buf,uint32_t blk_addr,uint16_t blk_len)
{
NAND_ADDRESS a;
a.Block=blk_addr/64;
a.Page=blk_addr%64;
// int8_t res=0;
USB_STATUS_REG|=0X01;//±ê¼ÇÕýÔÚдÊý¾Ý
if(lun==0)
{
SPI_NAND_SetRegs(0xa0,0x00);
// SPI_NAND_EraseBlock(a);
SPI_NAND_Write(buf,a,blk_len*4096);
// SPI_NAND_WriteToCatch(buf,0,blk_len*4096);
// SPI_NAND_ProgramExecute(a);
}
return 0;
}
//»ñȡ֧³ÖµÄ×î´óÂß¼­µ¥Ôª¸öÊý
//·µ»ØÖµ:Ö§³ÖµÄÂß¼­µ¥Ôª¸öÊý-1
int8_t STORAGE_GetMaxLun (void)
{
return (STORAGE_LUN_NBR - 1);
}
|
-
-
|