完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求教使用STM32 USB 做一个MSC设备,将一个外部Flash作为存储介质,这个Flash比较特殊,每一页有16字节,一共2175页,只能按页写和擦除,不能写任意地址。我使用的是STM32_USB-FS-Device_Lib的Mass_Storage例程,
1.现在要修改Mass_Memory_Size,Mass_Block_Size不知道应该怎样修改??数据包的大小是 Maximum packet size (64 bytes) ,这个要不要修改?? 2.另外,我对USB协议还不熟,不知道主机是怎样将文件写入存储介质的?从代码看调用的是SCSI_Read10_Cmd和SCSI_Write10_Cmd函数,最终调用MAL_Read和MAL_Write,这个uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)函数里的Memory_Offset是指哪个地址呢?? |
|
相关推荐
7个回答
|
|
我也没做过,个人认为:
主机只是负责将数据通过USB的MSC方式把数据给stm32的MCU,至于MCU接收到数据后,要存在什么介质、怎么存则取决于硬件资源,与USB通讯无关了... |
|
|
|
stm32作从机?
|
|
|
|
dull20112011 发表于 2018-10-30 15:09 我现在有点搞明白怎么写的了,你说的对,MCU收到数据后要怎么处理与USB通讯无关了。只是插上USB后主机就一直发命令读盘是为什么? |
|
|
|
|
|
|
|
这个不知道,没有做过.... |
|
|
|
之前弄过STM32的将SD卡作为存储介质通过USB映射到电脑做U盘的功能,大概流程是将STM32的USB MSC库移植好,然后将USB读取存储SD的驱动函数写好就可以了,所以针对您的问题,我觉得应该是将USB MSC库移植好然后将读写存储介质的读写函数写好就可以。至于多少字节读写应该都没关系,USB的数据包大小应该不用调整。
|
|
|
|
STM32HAL库中USB接收到数据写入存储介质流程是这样的:
1.调用HAL库初始化USB函数,其中有一个函数是这样的: USBD_MSC_RegisterStorage(&hU***DeviceFS,&USBD_Storage_Interface_fops_FS); 其中USBD_Storage_Interface_fops_FS是一个结构体定义如下: USBD_StorageTypeDef USBD_Storage_Interface_fops_FS = { STORAGE_Init_FS, STORAGE_GetCapacity_FS, STORAGE_IsReady_FS, STORAGE_IsWriteProtected_FS, STORAGE_Read_FS, STORAGE_Write_FS, STORAGE_GetMaxLun_FS, (int8_t *)STORAGE_Inquirydata_FS }; 其中的STORAGE_Read_FS和STORAGE_Write_FS为自定义的存储介质读写函数,将USB驱动移植好之后只要将这个USBD_Storage_Interface_fops_FS 结构体中的函数自己去做实现就可以了。具体写入方式依据不同的存储介质可以使用不同的驱动函数实现。具体再不明白可以看看STM32的官方例子,里面有详细实现方式。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
CYUSB3014烧录失败Cypress Benicia USB Boot Device
2800 浏览 1 评论
6597 浏览 0 评论
9408 浏览 3 评论
【开源资料】基于机智云的智能感应灯(原理图+PCB+源程序)
47563 浏览 4 评论
3764 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 21:22 , Processed in 0.642911 second(s), Total 50, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号