STM32F103VB的SD卡在应用编程设计

发布者:VelvetSoul最新更新时间:2012-07-27 来源: 电子设计工程 关键字:应用编程  SD卡  STM32F103VB 手机看文章 扫描二维码
随时随地手机看文章
引言
    对于大部分基于闪存的嵌入式系统来说,一项重要的需求就是当这些系统安装在终端产品上后,具有对固件更新的能力,这个能力称为在应用编程(In-Application Programming,IAP)。在应用编程方式允许用户在程序运行过程中对程序存储器的指定区域进行重新烧写,因此广泛应用于工业生产设备、智能仪器仪表、消费电子类产品的固件更新、软件维护和功能扩展上。
    目前使用的在应用编程方案大多是通过嵌入式系统的串口或者网络接口并与PC机相连,再通过上位机软件或者网络完成对系统固件的更新,对硬件环境要求较高。考虑到目前工业设备、智能仪器和消费电子类产品多使用SD卡作为数据存储媒介,或者预留SD卡接口,在此拟采用SD卡作为固件更新文件的存储媒介,使用SPI通信接口完成对系统固件的更新。对硬件环境要求低且操作简便,可应用于工业现场设备升级和各种智能仪器仪表固件升级,也适用于消费电子产品用户升级自己的手持设备,如手机、音乐播放器、掌上游戏机等。

1 方案可行性分析
    STM32F103VB是意法半导体公司基于Cortex-M3内核的32位增强型处理器,可以丁作在72 MHz的频率下,具有128 KB闪存(Flash)和20 KB静态随机存储器(SRAM),集成了丰富的外设资源,如SPI、USART、ADC等。STM32F103VB支持在应用编程方式对闪存进行重新编程,片上闪存接口实现了闪存编程和擦除所需的逻辑电路,包括访问和写入保护以及选择字节的控制。
    SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制,由于其体积小、容量大、读写速度快、兼容性好、性价比高等特点,迅速得到了市场的认同,广泛应用于数码产品和嵌入式系统。SD卡支持SPI模式、1位SD模式和4位SD模式,可与微处理器相应外设接口进行连接。
    基于上述条件,要完成相应的硬件电路设计和软件设计。其中,软件设计主要是IAP驱动程序的设计,包括SD卡底层驱动、固件更新文件的读取和对微处理器片内闪存的擦写操作。

2 硬件设计
    STM32F103VB芯片内集成多达2个SPI接口,在从模式或主模式下,全双工和半双工的通信速率可达18Mb/s。3位的预分频器可产生8种主模式频率,可配置成每帧8位或16位。硬件的CRC产生/校验支持基本的SD卡和MMC模式。SD卡座与STM32F103VB连接示意图如图1所示。

a.jpg

b.jpg[page]

    STM32F103VB作为主设备,SD卡作为从设备,使用片内集成SPI1接口与SD卡相连。端口PE3与SD卡片选引脚CS相连,作为其片选控制端口;SPI1_SCK为主设备时钟输出引脚,接至SD卡时钟输入引脚CLK;PSI1_MOSI为主设备数据输出端口,与SD卡数据输入端口DI相连;同理,将SD卡数据输出端口DO与主设备数据输入端口SPI1_MISO相连。利用片上通用同步/异步收发器USART1经过MAX3232收发器芯片与上位机串口相连,串口通信电路原理图如图2所示。将端口PB9配置成输入浮空模式并外接一个用户按键,作为触发IAP操作启动的判断条件,按键电路如图3所示。

c.jpg



3 软件设计
3.1 IAP功能实现
    在应用中编程(IAP)允许用户在应用程序运行过程中对Flash进行重新编程。整个过程主要是由IAP驱动程序来完成,它的主要工作流程是:首先在SD卡中定位用于更新固件的二进制文件,然后将该文件读出并写入用户应用程序所在的Flash区域,最后跳转到更新后的应用程序入口执行系统应用程序。因此用户程序存储区应该分为两个部分,其中一个部分存储IAP驱动程序,只用于IAP功能的执行,通过ICP方式由JTAG或者SWD接口烧写入Flash;另一部分存储真正的应用程序,用来执行用户真正需要的功能。两个部分在Flash存储区域中相互独立,不能存在重叠的部分,系统上电或者复位后首先执行第一部分代码,实现对第二部分代码的更新操作,在不需要更新系统固件的情况下直接由第一部分跳转到第二部分代码入口处执行用户应用程序。
    将存有更新程序的SD卡插入卡槽,系统重新上电或复位后通过指定按键选择是否进行IAP操作,IAP操作流程如图4所示。

