利用TF卡进行嵌入式系统开发调试及存储应用的方案

发布者:BlissfulSpirit最新更新时间:2018-02-07 来源: eefocus关键字:TF卡  开发调试  存储应用 手机看文章 扫描二维码
随时随地手机看文章

    硬件平台基于应用处理器PXA310,软件平台基于嵌入式Linux的Android操作系统。首先介绍了TF卡与应用处理器的连接电路设计。然后介绍TF卡驱动程序的设计和Android对TF卡的挂载方法。在TF卡驱动程序设计中采用了SPI工作模式和FAT32文件系统,描述了FAT32文件系统的移植。最后介绍了系统调试,并展示了TF卡在视频数据采集单元中应用的设计结果。


    嵌入式系统调试一般使用串口、JTAG、USB或网卡来下载系统镜像到目标机中。使用串口下载镜像,协议简单,接口通用,但传输速率太慢。使用JTAG下载镜像,传输速率较高,但需要专用的JTAG调试器,价格较高,限制了调试环境。使用USB或网卡下载镜像速度快、接口通用,但一般做成产品后的嵌入式设备不需要留出通用的USB或以太网接口,从而增加了设计的复杂性和开发成本。在移动嵌入式产品开发过程中,如果使用TransFlash(TF)卡代替USB或以太网口,由于TF卡一般又都是移动嵌入式产品的必要构成部分,这样做一般可以减小嵌入式系统调试的复杂性和成本。本文提出使用TF卡更新镜像的方法,并在实际的嵌入式系统调试中成功应用。使用TF卡下载系统镜像,速度与通用性都很好,既省去了调试中对其他下载设备的设计需求,又解决了最终产品大容量存储器的设计问题。

    1 TransFIash卡与应用处理器的连接电路设计

    本文调试的嵌入式系统,是一种视频数据采集与传输单元,以PXA310为中央处理器,采集到的视频数据由PXA310进行压缩编码处理,之后发送到网络中去,供用户查看。系统调试过程中,视频数据可以存储到TF卡中。

    TF卡模块在系统中主要有两个方面的作用:

    一是在嵌入式系统开发调试过程中用于将系统镜像到目标版;二是作为最终嵌入式系统产品的大容量存储器。

    SD卡有两个可选的通信协议:SD模式和SPI模式。SD模式是SD卡标准的读写方式,但要求主控制器带有SD卡控制器。PXA310本身没有TF卡控制器接口,选用SD模式通信就无形中增加了产品的硬件成本,选择SPI模式可以说是一种最佳的解决方案,相对于SD模式,SPI模式接口与协议简单、易于操作。这时TF卡在PXA3 10 MMC/SD/SDIO主控制器控制下工作。

    2 Blob中TF卡的驱动设计以及FAT32文件系统移植2.1 设计TF卡SPI模式驱动

    TF卡操作遵循SD卡协议,TF卡的操作完全与SD卡相同。相对于SD模式,SPI模式接口与协议简单、易于操作。PXA310带有MMC/SD/SDIO主控制器,但由于Blob中没有提供SD卡与主控制器的具体驱动,实现完整驱动的难度较大,故本文采用GPIO口模拟的SPI模式读写TF卡,运行到Linux内核后再加载主控制器驱动运行SD模式的方式,性能与实现难度都可兼顾。

a.JPG

    
    SPI模式TF卡总线采用主从问答式协议。主机发送命令Command,TF卡应答回复Response。SD卡命令有两种,CMDx和ACMDx。ACMD是应用指令集,属于扩展指令集,在发送任何的ACMD之前,必须先发送CMD55激活,才可以使用ACMD指令集。发送完一个ACMD,并且卡响应了此指令之后,CMD55的作用就消失了,所以要发送多个或多次发送一个ACMD,需要循环发送CMD55+ACMD。

    2.2 SPI模式初始化TF卡流程

    TF卡默认的通信模式是SD模式,本文要在SPI模式下设计TF卡驱动,需要从SD模式切换到SPI。为此,先将TF卡上电,延时74个时钟周期后发送复位命令CMD0,同时将SD卡的CS片选信号置低,若此时接收到应答信号为0x01,说明TF卡进入了SPI模式。

    TF卡与MMC卡都可用SPI模式驱动,故在初始化时可考虑与MMC卡的兼容性。在发送CMD0成功接收到应答信号后,连续发送CMD55+ACMD41,若CMD55回复0x01而ACMD41回复0x00,则TF卡初始化成功。若没有完整的应答,则改发CMD1,若CMD1成功回复0x00,则MMC卡初始化成功。

    在SPI模式下,TF卡的初始化时钟频率不能超过400 kHz。初始化成功后,就可以配置高速时钟下TF卡的读写操作了。图2为TF卡初始化流程图。   

