数据存储与传输专题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据存储与传输专题

大小印第安序:

在ARM体系中,每个字单元包含4个字节单元或者两个半字单元;1个半字单元包含两个字节单元。但是在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式:big-endian格式和little-endian格式,也即大小印第安序。

在big-endian(大端)格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图所示:

little-endian(小端)格式与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。如图所示:

注意:1、印第安序以字节为最小单位,不是以位为最小单位。

2、印第安序是针对字单元来说的,仅仅是定义一个字中的四个字节的顺序问题。

举例说明:

SD卡内数据存储方式是小印第安序,使用WinHEX打开SD卡查看存储的数据,如下图:

注意上图画黑线的两个字节数据:C6 03,那么这两个字节真正的数值是03c6,因为是以十六进制显示的,所以得到的值为0x03c6。如果是用的大印第安序,值就是0xc6030000了。

ARM 一般使用“小端”存储器组织,但也同样可以配置为“大端”格式存储器组织。使用大印第安序的器件不是太多,比如NAND存储时以及IIS接口传输时都是使用的小印第安序,JPEG文件是大印第安序的。

其实对印第安序,很多人都有误解。有很多资料上,特别是高端ARM芯片的datasheet 上一般都会写SD控制器支持大印第安序,但也有的芯片会写其SD控制器支持小印第安序。这就比较奇怪了,同样的一个SD卡,为什么使用不同芯片就会使用不同的印第安序呢?这是因为没有分清“外设控制器”以及“硬件外设”的概念。

其实正如前面所说,印第安序仅仅是说明控制器如何组织一个字数据,也就是控制器决定数据组织,跟控制器连接的硬件外设无关。如SD卡以及NAND Flash虽然均是以页为基本数据块进行读写的,但从微观上看依然是一个字节一个字节写入其Flash中的,这些硬件外设很蠢,控制器向它输出一个字节,这些外设就依次把此字节存入flash,根本不会考虑大小印第安序问题,也就是说SD控制器以及NAND控制器再从ARM内核那里得到字数据后会按照预先设定的印第安序方式重新组着一下这个字数据,然后顺序发送给硬件外设。如果不理解“外设控制器”以及“硬件外设”的作用,很容易就错以为SD卡或者Flash本身就具有印第安序组织的功能。

你们很快都会学到在单片机上驱动SD卡或者外扩NandFlash,除了高端ARM有SD控制器以及Nand控制器外,一般单片机基于芯片成本考虑都没有这两个控制器。其实这两个控制器的最基本的作用就是产生对应的时序,如SD控制器,如上图所示,它的作用就是将单片机想要发送的字数据转换为时序信号传送给SD卡,SD卡会解析传输来的信号并将数据一一存储。那么只要我们使用IO口模拟了这种时序,也就可以随意的读写SD卡了,也就是说我们使用软件写了一个上图所示的简单SD控制器。

其实此时印第安序就是由你的读写代码来控制了,假如你要往SD卡里写入4个字节数据,也就是一个字数据,如果先发送低字节,再发送高字节,那用的就是小印第安序,读取数据时应该把第一个读到的字节作为字数据的最低字节,比如你写入的是(低)01 02 03 04(高),你读取SD卡时第一个读到的应是01,但如果你使用大印第安序来理解,那么读到的数据就是(低)04 03 02 01(高)了。到这里也应该能看出来了,印第安序仅仅是编程人员对数据组织的理解,或者说是对应控制器对数据组织的理解,只要理解得当,大小印第安序其实没有分别,只不过存储顺序稍微不同而已。

MSB与LSB:

我们知道现在大部分的通信接口都串行的,也即一次只能传输一位,那么一个字节数据需要传输8次,但是先传送第8位还是先传送第1位?这里就有了分歧,由此分出“最低有效位(LSB)”和“最高有效位(MSB)”两个词。

注意:大小端是用来区分一个字数据中的四个字节的存放顺序的,而MSB和LSB是用来标识一个字节中的每个位的传送顺序的。

-- 六 度 空 间

-- 2010/11/15

相关文档
最新文档