精华内容
下载资源
问答
  • 嵌入式flash播放器的源代码,嵌入式flash播放器的源代码好东西
  • 编程器编程是最原始的编程的方法。在编程芯片焊装到电路板之前使用专门的编程器对芯片进行代码或数据的写入,然后将编程的芯片安装到电路板上。
  • EasyFlash是一款开源的轻量级嵌入式Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。非常适合智能家居、可穿戴、工控、医疗等需要断电存储功能的产品,资源占用极低,支持各种 MCU 片上...
  • 一个开源的嵌入式flash播放器的源代码。
  • 本文详细分析了嵌入式 F l a s h 播放器的相关技术以及总体结构, 针对 已有产品存在的问题和不足, 在核心模 块的实现技术上进行 了改进, 最后介绍了笔者 自行设计的嵌入式 F l a s h 播放器Wi t F l a s h的具体...
  • EasyFlash是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。
  • 嵌入式Flashmemory技术简介及工作原理 1概述随着数码时代的来临除了PC外越来越多的数码信息产品正在或即将进入我们的家庭移动电话掌上电脑数码相机GPS等等这些产品越来越多的使用各种移动微存储器这些存储器中很大...
  • 嵌入式Flash文件系统——UFFS

    千次阅读 2014-07-23 18:09:33
    UFFS 嵌入式Flash文件系统  |举报|字号 订阅 UFFS特性介绍 UFFS是一个专门为NAND Flash设计的嵌入式文件系统,她具有一些非常诱人的特性以适合嵌入式应用: * 超低内存需求: (下表是...

    UFFS是一个专门为NAND Flash设计的嵌入式文件系统,她具有一些非常诱人的特性以适合嵌入式应用:

    * 超低内存需求: (下表是一些典型配置情况下的内存需求)

    NAND flash | Total Blocks | Buffers/Caches | Total RAM cost

        128M   |      8192    |       40/30    |     164K

         32M   |      2048    |       40/30    |      68K

         16M   |      1024    |       10/10    |      26K

    关系树结点: 16 * toatl_blocks

    页缓存: page_size(512) * buffers (10 ~ pages_per_block)

    块信息缓存: (14 * pages_per_block) * block_info_caches ( 5 ~ 20)

    总内存需求 = 关系树结点 + 页缓存 + 块信息缓存 + 其它(1~2K)

    由于所需内存很少,因此UFFS可以应用在一些对内存使用比较苛刻的场合,例如有些MCU仅有数十KB至一百多KB的内置SRAM, 无需外扩内存即可使用UFFS管理大容量NAND Flash。UFFS内部使用更高效的方法管理树结点和缓冲区内存,在启动时就一次性分配好要使用的内存。一旦分配内存此后便不再改变(上表所列内存即为最大使用内存),这些内存直至卸载UFFS时才全部释放,因此UFFS可以采用静态内存分配,以适应无法提供动态内存分配器的系统(例如有些高可靠系统上禁止使用动态内存分配)。

    * 快速启动

    不象YAFFS在启动时需要读取所有Spare区,UFFS在启动时每个块仅需读取一至两个Spare即可,因此可以实现快速启动。典型情况下,装载(mount) 128M字节满负荷的UFFS分区仅需要不到1秒。

    * 高鲁棒性

    UFFS采用日志式更新算法,任意时刻意外断电,UFFS文件系统可保持完整性。意外断电时,仅处于缓冲区内的部分数据丢失,在下次启动时,UFFS会自动回滚到最后一次成功写入的状态。

    * 坏块管理,ECC校验和纠错,负载均衡

    这些特性对于Flash文件系统来说不算什么新鲜,但是UFFS以一种简单却非常有效的方式实现了他们。

    * 无需额外的垃圾回收

    因NAND Flash的擦除速度极快,UFFS采用边写入边动态回收“脏”的块的方法,因而无须额外的垃圾回收机制。

    * 可支持直接“裸”Flash接口,无须操作系统支持

    UFFS支持通过I/O口线连入系统的“裸”Flash接口,只需实现简单的"读/写/擦除"等操作即可,适合在小型RTOS甚至无OS的情况下使用。 

    * 支持多分区,多种NAND Flash

    UFFS支持多个分区,每个分区以一个虚拟目录的形式mount到根目录下。UFFS支持多种NAND Flash芯片,允许不同的分区使用不同类型的FLASH芯片。 目前UFFS内置支持多数Samsung NAND Flash,包括small page(512)和large page(2048).

    * 测试完备

    UFFS可以在附带的PC模拟器(用PC上的一个文件模拟Flash芯片)上方便测试。目前已经有超过万台的嵌入式设备使用UFFS作为大容量NAND Flash文件系统。

    为何发起UFFS项目?

    * 一些嵌入式系统RAM资源有限,但希望在NAND Flash上建立高度可靠的文件系统。

    JFFS/JFFS2 消耗太多内存,而且不容易移植到不具备OS的嵌入式系统上。

    YAFFS/YAFFS2 是一个非常优秀的可适合NAND Flash的文件系统,但是 依然需要消耗不少内存

    * 其他?擅未发现有类似的开源项目....

    何处可以获得UFFS ?

    目前你可以从 sourceforge.net (http://www.sourceforge.net/projects/uffs)上下载UFFS的所有资源.

    一些bug总是在最新的SVN库里面得到最先修正。目前最新的SVN库地址:https://uffs.svn.sourceforge.net/svnroot/uffs/branch/dev-uffs-1.1.1

    工作原理

    请参考这份文档:

    在PC上尝试UFFS

    Compile and run UFFS test shell:

    • Linux:

      cd path_to_uffs/

      . ./prepare.sh

      ./configure && make

      ./src/emu/uffs

    • Windows:

      Open the Visual Studio C++ 6.0 project file: path_to_uffs/vcprj/uffs/uffs.dsp

    移植到嵌入式系统

    • Modify uffs_os.c for your embedded software environment.
    • Create the flash interface file in which implement all member of "struct uffs_DeviceOpsSt" and create your partition/mount point configuration. (see: src/example/flash-interface-example.c)

    新加入一种NAND Flash类型

    • Create Flash class file: uffs_nand_xxxx.c (see: uffs_nand_samsung.c)
    • Add the new flash class to "flash_class_tab" in uffs_class.c
    • Create the low level flash operation interface. (see: src/example/flash-interface-example.c)

    如何支持UFFS?

    使用UFFS,或者发现并报告bug给我 :-)

    有问题?

    下一个版本: UFFS2

    The main improvement on UFFS2 will be:

    *The smaller memory footprint: reduce 25% memory usage as a result.

    *One or more files/directories reside on one block, will significantly improve space efficiency for small files.

    *Symbol link or other special files.

    *ECC data on page area or on spare (page area only for UFFS1)

    *Support NandOne and more NAND flash chips ...

    展开全文
  • EasyFlash是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供 三大实用功能 : Env 小型KV...

    EasyFlash是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供 三大实用功能 :

    Env 小型KV数据库,支持 写平衡(磨损平衡) 及掉电保护模式
    让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。在产品上,能够更加简捷的实现 设定参数 或 运行日志等信息掉电保存的功能。

    IAP 在线升级再也不是难事儿
    该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。

    Log 无需文件系统,日志可直接存储在Flash上
    非常适合应用在小型的不带文件系统的产品中,方便开发人员快速定位、查找系统发生崩溃或死机的原因。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现C日志的Flash存储功能。

    1.1、资源占用

    最低要求: ROM: 6K bytes RAM: 0.5K bytes + (Env大小)

    Demo平台:STM32F103RET6 + RT-Thread 1.2.2 + Env(2K bytes)
    实际占用: ROM: 6K bytes RAM: 2.6K bytes
    1.2、支持平台

    目前已移植硬件平台有 stm32f10x 与 stm32f4xx 系列的片内Flash,这个也是笔者产品使用的平台。其余平台的移植难度不大,在项目的设计之初就有考虑针对所有平台的适配性问题(64位除外),所以对所有移植接口都有做预留。移植只需修改 easyflashportef_port.c 一个文件,实现里面的擦、写、读及打印功能即可。

    欢迎大家 star and pull request(Github|OSChina) 。开源软件的成功离不开所有人的努力,也希望该项目能够帮助大家降低开发周期,让产品更早的获得成功。

    2、流程

    2.1、Env:环境变量(KV数据库)

    下图为通过控制台(终端)来调用环境变量的常用接口,演示了以下过程,这些接口都支持被应用层直接调用。

    1、创建“温度”的环境变量,名为 temp,并且赋值为 123;
    2、保存“温度”到Flash中并重启;
    3、检查“温度”是否被成功保存;
    4、修改“温度”值为 456 并保存、重启;
    5、检查“温度”是否被成功修改;
    6、删除“温度”的环境变量。
    image
    2.2、IAP:在线升级

    下图演示了通过控制台来进行IAP升级软件的过程,使用的是库中自带的IAP功能接口,演示采用的是串口+Ymodem协议的方式。你还也可以实现通过CAN、485、以太网等总线,来实现远程网络更新。

    image
    2.3、Log:日志存储

    下图过程为通过控制台输出日志,并将输出的日志存储到Flash中。重启再读取上次保存的日志,最后清空Flash中的日志。

    image

    文章转载自 开源中国社区 [http://www.oschina.net]

    展开全文
  • 嵌入式flash编码器与Flash Media对接

    千次阅读 2014-01-06 09:08:03
    据独立的市场分析机构comScore提供的数据显示,全球81%的网络视频是通过Adobe的Flash技术观看的,从而使之... 国内一直很少能直接支持Adobe Flash Media server(简称:FMS)的嵌入式编码器,大部分是采集卡使用flash

    据独立的市场分析机构comScore提供的数据显示,全球81%的网络视频是通过Adobe的Flash技术观看的,从而使之成为网络上第一大视频格式。 据国外媒体报道称,Adobe Flash Player软件已经安装在了98%的上网计算机上和日益增加的手机上。

      国内一直很少能直接支持Adobe Flash Media server(简称:FMS)的嵌入式编码器,大部分是采集卡使用flash encoder编码器直接和FMS结合。而市场需要一稳定的、高质量、操作方便的嵌入式编码器呼声一直很高,现在终于有款嵌入式的h.264编码器直接支持FMS,下面我们抛砖引玉介绍一款支持Adobe Flash Media server嵌入式flash编码器与FMS的对接技术。

      Adobe Flash Media Server 3.5发布了,这是一款支持H.264的正式版本。关于H.264,已经说得太多,播放H.264的视频也很简单,使用常见的视频播放器就可以了。但是怎么把现有的视频通过H.264编码压缩成文件或者把视频流直播到网络上呢?接下来就是我们要使用高创公司的H.264编码器与FMS搭配使用的过程。

    首先我们要了解下Adobe官方提供的一个Flash Player支持的视频编码列表(原文):

    视频编码

    SWF 文件格式版本(发布的版本)

    支持播放的最小Flash Player版本

    Sorenson Spark

    6

    6

    On2 VP6

    6

    8

    H.264 (MPEG-4 Part 10)

    9

    9.0.115.0*

    音频编码

    SWF 文件格式版本(发布的版本)

    支持播放的最小Flash Player版本

    ADPCM

    6

    6

    MP3

    6

    6

    HE-AAC (MPEG-4 Part 3)

    9

    9.0.115.0*



    *Flash Player 可以播放视频编码为H.264,音频编码为AAC的标准MPEG-4文件。文件的扩展名可以是:F4V,  MP4, M4A, MOV, MP4V, 3GP, 3G2等等。

    注意:如果没有特别说明,下面的Flash Player都指Flash Player 9(v 9.0.115.0)

    Flash Player 9 (v 9.0.115.0) 支持下面的 MPEG-4 标准的子集:

    MPEG-4 标准

    Flash Player Update 3

    ISO/IEC 14496-3 (Audio AAC)

    AAC Main; AAC LC; SBR

    ISO/IEC 14496-10 (Video AVC)

    Base (BP); Main (MP); High (HiP). All levels are supported.

    ISO/IEC 14496-12 (Container)

    1 Audio track; 1 Video track

    3GPP TS 26.245 (Timed text format)

    Full support.


      那么,什么是H.264?“MPEG4 Part 10”是什么?它和“Part 3”、“Part 2” 有什么关系?可以看这篇文章。
    简单的讲,H.264、MPEG4 Part 10、MPEG4 AVC和ISO/IEC 14496-10 都是一个东东,就是一种视频编码格式,同时也是高清电影采用的视频编码格式之一(另外两种是MPEG2和VC-1)。而平常我们熟悉的DivX以及XviD编码,都属于MPEG4标准的范畴,但它们属于MPEG4 Part 2,Flash Player是不支持它们的。

      了解了基本的Flash Media 知识之后,接下来我们了解下高创公司的H264编码器。选择优秀的压缩工具至关重要。Flash的编码器有软件压缩和硬件压缩两种,通过软件压缩会占用一台高性能的计算机,对企业资源是一个很大的浪费。本着实用、专业、简单的原则,我们测试一这款国产优秀的编码平台。以下是高创网站对产品的介绍:

      一款支持Adobe Flash Media server嵌入式h.264编码器(flash 编码器)---- GoCaster 4000。

      GoCaster 4000编码器结合多年的数字视频的开发经验而设计的一台H.264/AVC编码器,支持真正的广播 级的Main Profile标准,符合 IPTV标准的数字视频编码器;采用嵌入式操作系统设计,保证工作的稳定性;GoCaster4000采用了超前的H.264/AVC压缩算法,以及最先进的视频预处理技术、动态侦测、场检测技术等,都使能够以最小的压缩码率,而能够达到最好的图像压缩质量。支持常见的RTSP、UDP、TCP、HTTP、RTMP传输协议,可以实现诸如DSL、以太网、卫星、有线和LMDS等宽带地面和无线网络传送直播视频流。

    功能特性:

    H.264/AVC MainProfile广播级视频编码器嵌入式平台
    支持H.264 Transport 和Program流的编码Entropy coding (支持CAVLC/CABAC )
    支持 MPEG-4 embedded in MPEG-2 TS传输流的编解码
    TS传输流支持Video PID、Audio PID、PCR PID、PAT、PMT可调  *
    通过以太网端口进行基于Web的远程管理和本地管理
    支持多种IP网络协议及直播模式: UDP,TCP,RTSP,HTTP,RTMP等

    典型应用:

    视频网络直播
    IPTV
    移动电视
    VOD系统
    远程监控

    技术参数:

    视频格式:H264/AVC (MPEG-4 Part-10)
    视频输入:S端子,复合,SDI(可选)
    音频格式:AAC,G.711,MP3,MP2
    视频级别:Main和Baseline
    取样频率: 32KHZ,44.1KHZ和48KHZ
    分辩率: 常用分辩率可选
    视频码率:20Kbps-3Mbps
    音频码率:16Kbps-320Kbps
    文件格式:TS

    硬件准备工作:

    H264编码器:高创Gocaster 4000
    Midea服务器:Flash Media Server 3.5 服务器
    网络状况:100M LAN

    把高创H264编码器用接入局域网,接着我们一起开始“LIVE STREAM”的过程。
    登陆高创H264编码平台,整个操作界面很直观易懂,我们首先按如下如下参数设置:
    根据我们所知情况,为移动设备准备视频时我们采用Baseline方式,而不使用B帧进行压缩,其他的时候就都使用Main方式进行编码,以提高视频压缩的质量。



    (图一)

    在压缩前,最重要的就是在系统配置中选择视频编码和音频编码。根据上面的表格我们知道,Flash Player 9.0.115支持H.264视频编码和AAC音频编码。下图是我在H264编码器中的进行设置。
     

    (图二)

    其中“音频编码类型”有这样几个选项:AAC、MP2、G.711和MP3。经过测试,这几个规格压缩的音频只有AAC和MP3可以被Flash Player支持。


    (图三)

    将这三个设置调整好即可。H.264的编码优于WMV9,所以在压缩的时候,选择的视频码率都小于视频源的码率。

     
    (图四)

    一般情况下,国内的视频源都是PAL制式,Main模式下生产的H264视频,最高支持像素分辨率可以达到4096×2048,码率可以达到720Mbps。但是只有很少的桌面电脑是可以进行完整帧频的播放的,更多的是在以每秒25帧的帧频进行播放的FD1常见的视频流。对平均信息量编码CAVLC和CABAC两种模式的选择,我们建议使用CAVLC,因为这种模式是一种比较通用的编码解决方案。


    (图五)

    编码器与服务器端使用RTMP协议通信。RTMP协议默认使用1935端口RTMPT协议,与RTMP协议类似,而RTMPT协议使用80 端口。下图是RTMP协议的具体格式。

    到此,编码器的编码已经设置好。我们点击“开始编码”系统开始运行。

    测试RTMP DEMO For FALSH MEDIA SERVER 3.5

    H264编码器开始工作后,已经把“LIVE STREAM”推到Adobe Falsh Media Server 3.5平台了。我们如何测试系统是否推送成功呢?

    登陆FMS服务器,点击“开始菜单-程序-Adobe-Flash Media Server 3.5在菜单列表中选择Flash Media Administration Console 登陆FMS系统控制台。
    在控制面板中点击View Applications 下Streams 项目,点击左边的live 可以看到如下窗口:


    (图六)

    可以看到,在live/_definst_ - Streams 列表中已经生成了一个发布点MyVideo. 这个发布点就是我们通过高创H264编码器推达过来的。
    现在我们通过Flash Media Server的DEMO用网页接收下这个发布点,在网页中打开C:Program FilesAdobeFlash Media Server 3.5webrootindex.html
    点击右栏INTERACTIVE菜单,在SERVER中输入服务器IP地址,视频流的名称后点击Play Live Stream就可以看到LIVE STREAM了。


    (图七)

    下一章我们将介绍一款gobox hd高清机顶盒和Adobe Flash media server完美结合技术方案。

    公司概况:
    广州市昕创(高创视讯)电子计算机有限公司创立于1997年,是国内有名的集多媒体广播视频系统开发、集成和销售为一体的技术性公司。以高科技为依托,是中国最较具实力的硬件、软件服务供应商之一,多年来本公司致力于MPEG数字视频的产品开发及集成销售,并对MPEG数字视频具有丰富的开发经验,主要产品视频产品的开发、集成和生产。

            1、DVB、IPTV编码器。
            2、IPTV整套产品解决方案---服务器到终端IP机顶盒。
            3、3GP手机电视---编码器等。
            4、流媒体直播---视频编码器、压缩卡等。
            5、DVD制作---压缩卡等。
            6、非线性编辑。
            7、电视台播出、虚拟场景系统等。

            一直以来,我们不断引进国外最先进的技术,同时结合自身强大的技术研发力量,自行设计开发出适合国内广播电视行业、教育需求、数字视频等的专业产品,为推动多媒体数字视频产业发展而努力。 多年来的持续高速发展,高创精品已成为中国优秀IT的一面旗帜。

            公司位于广州IT中心的天河,毗邻华南理工、华南师范,现各类专业人才近90人,办公面积900多平方米。公司在北京设有分公司和上海办事处,在全国各地建立了近3000余家经销及零售网点,在港澳台、东南亚、北美等地区有几十家代理商。另外,以硬件技术精湛而闻名的高创公司在硬件捆绑销售与技术合作方面,已中兴、华为、UT、同洲电子、联想、等知名IT企业建立了紧密的合作关系。
            我们以专业的技术力量、热诚的服务态度和完善的售后服务为广大的客户提供优质的产品。现在已经在服务与个大企业,政府等单位。我们客户(部分):
            深圳中兴(IPTV)、华为(IPTV)、UT(IPTV)、深圳同洲电子(IPTV)、上海文广(IPTV)
            国家广播电影电视总局(流媒体)、广东省电网公司(流媒体)、杭州国家安全局(视频直播)、北京军区(数字采集)、CCTV(数字采集)、
            广州外国语大学(视频直播)、中山大学(直播)、暨南大学(直播)、华南师范(直播)、华南理工、西安理工、郑大、浙大、重庆广电局等!
            本公司竭诚欢迎各行业的新老用户前来洽商合作。

    详情欢迎登陆广州市昕创(高创)电子计算机有限公司
    网站http://www.gotron.com.cn/   http://www.gotron.net/
    或致电020-22381271/2/3/4/5。Email:support#gotron.com.cn (#改@)

    原文地址:http://price.zol.com.cn/181/1814890.html

     
    展开全文
  • 上海华虹NEC电子有限公司宣布,公司在0.25um 嵌入式Flash平台上推出USB Inter-Chip PHY IP (HQUSBFI001),该IP为片上芯片之间的通信提供了良好的解决方案。  HQUSBFI001具有低功耗的特点,挂起时可以设置为标准...
  • 嵌入式Flash文件系统的设计与实现

    千次阅读 2009-07-13 14:40:00
    1 引言 随着嵌入式系统越来越广泛的应用,嵌入式系统中有大量的数据需要存储和管理。Flash存储器具有容量大、体积小、功耗小、成本低、掉电后数据不丢失、读访问...引入嵌入式Flash文件系统正是解决这个问题的好办法

    1  引言

        随着嵌入式系统越来越广泛的应用,嵌入式系统中有大量的数据需要存储和管理。Flash存储器具有容量大、体积小、功耗小、成本低、掉电后数据不丢失、读访问速度高、抗震性好等一系列的优点,已经成为嵌入式系统中广泛应用的存储器件。但是随着系统复杂性的增加和存储器容量的加大,如何高效地存储和管理数据从而方便用户使用,成为一个重要的课题。引入嵌入式Flash文件系统正是解决这个问题的好办法。
        基于Flash存储器本身的特性,并结合笔者所参与的嵌入式系统项目,在嵌入式操作系统μC/OS-II的基础上设计了一种嵌入式Flash文件系统,主要完成了以下几个目标:一是提供给应用程序通过文件名而不是物理地址访问系统Flash的能力;二是提供与底层存储器无关、清晰的编程接口API,使上层应用不再关心底层具体设备;三是提供一种简单的Flash扇区擦写次数均衡算法,以延长Flash的使用寿命;四是提供掉电安全机制;五是针对本项目的特殊性,将文件分类存储,同一种类的文件存储在同一个扇区内。

    2  Flash存储器特点

        嵌入式系统中使用的Flash主要分为NOR和NAND两种类型,一般使用NOR技术的Flash存储器,既可以存储数据,又可以存放直接执行的代码。这里以NOR型Flash为例进行介绍。
        Flash存储器的读操作与普通的SRAM存储器类似,可以实现完全随机的字节读取,但是它的写操作就较为特殊,不能对同一内存地址写入两次,而必须先经过耗时的擦除操作后才能写入,而且Flash的擦除操作以扇区为单位(扇区大小一般为64KB)。扇区被正确擦除后,所有的位都变为“1”,即整个扇区的内容都被置为0xff。在写入操作时,可使必要的位从“1”变为“0”,但是要让位从“0”变为“1”,就需要再重复以上的“擦除——写入”过程。此外,Flash存储器数据传输中的时间瓶颈不在于读操作,而在于内部的擦写操作上,一般需要1~2s,甚至最长要10s。
        NOR型Flash每个扇区的擦除次数都有限制,当前的Flash芯片一般支持10万~100万次的擦除,而写入操作对Flash损耗不大,一般没有次数限制。

    3  嵌入式Flash文件系统的要求

        基于Flash芯片本身的特性和嵌入式系统的应用环境,一般对嵌入式Flash文件系统有如下的要求:
        (1)掉电安全机制。由于嵌入式系统的运行环境一般都比较恶劣,但同时又要求系统有较高的可靠性,即在系统突然掉电或者重新启动后,不能破坏Flash中的数据,同时保持文件系统的一致性和完整性。
        (2)均衡磨损(wear_leveling)。由于Flash的擦除次数有限制,所以文件系统要均衡使用Flash的每个扇区,延长Flash的使用寿命。
        (3)垃圾回收机制。在存储器分配使用一段时间后,Flash中可能存在脏数据,这就要进行垃圾回收,将无效的数据从存储器中清除来保证高效地使用存储器。因为Flash的擦除以扇区为单位,所以垃圾回收也应该以扇区为单位进行,将有效的数据全部移动到另一个扇区后再擦除整个扇区。

    4  Flash文件系统的设计

        为了使文件系统的结构清晰,便于在不同Flash存储器上的移植,本Flash文件系统提供了3个基本的操作作为与Flash存储器设备的应用接口,包括扇区擦除(sector_erase)、页面写入(page_write)、页面读出(page_read)。这样可以忽略某些Flash存储器产品的独有特性,便于文件系统的移植。此外,本Flash文件系统还向应用程序提供了统一的、标准的API接口,包括:init( )——初始化文件系统,open( )——打开一个存在的文件,close( )——关闭一个已打开的文件,read( )——读一个指定的文件到文件缓冲区中,write( )——写文件缓冲区的数据到一个指定的文件中,delete( )——删除一个指定的文件。

    4.1  Flash文件系统的存储结构

        本Flash文件系统将整个存储空间分成两个部分:文件分配表和数据区域。
        (1)文件分配表(FAT,File Allocation Table)。主要反映了Flash存储器的扇区的使用情况,记录了各个扇区的状态,该扇区当前存放的文件的类型以及该扇区已经进行扇区擦除的次数。每个扇区的使用情况都在文件分配表中存有一项,每个表项占8个字节,数据结构如下所示:
    struct  FAT_item{
        char sector_state;/*扇区状态*/
                       unsigned short file_type;/*该扇区中存放的文件类型*/
                       long erase_time;/*该扇区已经进行擦除的次数*/
        char reserved;/*保留*/
    }
        其中扇区有5种状态分别为:
        0xff——空闲扇区;
        0xfe——扇区已被占用;
        0xfc——扇区的数据为过时数据;
        0xf8——脏扇区,可以进行整片的扇区擦除;
        0xf0——坏扇区;
        (2)数据区域(Data Area)。除了文件分配表以外的扇区都称为数据区域。该区域采用线性Flash文件系统的设计思想,文件分为文件头和文件数据区两部分。文件头的数据结构如下:
        struct file_header{
            char name[NAMESIZE];/*文件名*/
            long size;/*文件大小*/
            struct file_header *next;/*指向下一个文件头的指针*/
            char file_state;/*文件状态*/
    }
        文件头中用一个变量file_state来表示该文件当前的状态,只用了它的低4位来表示文件的5种状态,主要用于掉电数据恢复和垃圾回收。这在下面将有详细讲述。此外,本Flash文件系统分配给每个文件块的空间(即块大小)为2K,故一个扇区中最多可存储32个文件。用单向链表来链接文件,若next域为0xff,说明这是分配给该文件的最后一个文件块。

    4.2 提高Flash文件系统可靠性

        由于Flash存储器本身可能出现物理性坏损的情况,所以应该保证文件分配表的有效性。鉴于每个扇区的FAT项都很小,并且结合具体Flash芯片的特性,可以将Flash芯片的较小的扇区分配给FAT。本项目开发中使用的Flash芯片共39个扇区,其中有8个8K的扇区和31个64K的扇区。所以本文件系统将前3个8K的扇区存放引导程序,后5个8K的扇区分配给FAT。每次使用其中的两个扇区作为一个主FAT和一个备份FAT。当有一个扇区损坏的时候,可以从剩下的扇区中再取出一个扇区与另外的那个好的扇区重新组合成一对一主一备的FAT。只有当这5个扇区都损坏了,系统则彻底崩溃了。这样相对于只使用一个扇区或者两个扇区作为FAT来说大大提高了系统的可靠性。
        针对系统突然掉电与重启动的情况,本Flash文件系统提供了掉电安全机制。文件块的状态有5种,这些状态可以顺次修改,它们分别是:
        FREE——空闲块(0xff);
        INVALID——无效数据(0xfe);
        VALID——有效数据(0xfc);
        OBSOLETE——过时数据(0xf8);
        DIRTY——脏数据,可以擦除(0xf0)。
        文件块的初始状态为空闲FREE,当要写入一个新文件时,状态变为无效数据INVALID,当数据正确写入后,状态修改为有效数据VALID。当修改一个文件中的数据时,原文件块的状态先变为过时数据OBSOLETE,当修改成功后状态变为DIRTY,进行垃圾回收时状态为DIRTY的这块数据可以清除。这些状态可以顺次修改,即将某位从“1”变成“0”,而不需要擦除整个扇区。
       系统是按照如下方式提供掉电安全的。如果在写入一个新文件期间系统掉电或重启,在系统重新运行后检查文件头,若文件块状态标识为INVALID,说明该文件没有被正确写入,则将状态由INVALID修改为DIRTY,放弃该块,再重新申请一个空闲块写该文件。修改一个文件时,原文件块状态由VALID修改为OBSOLETE,然后在另一个文件块中写入修改后的文件。若修改正确,则将原文件块状态由OBSOLETE修改为DIRTY,说明该块可以删除。若在修改期间系统掉电,系统重新运行后,扫描整个Flash存储器,查找状态为OBSOLETE的文件块,如果存在与其重名的有效文件块,则将其状态标识为DIRTY;如果没有与其重名的有效文件块,则将需要修改的文件重新写到一个新块中,并将原文件块状态由OBSOLETE修改为DIRTY。

    4.3 垃圾回收

        由于Flash的底层技术不支持Flash的任意空间被删除,而必须是以扇区为单位删除,所以在删除一个文件的时候,仅仅是在文件头的标识里作一个删除标识,而该文件依然保留在Flash空间中并标识它为脏数据DIRTY。这样导致系统在运行一段时间后,Flash中累积着大量的脏数据,这就有必要对这些脏空间进行回收,来有效利用Flash的存储空间。
        本Flash文件系统中解决的办法是在系统中创建一个任务recycle_task专门进行垃圾回收,该任务实时地检查空闲队列。若空闲队列中的扇区数小于6时便进行垃圾回收,清除脏数据。在进行垃圾回收时,从待擦写队列中(包括脏块队列和干净块队列)取出一个扇区,将FAT中的该扇区的状态修改为过时的OBSOLETE,并将该扇区的擦除次数加1,然后在空闲块队列中申请一个空闲扇区,将回收扇区中的有效数据写到新申请的扇区中,修改FAT中新申请的扇区的状态,最后擦写回收扇区,并将其链接到空闲块队列中。

    4.4 均衡磨损

        均衡磨损的主旨是随机地将“干净”(无需擦写)的块的内容移至另一个空闲块后擦写该扇区,然后将其链接到空闲块队列中,等待写入新的数据。本Flash文件系统借鉴了JFFS2的均衡磨损技术,将Flash扇区分别分配在四个队列中:
        ①干净块队列(clean_list):扇区中的文件都是有效的;
        ②脏块队列(dirty_list):扇区中至少有一个文件被标识为DIRTY;
        ③空闲块队列(free_list):扇区是空闲扇区;
        ④坏块队列(bad_list):扇区中存在坏块。
        以上各个队列是按照扇区擦除次数升序排列的,每次都从队列头取一个扇区,即取擦除次数最少的扇区进行处理,这样保证各个扇区擦除的次数比较均衡。
        每当系统中的空闲扇区数小于6时,垃圾回收任务便在可擦除队列中查找一个可供回收的扇区。前面已经提到,可擦除队列包括干净块队列和脏块队列,那么究竟从哪个队列中取出一个扇区进行回收呢?本Flash文件系统使用了一个非常简单的随机方法来决定选择哪个扇区。如果一个随机量除以100的余数非0,就从dirty_list中选一个扇区;否则,如果取余结果为0,就从clean_list中选择一个扇区。用这种方法,在99%的情况下,会重新利用那些含有脏数据的空间,提高了擦除效率,减少了不必要的擦除;在1%的情况下,擦除存满有效文件的扇区,来保证数据在闪存上循环移动,从而达到磨损均衡。

    5  总结

        本文所设计的Flash文件系统已经成功地应用到了笔者所参加的嵌入式系统的产品中,经过反复测试已经证明了本Flash文件系统基本上满足了掉电安全机制、垃圾回收机制、均衡磨损机制。但是由于文件分配表并没有参与均衡磨损,所以还没有达到理想上的整片Flash的均衡磨损,相信在后续的工作会得到进一步的改进和完善。
    展开全文
  • 本软件是一个开源的嵌入式flash播放器的源代码.rar
  • 摘要:本文首先以HY29LV160为例重点介绍了嵌入式系统Flash存储器接口电路的引脚信号及各项特性,接着详细介绍了S3C4510B系统管理器关于存储器映射的工作原理,在此基础上提出了一种基于S3C4510B的嵌入式系统Flash...
  • 本文介绍了一种适用于无文件系统环境下的N OR Flash 管理方法, 采用分块管理和状态转换的方法使得Flash 的使用效率和操作可靠性得到大大提高。
  • STM32F407 - 嵌入式Flash接口

    千次阅读 2016-11-30 10:56:53
    主要特性: ● 对于STM32F40x 和 STM32F41x,容量高达1 MB;对于STM32F42x和 STM32F43x,容量高达2 MB (这里,STM32F407ZGT6:1MB,STM32F407ZET6:512KB) ... Flash 结构如下: — 主存储器块
  • 摘要:以TRI公司的基于NOR FlashFlash管理软件FMM为例,详细介绍嵌入式系统中如何根据Flash的物理特性来进行Flash存储管理。  关键词:嵌入式系统 Flash FMM 引言 在当前数字信息技术和网络技术高速发展的后...
  • 嵌入式系统下,Flash数据往往可以拿着地址直接访问,就好象用内存指针一样。同时我们常常在windows下搭建模拟环境开发嵌入式产品,这就需要模拟这种特征。  Linux可以用mmap把一个文件映射到一段内存上...
  • 嵌入式系统Flash编程技术研究论文 摘要Flash存储器具有应用成本较低存储速度较快支持重复擦写功能是目前很多嵌入式系统开发中不可缺少的重要内容Flash编程方法的应用与系统开发进度成本息息相关因此本研究主要以...
  • 摘要:对Flash编程是许多嵌入式系统开发中必要的一环,传统的开发工具通常支持的是并口或串口,而随着计算机接口的单一化,即插即用的USB接口得到了广泛的应用。本文介绍了JTAG接口标准用于Flash编程的方法,并实现USB...
  • 基于USB-JTAG接口转换的嵌入式系统Flash编程、电子技术,开发板制作交流
  • 嵌入式基于Flash上的文件系统

    千次阅读 2019-02-13 12:04:43
    嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通的文件系统如ext2,ext3等都不适合在其上使用,于是就出现了专门针对FLASH的文件系统,比较常用的有jffs2,yaffs2,logfs,ubifs。那么对于这...
  • 摘要:本文简明阐述了NAND FLASH驱动在嵌入式ARM平台的实现。分析了NAND FLASH的数据存储结构,并从物理层,逻辑层和文件系统驱动接口层三个方面具体分析了NAND FLASH驱动程序的实现。本文重点讨论了在驱动逻辑层中...
  • Cheap_Flash--嵌入式NandFlash驱动文件系统源代码下载 Cheap_Flash 代码由我们开发完成,经过了严格的测试。 坏块处理包括基于坏块表的处理程序,提供单/多扇区操作。 多扇区为nandflash处理设计,降低NANDFLASH物理...
  • Cheap_Flash_FS--嵌入式NandFlash文件系统源码下载 Cheap_Flash_FS 代码已经由我们开发完成,并经过了严格的测试。 坏块管理功能包括基于坏块表的管理程序,可以提供单/多扇区的操作。 多扇区为nandflash专门设计,...
  • 摘要:嵌入式多媒体应用中大量数据存储在Flash上,本文以文件系统的方案解决数据存储的管理问题。对嵌入式多媒体应用中Flash文件系统的应用特点与关键设计进行了分析,设计实现了一个功能完整的文件代号管理、文件...
  • 摘要:设计一种能够在典型嵌入式环境下应用的线性文件系统,为嵌入式系统Flash空间的管理提供一种非常有效的手段。它包装和通用文件系统类似的API接口,设计的实现独立于实时操作系统(RTOS)和具体的Flash典型,可...
  • 嵌入式中关于flash的一些思考 jiffs2 用于烧写 SPI Flash,实测yaffs2也可以用于SPI flash上,其中的64k/128k/256k表示的是SPI flash块大小,这个是硬件所决定的。 yaffs2 用于烧写 Nand Flash,实测ext2也可以用于...
  • 嵌入式设备的FLASH划分

    千次阅读 2013-10-18 17:01:47
    一般嵌入式设备的存储分两类,FLASH和硬盘。在设计软件时,需要根据需要和硬件情况进行空间划分。这次用到FLASH存储。顺便总结下。 版本发布的时候,一般有一个 flash_readme.txt文件,里面记录了各个部分加载的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,790
精华内容 17,916
关键字:

嵌入式flash区