d.jpg

[page]

3.2 STM32F103VB芯片存储组织结构
    STM32F103VB的程序存储器、数据存储器、寄存器和输入/输出端口被组织在同一个4 GB的线性地址空间内。闪存区域即用户代码区域被置于0x08000000~0x0801FFFF的地址范围。方案中IAP程序被事先烧录进0x08000000~0x08002FFF的闪存区域,用户应用程序紧接着IAP程序进行存放,可使用的范围为0x08003000~0x0801FFFF的闪存区域。IAP程序内存分配如图5所示。

e.jpg


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

f.jpg


    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]所组成。

[page]

3.4 应用程序更新
    根据文档的大小擦除相应的闪存页面,然后从SD卡中读取文档数据内容到处理器的RAM中,按照闪存编程步骤将文档数据放入指定的闪存地址,完成用户应用程序的更新任务。STM32F103VB闪存每次可写入半字,即两个字节,闪存编程流程如图8所示。

g.jpg


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

h.jpg



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功能,完成对嵌入式系统固件的更新,且实现步骤简单、快捷。其原理可以广泛用于任何一种基于闪存的嵌入式系统。

关键字:应用编程  SD卡  STM32F103VB 引用地址:STM32F103VB的SD卡在应用编程设计

上一篇:基于STM32F103的数字式电镀电源并联均流系统设计
下一篇:STM32的曼彻斯特编译码系统设计

推荐阅读最新更新时间:2024-03-16 13:04

