论坛账号至少一个月登录一次,否则会被自动冻结!论坛全站广告位出租300元一年,有需要联系QQ:154000559。下载资料E币不足?可以每日签到可获取E币,土豪则可以充值即可。
搜索
版图设计服务,首选奋芯电子 微信:13816911948
广告位出租:ML02 有需要联系QQ:2322712906。
欢迎大家来EDA1024硬件设计开发论坛学习交流!【eda1024.com】
广告位出租:ML04 有需要联系QQ:2322712906。
芯片版图外包,首选奋芯电子 微信:13816911948

[转帖] USB mass storage 例程

[复制链接]
查看: 1210|回复: 0

3

主题

12

帖子

7

E币

实习生

Rank: 1

积分
3
发表于 2017-4-5 22:40:33 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "wblib.h"
#include "usbd.h"
#include "mass_storage_class.h"

//#define DETECT_USBD_PLUG

BOOL PlugDetection(VOID)
{
#ifdef DETECT_USBD_PLUG
        return udcIsAttached();       
#else
        return TRUE;
#endif
}

#ifndef __RAM_DISK_ONLY__
        #include "nvtfat.h"
        #include "w55fa93_sic.h"
        #include "w55fa93_gnand.h"


#ifdef __NAND__
NDISK_T MassNDisk;

NDRV_T _nandDiskDriver0 =
{
        nandInit0,
        nandpread0,
        nandpwrite0,
        nand_is_page_dirty0,
        nand_is_valid_block0,
        nand_ioctl,
        nand_block_erase0,
        nand_chip_erase0,
        0
};
#endif
#endif
INT main(VOID)
{
#ifdef __NAND__
        UINT32 block_size, free_size, disk_size, u32TotalSize;
#endif       
#ifdef __SD__
        INT32 status;
#endif       
        sysUartPort(1);
        /* Enable USB */
        udcOpen();
       
#ifndef __RAM_DISK_ONLY__       
        /* initialize FMI (Flash memory interface controller) */
    sicIoctl(SIC_SET_CLOCK, 192000, 0, 0);  /* clock from PLL */   
       
    sicOpen();

#ifdef __NAND__
        /* initial nuvoton file system */
        fsInitFileSystem();
        fsAssignDriveNumber('C', DISK_TYPE_SMART_MEDIA, 0, 1);     // NAND 0, 2 partitions
        fsAssignDriveNumber('D', DISK_TYPE_SMART_MEDIA, 0, 2);     // NAND 0, 2 partitions

        if(GNAND_InitNAND(&_nandDiskDriver0, &MassNDisk, TRUE) < 0)
        {
                sysprintf("GNAND_InitNAND error\n");
                return 0;               
        }       
       
        if(GNAND_MountNandDisk(&MassNDisk) < 0)
        {
                sysprintf("GNAND_MountNandDisk error\n");
                return 0;       
        }

//        fsSetVolumeLabel('C', "NAND1-1\n", strlen("NAND1-1"));
//        fsSetVolumeLabel('D', "NAND1-2\n", strlen("NAND1-2"));

        u32TotalSize = MassNDisk.nZone* MassNDisk.nLBPerZone*MassNDisk.nPagePerBlock*MassNDisk.nPageSize;
        /* Format NAND if necessery */
        if ((fsDiskFreeSpace('C', &block_size, &free_size, &disk_size) < 0) ||
            (fsDiskFreeSpace('D', &block_size, &free_size, &disk_size) < 0))                             
                    {   
                            if (fsTwoPartAndFormatAll((PDISK_T *)MassNDisk.pDisk, 32*1024, (u32TotalSize- 32*1024)) < 0) {
                                sysprintf("Format failed\n");       
                        fsSetVolumeLabel('C', "NAND1-1\n", strlen("NAND1-1"));
                        fsSetVolumeLabel('D', "NAND1-2\n", strlen("NAND1-2"));       
                        return 0;       
                    }
        }
#endif       
        #ifdef __SD__
            #ifdef        __SD_PORT0__
                        status = sicSdOpen0();                       
                        if(status < 0)
                                sicSdClose0();
                #elif defined (__SD_PORT1__)
                        status = sicSdOpen1();
                        if(status < 0)
                                sicSdClose1();                               
                #else
                        status = sicSdOpen2();
                        if(status < 0)
                                sicSdClose2();                                       
                #endif               
               
        #endif       
#endif   

        mscdInit();               
       
#ifdef __NAND_ONLY__       
        mscdFlashInit(&MassNDisk,NULL);       
#else
        #ifdef __RAM_DISK_ONLY__
                mscdFlashInit(NULL,NULL);       
        #elif defined (__SD_ONLY__)       
                mscdFlashInit(NULL,status);       
        #else
                mscdFlashInit(&MassNDisk,status);               
        #endif
#endif       

//    mscdNandEnable();
        udcInit();
        mscdMassEvent(PlugDetection);       
        mscdDeinit();       
        udcDeinit();       
        udcClose();
        sysprintf("Sample code End\n");       
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入住EDA1024

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|EDA1024硬件论坛 ( 苏ICP备15024581号 )

GMT+8, 2022-8-9 03:36 , Processed in 0.060204 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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