一、效果展示( U$ Y! d) n2 R
; o/ A6 q+ t$ M P9 C! ^
! r5 R% ?2 ^ h8 L5 N% b9 G2 T
! o" R, ]. H8 p2 k0 |, F! O一、测试代码" \$ f Q- T/ Y" K0 e3 S
0 y; o! i4 o4 K0 L. M, c: e- #include "sys.h"+ i- i/ O. g1 e* T# r* W8 m, }
- #include "delay.h"- P+ e9 G) B& G5 A& f
- #include "usart.h" 5 T. D. F1 @( V& R
- #include "led.h"
" t" i4 r5 _. G- M - #include "sdram.h"2 q/ s# a" { ] ^) e t
- #include "mpu.h"
5 f0 d* p: W/ X$ W- @) S - #include "malloc.h"
8 J+ g$ t- J# i" c4 ^/ f6 b - #include "nand.h" 5 K3 l+ a; \/ [6 _& q
- #include "ftl.h" & f/ @9 I/ f5 r. l. W, p& s
- #include "ff.h"
/ U) [6 a0 o) a+ @ - #include "exfuns.h" 5 D" t4 k- ]- w9 m- [
- #include "string.h"$ A6 }6 E" Y3 ?( Q0 Y# y4 x
- & o( S/ C. c& t6 b" @# `* }
- . n0 u9 j4 R8 H
- FRESULT scan_files (char* path)
( c0 Q0 R7 @4 l5 H0 s: ]0 w8 n - {. v! n2 {, ~7 e
- FRESULT res;
/ O( {. w1 {) g h" r( ~, r! r- @ - DIR dir;) x' N3 f1 k7 g. Q
- UINT i;
' K# |! p6 O% Q% P5 ^/ u - static FILINFO fno;
1 Z+ i1 _' h( @8 [- E7 r; Z - static u8 layerDeeph=0;0 ?& ~/ \7 D2 a, p
- u8 j;
- R. w6 l w% x, a1 S9 m- A - - }! R8 [- D- V
-
' B6 s1 I" |5 q& D* L3 F- W - res = f_opendir(&dir, path); $ V: I. {9 E, a3 z; o5 z [
- if (res == FR_OK) ( @1 ~/ D9 k! Z$ L b7 f
- {4 t5 C, }' s9 n$ i4 X0 ]4 W# ^) ?2 H
- layerDeeph+=4;7 y4 M, p, J$ n$ O* ]* y, b, B6 ?
- for (;;)
4 T! m V2 u' N1 z7 a ~$ } - {, Q( `7 \9 _4 ~8 \( D
- res = f_readdir(&dir, &fno);
9 K" t$ t2 e& w - if (res != FR_OK || fno.fname[0] == 0)
6 p3 ]5 k4 |/ Q+ y/ I - break; " l$ p' N9 b4 P/ F! m; m2 |
- if (fno.fattrib & AM_DIR)
! i3 \+ c1 r/ G# \ - { ( N* a1 u) g# V4 ~2 f f9 D
- i = strlen(path);- s3 Q7 W& [4 X2 C' K6 p
- sprintf(&path, "/%s", fno.fname);4 |2 |! Y; c$ F
- for(j=0;j<layerDeeph;j++); y9 c5 f4 z {; @9 w d
- printf(" ");
4 N' V9 Q0 o7 i8 K8 U/ f4 t9 W - printf("%s%s%s%s%s%s\r\n", "\033[","33;","22m",fno.fname," <DIR>","\033[0m");- _# N+ g1 @; A/ O
- res = scan_files(path); 1 y+ Y% C$ J0 O: n5 V* d) D( c' U) O+ z
- if (res != FR_OK) break;
# q4 ]+ @( R5 N6 s - path = 0;
$ d/ t# @- m! g& M' Q8 Q; J - } , F0 v8 Z- M$ v- ^ ]2 |; [
- else
2 ?1 B1 K* { o4 O) L4 J - { # j( m u( @) ^7 U3 Z4 L7 R% C, o
- for(j=0;j<layerDeeph;j++)
; ]: v7 A) @; Q' l) s2 {9 ?9 D& S - printf(" "); & I! F/ I* h- J# v0 a
- printf("%s%s%s%s%s\r\n","\033[","32;","22m",fno.fname,"\033[0m");
: z" G- c5 y- u8 ?; B$ C3 [" U; H0 g - }
& b3 Y$ q. k }1 u3 r - }
2 |* ~! x2 F4 I8 P% D. w/ t5 u - f_closedir(&dir);
$ [% d, ^ T* E6 D' K$ f4 T - layerDeeph-=4;; b' |% c8 e) s$ f$ H1 \% h, Z- a2 D
- }
8 q% B" S9 q* y) H
$ j4 v' K. [0 ~2 z6 v1 o. m- return res;
8 L7 n+ |/ |1 ]) \3 D6 ~* A - }
+ @+ t1 E3 {: Q0 U8 C) J - 9 T" u4 d' @0 ~- b Y% M2 \
5 \) W7 s4 }( c5 V5 S4 {( i
, }, W5 l1 [0 {1 R1 w2 V; i- 0 N! N- Q% D7 u) u
- int main(void)4 z0 D& M0 O! d
- {3 t1 `" U5 ~7 W6 o/ ~% T
- char buff[256];
+ @" t% P. b! q3 V2 c$ { - u8 t=0; u8 r6 g2 `0 W. ?$ P, v
- u8 res=0;
; P5 {: G: L- W - FIL file;
( Z1 `, G7 t) i m; w - % R$ o8 [0 _% ?8 h0 t+ N" ^; k
- Cache_Enable(); //打开L1-Cache
4 M- Y7 E; i" A8 a S - HAL_Init(); //初始化HAL库* {, ^) J1 D6 [3 C1 A* C" g9 {5 W
- Stm32_Clock_Init(160,5,2,4); //设置时钟,400Mhz
+ j. e& u: \6 R - delay_init(400); //延时初始化! M; ^1 T' e/ `3 [8 \# w! F8 F9 |
- uart_init(115200); //串口初始化
( F1 U& @, t. M' F+ R; m3 m5 ` - LED_Init(); //初始化LED
+ C. Y( a! x' H( m - SDRAM_Init(); //初始化SDRAM8 s3 o$ v5 R3 [, Y& ~$ |8 S
- my_mem_init(SRAMIN); //初始化内部内存池(AXI)2 }* a9 I8 U* p8 s+ u1 y
- my_mem_init(SRAMEX); //初始化外部内存池(SDRAM)
0 I: i3 e9 {- g9 P; z - my_mem_init(SRAM12); //初始化SRAM12内存池(SRAM1+SRAM2)
) x3 u2 y% A+ h1 N% h0 z - my_mem_init(SRAM4); //初始化SRAM4内存池(SRAM4) Y$ f: o' g+ P
- my_mem_init(SRAMDTCM); //初始化DTCM内存池(DTCM)
" F' F/ k& \3 m5 B9 o - my_mem_init(SRAMITCM); //初始化ITCM内存池(ITCM)
* v( \( |, s6 ] - 1 v% Q( R3 L7 e! T) S, b1 Z
- FTL_Init();" I: V4 N& r9 z3 y8 }
- exfuns_init(); //为fatfs相关变量申请内存
! N6 }* A; F/ F) K' k) J - res=f_mount(fs[0],"0:",1); //挂载NAND FLASH.
+ q/ Z/ y) F) D% Y5 [% T - if(res==0X0D) //NAND FLASH磁盘,FAT文件系统错误,重新格式化NAND FLASH4 Y9 X7 `/ k& A! `
- {
! }. l- k1 ~1 t9 J; N - printf("NAND Disk Formatting...\r\n");//格式化NAND. t" g- ~' A3 N
- res=f_mkfs("0:",FM_ANY,0,fatbuf,FF_MAX_SS); //格式化NAND FLASH,1:,盘符;FM_ANY,自动选择文件系统类型,0,自动选择簇大小
J! J" i" U% X - if(res==0)% ?& T$ j3 r5 j. e- j
- {( I8 ~) {( n8 N
- f_setlabel((const TCHAR *)"0:NANDDISK");//设置Flash磁盘的名字为:NANDDISK
' M9 N! i' T& e7 ?6 v3 Y - printf("NAND Disk Format Finish\r\n"); //格式化完成
' i' D% m2 x6 e# r/ S7 N - }' [1 t+ w, q. [
- else
4 R+ b# X& A5 O+ E - printf("NAND Disk Format Error\r\n"); //格式化失败
( A; s2 Z6 @5 e& c6 G4 d. x! C" _1 a - delay_ms(1000);
) ]/ }; [0 ~7 J# i. M1 H8 X - }5 S0 C# }2 K, O; O1 T+ L
-
# m* l, ^1 q/ e# m. D7 f - 4 B/ U, }( K# g w2 @0 P
- printf("*********************************\r\n");6 ]6 _% _% J6 v4 H2 D/ ?* Y% I" m
- f_mkdir("/HDC");7 [' q# ?) u3 l, ]# x
- f_open(&file,"/HDC/1.txt",FA_OPEN_ALWAYS|FA_WRITE);; P6 A6 J- z( m$ O: o4 X k
- f_close(&file);
7 e* `- Y8 j+ o: l. |! [- G - f_open(&file,"/HDC/2.txt",FA_OPEN_ALWAYS|FA_WRITE);3 s) W. w5 B8 r. e
- f_close(&file);
?1 W- [3 z z9 \: ^$ l7 O - f_mkdir("/HDC/A"); 4 _( C( Y8 c5 V; c
- f_open(&file,"/HDC/A/A1.txt",FA_OPEN_ALWAYS|FA_WRITE);
B# c/ M' S1 i L! P7 `$ G - f_close(&file);
. ^4 y: P# J4 I- Y0 g - f_open(&file,"/HDC/A/A2.txt",FA_OPEN_ALWAYS|FA_WRITE);
& Y; q7 _* ]& I: q- m% J1 o - f_close(&file);
; F* `, T. I& C7 l" f) q& V- }8 c - f_open(&file,"/HDC/A/A3.txt",FA_OPEN_ALWAYS|FA_WRITE); y0 S4 E) |& \+ X: o$ L$ L
- f_close(&file); ! H u* A8 r% N. d5 }# y: p
- f_mkdir("/HDC/B");
& f# [% u$ a. H - f_open(&file,"/HDC/B/B1.txt",FA_OPEN_ALWAYS|FA_WRITE);
) a5 ]3 s. B0 J" d - f_close(&file); & p; n1 S" v! W, U
- f_open(&file,"/HDC/B/B2.txt",FA_OPEN_ALWAYS|FA_WRITE);! ~$ X4 d( E/ m& H/ K% s
- f_close(&file); : h9 v- Q$ `* d7 \+ F6 f( y
- f_open(&file,"/HDC/B/B3.txt",FA_OPEN_ALWAYS|FA_WRITE);$ Q* F4 H$ f5 L' e& ~! [
- f_close(&file); R2 B0 g5 z4 Z9 J8 [% X
- f_mkdir("/HDC/C");! L& n3 ]( ]7 b; e/ M% o
- f_open(&file,"/HDC/C/C1.txt",FA_OPEN_ALWAYS|FA_WRITE);
* g! a+ O m; F6 | I$ _% i - f_close(&file); & Y' X% b1 l- @
- f_open(&file,"/HDC/C/C2.txt",FA_OPEN_ALWAYS|FA_WRITE);
5 l; a& R! K3 Z! C - f_close(&file); ( Q9 @" O# p) w- N( F- G0 D
- f_open(&file,"/HDC/C/C3.txt",FA_OPEN_ALWAYS|FA_WRITE);
3 [) P0 ?7 b! W0 R - f_close(&file);
" }* @. D4 m+ J -
8 D% H3 m, B) {0 l m, D - % ^+ @( k/ _, T
-
# w8 \; h8 j. N% R* u! c2 H7 W -
! w9 F) Y# L$ F -
! j: H* f: Z" e - strcpy(buff, "/");
/ F7 \$ z5 l4 j4 C: i - res = scan_files(buff);* K- B1 \. `" `" J
7 c" j9 Z7 O( [) E) w- 7 [* M/ o! C) |6 s& O6 d" R
- while(1) `9 _6 h! y6 U2 l0 z
- {9 G: i) a1 k$ y5 X, L* w4 z% s
- t++;
* R% \4 G0 W% V - delay_ms(200); 4 p- [; S9 w% Y& c: f. O( s W S
- LED0_Toggle;//DS0闪烁
2 i2 s% I, \5 q8 Q$ }+ C - }
, E$ \( d8 e( Y5 H8 C9 q0 p - }6 U E) q! S: m- |! v, w
" d1 ~& @9 Z* T- 0 g/ N) |' j4 `
* V% L% z( b! s2 ?; j" G
复制代码
$ C! V8 O9 s, L- m) d c: U: e! H9 B k
|