SPMC75和ASM(汇编)混合编程应用
1 引言   支持C语言几乎是所有微控制器程序设计的一项基本要求,当然SPMC75系列单片机也不例外。μ'nSPTM 指令结构的设计就着重考虑对C语言的支持,GCC就是一种针对μ'nSPTM 操作平台的ANSI-C编译器。但是在应用中对于程序的设计,特别是C和ASM混合使用的时候有些地方是需要注意的,在C中如何嵌入ASM也是一个不可回避的问题。 2 芯片特性简介   SPMC75系列单片机是由凌阳科技设计开发的16位微控制器芯片,其内核采用凌阳科技自主知识产权的μ'nSP微处理器。SPMC75系列单片机集成了能产生变频电机驱动的PWM发生器、多功能捕获比较模块、BLDC电机驱动专用位置侦测接口、两相增量编码器接口等硬件模块;以及
[单片机]
SPMC75和ASM(汇编)混合<font color='red'>编程</font>的<font color='red'>应用</font>
avr的SD卡基本读写程序(二)
SD卡读写子程序 硬件平台:atmega8L最小系统 硬spi(sd卡的初始化采用了io口模拟时序,因为在实验中发现要使用较低的速率才能稳定的初始化) 软件开发平台:ICC-AVR version 6.31a 硬件配置:atmega8L 内部8m时钟 sandisk 128m sd卡 几个基本的子程序及其介绍: 1.io口模拟spi,实现数据发送,在初始化时使用 void iodatatransfer(unsigned char iodata) { unsigned char num,b; num=0x80; for (b=0;b 0x08;b++) { W
[单片机]
S3C6410使用---10为SD卡与NAND FLASH的uboot加上menu菜单
用ok6410进行烧写时,每次都需要敲一大堆命令,又费时又费力. 记得以前用TQ2440时,u-boot启动时会有一个菜单,只按一个数字键就把内核烧好了,非常方便. 现在这张SD卡功能就很全面了,不仅能够直接从SD卡启动,而且还可以烧写nand flash中的u-boot zImage rootfs,呵呵. 下面就把这个功能加到ok6410的u-boot 中去. 一、修改SD卡的u-boot1.1.6 1. common/main.c中 void main_loop (void) { ....... if (bootdelay = 0 && s && !abortboot (bootdelay)) {
[单片机]
编程超声波物位计在田坝电站拦污栅上的应用
一、超声波物位计没测量水位概况 拦污栅位于进水口前,其作用为拦住杂物,防止杂物进入水轮机蜗壳,影响机组正常运行。机组长期运行后,必然导致拦污栅前渣滓堵塞,使栅前、栅后水位产生差值,对栏污栅形成一定的水压力。当压力超过拦污栅所能承受的限度时,将发生拦污栅压塌的重大事故。为避免该事故的发生,水电厂一般采用测量拦污栅前、后水位差,来判断拦污栅目前承受的压力,是否超出警界线,来决定是否需要排除拦污栅前渣滓,缓解拦污栅所承受压力。 田坝电站位于云南省漫湾发电厂大坝左岸,装有一台105MW的混流式机组,在汛期利用漫湾发电厂的弃水发电,在系统中承担腰荷。由于其进水口位于江水拐弯处,容易聚集江水中漂来的渣滓,又由于离漫湾发电厂表孔泄洪门较远,
[传感器]
可<font color='red'>编程</font>超声波物位计在田坝电站拦污栅上的<font color='red'>应用</font>
编程控制器实验室在船员教育中的应用
一、前言    随着微电子技术和计算机技术的迅速发展, PLC(可编程控制器)不仅用逻辑编程取代了硬接线逻辑,还增加了运算、数据传送和处理的功能,真正成为一种计算机工业控制装置。PLC的功能远远超出逻辑控制、顺序控制的范围,所以在工业发达国家,PLC在其自动化设备中的比例占首位。近年来,我国的PLC技术也从初期的引进、消化走向吸收和推广应用阶段,并且在许多工业领域取得了良好的经济效益和社会效益。面对这种形势,高等院校为更好地适应于我国经济、科学技术和社会的发展,在相关院系中普及PLC技术教育是十分必要的。对航海院校而言,随着船舶自动化程度的日益提高,PLC技术在主机、辅机和电站等设备中逐步推广应用,这就要求航海教育必须与之相适应,
[工业控制]
可<font color='red'>编程</font>控制器实验室在船员教育中的<font color='red'>应用</font>
ATmega128L单片机的Micro SD卡读写
引言 随着工业控制系统功能的增强,系统对于存储介质的安全、容量、性能的要求越来越高。Micro SD卡是在SD卡和Mini SD卡基础上发展起来的一种多功能存储卡,具备串行和随机存取能力,可以通过专用优化速度的串行接口访问,数据传输可靠,安全性好,传输速度快,存储容量大,体积小,被列为目前全球最小的迷你存储卡。Micro SD卡支持SD模式和SPI模式。随着高性能单片机的性能不断提高,利用高性能、低功耗的AVR 8位ATmegal28L单片机的串行外设接口SPI与Micro SD卡之间进行高速同步数据传输,设计开发了一种嵌入式文件系统。 1 硬件电路设计 MicrO SD卡的接口可以支持两种操作模式:SD模式和SPI模式。主机
[单片机]
ATmega128L单片机的Micro <font color='red'>SD卡</font>读写
STC15单片机读写大容量SD卡(IO口模拟SPI模式)
使用的芯片是STC15系列的IAP15F2K61S2,开发板是51的xl2000。把芯片座上的51芯片拔掉换成STC的,混合模式。(配置够低吧) 源码由51开发板例程的实验26修改而来。 浏览了网上的教程,目前SD卡基本有以下几种,对应着不同的初始化和读写方式: 一般来说刚上电时, SD卡不支持CMD1而支持CMD55, MMC卡不支持CMD55而支持CMD1. 通过CMD8来区分SD1.1和SD2.0卡, 通过ACMD41来区分SD2.0 SDSC or SDHC. 我手头有六张1~16GB的不同容量的SD卡,1G/2G/8G/16G各一张,4G两张。经过测试,已经可以成功地向其中的5张SD卡读写数据块,另有一张clas
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved