|
【提问】Sensor Tile 模拟U盘 问题
[复制链接]
本帖最后由 wbhb2011 于 2018-5-9 17:15 编辑
Sensor Tile 的小扩展板带SD卡,是个不错的“数据黑盒”。于是想把它模拟成U盘,方便在取数据的时候,只要接USB线到电脑,就可以Copy出来了。理论上是可以的,USB Mass storage + SPI接口 SD卡,存数据的时候,用Fatfs 创建文件夹和文件等。
在想实现 USB Mass storage 的时候,在usbd_storage_if.c 的几个实例化函数里面遇到了问题。貌似 官方给的SD卡驱动:...\Drivers\BSP\SensorTile\SensorTile_sd.c 不适合在这个里面实例化。但是在Fatfs 的实例化函数sd_diskio.c 里面可以用。
1、STMCubeMX 创建工程:
-
- RCC
-
- Crystal/Ceramic Resonator
-
-
- USB_OTG_FS
-
- Mode:Device_Only
-
-
- USB_DEVICE
-
- Class For Fs IP: Mass Storage Class
-
-
- SPI3
-
- Mode:Full-Duplex Master
复制代码
SPI接口 照着Sensor Tile的原理图修改一下 pin脚。其实SPI 这里不设置也可以,...\Drivers\BSP\SensorTile\SensorTile.c 这个驱动下面已经包含。
配置方面基本不需要配置,SPI 的基本配置和 DMA NVIC都是在SensorTile.c 下面配置好了。
2、生成工程时,修改堆栈大小,我都改成0x1000 ;
3、生成后 直接编译,下载到板子里面,插到电脑,应该是可以看到电脑有弹出U盘的情况。显示要格式化,但是因为没有接口函数,所以无法格式化。
4、添加接口函数,我准备就用 ...\Drivers\BSP\SensorTile\SensorTile_sd.c 的驱动。工程中添加这个函数:
5 修改usbd_storage_if.c 的接口函数:STORAGE_Init_FS ; STORAGE_GetCapacity_FS ; STORAGE_Read_FS; STORAGE_Write_FS ;
初始化函数
- int8_t STORAGE_Init_FS (uint8_t lun)
- {
- /* USER CODE BEGIN 2 */
- if(BSP_SD_Init() == MSD_OK)
- return (USBD_OK);
- else
- return (USBD_FAIL);
- /* USER CODE END 2 */
- }
复制代码
获取描述函数
- int8_t STORAGE_GetCapacity_FS (uint8_t lun, uint32_t *block_num, uint16_t *block_size)
- {
- /* USER CODE BEGIN 3 */
- SD_CardInfo info;
- BSP_SD_GetCardInfo(&info);
- *block_num = (info.CardCapacity)/STORAGE_BLK_SIZ - 1;
- //*block_num = STORAGE_BLK_NBR;
- *block_size = STORAGE_BLK_SIZ;
- return (USBD_OK);
- /* USER CODE END 3 */
- }
复制代码
读取函数:
- int8_t STORAGE_Read_FS (uint8_t lun,
- uint8_t *buf,
- uint32_t blk_addr,
- uint16_t blk_len)
- {
- /* USER CODE BEGIN 6 */
- if(BSP_SD_ReadBlocks((uint32_t *)buf,(uint64_t)(blk_addr), STORAGE_BLK_SIZ, blk_len) !=MSD_OK)
- {
- return USBD_FAIL;
- }
- 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 */
- if(BSP_SD_WriteBlocks((uint32_t *)buf,(uint64_t)(blk_addr), STORAGE_BLK_SIZ, blk_len) !=MSD_OK)
- {
- return (USBD_FAIL);
- }
- return (USBD_OK);
复制代码
6、 按道理 编译下载后, USB接入电脑应该有 U盘 待格式化,格式化成功后,就可以用了。但是我插到电脑后 无法格式化。
贴出代码,有了解的 帮忙看一下。
在用L496 的开发板,是成功验证过的,但是那个有官方的bsp_driver_sd驱动,且是SDMMC接口的 HAL库应该是官方验证过的。这个我就不知道官方是不是只验证了 能用fatfs ,没验证能不能模拟U盘。
Sensor_log.rar
(13.85 MB, 下载次数: 0)
Sensor_log.rar
(13.85 MB, 下载次数: 0)
|
|