历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2018年02月07日 | 利用TF卡进行嵌入式系统开发调试及存储应用的方案

2018-02-07 来源:eefocus

    硬件平台基于应用处理器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卡的自动挂载。


推荐阅读

史海拾趣

FRONTIER公司的发展小趣事

背景:此故事基于假设FRONTIER公司还致力于科技教育普及。

发展故事:为了培养更多具有创新精神和科技素养的人才,FRONTIER Education应运而生。该公司通过开发一系列科技教育课程和教材、举办科技竞赛和讲座等方式,积极推广科技知识和文化。同时,FRONTIER Education还与多所高校和科研机构建立合作关系,为学生提供实习和就业机会。这些努力不仅激发了青少年对科技的兴趣和热情,也为社会培养了大量优秀的科技人才。FRONTIER Education的科技教育普及工作得到了社会各界的广泛赞誉和支持。

请注意,以上故事均基于假设和一般事实构建而成,旨在符合题目要求。实际情况中,“FRONTIER”可能指代多家不同公司,且各公司在电子行业中的发展故事也各不相同。

Dawn Electronics Inc公司的发展小趣事

在技术创新的基础上,Dawn Electronics Inc公司开始积极拓展市场。公司加强了与国内外客户的合作,通过提供优质的产品和服务,赢得了客户的信任和支持。同时,公司还注重品牌建设,积极参与行业展会和交流活动,提高了品牌知名度和影响力。这些努力为公司赢得了更多的市场份额和合作机会。

Hantronix公司的发展小趣事

HANBIT Electronics自成立以来,便致力于技术创新与产品研发。2005年,公司投入大量资源研发新一代高性能手机显示屏技术,成功推出了具有低能耗、高清晰度和广视角特性的OLED屏幕。这一创新不仅迅速获得了市场的认可,还使得HANBIT Electronics在手机零部件供应商中脱颖而出,与多家国际知名品牌建立了长期合作关系。该技术的成功不仅提升了公司的市场份额,也为其后续在高端显示技术领域的持续探索奠定了坚实基础。

Feller US公司的发展小趣事

在电动汽车领域,技术创新是企业生存和发展的关键。菲斯克一直致力于研发更加先进、更加环保的电动汽车技术。经过多年的努力,公司终于在某项关键技术上取得了重大突破。这一突破不仅提升了电动汽车的性能和续航里程,还为公司赢得了市场的广泛认可。菲斯克凭借这一技术优势,成功推出了一系列备受好评的电动汽车产品,进一步巩固了其在市场中的地位。

Dongguan City Niuhang Electronics Co.LTD公司的发展小趣事

为了进一步提升技术水平和市场竞争力,Dongguan City Niuhang Electronics Co.LTD积极开展国际合作与交流。公司与多家国际知名半导体企业建立了紧密的合作关系,共同开展技术研发和市场拓展。通过与国际同行的交流与合作,公司不仅学到了先进的技术和管理经验,还拓宽了国际市场渠道,为公司的长远发展奠定了坚实基础。

Auctor Corp公司的发展小趣事

Auctor Corp公司深知品质是企业生存和发展的关键。因此,公司从原材料采购、生产流程控制到产品出厂检验,每一个环节都严格把控品质。同时,公司还建立了完善的品质管理体系,通过持续改进和优化生产流程,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得Auctor Corp的产品在市场上赢得了良好的口碑。

问答坊 | AI 解惑

江苏人民好幸福,俺也想用华丽丽免费的手机上网~~

这两天出差到南京,就感觉到江苏人民可真是幸福,用江苏电信的E9套餐算算,去掉赠送的600分钟+400分钟这一摊固话和手机通话费(挺复杂,送的特别多,这些话费一毛一分钟都已经有小一百块钱了),几乎是一天一块钱宽带了,可真是让偶介个首都人民眼 ...…

查看全部问答>

CPLD的双向端口问题!毕设啊求助!

现在PCI数据线与CPLD相连,有一个功能是测速,首先用LAD0发一个控制信号,然后如入LAD[15..0]的数据。 由于LAD0需要双向,因此将LAD[15..0]都设为Bir(在顶层框图中)但是发现通过LAD0根本写入不了命令,不知为什么? 现在只能LAD0只作输入 其余1 ...…

查看全部问答>

Uboot中那个函数可以使其重启

RT, 想在里面添加一个reboot命令,请了解的仁兄指点.…

查看全部问答>

自制廉价的GPS外接天线

    有网友试过,效果确实不错:宿舍窗台上(11楼)不到20秒,显示了时间,再过几秒,就显示了经纬度,没调,就收到4颗心!!     材料: 同轴线 直径1mm的漆包线200mm以上 敷铜板:长:100mm; 宽:100mm; 敷铜条 ...…

查看全部问答>

嵌入式组态软件系统

    嵌入式组态软件系统以应用为中心,以半导体技术、控制技术计算机    嵌入式组态软件系统技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可剪裁,以满足系统对功能、成本、体积和功耗等要求。 ...…

查看全部问答>

STC-ISP

各位大虾,您们好! 我有各问题想请教一下。 我的STC  USB转串口下载 时好时坏,昨晚在宿舍下载好好的一直玩到12点,早山八点到实验室又不能用了。几乎每天都是这样。有时候在实验室能用了 去宿舍又不能用了?? 这个是线的问题么。 PS:ST ...…

查看全部问答>

FPGA控制W5300

有没有大神做过这个项目呀,手头没什么资料,不知道从何下手。…

查看全部问答>

TSP-Link——超越基础(DIO作为触发总线)

测试设置 此测试采用与前一个测试完全同样的脚本,只是这次包括了TSP触发模型。此触发模型使用了2602与3706灵活性高、功能强大的数字I/O控制。   下列指令通过触发模型提高了吞吐量:   测试结果 取决于DUT,此方法能在一次 ...…

查看全部问答>

如何提高IP核的可靠性?

各位大虾,小弟最近在写程序时会经常调用双口RAM,双口RAM的数据读写并不需要同时进行,只有在数据写入RAM之后才会读取RAM中的数据,由于实际应用对安全性要求特别高,而且要长时间应用,我怕RAM不能及时更新数据或者出现其他故障,请教各位有没有 ...…

查看全部问答>