当前位置:首页 > 单片机 > 单片机
[导读]哎,要说到USB的大容量存储设备就没有向USB鼠标一样简单了。这里先从官方例程里的mass stroage工程讲起。官方的工程比较复杂,程序可以兼容官方推出来的不同系列的评估版,所以程序里经常看见类似于#ifdef STM32L1XX

哎,要说到USB的大容量存储设备就没有向USB鼠标一样简单了。这里先从官方例程里的mass stroage工程讲起。官方的工程比较复杂,程序可以兼容官方推出来的不同系列的评估版,所以程序里经常看见类似于#ifdef STM32L1XX_MD、#ifdef USE_STM3210E_EVAL这样的宏开关语句,甚至随工程附带了两个版本的库文件,这也照成了程序理解和调试的困难。总之,理解起来比较费劲。看截图:

看到没有,工程随带了两个库文件:STM32F10x_StdPeriph_Driver和STM32F1xx_StdPeriph_Driver。我们当然只能选一个了,比如手我们选择STM32F1xx_StdPeriph_Driver,只要点击该组,右键->option for Group....,钩上iinclude in Target 和always build,就可以,另一个库文件组,钩掉这两个选项就可以了。这里还有一个STM32_EVAL组,这个下的文件跟评估板有关,不详细讲了,之后会涉及到一点。

接下去要详细讲解下User这个组了,有些文件我们已经在前文中都有讲到,这里讲些之前没有出现过的。不循规蹈矩讲了,想到什么就写什么了。usb_bot.c是新出现的文件,这个文件只要是BOT的状态机,所谓的BOT其实就是仅限批量传输的意思,我们这里用到的是端点的仅批量传输的。这个文件对不同USB状态的做不同的操作。usb_scsi.c这也是新出现的文件,这个文件名字上虽然是SCSI,但其实里面定义的是一些UFI的命令,不知道为什么这样做。scsi_data.c里则保存着UFI的命令集,问我里面定义的数组什么意思,我也没有全部理解清楚。接下去就是memory.c了,这是内存管理层,只有Read_Memory和Write_Memory连个函数。mass_mal.c这个文件是,文绉绉的讲是媒体接入层,平实的将就是连接底下硬件比如说SD卡或NAND Flash的相关驱动的API接口了。这里的文件实现的功能有底下设备或媒体的初始化,读媒体、写媒体、获取设备或媒体的状态等,在memory.c中被调用。还有剩下的就是fsmc_nand.c和nand_if两个文件了,fsmc_nand.c其实就是NAND的驱动程序,NAND挂在STM32的存储体BANK2处,这样就可以直接内存访问NAND了,而nand_if则是在fsmc_nand.c上面封装了下。还有下面的STM32_EVAL组里的stm32_eval_sdio_sd.c和stm32_eval_spi_sd.c这两文件是SD卡的SDIO和SPI接口的驱动程序,跟smc_nand.c和nand_if类似。

接下去讲讲他们之间的关系:

要说起来最顶层的话应该是stm32f10x_it或则stm32f1xx_it.h里的中断服务程序USB_LP_CAN1_RX0_IRQHandler,当有数据通讯时,就会触发中断,该中断服务程序会调用usb_istr.c文件里的USB_Istr()函数,该函数又会调用usb_it.c的CTR_LP()正确传输处理函数,之后该函数就会根据是哪个端点而调用相应端点的回调函数。端点的回调函数在usb_endp.c里,官方的工程用到了端点1用来发送数据,端点2用来接收数据。这两个函数分别是EP1_IN_Callback()和EP2_OUT_Callback(),他们有分别调用usb_bot.c里的Mass_Storage_In()和Mass_Storage_Out()函数。这两个函数会根据数据通讯的内容,判断应该调用usb_scsi.c里的哪个SCSI命令集。当然usb_scsi.c里的指令又会用到读取或写入内存的函数Read_Memory()和Write_Memory()。这两个函数在memory.c中定义,并且会调用媒体接入层的mass_mal.c文件的里MAL_Read()和MAL_Write()。最后MAL_Read()和MAL_Write()这两个函数会调用设备或媒体的相关函数了,如果你是NAND,则会调用nand_if.c,进而再调用fsmc_nand.c;如果你使用SPI读写SD卡,则调用stm32_eval_spi_sd.c,如果你使用SDIO读写SD卡,则调用stm32_eval_sdio_sd.c。总之,他们之间有着层次关系,了解他,们的关系后,希望对阅读有所帮助。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