在项目中,读SD卡扇区的函数由
ReadMmcSector(unsigned long lba, unsigned int Bytes,unsigned char *buffer),调用
WriteMmcSectorAddress(unsigned long sector)和 MMC_get_data(unsigned int Bytes,unsigned char *buffer) 实现。其中ReadMmcSector输入的参数为SD卡的物理扇区号lba,要读出的字节数Bytes,以及读出后的数据所存放的数组的首地址buffer。
4)写扇区
扇区写是SD卡驱动的另一目的。每次扇区写操作将向SD卡的某个扇区中写入512个字节。过程与扇区读相似,只是数据的方向相反与写入命令不同而已。 扇区写的时序:
在项目中,写SD卡的函数为SD_write_sector(unsigned long addr,unsigned char *Buffer)。输入参数为SD卡的物理扇区号以及写入SD卡指定扇区中的内容的数组的首地址。
11
4.2 12864液晶屏结构及用法 4.2.1 12864液晶屏的硬件结构
12864是一种具有具有4位/8位并行,2线或3线串行多种接口方式。在本课设中使用了8位并行方式与MSP430单片机进行链接。该液晶屏内部含有国标一级,二级简体中文字库的点阵图形液晶显示模块,其显示分辨率为128x64。其汉字的分辨率为16x16。其ASCii字符的分辨率为16x8。也就是说12864液晶屏总共可以显示四行字符,每一行可以显示8个汉字或16个英文字母。其8位串行状态下引脚接口如下表所示:
4.2.2 12864内部的数据缓存
下面仅介绍课设中使用倒的两个数据缓存:
12
1、显示RAM(DDRAM)
显示RAM提供64x2字节的空间,最多可以显示4行每行8个汉字,或4行每行16个ASCii字符。只要直接将汉字或ASCii的编码写入DDRAM中,屏幕中就会出现相应的文字。屏幕上第一行到第四行所对应的DDRAM中的地址分别为0x80-0x87,0x90-0x97,0x88-0x8f,0x98-0x9f。其中,每一个地址对应屏幕上分辨率为16x16的一个区域。在其中可以显示两个ASCii字符,或一个汉字。要将文字写入显存并显示在屏幕中指定的位置上,就必须先向12864芯片写入指定位置的地址,然后再连续的写入两字节的数据。然后这两字节的数据所对应的文字就会显示在地址指定位置的16x16的点阵区域内。因为汉字编码为两个字节,而ASCii编码为1一个字节。所以屏幕上指定位置的16x16的点阵区域可以显示两个英文字符或一个汉字。
12864屏幕上的位置以及其在DDRAM中所对应的地址如下图所示。注意,其中每一个位置均表示一个16x16的区域。
2、绘图RAM(GDRAM)
绘图RAM中每一位的值用来控制12864液晶屏上每一个像素点的亮灭。值为1,对应的像素点就被点亮,值为0,对应的像素点就被熄灭。在设定绘图RAM的值时,先写入垂直地址,再写入水平地址。之后向绘图RAM里连续写入两字节的数据。这样可以完成12864液晶屏上连续16个像素点控制。绘图RAM的地址所控制的像素点在屏幕上的对应位置如下图所示:
13
4.2.3 12864液晶屏的指令
以下仅仅列出程序中所使用的指令:
4.2.4 12864液晶屏驱动函数
1、写数据函数:void LCD_write_data(unsigned char data) 2、读数据函数:unsigned char LCD_read_data()
3、写命令函数:void LCD_write_com(unsigned char com) 4、文本显示模式初始化函数:void LCD_init(void)
其初始化过程为,先发送两次命令0x30,设置显示模式为基本指令集。然后发送命令 0x0c,打开液晶屏屏幕显示。最后发送命令0x01,清屏。
5、将一个长度为17的字符串显示在屏幕指定行的函数:void DisplayCgrom(uchar addr,uchar *hz)
6、绘图模式初始化函数:void Graph_Init(void)
初始化好绘图模式之后,就可以利用绘图模式来进行俄罗斯方块游戏。
7、点亮屏幕上指定位置像素的函数:void Put_Pixel( unsigned char row, unsigned char column )
该函数先将指定位置像素所在的GDRAM中的连续16个像素点的值读出来,改变需要
14
改变的那个像素点的值,在将这16个像素点的值写回GDRAM的原位置中。
8、清楚屏幕上指定位置像素点的函数:void Clear_Pixel( unsigned char row, unsigned char column )
该函数的实现机制和上一个函数相同。
4.3 FAT32文件系统
4.3.1 FAT32文件系统结构简介
课设中选用了FAT32文件系统来存储文件。下面简介FAT32文件系统
1)主引导扇区(MBR):主引导扇区位于整个SD卡物理扇区的第0号扇区。从中可以读取引导代码以及文件系统的起始位置。在课设中,仅从MBR中读取整个SD卡大小以及文件系统的其实扇区位置。
2)隐藏扇区(Hidden Sectors):从MBR一直到文件系统的起始扇区之间的扇区被称为隐藏扇区。
3)保留扇区(Reserved Sectors):文件系统的起始扇区及其后的若干扇区被称为保留扇区。保留扇区中的第一个扇区,也就是文件系统的起始扇区是整个SD卡中最重要的部分。这个扇区又被称为DBR。DBR记录了文件系统的基本信息,其中包括:每扇区字节数,每簇扇区数,保留扇区数,FAT表个数,文件系统总扇区数,每个FAT表的扇区数,根目录的其实簇号(通常为2)及其他一些附加信息。课设中,系统初始化时,就需要读取DBR扇区,并在内存中记录其中的信息。
4)FAT表:位于保留扇区后的是FAT表区,它由两个完全相同的FAT表组成。FAT表有两个重要的作用,分别是描述簇的分配状态以及表明文件或目录的下一簇的簇号。在FAT表中,每个簇由4个字节的FAT表项来进行代表。FAT表从第0号簇开始进行划分,每四个字节代表一个簇。其中第0号簇和第1号通常情况下不使用。如果某个簇未被分配使用,则它所对应的FAT表内的FAT表项值为0。当某个簇已经被分配使用时,则它所对应的FAT表项内的FAT表项值也就是在该文件中,该簇的下一个簇的簇号。若这个簇号为0x0fffffff,则表明当前簇为该文件的最后一个簇。
5)根目录:FAT表后面就是数据区。数据区的开始是整个文件系统的根目录。它由目录项组成,用来记录每个文件的文件名,大小,起始簇号,类型,创建时间等信息。
6)目录项:每个目录项占32个字节,其结构如下图所示:
15