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

STM32F103VB的SD卡在应用编程设计

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

摘要:基于在应用编程的基本原理,本文提出一种使用SD卡并通过SPI接口进行嵌入式系统固件更新的方法。以STM32F103VB作为嵌入式系统核心处理器,给出了固件更新的实现过程和验证结果,可广泛应用于基于闪存的嵌入式系统的固件升级。
关键词:嵌入式系统;在应用编程;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所示。


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所示。

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


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

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

网站地图

Top