b.JPG

    在Blob中完成TF卡初始化,还需要初始化PXA310的GPIO口,并根据对应TF卡的引脚配置其输入输出关系。

    在Blob中,PXA3 10的PXA_SD_D2、PXA_SD_D3、PXA_SD_CMD、PXA_SD_CLK、PXA_SD_D0、PXA_SD_D1这几个I/O口并没设置为GPIO口,不能在软件上进行读写操作,要使用SPI模式,必须将这几个IO口设置为GPIO。通过在MFP寄存器中配置IO口的功能号,再配置相应参数即可实现。

    2.3 通过SPI读写TF卡的程序设计

    TF卡的读写以块为单位,初始化完成后,使用CMD16设置SD卡读写块长度(512 B),发送CMD17和CMD24读单块写单块,发送CMD18和CMD25读多块和写多块。实现TF驱动层中读写函数的逻辑流程如图3所示。   

c.JPG

    2.4 FAT32文件系统移植

    在文中,FAT32文件系统移植主要包括系统初始化和文件管理程序修改(主要是文件读取)。FAT32的初始化就是找到各个部分的起始扇区位置。首先查找MBR的分区表,获取分区信息,然后找到每个分区的DBR,再根据DBR中的BPB得到分区的起始扇区、结束扇区、文件系统类型、FAT表个数、每簇占用扇区数等信息。最后根据下面的算法得到文件分配表FAT、文件目录表FDT和数据区DATA的起始扇区。FAT32读取文件流程如图4所示。   



e.JPG

    2.5 设计Blob命令下载系统镜像

    Blob启动之后,首先初始化一些基本的硬件设备如串口等,然后检测系统内存映射,设置CPU运行频率等一些参数,接着就进入了命令行模式。

    在Blob中提供tfdownload命令,主函数的形参就是接收到的命令内容和参数。若参数为“init”,则调用TF卡驱动的初始化,否则将此参数作为文件名传给FAT32文件系统打开并读取文件内容。最终实现“tfdownloadinit”调用TF卡驱动初始化TF卡。使用“tfdownload”+文件名可以调用FAT32文件系统和TF卡的驱动下载该文件名的镜像到内存中。

    2.6 MakeFile文件修改与交叉编译

    (1)TF卡驱动与FAT32文件系统编译

    按照Blob中驱动程序的结构,TF卡驱动与FAT32文件系统源文件保存在/SRC/blob/Platform/Common/Source目录下,而FAT32文件系统头文件在/src/blob/Platform/Common/include目录下,要在编译Blob的时候将添加的驱动一起编译,需要更改相应的Makefile。

    在/src/blob/Platform/Source下有三个Makefile文件,分别是Makefile.am,Makefile和Makefile.in,修改Makefile.am即可,Makefile和Makefile.in会自动修改。主要增加Makefile的头文件寻找目录和编译文件。

    (2)Blob命令编译

    src/commands下的命令编译由同目录的Makefile确定,同样需要修改Makefile使添加的命令编译到Blob中去。另外,要使该命令在Blob中生效,还需要修改Blob的configure.in文件,在configure.in中添加:blob_commands=“$blob_commands,tfdownload”;。

    (3)编译Blob

    linux-2.6.25中集成了Blob,用linux-2.6.25的工具链编译好之后,在…/pxalinux/MHN-LINUX-PLATFORM/rel/target/bin中,boot_nontrust.bin就是生成的Blob镜像。

    2.7 系统镜像下载的实现

    先用tfdownload init命令初始化TF卡驱动,然后使用tfdownload下载系统镜像到内存中,再使用Nandwrite命令写入NandFlash中。

    3 Android下挂载TF卡实现数据存储

    在Android系统中使用TF卡做储存器,必须先将TF卡挂载到Android上。要启用void,需要在Android启动配置文件init.rc中关闭mountd并开启void服务。通过对配置文件init.rc进行下面的修改完成此项功能。

    servICe void/system/bin/void //vold服务开启socket void stream 0660 root mount

    ……

    #service mountd/system/bin/mountd//mountd服务关闭(被注释了)#socket mountd stream 0660 root mount

    void.conf文件是void程序挂载设备的配置文件,里面记载了挂载设备的设备路径、设备类型以及挂载的目标位置(挂载点)。需要在该文件中加入TF卡的挂载信息,然后,将void.conf加入到system/etc目录下,void程序就可以直接读取该配置文件了。

    FAT32属于Windows分区,因为Windows分区里面的文件是没有权限这个概念的,所以在Linux系统中使用此分区时要手动指定默认权限。挂载TF卡之后Android的/sdcard目录不能直接通过chmod命令来修改对于system组的读写权限,在system下是无法直接访问TF卡的,需要在挂载的时候添加权限。在void中,真实挂载TF卡的操作如下:

    rc=mount(deVpath,vol->mount_point,“vfat”,flags,“utf8,uid=1000,gid=1000,FMask=711,DMAsk=700,shortname=mix ed”);其中uid代表属主,uid=1 000代表system用户,fmask和dmask分别对应文件和目录的权限8进制码的反码。

    4 设计结果展示

    本文调试的数据采集与传输单元实物如图5所示,TF卡位于PCB板右上角。使用该单元录制视频并保存在TF卡中,设定录制时间为30 s,30 s后关闭,取出TF卡,将TF卡与PC连接,录像文件效果如图6所示。   

f.JPG



d.JPG

    使用TF卡下载系统镜像操作步骤如下:
    (1)用“tfdownload init”命令初始化TF卡驱动,返回“TF Card INIT SUCCESS!”即表示TF卡初始化成功。
    (2)然后使用“tfdownload”+文件名的方式下载系统镜像到内存中,显示“TFCARD download done!”即表示TF卡下载镜像成功。
    (3)最后使用Nandwrite命令将内存中的镜像写入NandFlash中,返回“Done!”即表示写入成功。

g.JPG

    使用vold挂载TF卡的操作结果如图7所示。其中“logcat—s void”用来显示void运行的输出信息。“New MMC card‘0000’added”表示成功加载TF卡,“Disk…..New blkdev 179.0”表示TF卡作为一个块设备被成功加载,“Partition…..New blkdev 179.1”表示TF卡第一个分区被成功加载,“Successfully mounted vfat filesystem179:1”表示成功挂载FAT32分区。到这一步,Android系统就已经成功挂载了FAT32系统的TF卡。

    5 结语

    本文结合嵌入式开发调试和嵌入式大容量存储的背景,提出并实现了一个使用TF卡进行嵌入式系统开发调试及存储应用的方案。在嵌入式系统调试中使用TF卡下载系统镜像,速度与通用性都很好,还可以很方便的和PC机交换数据。作为嵌入式产品的一个构成部分,使用TF卡调试既省去了其他下载设备的设计,又可以在系统中作为大容量存储器使用。本文具体完成的工作包括TF卡同应用处理器的连接电路设计、TF卡的驱动程序设计和FAT32文件系统移植、在Android平台下实现了TF卡的自动挂载。


关键字:TF卡  开发调试  存储应用 引用地址:利用TF卡进行嵌入式系统开发调试及存储应用的方案

上一篇:基于ARM 内核的SoC已经成为嵌入式处理器的开发实现
下一篇:ADS+JLINK调试ARM图解

推荐阅读最新更新时间:2024-03-16 15:54

单片机在井下油气压力存储测试系统中的设计应用
ADuC812是美国ADI(Analog Device Inc)公司生产的高性能单片机,是全集成的12位数据采集系统。它在芯片内集成了高性能的自校准多通道ADC(8通道12位高精度)、2个12位DAC以及可编程的8位MCU(与8051兼容)。片内有8kB的闪速/电擦除程序存储器和在线下载/调试/编程的功能、640B的闪速/电擦除数据存储器、256B片内数据存储器以及与8051兼容的内核。另外MCU支持的功能包括看门狗定时器、电源监视器以及ADC DMA功能。同时为多处理器接口和I/O扩展提供了32条可编程的I/O线、与I 2C兼容的串行口、SPI串行接口和标准UART串行接口。MCU内核和模拟转换器均有正常、空闲和掉电工作模式,在工
[单片机]
单片机在井下油气压力<font color='red'>存储</font>测试系统中的设计<font color='red'>应用</font>
单片机在存储测试系统中的应用
1引言 ADμC812是美国ADI(Analog Device Inc)公司生产的高性能单片机,是全集成的12位数据采集系统。它在芯片内集成了高性能的自校准多通道ADC(8通道12位高精度)、2个12位DAC 以及可编程的8位MCU(与8051兼容)。片内有8kB的闪速/电擦除程序存储器和在线下载/调试/编程的功能、640B的闪速/电擦除数据存储器、 256B片内数据存储器以及与8051兼容的内核。另外MCU支持的功能包括看门狗定时器、电源监视器以及ADC DMA功能。同时为多处理器接口和I/O扩展提供了32条可编程的I/O线、与I2C兼容的串行口、SPI串行接口和标准UART串行接口。MCU内核和模拟转换器均有正常、空闲和掉电
[单片机]
单片机在<font color='red'>存储</font>测试系统中的<font color='red'>应用</font>
数字存储示波器TPS2014B的特性优势及应用范围
TPS2000B系列在示波器中提供了广泛的一系列功能,同时提供了用户熟悉、简便易用的控件和菜单。TPS2000B 系列采用 IsolatedChannel™ 技术,分 2 通道和 4 通道版本,与接地及在通道之间实现了隔离,可以让您轻松进行测量,而不用担心损坏电路。它标配电池电源,成为现场应用的自然之选。对电源电子器件测试,选配软件把通常需要的电源系统测量功能集成到仪器中,加快了电源分析和调试速度。 特性和优点: 100 MHz 和 200 MHz 带宽 高达 2 GS/s 的实时采样率 2 条或 4 条全面隔离和浮动通道,外加隔离外部触发 在安装两块电池时可以连续工作 8 小时,电池可以热插拔,几乎不受交流电源限制 选配电源
[测试测量]
圣桥信息:嵌入式在网络存储中的应用
上海圣桥信息科技有限公司CTO范里作了题为《嵌入式系统在网络存储中的应用》的发言,介绍了网络存储技术、数据保护技术和未来64位嵌入式存储操作系统的设想。并且,范里对于未来云存储概念同样十分看好,他表示正在寻求硬件和软件平台的厂商的合作,共同推进云计算的发展。 范里 上海圣桥信息科技有限公司 以下是《嵌入式系统在网络存储中的应用》演讲实录: 本来是希望白英采老师来,但是年岁大了,我就来了。 记得当时在01年我们实验室就在做网络存储这方面的研究,那么我研究生时候的课题也是这个方向,毕业之后,觉得从IT当面来讲网络存储是IT界的第三次浪潮,我觉得这还是有很多值得投入的。最开始网络存储在国内
[嵌入式]
FLASH存储器的在系统编程及其在DSP系统中的应用
    摘要: ATMEL公司生产的串行Flash AT45系列存储器的容量已达到了16Mb,常用于数据存储系统。文中以AT45D041为例,详细介绍了该系列Flash存储器的命令集以及串行SPI接口的应用方法,并给出了相应的模式时序。     关键词: SPI Flash Buffer 中断 AT45D041 现在,数字信号处理器(DSP)正越来越多地应用到各种场合。而FLASH存储器已成为DSP系统的一个基本配置,主要用于存放用户程序代码。目前FLASH存储器正在从单纯的EPROM的替换件演变为许多电路系统中的不可缺少的组成部分。 将用户程序代码装入FLASH存储器的方法有三种。
[缓冲存储]
总结下开发调试MSP430系列的一些另类问题
原始级 问题,一般是刚开始入门的哥们姐们要遇到的问题 1, 接上仿真器,发现不能下载,这个问题想必大家都有遇到过,IAR提示找不到目标!?? 可能的原因: A 并口驱动能力不足,在电脑的BIOS界面下设置成ECP或者 ECP+EPP模式 B JTAG线太长,一般超过20CM不推荐,而且这个线最好不要交叉缠绕,会影响实时在线调试 C 你的负载太大,一般功耗相对比较大,电流超过20MA以上的板子,建议用外接电源,要不光靠并口那点驱动能力,那MCU的电压就要被拉低到不能写FLASH了,呵呵 2, 程序下载到一半,突然告警并报错,说某某地址写不进去!??倒~~我开始也以为是FL
[单片机]
Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡TF卡读写
前言 功能: 通过SPI读写SD卡/TF卡上的文件系统 支持FAT16, FAT32, exFAT, 即FatFs所支持的文件格式. 支持存储卡容量512MB至64GB, 更高容量未测试 实现基于 STM32CubeMX, STM32F4 v1.26.2 FatFs, R0.12C(STM32CubeMX内建版本) 大部分参考自STM32Cube配置SPI读sd卡 https://controllerstech.com/sd-card-using-spi-in-stm32/ 视频 https://www.youtube.com/watch?v=spVIZO-jbxE 项目代码 https://github.co
[单片机]
Keil MDK STM32系列(九) 基于HAL和FatFs的FAT格式SD卡<font color='red'>TF卡</font>读写
固态存储进一步提升企业IT应用性能
固态存储的新机遇 在今天的企业中,信息系统的重要性已经是公司运营的命脉,信息管理人员必须仔细小心的维护信息系统的正常运作,同时还得在有限的成本压力下去提升它的工作效率。除了加快处理器的速度之外,资料存取的方法也和系统效能息息相关,随着固态存储的出现,企业级存储系统的发展方向也有了新的变化,大家都对传输速率高出传统硬盘两倍以上,同时兼具省电和抗震、可靠性高的固态存储充满了期待。 如今IT人员也已经意识到固态存储确实有助于降低资料存取的延迟时间,从而提升应用性能。特别是那些工作负载由随机存取所主导的应用,改善的成效更为明显。事实上,固态存储的优势不止如此,当它提升了单台服务器的性能并允许服务器整合,也意味着公司可以降低
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved