📄 znfat.lst
字号:
C51 COMPILER V8.09 ZNFAT 05/19/2011 23:29:42 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE ZNFAT
OBJECT MODULE PLACED IN znFAT.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE znFAT.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "znfat.h"
2 #include "sd.h" //存储设备的扇区读写驱动,这里是SD卡
3 //#include "ch375.h" //存储设备的扇区读写驱动,这里是U盘
4 //#include "cf.h"
5 #include "string.h"
6
7 /*******************************************************
8
9 +-----------------------------------------+
10 |振南电子 原创程序模块 znFAT文件系统 5.18 |
11 +-----------------------------------------+
12
13 此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
14 严禁随意用于商业目的,违者必究,后果自负
15 振南电子
16 ->产品网站 http://www.znmcu.cn/
17 ->产品网店 http://shop.znmcu.cn/
18 ->产品咨询 QQ:987582714
19 MSN:yzn07@126.com
20 WW:yzn07
21 说明:znFAT经多方测试,确保其正确性与稳定性,请放心使用,
22 如有bug敬请告知,谢谢!!
23 ********************************************************/
24
25 //全局变量定义
26 struct direntry temp_rec;
27 INT8 temp_dir_name[13];
28 UINT32 temp_dir_cluster;
29 UINT32 temp_last_cluster;
30
31 UINT8 xdata znFAT_Buffer[512]; //扇区数据读写缓冲区,由外部提供
32
33 /******************************************************************
34 - 功能描述:znFAT的存储设备初始化函数
35 - 隶属模块:znFAT文件系统模块
36 - 函数属性:外部(用于对存储设备进行初始化)
37 - 参数说明:无
38 - 返回说明:无
39 - 注:在调znFAT其它函数之前,必须先对存储设备进行成功的初始化。
40 ******************************************************************/
41
42 void znFAT_Device_Init()
43 {
44 1 SD_Reset();
45 1 SD_Init();
46 1 }
47
48 /******************************************************************
49 - 功能描述:znFAT的存储设备底层驱动接口,读取存储设备的addr扇区的
50 512个字节的数据放入buf数据缓冲区中
51 - 隶属模块:znFAT文件系统模块
52 - 函数属性:内部(用于与存储设备的底层驱动对接)
53 - 参数说明:addr:扇区地址
54 buf:指向数据缓冲区的指针
55 - 返回说明:0表示读取扇区成功,否则失败
C51 COMPILER V8.09 ZNFAT 05/19/2011 23:29:42 PAGE 2
56 - 注:这里加入了天狼星精华板上的三种存储设备,即SD卡(有效)、U盘、
57 CF卡通过在程序中动态的切换不同的设备驱动,从而实现多设备(即同
58 时对多种存储设备进行操作,比如从SD卡拷贝文件到U盘等等),不同
59 驱动的切换,只需要在程序中改变Dev_No这个全局变量的值即可
60 ******************************************************************/
61
62 UINT8 znFAT_ReadSector(UINT32 addr,UINT8 *buf)
63 {
64 1 switch(Dev_No) //由Dev_No来决定所使用的存储设备驱动
65 1 {
66 2 case SDCARD:
67 2 return SD_Read_Sector(addr,buf);
68 2 break;
69 2 case UDISK:
70 2 //return CH375_Read_Sector(addr,buf);
71 2 break;
72 2 case CFCARD:
73 2 //return CF_Read_Sector(addr,buf);
74 2 break;
75 2 case OTHER:
76 2 //return XXX_Read_Sector(addr,buf);
77 2 break;
78 2 }
79 1 }
80
81 /******************************************************************
82 - 功能描述:znFAT的存储设备底层驱动接口,将buf数据缓冲区中的512个
83 字节的数据写入到存储设备的addr扇区中
84 - 隶属模块:znFAT文件系统模块
85 - 函数属性:内部(用于与存储设备的底层驱动对接)
86 - 参数说明:addr:扇区地址
87 buf:指向数据缓冲区
88 - 返回说明:0表示读取扇区成功,否则失败
89 - 注:略
90 ******************************************************************/
91
92 UINT8 znFAT_WriteSector(UINT32 addr,UINT8 *buf)
93 {
94 1 switch(Dev_No) //由Dev_No来决定所使用的存储设备驱动
95 1 {
96 2 case SDCARD:
97 2 return SD_Write_Sector(addr,buf);
98 2 break;
99 2 case UDISK:
100 2 //return CH375_Write_Sector(addr,buf);
101 2 break;
102 2 case CFCARD:
103 2 //return CF_WriteSector(addr,buf);
104 2 break;
105 2 case OTHER:
106 2 //return XXX_Write_Sector(addr,buf);
107 2 break;
108 2 }
109 1 }
110
111 /******************************************************************
112 - 功能描述:小端转大端,即LittleEndian车BigEndian
113 - 隶属模块:znFAT文件系统模块
114 - 函数属性:内部
115 - 参数说明:dat:指向要转为大端的字节序列
116 len:要转为大端的字节序列长度
117 - 返回说明:转为大端模式后,字节序列所表达的数据
C51 COMPILER V8.09 ZNFAT 05/19/2011 23:29:42 PAGE 3
118 - 注:比如:小端模式的 0x33 0x22 0x11 0x00 (低字节在前)
119 转为大端模式后为 0x00 0x11 0x22 0x33 (高字节在前)
120 所表达的数值为 0x00112233
121 (CISC的CPU通常是小端的,所以znFAT也设计为小端,而单片机
122 这种RISC的CPU,通常来说都是大端的,所以需要这个函数将字
123 节的存放次序进行调整,才能得到正确的数值)
124 ******************************************************************/
125
126 UINT32 LE2BE(UINT8 *dat,UINT8 len)
127 {
128 1 UINT32 temp=0;
129 1 UINT32 fact=1;
130 1 UINT8 i=0;
131 1 for(i=0;i<len;i++)
132 1 {
133 2 temp+=dat[i]*fact; //将各字节乘以相应的权值后累加
134 2 fact*=256; //更新权值
135 2 }
136 1 return temp;
137 1 }
138
139 //-----------------------------------
140
141 /**************************************************************************
142 - 功能描述:清空某个簇的所有扇区,填充0
143 - 隶属模块:znFAT文件系统模块
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -