原子哥,F4开发板USB读卡器实验如何修改为SPI flash单磁盘读取?

2019-07-20 20:00发布

在论文上看到原子哥的103的板子的USB读卡器实验修改为SPI单独读取,但是还是没找到F4的USB读卡器实验应该在哪个文件里修改,使其为单SPI 读取?谢谢原子哥!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
正点原子
1楼-- · 2019-07-20 23:11
 精彩回答 2  元偷偷看……
kinshen
2楼-- · 2019-07-21 00:06
 精彩回答 2  元偷偷看……
一个好人
3楼-- · 2019-07-21 03:42
正点原子 发表于 2015-11-25 23:38
改fatfs的配置和diskio.c

另外,我写过一篇教程。自己论坛找找。
找不到说明你的找资料能力太弱。亟待加强 ...

原子哥,你好,如果像楼主那样主需要SPI flash单磁盘读取,那么只需要修改STORAGE_LUN_NBR就可以了,这个我已经试过了,但是如果我只要SD卡单磁盘读取,这样改是不行的,如果什么都不修改的话,能读到SD卡,但是也能读到FLASH,只是FLASH的磁盘打不开,并且提示需要初始化,  请问,如果我只需要SD卡,应该怎么修改? 现附上我的自己的程序:
//×î′óÖ§3ÖμÄé豸êy,2¸ö
#define STORAGE_LUN_NBR         2

////////////////////////////×Ô¼o¶¨òåμÄò»¸ö±ê¼ÇUSB×′ì¬μļÄ′æÆ÷///////////////////
//bit0:±íê¾μçÄÔÕyÔúÏòSD¿¨D′èëêy¾Y
//bit1:±íê¾μçÄÔÕy′óSD¿¨¶á3öêy¾Y
//bit2:SD¿¨D′êy¾Y′íÎó±ê־λ
//bit3:SD¿¨¶áêy¾Y′íÎó±ê־λ
//bit4:1,±íê¾μçÄÔóDÂÖÑˉ2ù×÷(±íÃ÷ᬽó»1±£3Ö×Å)
vu8 USB_STATUS_REG=0;
////////////////////////////////////////////////////////////////////////////////


//USB Mass storage ±ê×¼2éÑˉêy¾Y(ÿ¸ö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×Ö½ú               
       
        /* LUN 1 */
        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', 'D', ' ', '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 óû§»Øμ÷oˉêy½ó¿ú
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½á11ìå.

//3õê¼»ˉ′æ′¢é豸
//lun:Âß¼-μ¥Ôa±àoÅ,0,SD¿¨;1,SPI FLASH
//·μ»ØÖμ:0,3é1|;
//    ÆäËû,′íÎó′úÂë
int8_t STORAGE_Init (uint8_t lun)
{
        SD_Initialize();
        return 0;
}

//»ñè¡′æ′¢é豸μÄèYá¿oí¿é′óD¡
//lun:Âß¼-μ¥Ôa±àoÅ,0,SD¿¨;1,SPI FLASH
//block_num:¿éêyá¿(éèÇøêy)
//block_size:¿é′óD¡(éèÇø′óD¡)
//·μ»ØÖμ:0,3é1|;
//    ÆäËû,′íÎó′úÂë
int8_t STORAGE_GetCapacity (uint8_t lun, uint32_t *block_num, uint32_t *block_size)
{     
//        if(lun==1)
//        {
                *block_size=512;  
//                *block_num=SDCardInfo.CardCapacity/512;
                *block_num=(long long)SD_GetSectorCount()*512;
//        }else
//        {
//                *block_size=512;  
//                *block_num=1024*1024*12/512;        //SPI FLASHμÄÇ°Ãæ12M×Ö½ú,ÎļtÏμí3óÃ
//        }       
        return 0;
}

//2é¿′′æ′¢é豸êÇ·ñ¾íD÷
//lun:Âß¼-μ¥Ôa±àoÅ,0,SD¿¨;1,SPI FLASH
//·μ»ØÖμ:0,¾íD÷;
//    ÆäËû,Î′¾íD÷
int8_t  STORAGE_IsReady (uint8_t lun)
{
        USB_STATUS_REG|=0X10;//±ê¼ÇÂÖÑˉ
        return 0;
}

//2é¿′′æ′¢é豸êÇ·ñD′±£»¤
//lun:Âß¼-μ¥Ôa±àoÅ,0,SD¿¨;1,SPI FLASH
//·μ»ØÖμ:0,ûóDD′±£»¤;
//    ÆäËû,D′±£»¤(Ö»¶á)
int8_t  STORAGE_IsWriteProtected (uint8_t lun)
{
        return  0;
}

//′ó′æ′¢é豸¶áè¡êy¾Y
//lun:Âß¼-μ¥Ôa±àoÅ,0,SD¿¨;1,SPI FLASH
//buf:êy¾Y′æ′¢Çøê×μØÖ·Ö¸Õë
//blk_addr:òa¶áè¡μÄμØÖ·(éèÇøμØÖ·)
//blk_len:òa¶áè¡μÄ¿éêy(éèÇøêy)
//·μ»ØÖμ:0,3é1|;
//    ÆäËû,′íÎó′úÂë
int8_t STORAGE_Read (uint8_t lun,uint8_t *buf,uint32_t blk_addr,uint16_t blk_len)
{
        int8_t res=0;
        USB_STATUS_REG|=0X02;//±ê¼ÇÕyÔú¶áêy¾Y
        if(lun==1)
        {
                res=SD_ReadDisk(buf,blk_addr,blk_len);
                if(res)USB_STATUS_REG|=0X08;//SD¿¨¶á′íÎó!
        }else
        {
//                W25QXX_Read(buf,blk_addr*512,blk_len*512);
        }
        return res;
}
//Ïò′æ′¢é豸D′êy¾Y
//lun:Âß¼-μ¥Ôa±àoÅ,0,SD¿¨;1,SPI FLASH
//buf:êy¾Y′æ′¢Çøê×μØÖ·Ö¸Õë
//blk_addr:òaD′èëμÄμØÖ·(éèÇøμØÖ·)
//blk_len:òaD′èëμÄ¿éêy(éèÇøêy)
//·μ»ØÖμ:0,3é1|;
//    ÆäËû,′íÎó′úÂë
int8_t STORAGE_Write (uint8_t lun,uint8_t *buf,uint32_t blk_addr,uint16_t blk_len)
{
        int8_t res=0;
        USB_STATUS_REG|=0X01;//±ê¼ÇÕyÔúD′êy¾Y
        if(lun==1)
        {
                res=SD_WriteDisk (buf,blk_addr,blk_len);
                if(res)USB_STATUS_REG|=0X04;//SD¿¨D′′íÎó!         
        }else
        {
        //        W25QXX_Write(buf,blk_addr*512,blk_len*512);
        }
        return res;
}
//»ñè¡Ö§3ÖμÄ×î′óÂß¼-μ¥Ôa¸öêy
//·μ»ØÖμ:Ö§3ÖμÄÂß¼-μ¥Ôa¸öêy-1
int8_t STORAGE_GetMaxLun (void)
{
//        if(SDCardInfo.CardCapacity)return STORAGE_LUN_NBR-1;
//        else return STORAGE_LUN_NBR-2;

        if((long long)SD_GetSectorCount()*512)return STORAGE_LUN_NBR-1;
        else return STORAGE_LUN_NBR-2;       
       
}

一周热门 更多>