515300276 发表于 2020-9-18 17:52:56

使用RL-USB V6.13模拟多U盘

使用RL-USB V6.13模拟多U盘,电脑能够映射出多个U盘,但是都是同一个盘映射出来的,按手册说需要调用USBD_User_MSC_LUN_n.c里面的函数,也定义了__DOXYGEN__,但是始终都只会调用USBD_User_MSC_0.c单个磁盘里面的函数,不知道怎么回事。

515300276 发表于 2020-9-18 18:23:25

折腾一下午,终于是解决了,不是运行的USBD_User_MSC_LUN_n.c里面USBD_MSCn_Initialize类的函数,还是执行的USBD_User_MSC_0.c里面的函数,弱定义了在usbd_config.h里面,把USBD_User_MSC_LUN_n.c实现的多磁盘这些函数改名成下面这些就行了
__WEAKuint8_t   USBD_MSC0_GetMaxLUN                     (void)                                                      { return 0U; }

__WEAKbool      USBD_MSC0_LUN_GetMediaCapacity          (uint8_t lun, uint32_t *block_count, uint32_t *block_size)    { (void)lun; return (USBD_MSC0_GetMediaCapacity (block_count, block_size)); }
__WEAKbool      USBD_MSC0_LUN_Read                      (uint8_t lun, uint32_t lba, uint32_t cnt,       uint8_t *buf) { (void)lun; return (USBD_MSC0_Read             (lba, cnt, buf));         }
__WEAKbool      USBD_MSC0_LUN_Write                     (uint8_t lun, uint32_t lba, uint32_t cnt, const uint8_t *buf) { (void)lun; return (USBD_MSC0_Write            (lba, cnt, buf));         }
__WEAKbool      USBD_MSC0_LUN_StartStop               (uint8_t lun, bool start)                                     { (void)lun; return (USBD_MSC0_StartStop      (start));                   }
__WEAKuint32_tUSBD_MSC0_LUN_CheckMedia                (uint8_t lun)   
页: [1]
查看完整版本: 使用RL-USB V6.13模拟多U盘