使用 SRAM 进行简单测试
- Cubemx 设置
USB_OTG_FS
为 Device_Only
, USB_DEVICE
设置 Class For FS IP
为 Mass Storage Class
, 里面详细配置使用默认参数即可.
- 到 Project Manager 设置栈大小稍微大些, 因为 USB 协议的函数调用和局部变量较多, 比如设置成 0x10000.
- 在
usbd_storage_if.c
中添加如下代码, 使用 SRAM 作为存储:
#define STORAGE_LUN_NBR 1
#define STORAGE_BLK_NBR 200 /* 内存容量一般来说很少, 这里使用 100K 的内存作为实验 */
#define STORAGE_BLK_SIZ 0x200
/* USER CODE BEGIN PRIVATE_DEFINES */
static char msc_data[STORAGE_BLK_NBR * STORAGE_BLK_SIZ]; /* 定义数组用来存放数据 */
/* USER CODE END PRIVATE_DEFINES */
/* 修改下面两个函数 */
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 6 */
memcpy(buf, msc_data + STORAGE_BLK_SIZ*blk_addr, blk_len*STORAGE_BLK_SIZ);
return (USBD_OK);
/* USER CODE END 6 */
}
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 7 */
memcpy(msc_data + STORAGE_BLK_SIZ*blk_addr, buf, blk_len*STORAGE_BLK_SIZ);
return (USBD_OK);
/* USER CODE END 7 */
}
使用 NAND FLASH 做测试
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 6 */
for (int i = 0; i < blk_len; i++)
{
nand_flash_read_page((blk_addr + i) * 64, 0, buf, 4096);
}
return (USBD_OK);
/* USER CODE END 6 */
}
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 7 */
for (int i = 0; i < blk_len; i++)
{
nand_flash_erase(blk_addr + i);
nand_flash_write_page((blk_addr + i) * 64, 0, buf, 4096);
}
return (USBD_OK);
/* USER CODE END 7 */
}
网友评论