当前位置:首页 > 单片机 > 单片机
[导读]哎,要说到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。总之,他们之间有着层次关系,了解他,们的关系后,希望对阅读有所帮助。


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

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

STM32与51单片机之间有什么差异呢?两者可以说是一场科技与性能的较量了。在科技飞速发展的今天,微控制器(MCU)已广泛应用于各类电子设备和系统中,发挥着举足轻重的作用。其中,STM32和51单片机作为两种常见的微控制...

关键字: STM32 51单片机 MCU

在这篇文章中,小编将对usb的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: USB USB隔离诊断

电磁铁是一种利用电流产生磁场的装置,具有快速响应、易于控制等特点,在工业自动化、电子设备、科学实验等领域有着广泛的应用。STM32是一款功能强大的微控制器,具有高性能、低功耗、易于编程等优点,是控制电磁铁的理想选择。本文...

关键字: 电磁铁 微控制器 STM32

今天,小编将在这篇文章中为大家带来Type-C接口的有关报道,通过阅读这篇文章,大家可以对Type-C接口具备清晰的认识,主要内容如下。

关键字: Type-C USB

边缘人工智能的实现涉及到三个基本 要素:安全性,连接性、自主性,而其中自主性是AI能力的体现,也是边缘AI有别于其他传统的物联网的关键。而通过ST Edge AI套件,就可以帮助各种不同类型的开发者实现覆盖全硬件平台的全...

关键字: 边缘人工智能 AI STM32

一直以来,Type-C接口都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来Type-C接口的相关介绍,详细内容请看下文。

关键字: Type-C USB

今天,小编将在这篇文章中为大家带来STM32单片机最小系统的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 单片机最小系统 STM32

随着科技的飞速发展和智能手机的普及,USB调试模式已成为许多科技爱好者和开发者不可或缺的工具。通过USB调试模式,用户可以连接手机与电脑,实现数据传输、应用安装、系统调试等多种功能。本文将深入探讨USB调试模式的打开方法...

关键字: USB 智能手机
关闭
关闭