📄 fat16.lst
字号:
184 1 unsigned int i ;
185 1 unsigned int blockPage = (block << 5) + page;
186 1
187 1 Flash_EN();
188 1 Flash_Com();
189 1 Flash_Write(0x00);
190 1 Flash_Add();
191 1 Flash_Write(0);
192 1 Flash_Write(((UCHAR*)&blockPage)[1]);
193 1 Flash_Write(((UCHAR*)&blockPage)[0]);
194 1 Flash_Dat();
195 1 Flash_WaitBusy();
196 1
197 1 P2=0xFF;
198 1 for(i=0;i<512;i++)
199 1 Flash_Read(*pPage++);
200 1
201 1 Flash_DIS();
202 1 }
203
204 /*****************************************************************/
205 /*功能:向FLASH的某个Block中的1page写入数据 */
206 /* 在文件系统中,有如下对应关系:Block=Cluster */
207 /* Page =Sector */
208 /*输入:unsigned int block,page,unsigned char *pPage(存放数据的地址)*/
209 /*输出:0:Fail;1:OK */
210 /*****************************************************************/
211
212 int WritePage(unsigned int block, unsigned int page, unsigned char *pPage)
213 {
214 1 unsigned char j;
215 1 unsigned int i ;
216 1 unsigned int blockPage = (block << 5) + page;
217 1
218 1
219 1 Flash_EN();
220 1 Flash_Com();
C51 COMPILER V8.01 FAT16 05/10/2006 10:39:04 PAGE 5
221 1 Flash_Write(0x80);
222 1 Flash_Add();
223 1 Flash_Write(0);
224 1 Flash_Write(((UCHAR*)&blockPage)[1]);
225 1 Flash_Write(((UCHAR*)&blockPage)[0]);
226 1 Flash_Dat();
227 1
228 1 for(i=0;i<512;i++)
229 1 Flash_Write(*pPage++);
230 1
231 1 Flash_Com();
232 1 Flash_Write(0x10);
233 1 Flash_WaitBusy();
234 1
235 1 Flash_Write(0x70);
236 1 Flash_Dat();
237 1 P2=0xFF;
238 1 Flash_Read(j);
239 1 Flash_DIS();
240 1
241 1 if (j& 0x1) //
242 1 {
243 2 return 0;
244 2 }
245 1 else
246 1 {
247 2 return 1;
248 2 }
249 1 }
250
251
252 void WriteMBR2Flash(void)
253 {
254 1 WritePage(Root_Cluster, BPB_Sector, BPB_Data);
255 1 }
256
257 void CreatFAT12(void)
258 {
259 1 short int i;
260 1 unsigned char *FAT = Page_Buf;
261 1 for (i=0; i<512; i++)
262 1 {
263 2 FAT[i] = 0x00;
264 2 }
265 1 //disk type lower byte is equal to Offset_U8_BPB_Media
266 1 FAT[0] = 0xf8;
267 1 FAT[1] = 0xff;//system occupied the first cluster
268 1 FAT[2] = 0xff;
269 1 FAT[3] = 0x7f;
270 1
271 1 WritePage(Root_Cluster, Fat_Sector, FAT); //Sector 1 of Fat16
272 1 WritePage(Root_Cluster, Fat_Sector + 2, FAT); //Sector 1 of Fat16
273 1 FAT[0] = FAT[1] = FAT[2] = FAT[3] = 0x00;
274 1 WritePage(Root_Cluster, Fat_Sector + 1, FAT); //Sector 2 of Fat16
275 1 WritePage(Root_Cluster, Fat_Sector + 3, FAT); //Sector 2 of Fat16
276 1 }
277
278 void CreatFAT16(void)
279 {
280 1 short int i;
281 1 unsigned char *FAT = Page_Buf;
282 1 for (i=0; i<512; i++)
C51 COMPILER V8.01 FAT16 05/10/2006 10:39:04 PAGE 6
283 1 {
284 2 FAT[i] = 0x00;
285 2 }
286 1 //disk type lower byte is equal to Offset_U8_BPB_Media
287 1 FAT[0] = 0xf8;
288 1 FAT[1] = 0xff;//system occupied the first cluster
289 1 FAT[2] = 0xff;
290 1 FAT[3] = 0xff;
291 1
292 1 WritePage(Root_Cluster, Fat_Sector, FAT); //Sector 1 of Fat16
293 1 WritePage(Root_Cluster, Fat_Sector + Fat_Size, FAT); //Sector 1 of Fat16
294 1 FAT[0] = FAT[1] = FAT[2] = FAT[3] = 0x00;
295 1 for(i=1;i<Fat_Size;i++)
296 1 {
297 2 //WritePage(Root_Cluster+i/32, i%32, FAT); //Sector 2 of Fat16
298 2 WritePage(Root_Cluster, Fat_Sector+i, FAT);
299 2 //WritePage(, Fat_Sector + 3, FAT); //Sector 2 of Fat16
300 2 }
301 1 for(i=1;i<Fat_Size;i++)
302 1 {
303 2 WritePage(Root_Cluster, Fat_Sector + Fat_Size+i, FAT); //Sector 2 of Fat16
304 2 //WritePage(Root_Cluster, Fat_Sector + 3, FAT); //Sector 2 of Fat16
305 2 }
306 1 }
307 void CreatDirectoryEntry(void)
308 {
309 1 long int i;
310 1 unsigned char *Directory_Enties = Page_Buf;
311 1
312 1 for (i=0; i<512; i++)
313 1 {
314 2 Directory_Enties[i] = 0x00;
315 2 }
316 1
317 1 for (i=513; i<2048; i++)
318 1 {
319 2 WritePage(Root_Cluster + i / 32, i % 32, Directory_Enties);
320 2 }
321 1
322 1 }
323
324 void CreatDirectoryEntry16(void)
325 {
326 1 long int i;
327 1 unsigned char *Directory_Enties = Page_Buf;
328 1
329 1 for (i=0; i<512; i++)
330 1 {
331 2 Directory_Enties[i] = 0x00;
332 2 }
333 1
334 1 for (i=0; i<512; i++)
335 1 {
336 2 WritePage(0, Fat_Sector+Fat_Size+Fat_Size+i, Directory_Enties);
337 2
338 2 }
339 1 }
340
341 //函数实现
342 void Format_Fat12Media(void)
343 {
344 1 WriteMBR2Flash();
C51 COMPILER V8.01 FAT16 05/10/2006 10:39:04 PAGE 7
345 1 printf("\nCreat BPB Succeed");
346 1 CreatFAT12();
347 1 printf("\nCreat FAT12 Succeed");
348 1 CreatDirectoryEntry();
349 1 printf("\nCreat Directory Entry Succeed");
350 1
351 1 printf("\nFlash have been Fomarted");
352 1 }
353 //函数实现
354 void Format_Fat16Media(void)
355 {
356 1 WriteMBR2Flash();
357 1 printf("\nCreat BPB Succeed");
358 1
359 1 CreatFAT16();
360 1 printf("\nCreat FAT16 Succeed");
361 1
362 1 CreatDirectoryEntry16();
363 1 printf("\nCreat Directory Entry Succeed");
364 1
365 1 printf("\nFlash have been Fomarted");
366 1 }
367
368 void Format_Flash(void)
369 {
370 1 unsigned int i;
371 1
372 1 for(i=0;i<1000;i++)
373 1 if(Erase_Block(i)==0)
374 1 {
375 2 printf("\nErase NG!");
376 2 return;
377 2 }
378 1 printf("\n32M Flash Format Over");
379 1
380 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1337 ----
CONSTANT SIZE = 664 ----
XDATA SIZE = 512 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 38
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -