OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2704|回复: 4

stm32f407 使用spinand flash 模拟u盘问题?

[复制链接]

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2019-10-16
在线时间
35 小时
发表于 2019-10-17 14:59:19 | 显示全部楼层 |阅读模式
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);
}


QQ截图20191017145709.png
QQ截图20191017145339.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-10-18 01:49:50 | 显示全部楼层
继续努力,我在论坛发过改1个磁盘的例子,可以去搜索参考下
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2019-10-16
在线时间
35 小时
 楼主| 发表于 2019-10-18 11:40:11 | 显示全部楼层
正点原子 发表于 2019-10-18 01:49
继续努力,我在论坛发过改1个磁盘的例子,可以去搜索参考下

原子哥,是不是flash 读写驱动没写好?  
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2019-10-16
在线时间
35 小时
 楼主| 发表于 2019-10-18 11:41:21 | 显示全部楼层
正点原子 发表于 2019-10-18 01:49
继续努力,我在论坛发过改1个磁盘的例子,可以去搜索参考下

原子哥,有spi nand flash的例程吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-10-19 02:22:43 | 显示全部楼层
wjlhhh 发表于 2019-10-18 11:41
原子哥,有spi nand flash的例程吗?

没有,你自己改
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-6 20:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表