基于STM32芯片的U盘/SD卡文件传输技术研究

时间:2022-09-16 07:36:33

基于STM32芯片的U盘/SD卡文件传输技术研究

摘 要: 基于STM32F107VCT6微控制器,在μC/OS?Ⅲ系统下针对U盘与SD卡之间的文件传输进行研究。控制器分别通过SPI串行总线和OTG接口与SD卡和U盘实现数据传输,控制系统通过FATFS文件系统将U盘的文件数据存入控制器的缓存之中,再将数据写入SD卡,实现了U盘与SD卡之间的数据传输。实验表明:该文件传输原理简单、功能稳定,可广泛应用于日常生活和工农业的小型嵌入式设备当中。

关键词: STM32; μC/OS?Ⅲ; U盘; SD卡; 文件传输

中图分类号: TP274.2 文献标识码: A 文章编号: 1004?373X(2014)18?0107?03

Study on file transmission between U disk and SD card based on STM32 chip

LIU Zhi?yong, CHEN Peng?fei, SU Lei, LIAO Guang?lan

(State Key Laboratory of Digital Manufacturing Equipment and Technology, Huazhong University of Science and Technology, Wuhan 430074, China)

Abstract: The file transmission between U disk and SD card in the μC/OS?Ⅲsystem based on STM32F107VCT6 chip is studied in this paper. The controller achieves data transmission by SD card and U disk respectively through SPI serial bus and USB OTG interface. The control system saves the file data of U disk into the cache of controller itself by FATFS file system, and then writes the data into the SD card to realize the data transmission between USB and SD card. The file communication mode is simple and stable, and can be widely applied to small embedded devices used in daily life, agriculture and industry.

Keywords: STM32; μC/OS?Ⅲ; U disk; SD card; file transmission

随着科技的发展,微控制器成本越来越低,性能越来越强大,这使得其应用越来越广泛,遍及各个领域之中。由于控制器本身的存储空间是非常有限的,因此通常自身不承担存储大量数据的任务,而由控制器的外设比如SD卡、U盘等存储设备承担。本文以ARM微控制器STM32F107VCT6作为系统的核心,针对SD卡、U盘存储设备的通信进行了研究,详细分析了它们之间文件传输过程。

1 硬件设计

1.1 STM32F107VCT6

STM32F107VCT6是意法半导体公司(ST Microelectronics,ST)推出的一款STM32互联型微控制器。该控制器集成了各种高性能工业标准接口,且STM32不同型号产品在引脚和软件上具有完美的兼容性,可以轻松适应更多的应用。它包括10个定时器、2个12位A/D(模/数转换器)、2个12位D/A(数/模转换器)、2个I2C接口、5个USART接口和3个SPI端口和高质量数字音频接口IIS,另外STM32F107拥有全速USB(OTG)接口,2路CAN2.0B接口,以及以太网10/100MAC模块,可以满足工业、医疗、自动化和家电市场等多种需求[1]。采用32位ARM Cortex?M3内核,最高运行频率可达72 MHz。

1.2 SD卡接口电路设计

SD卡支持两种接口访问模式,即SDIO模式和SPI(Serial Peripheral Interface)模式。本次实验采用的是SPI模式。SPI为串行设备接口,是一种高速全双工的通信总线,广泛应用在ADC、LCD等设备与MCU间通信的场合,其通信模式如图1所示。

图1 SPI通信模式图

图1中SS(Slave Select)为片选信号线;SCK(Serial Clock)为时钟信号线,由主通信设备产生;MOSI(Master Output, Slave Input)为主设备输出/从设备输入引脚;MISO(Master Input, Slave Output)主设备输入/从设备输出引脚。根据其通信模式设计其SD卡接口电路如图2所示。

图2 SD卡接口原理图

图2中SD_CS端为片选端口,DO、DI分别用来发送以及接受数据,SCLK为时钟信号端口,VDD为电源端口,VSS以及GND为电源地。

1.3 USB接口电路设计

USB为通用串行总线,是电子设备中最常用的连接方式,由于它易于扩展、价格低廉、易于升级、速度快和支持热插拔等优点被广泛用于与PC相连的设备中。STM32F107VCT6含有一个USB 2.0 OTG全速接口,接口速率12 Mb/s,可以作为主机对外设进行操作。本实验中采用的是USB的A型接口,接口原理图如图3所示。

图3 USB接口原理图

图中VBUS为5 V电源线,GND为电源地线,而D-和D+组合成一组差分数据线。

2 软件设计

2.1 μC/OS?Ⅲ

