一、实验目的
了解44B0处理器的USB的工作原理。
二、实验内容
阅读芯片手册,编写44B0的USB程序,结合USB电缆,使PC机能检测USB设备,产生中断。
三、预备知识
1.用ARM ADS1.2集成开发环境,编写和调试程序的基本过程。
2.ARM应用程序的框架结构。
3.PHILIP PDIUSBD12 USB 芯片的使用方法。
四、实验设备及工具
硬件:ARM嵌入式开发板、用于ARM7TDMI的JTAG仿真器、PC机Pentumn100以
上、串口线
软件:PC机操作系统win98、Win2000或WinXP、ARM ADS1.2集成开发环境、仿真器驱动程序、PHILIP PDIUSBD12 USB 芯片的使用方法
五、实验原理
USB接口
1.USB概述
Intel公司开发的通用串行总线架构(USB)的目的主要基于以下3方面考虑:
(1)计算机与电话之间的连接。显然用计算机来进行计算机通信将是下一代计算机的基本应用。机器和人的数据交流互动需要一个广泛而又便宜的连通网络。然而,由于目前产业间的相互发展,尚未建立统一标准,而USB则可以广泛地连接计算机和电话。
(2)易用性。众所周知,PC机的改装是极不灵活的。对用户友好的图形化接口和一些软硬件机制的结合,加上新一代总线结构使得计算机的冲突大量减少,且易于改装。但以终端用户的眼光来看,PC机的输入/输出,如串行/并行端口、键盘、鼠标、操纵杆接口等,均还没有达到即插即用的特性,USB正是在这种情况下问世的。
(3)端口扩充。外围设备的添加总是被相当有限的端口数目着。缺少一个双向、价廉、与外设连接的中低速的总线,了外围设备(诸如电话/电传/调制解调器的适配器、扫描仪、键盘、PDA)的开发。现有的连接只可对极少设备进行优化,对于PC机的新的功能部件的添加需定义一个新的接口来满足上述需要。USB于是应运而生,它是快速、双向、同步、动态连接且价格低廉的串行接口,可以满足PC机发展的现在和未来的需要。
设计USB的目标就是使不同厂家所生产的设备可以在一个开放的体系下广泛地使用。该规范改进了便携商务或家用电脑的现有体系结构,进而为系统生产商和外设开发商提供了足够的空间来创造多功能的产品和开发广阔的市场,而不必使用陈旧的接口,害怕失去兼容性。
USB的工业标准是对PC机现有体系结构的扩充。USB的设计主要遵循以下几个准则:
◆ 易于扩充多个外围设备:
◆ 价格低廉,且支持12M比特率的数据传输:
◆ 对声音音频和压缩视频等实时数据的充分支持;
◆ 协议灵活,综合了同步和异步数据传输:
◆ 兼容了不同设备的技术;
◆ 综合了不同PC机的结构和体系特点;
◆ 提供一个标准接口,广泛接纳各种设备;
◆ 赋予PC机新的功能,使之可以接纳许多新设备。
2.USB的特色
USB的规范能针对不同的性能价格比要求提供不同的选择,以满足不同的系统和部件及相应不同的功能。其主要特色可归结为以下几点:
● 终端用户的易用性
● 为接缆和连接头提供了单一模型;
● 电气特性与用户无关;
● 自我检测外设,自动地进行设备驱动、设置;
● 动态连接,动态重置外设。
◆ 广泛的应用性
● 适应不同设备,传输速率从几千比特率到几十兆比特率;
● 在同一线上支持同步、异步两种传输模式;
● 支持对多个设备的同时操作;
● 可同时操作127个物理设备;
● 在主机和设备之间可以传输多个数据和信息流;
● 支持多功能的设备:
● 禾谰低层协议,提高了总线利用率。
◆ 同步传输带宽
● 确定的带宽和低延迟适合电话系统和音频的应用:
● 同步工作可以利用整个总线带宽。
◆ 灵活性
● 提供一系列大小的数据包,允许对设备缓冲器大小进行选择;
● 通过指定数据缓冲区大小和执行时间,支持各种数据传输率;
● 通过协议对数据流进行缓冲处理。
◆ 健壮性
● 使用差分的驱动接收和防护,以保证信号完整性:
● 在数据和控制信息上加了循环冗余码(CRC);
● 对装卸的检测和系统级资源的设置;
● 对丢失或损坏的数据包暂停传输、利用协议自我恢复;
● 对数据流进行控制,以保证同步信号和硬件缓冲管理的安全:
● 数据和控制通道的建立,使功能部件的相互不利的影响开,消除了负作用。
◆ 与PC产业的一致性
● 协议的易实现性和完整性:
● 与PC机的即插即用的体系结构的一致;
● 对现存操作系统接口的良好衔接。
◆ 价廉物美
● 以低廉的价格提供1.5M比特率的子通道设施;
● 将外设和主机硬件进行了最优化的集成:
● 促进了低价格的外设的发展:
● 廉价的电缆和连接头:
● 运用了商业技术。
◆ 升级路径
● 体系结构的可升级性支持了在一个系统中可以有多个USB主机控制器。
3.USB的体系结构
一个USB系统主要被定义为三个部分:
◆ USB的互连:
◆ X3%B的设备:
◆ USB的主机。
USB的互连是指USB设备与主机之间进行连接和通信的操作,主要包括以下几方面:
◆ 总线的拓扑结构:USB设备与主机之间的各种连接方式:
◆ 内部层次关系:根据性能叠置,USB的任务被分配到系统的每一个层次;
◆ 数据流模式:描述了数据在系统中通过USB从产生方到使用方的流动方式;
◆ USB的调度:USB提供了一个共享铣连接。对可以便用的连接进行了调度以支持同步数据传输,并且避免优先级判别的开销。
USB连接了USB设备和USB主机,USB的物理连接是有层次性的星型结构。每个网络集线器是在星型的中心,每条线段是点点连接。从主机到集线器或其功能部件,或从集线器到集线器或,其功能部件,从图18-1中可看出USB的拓扑结构。
图18-1 USB总线的拓扑结构
在任何USB系统中,只有一个主机。USB和主机系统的接口称作主机控制器,主机控制器可由硬件、固件和软件综合实现。根集线器是由主机系统整合的,用以提供更多的连接点。
4.USB的电气特性
USB传送信号和电源是通过一种四线的电缆,图18-2中的两根线是用于发送信号。存在两种数据传输率:
图18-2 USB的电缆
USB有3种模式:低速、全速、高速。各种模式的特性及应用范围参见表18-1。
表18-1 USB的速度分类
性 能 | 应 用 | 特 性 |
低速 • 交互设备 • 10-20Kbps | 键盘、鼠标、游戏棒 | 低价格、热插拔、易用性 |
全速 • 电话、音频、压缩视频 • 500Kbps-10Mbps | ISBN、PBX、POTS | 低价格、易用性、动态插拔、限定带宽和延迟 |
高速 • 音频、磁盘 • 25-500Mbps | 音频、磁盘 | 高带宽、限定延迟、易用性 |
电缆中包括VBUS、GND两条线,向设备提供电源。VBUS使用+5V电源。USB对电缆长度的要求很宽,最长可为几米。通过选择合适的导线长度以匹配指定的IR drop和其他一些特性,如设备能源预算和电缆适应度。为了保证足够的输入电压和终端阻抗,重要的终端设备应位于电缆的尾部。在每个端口都可检测终端是否连接或分离,并区分出高速或低速设备。
5.USB的总线协议
USB总线属一种轮寻方式的总线,主机控制端口初始化所有的数据传输。
每一总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时,主机控制器发送一个描述传输运作的种类、方向,USB设备地址和终端号的USB数据包,这个数据包通常称为标志包(token packet)。USB设备从解码后的数据包的适当位置取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主机。在传输开始时,由标志包来标志数据的传输方向,然后发送端开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的USB数据传输,在主机和设备的端口之间,可视为一个通道。存在两种类型的通道:流和消息。流的数据不像消息的数据,它没有USB所定义的结构,而且通道与数据带宽、传送服务类型、端口特性(如方向和缓冲区大小)有关。多数通道在USB设备设置完成后即存在。USB中有一个特殊的通道——默认控制通道,它属于消息通道,当设备一启动即存在,从而为设备的设置、查询状况和输入控制信息提供一个入口。
事务预处理允许对一些数据流的通道进行控制,从而在硬件级上防止了对缓冲区的高估或低估,通过发送不确认握手信号从而阻塞了数据的传输速度。当不确认信号发过后,若总线有空闲,数据传输将再做一次。这种流控制机制允许灵活的任务安排,可使不同性质的流通道同时正常工作。这样多种流通常可在不同间隔进行工作,传送不同大小的数据包。
6.USB的数据流种类
数据和控制信号在主机和USB设备间的交换存在两种通道:单向和双向。USB的数据传送是在主机和一个USB设备的指定端口之间。这种主机和USB设备的端口间的联系称作通道。总的来说,各通道之间的数据流动是相互的。一个指定的USB设备可有许多通道。例如,一个USB设备存在一个端口,可建立一个向其他USB设备的端口,发送数据的通道,它可建立一个从其他USB设备的端口接收数据的通道。
USB的结构包含四种基本的数据传输类型。
◆ 控制数据传送:在设备连接时用来对设备进行设置,还可对指定设备进行控制,如通道控制。
◆ 批量数据传送:大批量产生并使用的数据,在传输约束下,具有很广的动态范围。
◆ 中断数据的传送:用来描述或匹配人的感觉或对特征反应的回馈。
◆ 同步数据的传送:由预先确定的传送延迟来填满预定的USB带宽。
对于任何给定的设备进行设置时,一种通道只能支持上述一种方式的数据传输。
(1)控制数据传送
当USB设备初次安装时,USB系统软件使用控制数据对设备进行设置,设备驱动程序通过特定的方式使用控制数据来传送,数据传送是无损性的。
(2)批量数据传送
批量数据是由大量的数据组成,如使用打印机和扫描仪时,批量数据是连续的。在硬件级上使用错误检测可以保证可靠的数据传输,并在硬件级上引入了数据的多次传送。此外根据其他一些总线动作,被大量数据占用的带宽可以相应地进行改变。
(3)中断数据传输
中断数据是少量的,且其数据延迟时间也是在有限范围内的。这种数据可由设备在任何时刻发送,并且以不慢于设备指定的速度在USB上传送。
中断数据一般由事件通告,特征及座标号组成,只有一个或几个字节。匹配定点设备的座标即为一例,虽然精确指定的传输率不必要,但USB必须对交互数据提供一个反应时间的最低界限。
(4)同步传输
同步数据的建立、传送和使用是连续且实时的,同步数据是以稳定的速率发送和接收实时的信息,同步数据要使接收者与发送者保持相同的时间安排,除了传输速率,同步数据对传送延迟非常敏感。所以同步通道的带宽的确定,必须满足对相关功能部件的取样特性。不可避免的信号延迟与每个端口的可用缓冲区数有关。
一个典型的同步数据的例子是语音,如果数据流的传送率不能保持,数据流是否丢失将取决于缓冲区的大小和损坏的程度。即使数据在USB硬件上以合适的速率传送,软件造成的传送延迟将对那些(如电话会议等)实时系统的应用造成损害。
实时的传送同步数据肯定会发生潜在瞬时的数据流丢失现象,换句话说,即使许多硬件机制,如重传的引入也不能避免错误的产生。实际应用中,USB的数据出错率小到几乎可以忽略不计。从USB的带宽中,给USB同步数据流分配了专有的一部分以满足所想得到的传速率,USB还为同步数据的传送设计了最少延迟时间。
7.USB主机:硬件和软件
USB的主机通过主机控制器与USB设备进行交互。主机功能如下:
◆ 检测USB设备的安装和拆卸;
◆ 管理在主机和USB设备之间的控制流:
◆ 管理在主机和USB设备之间的数据流;
◆ 收集状态和动作信息:
◆ 提供能量给连接的USB设备。
主机上USB的系统软件管理USB设备和主机上该设备软件之间的相互交互,USB系统软件与设备软件间有三种相互作用方式:
◆ 设备编号和设置;
◆ 同步数据传输:
◆ 异步数据传输;
◆ 电源管理:
◆ 设备和总线管理信息。
只要可能,USB系统软件就会使用目前的主机软件接口来管理上述几种方式。
USB的互连支持数据在USB主机与USB设备之间的流动。只要USB设备并不感觉到主机行为的改变,USB主机完全可以提供一个不同的软件系统实现方法。图18-3展示了USB通信模型之间基本的信息流与互连关系。
图18-3 USB通信模型之间基本的信息流与互连关系
由图18-3可见,主机与设备都被划分成不同的层次。主机上垂直的箭头是实际的信息流。设备上对应的接口是基于不同实现的。在主机与设备之间的所有通信最终都是通过USB的电缆进行,然而,在上层的水平层之间存在逻辑的主机——设备信息流。主机上的客户软件和设备功能部件之间的通信是基于实际的应用需求及设备所能提供的能力。
客户软件与功能部件之间的透明通信的要求,决定了主机和设备下层部件的功能以及它们的界面(Interface)
主机在整个USB系统中是惟一的,它包括如下几个层次。
◆ USB总线接口;
◆ USB系统(USB System);
◆ USB客户(Client)。
8.嵌入式系统与USB
USB接口以其方便、传输速率高等优点逐渐成为计算机行业的外设接口标准。嵌入式设备要与PC机进行高速通信,那么USB接口当然是理想的选择。
在嵌入式控制器上,因为S3C44BOX没有USB接口,所以,通过PDIUSBD12的USB设备端接口(USB Device)芯片扩展出一个USB的设备接口。因为此接口是USB的设备接口,所以只能和USB的主控(USB Host)端口连接(如PC机的USB端口)。
美国的国家半导体公司的PDIUSBD12是一个具有全速功能的通用串行总线控制器,并且支持DMA传输方式。PDIUSBD12可以工作在中断方式,也可以工作在DMA方式。
嵌入式控制器的USB的接口,使用的是标准的USB B类接口。可以使用通用的USB主控端和设备(Host to Device)的连接线连接。
9.了解PDIUSBD12 USB 芯片与ARM CPU USB的接口和USB的工作方式
S3C44B0X是一块丰富I/O总线的芯片,在他的外围可以添加不同的外围芯片,如USB、ETHERNET等。本实验就是利用实验系统上的USB线路,进行基本操作,以此来熟悉USB和S3C44B0X。
10.I/O配置
本实验系统利用External I/O BANK1,对PHILIPS的USB芯片PDIUSBD12进行控制,以8bit的总线方式,加以外部中断0。
11.程序说明
该实验包括程序:44binit.s、44bConfig.c、uart.c、D12CI.c、EPPHAL.c、ISR.c、usb.c。
D12IC.C、EPPHAL.C是对USB操作的主要程序,他包括对PDIUSBD12设置程序,设置地址使能,端点使能,DMA,模式等。还有对端点的各种操作,包括读端点,写端点,选择端点,读写端点状态等。其他还有标准请求处理程序,厂商请求处理程序等。
在测试项目中,主要就是控制端点和PC机交换信息,PC能找到设备,但无法识别。在串口终端上,会打印出PDIUSBD12的ID号,当USB与PC连接上时,显示D12中断寄存器内容。
六、实验步骤
(1)学习上述实验原理,了解ARM上相应寄存器的功能和各位的意义。
(2)流程图:
(图18.1流程图)
(3)创建一个新工程,并在工程中创建三个文件夹main, driver, s3c44b0x,并添加以下文件:
s3c44b0x : 44bConfig.c 44bInit.s
driver : uart.c D12IC.C EPPHAL.C usb.c ISR.c
main : main_usb.c
(4)建立三个库文件(D12_Str.h、 D12_Def.h、 D12_Fun.h),并将库文件加入到工程库文件的driver文件夹中。主要函数参见源程序。
(5)主函数及中断处理函数已经提供。将包含主函数的文件加入到工程main文件夹中。
(6)配置编译器,编译工程。打开JTAG调试AXF文件,用ADS调试,直到逻辑无错误,达到预期实验效果。
A、设置头文件的访问路径
B、在ARM Linker里设置代码工作地址、数据工作地址。
C、在ARM Linker里设置输入段在生成的映像文件中的位置,为了保证程序启动后能从44binit.s的init标号处开始运行。我们向下图一样设置。
(7)可以用ADS1.2进行DEBUG调试,也可以下载目录下的usb.BIN文件,用于usb操作应用。
七、实验结果
串口终端显示出PDIUSBD12的ID号。
PC机上发现USB设备,并实验板上的USB的LINK灯亮。
八、思考题
1. 使PDIUSBD12 USB芯片工作在中断模式。
2. 有几个端口可以用于数据交换,我们用的是哪个?
3. 扩展实验使其能支持USB1.1协议?
实验九、嵌入式文件系统设计原理
一、实验目的
1.了解文件系统的概念
2.掌握文件系统的概念
3.了解NAND FLASH的物理特性及存取特点
4.掌握本文件系统的API及使用方法
二、实验内容
了解文件系统的功能,学习文件系统的原理,掌握文件系统的使用方法,采用本文件系统开发一个应用程序,正确读写文件,存储数据。
三、预备知识
1.ADS 1.2 集成开发环境的使用。
2.复习NAND FLASH实验等相关章节。
3.ARM应用程序的框架结构。
4.了解文件系统的基本功能。
5.了解FAT文件系统的基本概念。
四、实验设备及工具
硬件:S3C44B0X嵌入式开发板、用于ARM7TDMI的JTAG仿真器、PC机Pentumn100以上、串口线。
软件:PC机操作系统win98、Win2000或WinXP、ARM ADS 1.2集成开发环境、仿真器驱动程序、串口调试助手、实验原理及说明
五、实验原理
1.FAT简介
文件系统主要是给上层应用程序提供文件读写,存储信息等支持。简化上层软件的设计,避免以地址方式读写、存储文件。为了给以后开发USB的文件系统提供铺垫,也为了方便PC机与目标机之间通过文件进行通信,本文件系统的实现考虑了兼容性方面的问题。考虑到主机操作系统都能识别、操作FAT文件系统,因此采用FAT文件系统。
FAT文件系统有三种,分别是FAT12/FAT16/FAT32,FAT12是早期DOS采用的文件系统,它适合于容量较小的存储介质,它采用12位文件分配表,并因此而得名。而以后的FAT系统都按照这样的方式在命名。在DOS3.0以前使用。但是在现在,我们都还能找得到这个文件系统:用于软盘驱动器。当然,其他地方的确基本上不使用这个文件系统了。Fat12可以管理的磁盘容量是8M。FAT16应用时间比较长,可以管理最大到2G的磁盘空间。Fat32文件系统将是Fat系列文件系统的最后一个产品。和它的前辈一样,这种格式采用32位的文件分配表,磁盘的管理能力大大增强,突破了FAT16 2GB的分区容量的。由于现在的硬盘生产成本下降,其容量越来越大,运用FAT32的分区格式后,可以将一个大硬盘定义成一个分区,这大大方便了对磁盘的管理。在ntfs大行其道的今天,FAT32仍然顽强地存活着。
为了简化设计,考虑到NAND FLASH的实际容量,本文件系统采用FAT16格式,它可以管理的实际容量达到2G,满足容量需求。不支持FAT12和FAT32。这样既兼顾了兼容性,又考虑了简洁性。
2.FAT16
FAT16是Microsoft较早推出的文件系统,具有高度兼容性,目前仍然广泛应用于个人电脑尤其是移动存储设备中,FAT16简单来讲由以下几部分组成。
●引导扇区
●1~2个文件分配表
●根目录项
●数据区
引导扇区位于硬盘的第一个物理扇区。计算机在按下power键以后,开始执行主板bios程序。进行完一系列检测和配置以后,开始按bios中设定的系统引导顺序引导系统。假定现在是硬盘。Bios执行完自己的程序后如何把执行权交给硬盘呢。最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。
FAT16在引导扇区之后没有留有任何保留扇区,其后紧随的便是FAT表。FAT表是FAT16用来记录磁盘数据区簇链结构的。FAT将磁盘空间按一定数目的扇区为单位进行划分,这样的单位称为簇。通常情况下,每扇区512字节的原则是不变的。簇的大小一般是2n (n为整数)个扇区的大小,像512B,1K,2K,4K,8K,16K,32K,K。实际中通常不超过32K。 之所以簇为单位而不以扇区为单位进行磁盘的分配,是因为当分区容量较大时,采用大小为512b的扇区管理会增加fat表的项数,对大文件存取增加消耗,文件系统效率不高。分区的大小和簇的取值是有关系的,如下表:
分区空间大小 | 每个簇的扇区 | 簇空间大小 |
<32MB | 1 | 512KB |
32MB-MB | 2 | 1k |
MB-128MB | 4 | 2k |
128MB-256MB | 8 | 4k |
256MB-512MB | 16 | 8k |
1024MB-2048MB | 32 | 16k |
2048MB-4096MB | 32k |
FAT16种FAT标各取值的含义 | |
0000 | 未分配的簇 |
0002~FFEF | 已分配的簇 |
FFF0~FFF6 | 系统保留 |
FFF7 | 坏簇 |
FFF8~FFFF | 文件结束簇 |
对于短文件名,系统将文件名分成两部分进行存储,即主文件名+扩展名。0x0~0x7字节记录文件的主文件名,0x8~0xA记录文件的扩展名,取文件名中的ASCII码值。不记录主文件名与扩展名之间的"." 主文件名不足8个字符以空白符(20H)填充,扩展名不足3个字符同样以空白符(20H)填充。0x0偏移处的取值若为00H,表明目录项为空;若为E5H,表明目录项曾被使用,但对应的文件或文件夹已被删除。(这也是误删除后恢复的理论依据)。文件名中的第一个字符若为“.”或“..”表示这个簇记录的是一个子目录的目录项。“.”代表当前目录;“..”代表上级目录(和我们在dos或windows中的使用意思是一样的,如果磁盘数据被破坏,就可以通过这两个目录项的具体参数推算磁盘的数据区的起始位置,猜测簇的大小等等,故而是比较重要的)。早的FAT16系统并没有长文件名一说,Windows操作系统已经完全支持在FAT16上的长文件名了。
3.FAT16存取文件的流程
4.FAT16的实现
在本文件系统中,为了简化设计,我们暂时不支持目录,长文件名及中文文件名。
5.应用编程接口:
本文件系统提供如下的API,供应用程序使用:
函数原型 | 功能 |
S32 fs_init(void); | 初始化文件系统 |
void fs_format(void); | 格式化文件系统 |
FILE *fs_fopen(const char *filename,U8 mode); | 打开一个文件 |
void fs_fclose(FILE *fp); | 关闭一个文件 |
S32 fs_fread(U8 *buf,U32 size,FILE *fp); | 读文件 |
S32 fs_fwrite(const U8 *buf,U32 size, FILE *fp); | 写文件 |
U32 fs_get_file_size(FILE *fp); | 获得文件的大小 |
S32 fs_seek(FILE *fp,U32 loffset,U8 mode); | 条件文件指针 |
S32 fs_remove(const char *filename); | 删除文件 |
1. 包含头文件
#include "vfs.h"
2. 初始化文件系统
fs_init()
返回值为VFS_ERROR表示有错误发生。
3. 打开文件,获得FILE指针
fp1 = fs_fopen(file1,MOD_CREATE | MOD_READ | MOD_APPEND)
返回NULL表示有错误发生。
4. 对文件进行写操作
fs_fwrite((U8 *)buf,strlen(buf),fp1)
5. 调整文件指针到文件头
fs_seek(fp1,0,SEEK_BEGIN);
6. 对文件进行读操作
size = fs_fread((U8 *)buf,200,fp1)
该函数返回实际读取的字节数,返回VFS_ERROR表明有错误发生。
7. 关闭文件
fs_fclose(fp1);
8. 实验流程图
9. 为测试程序创建工程。工程文件包括四个文件夹:
main文件夹:包含一个main()的测试程序。(用户编写完成上述功能的文件)
driver文件夹:测试程序用到的驱动代码文件。(包括ossystime.c, uart.c,tmr.c)
s3c44b0x文件夹:开发板的驱动文件 (44binit.s和44bConfig.c)
fs文件夹:文件系统得实现文件
10.编译器配置。如下图配置编译器,编译工程。
A、为编译器设置头文件访问路径
B、在ARM Linker里设置代码工作地址、数据工作地址。
C、在ARM Linker里设置输入段在生成的映像文件中的位置,为了保证程序启动后能从44binit.s的init标号处开始运行。我们如下图一样设置。
七、实验结果
写入的数据和读取的数据应是一致的。
八、思考题
1.常见的嵌入式系统采用的文件系统有哪些?他们各自有什么特点?
1.FAT作为一种文件系统,它应用在嵌入式领域,有哪些优缺点?
2.在嵌入式领域,实现一个文件系统,需要考虑哪些因素?