微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32F103VB的SD卡在应用编程设计

STM32F103VB的SD卡在应用编程设计

时间:02-21 来源:互联网 点击:

3.3 FAT32文件格式
为了方便终端用户的操作和增加方案的通用性,本设计以FAT32分区格式标准对SD卡进行格式化,FAT32分区格式常见于通用的PC机平台。FAT32分区格式如图6所示。采用FAT32分区格式的SD卡内部结构包括主启动区域、FAT表区域、根目录区域、数据存储区域四部分。
其中位于主启动区域开始位置的第一个保留扇区为起始扇区,包括很多重要的数据信息,如每个扇区的字节数、FAT表个数及大小、每簇扇区数、总扇区数、根目录起始位置等等。FAT32包含两张FAT表,它们紧接主启动区域后面,是分区信息的映射表,主要功能是指示文档如何按簇存放。根目录区域包含了根目录下文档和目录信息的内容。在根目录区域可以获得指定文档的信息,如文档名、文档属性、创建时间、文档大小和文档在FAT表中第一个簇的地址等。数据区域是实际的文档存储的地方,占据了磁盘的大部分空间。
FAT32分区格式中文档是以簇为最小单位进行存储的,固定每簇的容量为4 KB。一个文档根据其大小被分为一个或者若干个簇存储在数据区域,这些簇通常是以零散而不是连续的方式分布在数据存储区域,形成的单链表称为簇链,簇链的具体信息可从FAT表中获得。图7为FAT32文档读取方式示意图。

FAT32文档读取步骤如下:
①在起始扇区中获取SD卡信息。
②根目录所在的物理地址通过下面公式得出。根目录地址=(隐藏扇区个数+保留扇区个数+FAT所占扇区个数×FAT数量)×扇区字节数。
③在根目录表中检索文档名为“UPDATE”的文档,获取其在FAT表中的首簇地址。首簇号的高字节和低字节位于以文档名起始的偏移量为0x14和0x1a的共四个字节。图7中UPDATE文档首簇号为0003。
④在FAT表的簇号为0003的位置中存放的信息为0004,即下一个簇的位置;在簇号为0004的位置中存放的是簇号为0006的地址信息,由此一步步得出由簇号组成的单链表,一直到簇号为0008的位置中存储的信息为0FFFFFFF,证明此时已到文档的末尾,簇链结束。图7中文档“UP DATE”占用的簇所形成的簇链为0003-0004-0006-0008,总共占用了4个簇、16 KB的数据存储空间。
⑤根据簇链中的簇号在数据存储区域中获取文档的数据内容。例如图7中文档“UPDATE”的数据内容即是由0003、0004、0006、0008四个簇中的数据内容File[0]、File[1]、File[2]、File[3]所组成。
3.4 应用程序更新
根据文档的大小擦除相应的闪存页面,然后从SD卡中读取文档数据内容到处理器的RAM中,按照闪存编程步骤将文档数据放入指定的闪存地址,完成用户应用程序的更新任务。STM32F103VB闪存每次可写入半字,即两个字节,闪存编程流程如图8所示。

闪存编程步骤如下:
①检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作。
②设置FLASH_CR寄存器的PG位为1。
③写入要编程的半字到指定的地址。
④等待BSY位变为0。
需要注意的问题是用户应用程序在编译的时候要进行相应的设置。用户应用程序设置如图9所示。在KeilμVision开发环境下,应用程序的起始地址设定为0x08003000,同时在应用程序中也要设定向量表的偏移量为0x3000。

4 IAP实验过程及结果
下面介绍IAP实验过程。
①将SD卡与PC机相连,发送新的二进制文件至SD卡的根目录下并将其重新命名为UPDATE.BIN。
②用串口线将PC的串口和系统的串口相连。打开PC上的超级终端工具,进行参数设置,参数设置要与IAP驱动程序中的通信方式相匹配,如相同的波特率和数据位等。
③系统上电后,如若不将用户按键按下,则IAP驱动程序不执行固件更新流程,直接跳转到用户应用程序入口。本应用程序为每隔1 s从串口发出“Hello world!”的字符串,并通过串口线显示在PC的超级终端上。
④把存有UPDATE.BIN文件的SD卡插入卡槽,按下用户按键,并同时将系统重新上电或者复位后,IAP驱动程序开始执行固件升级程序。在SD卡中检索到UPDATE.BIN文件后,超级终端上显示“UPDATE.binfounded!”,同时显示文档的大小、首簇位置、占用的簇数量和完整簇链。UPDATE.BIN文件大小为6 472字节,使用第8簇,UPDATE.BIN文件大小为6 472字节,使用第8和第9两个簇来进行存储,第8簇为文件存储的起始簇。
⑤得到更新固件的数据后进入闪存编程程序,新的固件下载完成后立即执行。超级终端上每隔1 s显示“It is a new program!”,证明用户应用程序升级成功。

结语
本文给出了一种基于STM32F103VB芯片的嵌入式系统在应用编程方案,该方案采用SD卡作为升级程序的存储媒介。上文给出了详细的实现步骤和实验方案。实验结果表明该方案能可靠实现IAP功能,完成对嵌入式系统固件的更新,且实现步骤简单、快捷。其原理可以广泛用于任何一种基于闪存的嵌入式系统。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top