μC/OS?Ⅲ[2]是一个可裁剪、可固话、可剥夺型的实时内核,管理任务的数目不受限制,是由著名的μC/OS?Ⅱ发展而来,是第三代内核。μC/OS?Ⅲ针对以ARM Cortex为代表的新一代CPU,面向带有可用于优先级查表的硬件指令的32位CPU的嵌入式应用。μC/OS?Ⅲ允许利用这类高端CPU的特殊硬件指令来实现高效的任务调度算法,而无须使用μC/OS?Ⅱ的软件任务调度算法,而且μC/OS?Ⅲ支持时间片轮转调度算法。从核心任务调度算法的改变来看,μC/OS?Ⅲ已经是一个全新的嵌入式RTOS内核。从μC/OS算起,该内核已有20余年应用史,在诸多应用领域得到了广泛的认可。

2.2 FATFS文件系统

FATFS是面向小型嵌入式系统的一种通用FAT文件系统。它完全是由ANSI C语言编写并且完全独立于底层的I/O介质。因此它可以很容易移值到其他处理器当中,如8051,PIC,AVR,SH,Z80,H8,ARM等[3]。在配置了SD卡以及USB的驱动之后,把FATFS文件系统代码移值到工程之中,就可以利用文件系统的各种函数对已经格式化的SD卡或者U盘进行读/写。

2.3 软件工程的建立

本次研究所完成的内容是将储存有一定文件的U盘热插到开发板上的USB接口上时,系统会自动将U盘中的文件复制到连接在开发板上的SD卡当中。

软件工程建立所用的集成开发编译环境为keil MDK4.12,再将μC/OS?Ⅲ移值到工程当中,初始化后,通过μC/OS?Ⅲ的任务机制建立两个任务,分别对SD卡以及USB接口进行初始化。还需要将对SD卡以及USB读写的函数放入到FATFS的底层函数中去,供上层函数调用,系统需要实时检测是否有U盘连接上。系统程序流程图如图4所示。

图4 系统程序流程图

当设备检测到有U盘插入时,系统会对USB设备进行枚举操作,即USB主机通过一系列命令要求USB设备发送描述符信息,从而知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量大小,只有主机确定了这些信息之后,设备才能真正的正常工作[4]。枚举通过后USB设备会触发名为OTG_FS_IRQHandler的中断,在该中断下最后会执行用户应用程序USBH_MSC_Application,在该程序下将U盘中文件拷贝到SD当中。文件传输过程如图5所示。

实验中将U盘中的文件数据通过FATFS系统代码读取到STM32F107主芯片的缓存之中,然后再通过FATFS系统代码将缓存中的数据写入SD卡当中。该过程是双向的,且一次传输的数据多少取决于缓存的大小。若是出现文件数据大于缓存的情况,系统也能完成拷贝,但拷贝后的文件并不完整。故定义缓存的大小对文件的传输过程是非常重要的。程序编写完成后通过J?LINK将程序烧写入STM32芯片内部的FLASH中。

图5 文件传输过程图

3 实验结果与讨论

本实验中定义了3 KB的缓存,选用了1.93 KB的BMP图片文件(a.bmp)。BMP(Bitmap?File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。实验过程是将图片a.bmp并拷贝到U盘,再将U盘插入开发板上。可以发现,SD卡中也存入了a.bmp位图文件,成功实现了文件由U盘到SD卡的传输。

4 结 语

本文重点介绍了基于STM32F107VCT6主芯片在μC/OS?Ⅲ系统下USB与SD卡的文件传输过程,描述了系统的硬件设计以及软件设计流程。该传输过程简单、稳定,充分利用了STM32F107系列芯片的OTG接口功能,适用于小型嵌入式系统的文件传输,可应用于日常生活、农业以及工业中的各种中小型设备。

参考文献

[1] 意法半导体.STM32F107参考手册[EB/OL].[2011?08?09].http:///web/catalog/mmc/FM141/SC1169/SS1031/LN1564/PF221020.

[2] [美] LABROSSE J J.嵌入式实时操作系统μC/OS?Ⅲ[M].宫辉,译.北京:北京航空航天大学出版社,2012.

[3] 刘火良,杨森.STM32库开发实战指南[M].北京:机械工业出版社,2013.

[4] 王川北,刘强.USB系统开发:基于ARM Cortex?M3[M].北京:北京航空航天大学出版社,2012.

[5] 喻金钱,喻斌.STM32F系列ARM Cortex?M3核微控制器开发与应用[M].北京:清华大学出版社,2011.

[6] 佚名.STM32神舟IV号用户手册[EB/OL].[2012?05?13].http://.

[7] 谭浩强.C++程序设计[M].北京:清华大学出版社,2007.

[8] 谭浩强.C++程序设计题解与上机指导[M].2版.北京:清华大学出版社,2011.

[9] 刘波文,孙岩.嵌入式实时操作系统μC/OS?Ⅱ经典实例[M].北京:北京航空航天大学出版社,2012.

[10] 任哲.嵌入式实时操作系统μC/OS?Ⅱ原理及应用[M].2版.北京:北京航空航天大学出版社,2009.

上一篇:原本的我 9期 下一篇:声音导向小车的设计与仿真