当前位置:首页 > 单片机 > 单片机
[导读] 硬件平台基于应用处理器PXA310,软件平台基于嵌入式Linux的Android操作系统。首先介绍了TF卡与应用处理器的连接电路设计。然后介绍TF卡驱动程序的设计和Android对TF卡的挂载方法。在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模式的方式,性能与实现难度都可兼顾。


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卡初始化流程图。

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

2.4 FAT32文件系统移植

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



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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